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

📄 commands.c

📁 linux下c语言编写的telnet客户端程序
💻 C
📖 第 1 页 / 共 5 页
字号:
	    }	}	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 + -