⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 file.c

📁 在MAC OS下的一个可以直接调试modem的工具minicom,类似于是在windows下的超级终端.
💻 C
📖 第 1 页 / 共 2 页
字号:
 */static void goto_filedir(char *new_dir, int absolut){  if (strcmp(new_dir, "..") == 0) {    if (strcmp(work_dir, "/")) {      char *sp = strrchr(work_dir, '/');      *sp = (char)0;      if (strlen(work_dir) == 0)        strcpy(work_dir, "/");    } else {      file_tell(_("Can't back up!"));      return;    }  } else if (!absolut) {    int new_len = strlen(work_dir) + 1;	/* + '/' */    if ((new_len += strlen(new_dir) + 1) > min_len) {      min_len = new_len;      work_dir = set_work_dir(work_dir, min_len);    }    if (strcmp(work_dir, "/") != 0)      strcat(work_dir, "/");    strcat(work_dir, new_dir);  } else {    int new_len = 1;    if (*new_dir != '/')      new_len += strlen(homedir) + 1;    new_len += strlen(new_dir);    if (min_len < new_len)      min_len = new_len;    work_dir = set_work_dir(work_dir, min_len);    if (*new_dir == '/')      strncpy(work_dir, new_dir, min_len);    else      snprintf(work_dir, min_len, "%s/%s", homedir, new_dir);  }  new_filedir(dirdat, 1);}/* * Initialize the file directory. */static int init_filedir(void){  int x1, x2;  int retstat = -1;  dirflush = 0;  x1 = (COLS / 2) - 37;  x2 = (COLS / 2) + 37;  dsub = mc_wopen(x1 - 1, LINES - 3, x2 + 1, LINES - 3, BNONE,                stdattr, mfcolor, mbcolor, 0, 0, 1);  main_w = mc_wopen(x1, 2, x2, LINES - 6, BSINGLE, stdattr, mfcolor,                 mbcolor, 0, 0, 1);  if (ret_buf != NULL ||      (retstat = ((ret_buf = (char *)malloc(BUFSIZ)) == NULL)? -1 : 0) == 0) {    retstat = new_filedir((GETSDIR_ENTRY *) NULL, 0);    dirflush = 1;    mc_wredraw(dsub, 1);  }  return retstat;}static int tag_untag(char *pat, int tag){  GETSDIR_ENTRY *my_d = dirdat;  int indxr, cntr;  for (indxr = nrents, cntr = 0; indxr; --indxr, ++my_d)    if (S_ISREG(my_d->mode) && wildmat(my_d->fname, pat)) {      if (tag) {        my_d->cflags |= FL_TAG;        ++cntr;      } else if (my_d->cflags & FL_TAG) {        my_d->cflags &= ~FL_TAG;        ++cntr;      }    }  return cntr;}/* * concatenate tagged files into a buffer */static char *concat_list(GETSDIR_ENTRY *d){  GETSDIR_ENTRY *my_d;  int indxr, len;  my_d = d;  for (indxr = nrents, len = 0; indxr; --indxr, ++my_d)    if (my_d->cflags & FL_TAG)      len += strlen(my_d->fname) + 1;  if (len) {    if (len > BUFSIZ) {      if ((ret_buf = (char *)realloc(ret_buf, len)) == NULL) {        file_tell(_("Too many files tagged - buffer would overflow"));        return NULL;      }    }    *ret_buf = (char)0;    my_d = d;    for (indxr = nrents; indxr; --indxr, ++my_d)      if (my_d->cflags & FL_TAG) {        /* this could be *much* more efficient */        strcat(ret_buf, my_d->fname);        strcat(ret_buf, " ");      }    ret_buf[strlen(ret_buf) - 1] = (char)0;    return ret_buf;  }  return NULL;}/* * Draw the file directory. * *      howmany - How many files can be selected *		      0 = none (for directory selection only, as in "rz") *		      1 = one  (for single-file up-/down-loads, as in "rx") *		     -1 = any number (for multiple files, as in "sz") * *    downloading - Is this for download selection? *		      0 = no *		      1 = yes - when single file selected, see if it exists */char * filedir(int howmany, int downloading){  time_t click_time = (time_t) 0;  size_t i;  how_many = howmany;  down_loading = downloading;  init_filedir();again:  mc_wlocate(main_w, 0, cur + FILE_MWTR - top);  if (first) {    mc_wredraw(main_w, 1);    first = 0;  }  while (!quit) {    d = getno(cur, dirdat);    /*       if(S_ISDIR(d->mode))       prone(main_w, d, longest, 0);	       */    switch (c = wxgetch()) {      case K_UP:      case 'k':        /*         if(S_ISDIR(d->mode))         prone(main_w, d, longest, 1);	         */        cur -= cur > 0;        break;      case K_DN:      case 'j':        /*         if(S_ISDIR(d->mode))         prone(main_w, d, longest, 1);         */        cur += cur < nrents - 1;        break;      case K_LT:      case 'h':        subm--;        if (subm < 0)          subm = SUBM_OKAY;        break;      case K_RT:      case 'l':        subm = (subm + 1) % 6;        break;      case K_PGUP:      case '\002': /* Control-B */        pgud = 1;        quit = 1;        break;      case K_PGDN:      case '\006': /* Control-F */        pgud = 2;        quit = 1;        break;      case ' ':    /* Tag if not directory */        if (S_ISDIR(d->mode)) {          time_t this_time = time((time_t *)NULL);          if (this_time - click_time < 2) {            GETSDIR_ENTRY *d2 = getno(cur, dirdat);            goto_filedir(d2->fname, 0);            click_time = (time_t)0;          } else            click_time = this_time;        }        else {          if (how_many) {            if ((d->cflags ^= FL_TAG) & FL_TAG) {              if (tag_cnt && how_many == 1) {                d->cflags &= ~FL_TAG;                file_tell(_("Can select only one!"));                break;              }              ++tag_cnt;            } else              --tag_cnt;            mc_wlocate(main_w, 0, cur + FILE_MWTR - top);            prone(main_w, d, longest, d->cflags & FL_TAG);            mc_wputc(main_w, '\n');            cur += cur < nrents - 1;          }        }        break;      case '\033':      case '\r':      case '\n':        quit = 1;        break;      default:	for (i = 0; i < WHAT_NR_OPTIONS; i++) {	  if (strchr (_(what[i]), toupper (c)) != NULL) {	    subm = i;	    c = '\n';	    quit = 1;	    break;	  }	 }        break;    }    if (c != ' ')      click_time = (time_t)0;    if (cur < top) {      top--;      prdir(main_w, top, top, dirdat, longest);    }    if (cur - top > main_w->ys - (2 + FILE_MWTR)) {      top++;      prdir(main_w, top, top, dirdat, longest);    }    /*     if(cur != ocur)     mc_wlocate(main_w, 0, cur + FILE_MWTR - top);     */    ocur = cur;    dhili(subm);    /* this really needs to go in dhili !!!*/    mc_wlocate(main_w, 0, cur + FILE_MWTR - top);  }  quit = 0;  /* ESC means quit */  if (c == '\033') {    mc_wclose(main_w, 1);    mc_wclose(dsub, 1);    free(dirdat);    return NULL;  }  /* Page up or down ? */  if (pgud == 1) { /* Page up */    ocur = top;    top -= main_w->ys - (1 + FILE_MWTR);    if (top < 0)      top = 0;    cur = top;    pgud = 0;    if (ocur != top)      prdir(main_w, top, cur, dirdat, longest);    ocur = cur;    goto again;  }  if (pgud == 2) { /* Page down */    ocur = top;    if (top < nrents - main_w->ys + (1 + FILE_MWTR)) {      top += main_w->ys - (1 + FILE_MWTR);      if (top > nrents - main_w->ys + (1 + FILE_MWTR)) {        top = nrents - main_w->ys + (1 + FILE_MWTR);      }      cur = top;    } else      cur = nrents - 1;    pgud = 0;    if (ocur != top)      prdir(main_w, top, cur, dirdat, longest);    ocur = cur;    goto again;  }  if (c =='\r' || c == '\n') {    switch(subm) {      case 0:        /* Goto directory */        {          char buf[128];          char *s;          strncpy(buf, down_loading? P_DOWNDIR : P_UPDIR, sizeof(buf) -1);          s = input(_("Goto directory:"), buf);          /* if(s == NULL || *s == (char) 0) */          if (s == NULL)            break;          goto_filedir(buf, 1);        }        break;      case 1:        /* Previous directory */        goto_filedir(prev_dir, 1);        break;      case 2:        /* File (wildcard) spec */        {          char *s = input(_("Filename pattern:"), wc_mem);          if (s == NULL || *s == (char) 0)            break;          strcpy(wc_str, wc_mem);          new_filedir(dirdat, 1);          wc_str[0] = (char)0;        }        break;      case 3:        /* Tag */        if (how_many == 1)          file_tell(_("Can select only one!"));        else if (how_many == -1) {          char tag_buf[128];          char *s;          strncpy(tag_buf, wc_mem, 128);          s = input(_("Tag pattern:"), tag_buf);          if (s != NULL && *s != (char)0) {            int newly_tagged;            if ((newly_tagged = tag_untag(tag_buf, 1)) == 0) {              file_tell(_("No file(s) tagged"));              goto tag_end;            }            tag_cnt += newly_tagged;            prdir(main_w, top, top, dirdat, longest);            }        }tag_end:        break;      case 4:        /* Untag */        {          char tag_buf[128];          char *s;          int untagged;          strncpy(tag_buf, wc_mem, 128);          s = input(_("Untag pattern:"), tag_buf);          if (s == NULL || *s == (char)0)            goto untag_end;          if ((untagged = tag_untag(tag_buf, 0)) == 0) {            file_tell(_("No file(s) untagged"));            goto untag_end;          }          tag_cnt -= untagged;          prdir(main_w, top, top, dirdat, longest);          }untag_end:        break;      case 5:        {          /* Done */          char *ret_ptr = NULL;	/* failsafe: assume failure */          if (how_many != 0 && !tag_cnt) {            while (1) {              s = input(_("No file selected - enter filename:"),                        ret_buf);              if (s != NULL && *s != (char) 0) {                int f_exist = access(ret_buf, F_OK);                if (down_loading) {                  if (f_exist != -1) {                    /* ask 'em if they're *sure* */                    char buf[BUFSIZ];                    snprintf(buf, sizeof(buf),                              _("File: \"%s\" exists! Overwrite?"), ret_buf);                    if (ask(buf, d_yesno) == 0) {                      ret_ptr = ret_buf;                      break;                    }                  } else {                    ret_ptr = ret_buf;                    break;                  }                } else {                  if (f_exist == -1)                    file_tell(_("no such file!"));                  else {                    ret_ptr = ret_buf;                    break;                  }                }              } else {                /* maybe want to ask: "abort?", here */                goto again;              }            }          }          else {            /* put 'em in a buffer for return */            if (how_many == 0) {              /* current working directory */              ret_ptr = work_dir;            } else {              ret_ptr = concat_list(dirdat);            }          }          mc_wclose(main_w, 1);          mc_wclose(dsub, 1);          free(dirdat);          return ret_ptr;        }        break;      default:        /* should "beep", I guess (? shouldn't get here) */        file_tell("BEEP!");        break;    } /* switch */  }  goto again;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -