a,"-user")) {
		if((i=getunum("/etc/passwd", b)) == -1) {
			fprintf(stderr, "Cannot find -user name\n");
			exit(1);
		}
		return(mk(&user,i,s));
	}
	else if(EQ(a,"-unum"))
		return(mk(&user,atoi(b),s));
	else if(EQ(a,"-inum"))
		return(mk(&ino,atoi(b),s));
	else if(EQ(a,"-group")) {
		if((i=getunum("/etc/group", b)) == -1) {
			fprintf(stderr, "Cannot find -group name\n");
			exit(1);
		}
		return(mk(&group,i,s));
	} else if(EQ(a,"-size"))
		return(mk(&size,atoi(b),s));
	else if(EQ(a,"-links"))
		return(mk(&links,atoi(b),s));
	else if(EQ(a,"-perm")) {
		for(i=0; *b ; ++b) {
			if(*b=='-') continue;
			i =<< 3;
			i = i + (*b - '0');
		}
		return(mk(&perm,i,s));
	}
	else if(EQ(a,"-type")) {
		i = s=='d' ? IFDIR :
		    s=='b' ? IFBLK :
		    s=='c' ? IFCHR :
		    000000;
		return(mk(&type,i,0));
	}
	else if (EQ(a,"-exec")) {
		i = Ai - 1;
		while(EQ(nxtarg(),";")!=0);
		return(mk(&exeq,i,0));
	}
	else if (EQ(a,"-ok")) {
		i = Ai - 1;
		while(EQ(nxtarg(),";")!=0);
		return(mk(&ok,i,0));
	}
err:	fprintf(stderr, "bad option < %s >\n", a);
	exit(1);
}
struct anode *mk(f,l,r) struct anode *l,*r; { /*make an expression node*/
	node[nn].F = f;
	node[nn].L = l;
	node[nn].R = r;
	return(&(node[nn++]));
}

nxtarg() { /* get next arg from command line */
	