📄 commands.c
字号:
} } if (c->handler) (*c->handler)(1); } else if (argc != 3) { printf("Format is 'set Name Value'\r\n'set ?' for help.\r\n"); return 0; } else if (Ambiguous(ct)) { fprintf(stderr, "'%s': ambiguous argument ('set ?' for help).\r\n", argv[1]); return 0; } else if (ct->handler) { (*ct->handler)(argv[2]); printf("%s set to \"%s\".\r\n", ct->name, (char *)ct->charp); } else { if (strcmp("off", argv[2])) { value = special(argv[2]); } else { value = _POSIX_VDISABLE; } *(ct->charp) = (cc_t)value; printf("%s character is '%s'.\r\n", ct->name, control(*(ct->charp))); } slc_check(); return 1;} static intunsetcmd(int argc, char *argv[]){ struct setlist *ct; struct togglelist *c; char *name; if (argc < 2) { fprintf(stderr, "Need an argument to 'unset' command. 'unset ?' for help.\r\n"); return 0; } if (isprefix(argv[1], "?") || isprefix(argv[1], "help")) { for (ct = Setlist; ct->name; ct++) printf("%-15s %s\r\n", ct->name, ct->help); printf("\r\n"); settogglehelp(0); printf("%-15s %s\r\n", "?", "display help information"); return 0; } argc--; argv++; while (argc--) { name = *argv++; ct = getset(name); if (ct == 0) { c = GETTOGGLE(name); if (c == 0) { fprintf(stderr, "'%s': unknown argument ('unset ?' for help).\r\n", name); return 0; } else if (Ambiguous(c)) { fprintf(stderr, "'%s': ambiguous argument ('unset ?' for help).\r\n", name); return 0; } if (c->variable) { *c->variable = 0; if (c->actionexplanation) { printf("%s %s.\r\n", *c->variable? "Will" : "Won't", c->actionexplanation); } } if (c->handler) (*c->handler)(0); } else if (Ambiguous(ct)) { fprintf(stderr, "'%s': ambiguous argument ('unset ?' for help).\r\n", name); return 0; } else if (ct->handler) { (*ct->handler)(0); printf("%s reset to \"%s\".\r\n", ct->name, (char *)ct->charp); } else { *(ct->charp) = _POSIX_VDISABLE; printf("%s character is '%s'.\r\n", ct->name, control(*(ct->charp))); } } return 1;}/* * The following are the data structures and routines for the * 'mode' command. */#ifdef KLUDGELINEMODEextern int kludgelinemode; static intdokludgemode(int arg){ (void)arg; kludgelinemode = 1; send_wont(TELOPT_LINEMODE, 1); send_dont(TELOPT_SGA, 1); send_dont(TELOPT_ECHO, 1); return 1;}#endif static intdolinemode(int arg){ (void)arg;#ifdef KLUDGELINEMODE if (kludgelinemode) send_dont(TELOPT_SGA, 1);#endif send_will(TELOPT_LINEMODE, 1); send_dont(TELOPT_ECHO, 1); return 1;} static intdocharmode(int arg){ (void)arg;#ifdef KLUDGELINEMODE if (kludgelinemode) send_do(TELOPT_SGA, 1); else#endif send_wont(TELOPT_LINEMODE, 1); send_do(TELOPT_ECHO, 1); return 1;}extern int linemode; static intdolmmode(int bit, int on){ unsigned char c; if (my_want_state_is_wont(TELOPT_LINEMODE)) { printf("?Need to have LINEMODE option enabled first.\r\n"); printf("'mode ?' for help.\r\n"); return 0; } if (on) c = (linemode | bit); else c = (linemode & ~bit); lm_mode(&c, 1, 1); return 1;}int tn_setmode P((int bit)); /* XXX move elsewhere */ inttn_setmode(int bit){ return dolmmode(bit, 1);}int tn_clearmode P((int bit)); /* XXX move elsewhere */ inttn_clearmode(int bit){ return dolmmode(bit, 0);}typedef int (*mode_handler_t) P((int));struct modelist { const char *name; /* command name */ const char *help; /* help string */ mode_handler_t handler; /* routine which executes command */ int needconnect; /* Do we need to be connected to execute? */ int arg1;};static int modehelp __P((int));static struct modelist ModeList[] = { { "character", "Disable LINEMODE option", docharmode, 1, 0 },#ifdef KLUDGELINEMODE { "", "(or disable obsolete line-by-line mode)", NULL, 0, 0 },#endif { "line", "Enable LINEMODE option", dolinemode, 1, 0 },#ifdef KLUDGELINEMODE { "", "(or enable obsolete line-by-line mode)", NULL, 0, 0 },#endif { "", "", 0, 0, 0 }, { "", "These require the LINEMODE option to be enabled", NULL, 0, 0 }, { "isig", "Enable signal trapping", tn_setmode, 1, MODE_TRAPSIG }, { "+isig", 0, tn_setmode, 1, MODE_TRAPSIG }, { "-isig", "Disable signal trapping", tn_clearmode, 1, MODE_TRAPSIG }, { "edit", "Enable character editing", tn_setmode, 1, MODE_EDIT }, { "+edit", 0, tn_setmode, 1, MODE_EDIT }, { "-edit", "Disable character editing", tn_clearmode, 1, MODE_EDIT }, { "softtabs", "Enable tab expansion", tn_setmode, 1, MODE_SOFT_TAB }, { "+softtabs", 0, tn_setmode, 1, MODE_SOFT_TAB }, { "-softtabs", "Disable character editing", tn_clearmode, 1, MODE_SOFT_TAB }, { "litecho", "Enable literal character echo", tn_setmode, 1, MODE_LIT_ECHO }, { "+litecho", 0, tn_setmode, 1, MODE_LIT_ECHO }, { "-litecho", "Disable literal character echo", tn_clearmode, 1, MODE_LIT_ECHO }, { "help", 0, modehelp, 0, 0 },#ifdef KLUDGELINEMODE { "kludgeline", 0, dokludgemode, 1, 0 },#endif { "", "", 0, 0, 0 }, { "?", "Print help information", modehelp, 0, 0 }, { NULL, NULL, NULL, 0, 0 },}; static intmodehelp(int arg){ struct modelist *mt; (void)arg; printf("format is: 'mode Mode', where 'Mode' is one of:\r\n\r\n"); for (mt = ModeList; mt->name; mt++) { if (mt->help) { if (*mt->help) printf("%-15s %s\r\n", mt->name, mt->help); else printf("\r\n"); } } return 0;}#define GETMODECMD(name) (struct modelist *) \ genget(name, (char **) ModeList, sizeof(struct modelist)) static intmodecmd(int argc, char *argv[]){ struct modelist *mt; if (argc != 2) { printf("'mode' command requires an argument\r\n"); printf("'mode ?' for help.\r\n"); } else if ((mt = GETMODECMD(argv[1])) == 0) { fprintf(stderr, "Unknown mode '%s' ('mode ?' for help).\r\n", argv[1]); } else if (Ambiguous(mt)) { fprintf(stderr, "Ambiguous mode '%s' ('mode ?' for help).\r\n", argv[1]); } else if (mt->needconnect && !connected) { printf("?Need to be connected first.\r\n"); printf("'mode ?' for help.\r\n"); } else if (mt->handler) { return (*mt->handler)(mt->arg1); } return 0;}/* * The following data structures and routines implement the * "display" command. */ static intdisplay(int argc, char *argv[]){ struct togglelist *tl; struct setlist *sl;#define dotog(tl) if (tl->variable && tl->actionexplanation) { \ if (*tl->variable) { \ printf("will"); \ } else { \ printf("won't"); \ } \ printf(" %s.\r\n", tl->actionexplanation); \ }#define doset(sl) if (sl->name && *sl->name != ' ') { \ if (sl->handler == 0) \ printf("%-15s [%s]\r\n", sl->name, control(*sl->charp)); \ else \ printf("%-15s \"%s\"\r\n", sl->name, (char *)sl->charp); \ } if (argc == 1) { for (tl = Togglelist; tl->name; tl++) { dotog(tl); } printf("\r\n"); for (sl = Setlist; sl->name; sl++) { doset(sl); } } else { int i; for (i = 1; i < argc; i++) { sl = getset(argv[i]); tl = GETTOGGLE(argv[i]); if (Ambiguous(sl) || Ambiguous(tl)) { printf("?Ambiguous argument '%s'.\r\n", argv[i]); return 0; } else if (!sl && !tl) { printf("?Unknown argument '%s'.\r\n", argv[i]); return 0; } else { if (tl) { dotog(tl); } if (sl) { doset(sl); } } } }/*@*/optionstatus();#if defined(ENCRYPTION) EncryptStatus();#endif return 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -