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

📄 getflags.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>voidusage(void){	print("status=usage\n");	exits(0);}char*findarg(char *flags, Rune r){	char *p;	Rune rr;		for(p=flags; p!=(char*)1; p=strchr(p, ',')+1){		chartorune(&rr, p);		if(rr == r)			return p;	}	return nil;	}intcountargs(char *p){	int n;	n = 1;	while(*p == ' ')		p++;	for(; *p && *p != ','; p++)		if(*p == ' ' && *(p-1) != ' ')			n++;	return n;}voidmain(int argc, char *argv[]){	char *flags, *p, buf[512];	int i, n;	Fmt fmt;		quotefmtinstall();	argv0 = argv[0];	/* for sysfatal */		flags = getenv("flagfmt");	if(flags == nil){		fprint(2, "$flagfmt not set\n");		print("exit 'missing flagfmt'");		exits(0);	}	fmtfdinit(&fmt, 1, buf, sizeof buf);	for(p=flags; p!=(char*)1; p=strchr(p, ',')+1)		fmtprint(&fmt, "flag%.1s=()\n", p);	ARGBEGIN{	default:		if((p = findarg(flags, ARGC())) == nil)			usage();		p += runelen(ARGC());		if(*p == ',' || *p == 0){			fmtprint(&fmt, "flag%C=1\n", ARGC());			break;		}		n = countargs(p);		fmtprint(&fmt, "flag%C=(", ARGC());		for(i=0; i<n; i++)			fmtprint(&fmt, "%s%q", i ? " " : "", EARGF(usage()));		fmtprint(&fmt, ")\n");	}ARGEND		fmtprint(&fmt, "*=(");	for(i=0; i<argc; i++)		fmtprint(&fmt, "%s%q", i ? " " : "", argv[i]);	fmtprint(&fmt, ")\n");	fmtprint(&fmt, "status=''\n");	fmtfdflush(&fmt);	exits(0);}

⌨️ 快捷键说明

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