亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cmdparse.c

?? uCLinux下的一個TCP/IP協議棧源碼
?? C
字號:
/* Parse command line, set up command arguments Unix-style, and call function.
 * Note: argument is modified (delimiters are overwritten with nulls)
 *
 */
#include <stdio.h>
#include "global.h"
#include "proc.h"
#include "cmdparse.h"

struct boolcmd {
	char *str;	/* Token */
	int val;	/* Value */
};

static struct boolcmd Boolcmds[] = {
	"y",		1,	/* Synonyms for "true" */
	"yes",		1,
	"true",		1,
	"on",		1,
	"1",		1,
	"set",		1,
	"enable",	1,

	"n",		0,	/* Synonyms for "false" */
	"no",		0,
	"false",	0,
	"off",		0,
	"0",		0,
	"clear",	0,
	"disable",	0,
	NULL
};

static char *stringparse(char *line);

static char *
stringparse(line)
char *line;
{
	register char *cp = line;
	unsigned long num;

	while ( *line != '\0' && *line != '\"' ) {
		if ( *line == '\\' ) {
			line++;
			switch ( *line++ ) {
			case 'n':
				*cp++ = '\n';
				break;
			case 't':
				*cp++ = '\t';
				break;
			case 'v':
				*cp++ = '\v';
				break;
			case 'b':
				*cp++ = '\b';
				break;
			case 'r':
				*cp++ = '\r';
				break;
			case 'f':
				*cp++ = '\f';
				break;
			case 'a':
				*cp++ = '\a';
				break;
			case '\\':
				*cp++ = '\\';
				break;
			case '\?':
				*cp++ = '\?';
				break;
			case '\'':
				*cp++ = '\'';
				break;
			case '\"':
				*cp++ = '\"';
				break;
			case 'x':
				num = strtoul( --line, &line, 16 );
				*cp++ = (char) num;
				break;
			case '0':
			case '1':
			case '2':
			case '3':
			case '4':
			case '5':
			case '6':
			case '7':
				num = strtoul( --line, &line, 8 );
				*cp++ = (char) num;
				break;
			case '\0':
				return NULL;
			default:
				*cp++ = *(line - 1);
				break;
			};
		} else {
			*cp++ = *line++;
		}
	}

	if ( *line == '\"' )
		line++; 	/* skip final quote */
	*cp = '\0';		/* terminate string */
	return line;
}

int
cmdparse(cmds,line,p)
struct cmds cmds[];
register char *line;
void *p;
{
	struct cmds *cmdp;
	char *argv[NARG],*cp;
	char **pargv;
	int argc,i;

	/* Remove cr/lf */
	rip(line);

	for(argc = 0;argc < NARG;argc++)
		argv[argc] = NULL;

	for(argc = 0;argc < NARG;){
		register int qflag = FALSE;

		/* Skip leading white space */
		while(*line == ' ' || *line == '\t')
			line++;
		if(*line == '\0')
			break;
		/* return if comment character first non-white */
		if ( argc == 0  &&  *line == '#' )
			return 0;
		/* Check for quoted token */
		if(*line == '"'){
			line++;	/* Suppress quote */
			qflag = TRUE;
		}
		argv[argc++] = line;	/* Beginning of token */

		if(qflag){
			/* Find terminating delimiter */
			if((line = stringparse(line)) == NULL){
				return -1;
			}
		} else {
			/* Find space or tab. If not present,
			 * then we've already found the last
			 * token.
			 */
			if((cp = strchr(line,' ')) == NULL
			 && (cp = strchr(line,'\t')) == NULL){
				break;
			}
			*cp++ = '\0';
			line = cp;
		}
	}
	if (argc < 1) {		/* empty command line */
		argc = 1;
		argv[0] = "";
	}
	/* Look up command in table; prefix matches are OK */
	for(cmdp = cmds;cmdp->name != NULL;cmdp++){
		if(strncmp(argv[0],cmdp->name,strlen(argv[0])) == 0)
			break;
	}
	if(cmdp->name == NULL) {
		if(cmdp->argc_errmsg != NULL)
			printf("%s\n",cmdp->argc_errmsg);
		return -1;
	}
	if(argc < cmdp->argcmin) {
		/* Insufficient arguments */
		printf("Usage: %s\n",cmdp->argc_errmsg);
		return -1;
	}
	if(cmdp->func == NULL)
		return 0;
	if(cmdp->stksize == 0){
		return (*cmdp->func)(argc,argv,p);
	} else {
		/* Make private copy of argv and args,
		 * spawn off subprocess and return.
		 */
		pargv = (char **)callocw(argc,sizeof(char *));
		for(i=0;i<argc;i++)
			pargv[i] = strdup(argv[i]);
		newproc(cmdp->name,cmdp->stksize,
		(void (*)())cmdp->func,argc,pargv,p,1);
		return 0;
	}
}

/* Call a subcommand based on the first token in an already-parsed line */
int
subcmd(tab,argc,argv,p)
struct cmds tab[];
int argc;
char *argv[];
void *p;
{
	register struct cmds *cmdp;
	char **pargv;
	int found = 0;
	int i;

	/* Strip off first token and pass rest of line to subcommand */
	if (argc < 2) {
		if (argc < 1)
			printf("SUBCMD - Don't know what to do?\n");
		else
			printf("\"%s\" - takes at least one argument\n",argv[0]);
		return -1;
	}
	argc--;
	argv++;
	for(cmdp = tab;cmdp->name != NULL;cmdp++){
		if(strncmp(argv[0],cmdp->name,strlen(argv[0])) == 0){
			found = 1;
			break;
		}
	}
	if(!found){
		printf("valid subcommands:");
		for(cmdp = tab;cmdp->name != NULL;cmdp++)
			printf(" %s",cmdp->name);
		printf("\n");
		return -1;
	}
	if(argc < cmdp->argcmin){
		if(cmdp->argc_errmsg != NULL)
			printf("Usage: %s\n",cmdp->argc_errmsg);
		return -1;
	}
	if(cmdp->stksize == 0){
		return (*cmdp->func)(argc,argv,p);
	} else {
		/* Make private copy of argv and args */
		pargv = (char **)callocw(argc,sizeof(char *));
		for(i=0;i<argc;i++)
			pargv[i] = strdup(argv[i]);
		newproc(cmdp->name,cmdp->stksize,
		 (void (*)())cmdp->func,argc,pargv,p,1);
		return(0);
	}
}

/* Subroutine for setting and displaying boolean flags */
int
setbool(var,label,argc,argv)
int *var;
char *label;
int argc;
char *argv[];
{
	struct boolcmd *bc;

	if(argc < 2){
		printf("%s: %s\n",label,*var ? "on":"off");
		return 0;
	}
	for(bc = Boolcmds;bc->str != NULL;bc++){
		if(strcmpi(argv[1],bc->str) == 0){
			*var = bc->val;
			return 0;
		}
	}
	printf("Valid options:");
	for(bc = Boolcmds;bc->str != NULL;bc++)
		printf(" %s",bc->str);

	printf("\n");
	return 1;
}


/* Subroutine for setting and displaying bit values */
int
bit16cmd(bits,mask,label,argc,argv)
uint16 *bits;
uint16 mask;
char *label;
int argc;
char *argv[];
{
	int doing = (*bits & mask);
	int result = setbool( &doing, label, argc, argv );

	if ( !result ) {
		if ( doing )
			*bits |= mask;
		else
			*bits &= ~mask;
	}
	return result;
}


/* Subroutine for setting and displaying long variables */
int
setlong(var,label,argc,argv)
long *var;
char *label;
int argc;
char *argv[];
{
	if(argc < 2)
		printf("%s: %ld\n",label,*var);
	else
		*var = atol(argv[1]);

	return 0;
}
/* Subroutine for setting and displaying short variables */
int
setshort(var,label,argc,argv)
unsigned short *var;
char *label;
int argc;
char *argv[];
{
	if(argc < 2)
		printf("%s: %u\n",label,*var);
	else
		*var = atoi(argv[1]);

	return 0;
}
/* Subroutine for setting and displaying integer variables */
int
setint(var,label,argc,argv)
int *var;
char *label;
int argc;
char *argv[];
{
	if(argc < 2)
		printf("%s: %i\n",label,*var);
	else
		*var = atoi(argv[1]);

	return 0;
}

/* Subroutine for setting and displaying unsigned integer variables */
int
setuns(var,label,argc,argv)
unsigned *var;
char *label;
int argc;
char *argv[];
{
	if(argc < 2)
		printf("%s: %u\n",label,*var);
	else
		*var = atoi(argv[1]);

	return 0;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久不卡影院| 国产成人午夜精品影院观看视频 | 欧美日韩小视频| xnxx国产精品| 亚洲成av人影院在线观看网| 精品一区二区综合| 欧美日韩大陆一区二区| 国产精品电影一区二区三区| 麻豆一区二区99久久久久| 欧美亚洲动漫精品| 一区二区三区在线观看欧美| 粉嫩嫩av羞羞动漫久久久| 精品区一区二区| 老汉av免费一区二区三区| 欧美在线播放高清精品| 亚洲免费观看高清完整版在线 | 久久久亚洲国产美女国产盗摄| 亚洲午夜一区二区| 在线观看免费成人| 亚洲色图制服丝袜| 91蜜桃网址入口| 国产精品美女久久久久aⅴ | 中文欧美字幕免费| 国产成人丝袜美腿| 国产亚洲一区二区三区| 国产剧情在线观看一区二区| 日韩欧美一区二区在线视频| 婷婷久久综合九色综合伊人色| 色欲综合视频天天天| 亚洲精品一二三| 色94色欧美sute亚洲13| 亚洲免费伊人电影| 91麻豆蜜桃一区二区三区| 日韩美女视频19| 一本久道久久综合中文字幕| 中文字幕一区二区三区不卡在线| 国产福利精品导航| 国产精品伦理一区二区| 91麻豆免费视频| 亚洲成人在线网站| 欧美一区二区三区四区视频| 视频在线在亚洲| 精品国产伦一区二区三区免费 | 视频一区二区中文字幕| 91精品黄色片免费大全| 黑人巨大精品欧美一区| 久久这里只有精品6| 成人av在线电影| 一区二区在线观看免费视频播放| 欧美怡红院视频| 麻豆成人久久精品二区三区小说| 2023国产精华国产精品| 成人午夜电影网站| 亚洲综合一区二区| 日韩欧美一区二区视频| 99视频精品免费视频| 一区二区三区在线免费播放| 91精品国产综合久久久久久久| 国产乱淫av一区二区三区| 亚洲精品成a人| 日韩一级片在线观看| 国产麻豆一精品一av一免费| 亚洲欧美福利一区二区| 欧美电影免费观看高清完整版在 | 黑人巨大精品欧美黑白配亚洲| 欧美国产日韩精品免费观看| 欧美日韩视频在线一区二区| 精品一区二区在线看| 亚洲人成伊人成综合网小说| 日韩精品在线一区| 色哦色哦哦色天天综合| 美日韩黄色大片| 亚洲激情在线播放| 久久亚洲精精品中文字幕早川悠里| 成人精品高清在线| 欧美aⅴ一区二区三区视频| 国产免费成人在线视频| 337p亚洲精品色噜噜| 91一区二区在线| 国产一区二区网址| 午夜久久久久久久久| 中文字幕中文字幕一区二区| 日韩欧美国产综合在线一区二区三区| 北条麻妃一区二区三区| 精油按摩中文字幕久久| 亚洲高清视频在线| 国产精品久久久久久久久免费相片| 欧美精品在线观看一区二区| a4yy欧美一区二区三区| 国产精品一卡二| 久久激情五月激情| 首页亚洲欧美制服丝腿| 亚洲观看高清完整版在线观看| 国产精品国产成人国产三级| 久久久久亚洲蜜桃| 精品日本一线二线三线不卡| 7777女厕盗摄久久久| 欧美午夜电影在线播放| 在线免费观看不卡av| 99精品视频一区二区三区| 国产不卡高清在线观看视频| 美女在线一区二区| 久久精品99国产精品日本| 日韩av不卡一区二区| 五月婷婷综合网| 午夜视频一区二区| 日韩综合小视频| 日欧美一区二区| 日本午夜一本久久久综合| 日韩精品电影一区亚洲| 日韩电影免费在线观看网站| 日韩经典中文字幕一区| 日韩二区三区四区| 免费观看一级特黄欧美大片| 日本欧美大码aⅴ在线播放| 日韩av一区二区在线影视| 日韩av一区二| 国产在线视频精品一区| 国产成人亚洲综合a∨婷婷| 国产91丝袜在线播放九色| 国产成+人+日韩+欧美+亚洲| 成人性生交大合| 成人97人人超碰人人99| 色综合色狠狠天天综合色| 色婷婷亚洲婷婷| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 欧美性感一类影片在线播放| 在线播放亚洲一区| 日韩欧美卡一卡二| 久久精品一二三| 国产精品白丝在线| 亚洲成人中文在线| 激情国产一区二区| thepron国产精品| 欧洲亚洲国产日韩| 欧美变态口味重另类| 中文子幕无线码一区tr| 亚洲美女视频一区| 免费看黄色91| 国产高清无密码一区二区三区| 成人动漫一区二区在线| 欧美日韩性生活| 国产日韩精品一区二区三区 | 欧美aⅴ一区二区三区视频| 国产精品中文字幕一区二区三区| a级高清视频欧美日韩| 欧美日韩成人综合在线一区二区| 精品日韩欧美在线| 最新久久zyz资源站| 奇米影视7777精品一区二区| 国产成人啪午夜精品网站男同| 91在线国内视频| 欧美一级片免费看| 中文字幕亚洲视频| 免费在线一区观看| 成人免费视频免费观看| 欧美日韩国产综合久久| 国产清纯白嫩初高生在线观看91| 亚洲成av人综合在线观看| 国产成人精品三级麻豆| 欧美久久久久久久久久| 中文字幕在线免费不卡| 免费国产亚洲视频| 欧美三级蜜桃2在线观看| 国产欧美一区二区精品性色 | 日韩精品亚洲专区| av在线一区二区三区| 欧美刺激午夜性久久久久久久| 亚洲美女视频在线| 成人免费视频国产在线观看| 精品少妇一区二区| 天堂午夜影视日韩欧美一区二区| 97精品电影院| 中文久久乱码一区二区| 精品一二三四区| 欧美视频一二三区| 亚洲精品国产精品乱码不99| 高清久久久久久| 精品国产伦一区二区三区观看体验| 天堂精品中文字幕在线| 欧美亚洲国产一区二区三区| 国产精品国产自产拍高清av | 欧美日韩国产经典色站一区二区三区 | 中文字幕 久热精品 视频在线| 麻豆91精品视频| 777午夜精品免费视频| 亚洲妇女屁股眼交7| 色域天天综合网| 中文字幕中文字幕在线一区| 成人午夜激情在线| 中文字幕 久热精品 视频在线| 国产成人99久久亚洲综合精品| 久久综合色婷婷| 国产综合色在线| 久久久综合视频| 激情久久五月天| 国产欧美一区二区三区在线看蜜臀| 国产伦精品一区二区三区免费| 久久免费精品国产久精品久久久久| 韩国欧美国产1区|