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

📄 if.c

📁 Version 6 Unix 核心源代码 Version 6 Unix 核心源代码
💻 C
字号:
/* if command */int	ap;int	ac;char	**av;main(argc, argv)char *argv[];{	argv[argc] = 0;	ac = argc; av = argv; ap = 1;	if (argc<2) return;	if (exp()) 		if(doex(0)) {			write(1, "no command\n", 11);			seek(0, 0, 2);		}}char *nxtarg() {	if (ap>ac) return(0*ap++);	return(av[ap++]);}exp(s) {	int p1;	p1 = e1();	if (eq(nxtarg(), "-o")) return(p1 | exp());	ap--;	return(p1);}e1() {	int p1;	p1 = e2();	if (eq(nxtarg(), "-a")) return (p1 & e1());	ap--;	return(p1);}e2() {	if (eq(nxtarg(), "!"))		return(!e3());	ap--;	return(e3());}e3() {	int p1, ccode;	register char *a;	ccode = 0;	if ((a=nxtarg())==0) goto err;	if(eq(a, "(")) {		p1 = exp();		if(!eq(nxtarg(), ")")) goto err;		return(p1);	}	if(eq(a, "-r"))		return(tio(nxtarg(), 0));	if(eq(a, "-w"))		return(tio(nxtarg(), 1));	if(eq(a, "-c"))		return(tcreat(nxtarg()));	if(eq(a, "{")) { /* execute a command for exit code */		if(fork()) /*parent*/ wait(&ccode);		else { /*child*/			doex(1);			goto err;		}		while((a=nxtarg()) && (!eq(a,"}")));		return(ccode? 0 : 1);	}	p1 = nxtarg();	if (p1==0) goto err;	if(eq(p1, "="))		return(eq(a, nxtarg()));	if(eq(p1, "!="))		return(!eq(a, nxtarg()));err:	write(1, "if error\n", 9);	exit(9);}tio(a, f) {	a = open(a, f);	if (a>=0) {		close(a);		return(1);	}	return(0);}tcreat(a) {	return(1);}eq(a, b)char *a, *b;{	register int i;	i = 0;l:	if(a[i] != b[i])		return(0);	if(a[i++] == '\0')		return(1);	goto l;}doex(earg) {	register int np, i, c;	char *nargv[50], *ncom, *na;	np = 0;	while (na=nxtarg()) {		if(earg && eq(na,"}")) break;		nargv[np++] = na;	}	if(earg && (!eq(na, "}"))) return(9);	nargv[np] = 0;	if (np==0) return(earg);	execv(nargv[0], nargv, np);	i = 0;	ncom = "/usr/bin/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";	while(c=nargv[0][i])  {		ncom[9+i++] = c;	}	ncom[9+i] = '\0';	execv(ncom+4, nargv, np);	execv(ncom, nargv, np);	return(1);}

⌨️ 快捷键说明

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