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

📄 test.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
/* *	test expression *	[ expression ] */#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#define EQ(a,b)	((tmp=a)==0?0:(strcmp(tmp,b)==0))#define DIR 1#define FIL 2int	ap;int	ac;char	**av;char	*tmp;main(argc, argv)char *argv[];{	ac = argc; av = argv; ap = 1;	if(EQ(argv[0],"[")) {		if(!EQ(argv[--ac],"]"))			synbad("] missing","");	}	argv[ac] = 0;	if (ac<=1) exit(1);	exit(exp()?0:1);}char *nxtarg(mt) {	if (ap>=ac) {		if(mt) {			ap++;			return(0);		}		synbad("argument expected","");	}	return(av[ap++]);}exp() {	int p1;	p1 = e1();	if (EQ(nxtarg(1), "-o")) return(p1 | exp());	ap--;	return(p1);}e1() {	int p1;	p1 = e2();	if (EQ(nxtarg(1), "-a")) return (p1 & e1());	ap--;	return(p1);}e2() {	if (EQ(nxtarg(0), "!"))		return(!e3());	ap--;	return(e3());}e3() {	int p1;	register char *a;	char *p2;	int int1, int2;	a=nxtarg(0);	if(EQ(a, "(")) {		p1 = exp();		if(!EQ(nxtarg(0), ")")) synbad(") expected","");		return(p1);	}	if(EQ(a, "-r"))		return(tio(nxtarg(0), 0));	if(EQ(a, "-w"))		return(tio(nxtarg(0), 1));	if(EQ(a, "-d"))		return(ftype(nxtarg(0))==DIR);	if(EQ(a, "-f"))		return(ftype(nxtarg(0))==FIL);	if(EQ(a, "-s"))		return(fsizep(nxtarg(0)));	if(EQ(a, "-t"))		if(ap>=ac)			return(isatty(1));		else			return(isatty(atoi(nxtarg(0))));	if(EQ(a, "-n"))		return(!EQ(nxtarg(0), ""));	if(EQ(a, "-z"))		return(EQ(nxtarg(0), ""));	p2 = nxtarg(1);	if (p2==0)		return(!EQ(a,""));	if(EQ(p2, "="))		return(EQ(nxtarg(0), a));	if(EQ(p2, "!="))		return(!EQ(nxtarg(0), a));	if(EQ(a, "-l")) {		int1=length(p2);		p2=nxtarg(0);	} else{	int1=atoi(a);	}	int2 = atoi(nxtarg(0));	if(EQ(p2, "-eq"))		return(int1==int2);	if(EQ(p2, "-ne"))		return(int1!=int2);	if(EQ(p2, "-gt"))		return(int1>int2);	if(EQ(p2, "-lt"))		return(int1<int2);	if(EQ(p2, "-ge"))		return(int1>=int2);	if(EQ(p2, "-le"))		return(int1<=int2);	synbad("unknown operator ",p2);}tio(a, f)char *a;int f;{	f = open(a, f);	if (f>=0) {		close(f);		return(1);	}	return(0);}ftype(f)char *f;{	struct stat statb;	if(stat(f,&statb)<0)		return(0);	if((statb.st_mode&S_IFMT)==S_IFDIR)		return(DIR);	return(FIL);}fsizep(f)char *f;{	struct stat statb;	if(stat(f,&statb)<0)		return(0);	return(statb.st_size>0);}synbad(s1,s2)char *s1, *s2;{	write(2, "test: ", 6);	write(2, s1, strlen(s1));	write(2, s2, strlen(s2));	write(2, "\n", 1);	exit(255);}length(s)	char *s;{	char *es=s;	while(*es++);	return(es-s-1);}

⌨️ 快捷键说明

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