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

📄 dial.c

📁 在MAC OS下的一个可以直接调试modem的工具minicom,类似于是在windows下的超级终端.
💻 C
📖 第 1 页 / 共 4 页
字号:
    default:      werror(_("Unknown dialing directory version"));      dendd = 1;      dialents = mkstdent();      return -1;  }  if (size % dial_ver.size != 0) {    werror(_("Phonelist garbled (?)"));    fclose(fp);    dendd = 1;    dialents = mkstdent();    return -1;  }  /* Read in the dialing entries */  nrents = size / dial_ver.size;  if (nrents == 0) {    dialents = mkstdent();    nrents = 1;    fclose(fp);    return 0;  }  for(f = 1; f <= nrents; f++) {    if ((d = malloc(sizeof (struct dialent))) == NULL) {      if (f == 1)        dialents = mkstdent();      else        tail->next = NULL;      werror(_("Out of memory while reading dialing directory"));      fclose(fp);      return -1;    }    switch (dial_ver.version) {      case 0:        v0_read(fp, d);        break;      case 1:        v1_read(fp, d);        break;      case 2:        v2_read(fp, d);        break;      case 3:        v3_read(fp, d);        break;      case 4:        v4_read(fp, d, &dial_ver);        break;      case 5:	v5_read(fp, d);	break;    }    /* MINIX terminal type is obsolete */    if (d->term == 2)      d->term = 1;    if (tail)      tail->next = d;    else      dialents = d;    tail = d;  }  d->next = NULL;  fclose(fp);  if (dial_ver.size < sizeof(struct dialent)) {    if (snprintf(copycmd,sizeof(copycmd),                 "cp %s %s.%hd",dfile,dfile,dial_ver.size) > 0) {      if (P_LOGFNAME[0] != 0)        do_log("%s", copycmd);      if (system(copycmd) == 0) {        snprintf(copycmd,sizeof(copycmd),                 _("Old dialdir copied as %s.%hd"),dfile,dial_ver.size);        w = mc_tell("%s", copycmd);        if (w) {          sleep(2);          mc_wclose(w,1);        }        writedialdir();      }    }  }  return 0;}/* * Write the new $HOME/.dialdir */static void writedialdir(void){  struct dialent *d;  char dfile[256];  FILE *fp;  struct dver dial_ver;  char oldfl;  int omask;  /* Make no sense if access denied */  if (dendd)    return;  snprintf(dfile, sizeof(dfile), "%s/.dialdir", homedir);  omask = umask(077);  if ((fp = sfopen(dfile, "w")) == NULL) {    umask(omask);    werror(_("Cannot open ~/.dialdir for writing!"));    dendd = 1;    return;  }  umask(omask);  d = dialents;  /* Set up version info. */  dial_ver.magic = DIALMAGIC;  dial_ver.version = 5;  dial_ver.size = htons(sizeof(struct dialent));  dial_ver.res1 = 0;	/* We don't use these res? fields, but let's */  dial_ver.res2 = 0;	/* initialize them to a known init value for */  dial_ver.res3 = 0;	/* whoever needs them later / jl 22.09.97    */  dial_ver.res4 = 0;  if (fwrite(&dial_ver, sizeof(dial_ver), 1, fp) != 1) {    werror(_("Error writing to ~/.dialdir!"));    fclose(fp);    return;  }  /* Write dialing directory */  while (d) {    struct dialent dent_n;    oldfl = d->flags;    d->flags &= FL_SAVE;    convert_to_save_order(&dent_n, d);    if (fwrite(&dent_n, sizeof(dent_n), 1, fp) != 1) {      werror(_("Error writing to ~/.dialdir!"));      fclose(fp);      return;    }    d->flags = oldfl;    d = d->next;  }  fclose(fp);}/* * Get entry "no" in list. */static struct dialent *getno(int no){  struct dialent *d;  d = dialents;  if (no < 0 || no >= nrents)    return (struct dialent *)NULL;  while (no--)    d = d->next;  return d;}/* Note: Minix does not exist anymore. */static const char *te[] = { "VT102", "MINIX", "ANSI " };/* * Display a "dedit" entry * We need to make sure that the previous value * gets fully overwritten in all languages (i.e. arbitrary strings)! */static void dedit_toggle_entry(WIN *w, int x, int y, int toggle,                               char *toggle_true, char *toggle_false){  int lt = mbslen(toggle_true);  int lf = mbslen(toggle_false);  int l = ((lt > lf) ? lt : lf) + 1;  char *buf, *s = toggle ? toggle_true : toggle_false;  int i;  if (!(buf = alloca(l)))    return;  strncpy(buf, s, l);  for (i = mbslen(s); i < l - 1; i++)    buf[i] = ' ';  buf[l - 1] = 0;  mc_wlocate(w, x, y);  mc_wputs(w, buf);}/* * Edit an entry. */static void dedit(struct dialent *d){  WIN *w;  int c;  char *name		    = _(" A -  Name                :"),       *number		    = _(" B -  Number              :"),       *dial_string	    = _(" C -  Dial string #       :"),       *local_echo	    = _(" D -  Local echo          :"),       *script		    = _(" E -  Script              :"),       *username	    = _(" F -  Username            :"),       *password	    = _(" G -  Password            :"),       *terminal_emulation  = _(" H -  Terminal Emulation  :"),       *backspace_key_sends = _(" I -  Backspace key sends :"),       *linewrap            = _(" J -  Linewrap            :"),       *line_settings       = _(" K -  Line Settings       :"),       *conversion_table    = _(" L -  Conversion table    :"),       *question            = _("Change which setting?");    w = mc_wopen(5, 4, 75, 19, BDOUBLE, stdattr, mfcolor, mbcolor, 0, 0, 1);  mc_wprintf(w, "%s %s\n", name, d->name);  mc_wprintf(w, "%s %s\n", number, d->number);  mc_wprintf(w, "%s %d\n", dial_string, d->dialtype + 1);  mc_wprintf(w, "%s %s\n", local_echo, _(yesno(d->flags & FL_ECHO)));  mc_wprintf(w, "%s %s\n", script, d->script);  mc_wprintf(w, "%s %s\n", username, d->username);  mc_wprintf(w, "%s %s\n", password, d->password);  mc_wprintf(w, "%s %s\n", terminal_emulation, te[d->term - 1]);  mc_wprintf(w, "%s %s\n", backspace_key_sends,          d->flags & FL_DEL ? _("Delete") : _("Backspace"));  mc_wprintf(w, "%s %s\n", linewrap,          d->flags & FL_WRAP ? _("On") : _("Off"));  mc_wprintf(w, "%s %s %s%s%s\n", line_settings,          d->baud, d->bits, d->parity, d->stopb);  mc_wprintf(w, "%s %s\n", conversion_table, d->convfile);  mc_wprintf(w, _("      Last dialed         : %s %s\n"),d->lastdate,d->lasttime);  mc_wprintf(w, _("      Times on            : %d"),d->count);  mc_wlocate(w, 4, 15);  mc_wputs(w, question);  mc_wredraw(w, 1);  while (1) {    mc_wlocate(w, mbslen (question) + 5, 15);    c = wxgetch();    if (c >= 'a')      c -= 32;    switch(c) {      case '\033':      case '\r':      case '\n':        mc_wclose(w, 1);        return;      case 'A':        mc_wlocate(w, mbslen (name) + 1, 0);        mc_wgets(w, d->name, 31, 32);        break;      case 'B':        mc_wlocate(w, mbslen (number) + 1, 1);        mc_wgets(w, d->number, 31, 32);        break;      case 'C':        d->dialtype = (d->dialtype + 1) % 3;        mc_wlocate(w, mbslen (dial_string) + 1, 2);        mc_wprintf(w, "%d", d->dialtype + 1);        mc_wflush();        break;      case 'D':        d->flags ^= FL_ECHO;        mc_wlocate(w, mbslen (local_echo) + 1, 3);        mc_wprintf(w, "%s", _(yesno(d->flags & FL_ECHO)));        mc_wflush();        break;      case 'E':        mc_wlocate(w, mbslen (script) + 1, 4);        mc_wgets(w, d->script, 31, 32);        break;      case 'F':        mc_wlocate(w, mbslen (username) + 1, 5);        mc_wgets(w, d->username, 31, 32);        break;      case 'G':        mc_wlocate(w, mbslen (password) + 1, 6);        mc_wgets(w, d->password, 31, 32);        break;      case 'H':        d->term = (d->term % 3) + 1;        /* MINIX == 2 is obsolete. */        if (d->term == 2)          d->term = 3;        mc_wlocate(w, mbslen (terminal_emulation) + 1, 7);        mc_wputs(w, te[d->term - 1]);        /* Also set backspace key. */        if (d->term == ANSI) {          d->flags &= ~FL_DEL;          d->flags |= FL_WRAP;        } else {          d->flags |= FL_DEL;          d->flags &= ~FL_WRAP;        }	dedit_toggle_entry(w, mbslen(backspace_key_sends) + 1, 8,	                   d->flags & FL_DEL, _("Delete"), _("Backspace"));	dedit_toggle_entry(w, mbslen(linewrap) + 1, 9,	                   d->flags & FL_WRAP, _("On"), _("Off"));        break;      case 'I':        d->flags ^= FL_DEL;	dedit_toggle_entry(w, mbslen(backspace_key_sends) + 1, 8,	                   d->flags & FL_DEL, _("Delete"), _("Backspace"));        break;      case 'J':        d->flags ^= FL_WRAP;	dedit_toggle_entry(w, mbslen(linewrap) + 1, 9,	                   d->flags & FL_WRAP, _("On"), _("Off"));        break;      case 'K':        get_bbp(d->baud, d->bits, d->parity, d->stopb, 1);        mc_wlocate(w, mbslen (line_settings) + 1, 10);        mc_wprintf(w, "%s %s%s%s  ",                d->baud, d->bits, d->parity, d->stopb);        break;      case 'L':	/* jl 21.09.97 */        mc_wlocate(w, mbslen (conversion_table) + 1, 11);        mc_wgets(w, d->convfile, 15, 16);        break;      default:        break;    }  }}static WIN *dsub;static const char *const what[] =  {    /* TRANSLATORS: Translation of each of these menu items should not be     * longer than 7 characters. The upper-case letter is a shortcut,     * so keep them unique and ASCII; 'h', 'j', 'k', 'l' are reserved */    N_("Dial"), N_("Find"), N_("Add"), N_("Edit"), N_("Remove"), N_("moVe"),    N_("Manual")  };/* Offsets of what[] entries from position_dialing_directory */#define DIALOPTS (sizeof(what) / sizeof(*what))#define DIAL_WIDTH 8 /* Width of one entry */static size_t what_lens[DIALOPTS]; /* Number of bytes for <= 7 characters *//* Number of ' ' padding entries at left and right, left is >= 1 */static int what_padding[DIALOPTS][2];static int dprev;/* Draw an entry in the horizontal menu */static void horiz_draw(size_t k){  static const char spaces[] = "        ";  mc_wprintf(dsub, "%.*s", what_padding[k][0], spaces);  mc_wprintf(dsub, "%.*s", what_lens[k], _(what[k]));  mc_wprintf(dsub, "%.*s", what_padding[k][1], spaces);}/* * Highlight a choice in the horizontal menu. */static void dhili(int position_dialing_directory, int k){  if (k == dprev)    return;  if (dprev >= 0) {    mc_wlocate(dsub, position_dialing_directory + DIAL_WIDTH * dprev, 0);    if (!useattr) {      mc_wputs(dsub, " ");    } else {      mc_wsetattr(dsub, XA_REVERSE | stdattr);      horiz_draw(dprev);    }  }  dprev = k;  mc_wlocate(dsub, position_dialing_directory + DIAL_WIDTH * k, 0);  if (!useattr) {    mc_wputs(dsub, ">");  } else {    mc_wsetattr(dsub, stdattr);    horiz_draw(k);  }}static const char *fmt = "\r %2d %c%-16.16s%-16.16s%8.8s %5.5s %4d %-15.15s\n";/* * Print the dialing directory. Only draw from "cur" to bottom. */static void prdir(WIN *dialw, int top, int cur){  int f, start;  struct dialent *d;  start = cur - top;  dirflush = 0;  mc_wlocate(dialw, 0, start + 1);  for (f = start; f < dialw->ys - 2; f++) {    d = getno(f + top);    if (d == (struct dialent *)0)      break;    mc_wprintf(dialw, fmt, f+1+top, (d->flags & FL_TAG) ? '>' : ' ',            d->name, d->number, d->lastdate, d->lasttime,             d->count, d->script);  }  dirflush = 1;  mc_wflush();}/* * Move an entry forward/back in the dial directory. jl 1.9.1999 */int move_entry(WIN *dialw, struct dialent *d, int cur, int *top){  int ocur = cur,      quit = 0,      c = 0;  struct dialent *dtmp;  while (!quit) {    switch (c = wxgetch()) {      case K_DN:      case 'j':        if (!(d->next))          break;        if (cur == 0) {   /* special case: move d from start to 2nd */          dtmp = d->next;          d->next = dtmp->next;          dtmp->next = d;          dialents = dtmp;        } else {	    /* swap d with the next one in the list */          dtmp = getno(cur - 1);          dtmp->next = d->next;          d->next = d->next->next;          dtmp->next->next = d;        }        cur++;        break;      case K_UP:      case 'k':        if (cur == 0)          break;        if (cur == 1) { /* special case: move d to start of list */          dtmp = dialents;          dtmp->next = d-> next;          d->next = dtmp;          dialents = d;        } else {	  /* swap d with the previous one in the list */          dtmp = getno(cur - 2);          dtmp->next->next = d-> next;          d->next = dtmp->next;          dtmp->next = d;        }        cur--;        break;      case '\033':      case '\r':      case '\n':        quit = 1;        break;      default:        break;    } /* end switch */

⌨️ 快捷键说明

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