4.3BSD-Tahoe/usr/src/usr.bin/refer/what3.c

Compare this file to the similar file:
Show the results in this format:

#ifndef lint
static char *sccsid = "@(#)what3.c	4.1 (Berkeley) 5/6/83";
#endif

#include "what..c"

doclook(argc, argv, colevel)
char *argv[];
{
	int fpa[2], fpb[2], fpc[2], pid1, pid2, st;
	int iarg;
	char *s;
	FILE *ansf;
	struct filans *af;
	struct stat statbuf;
# define RD 0
# define WR 1
# define fmv(x,y) close(y); dup(x); close(x);
	/* we want to run chkbib and then lhunt and pipe in & out */
	pipe (fpa); /* from this program to chkbib */
	pipe (fpb); /* from chkbib to lhunt */
	pipe (fpc); /* from lhunt to us */
	if (  (pid1 = fork())  ==0)
	{
		fmv(fpa[RD], 0);
		fmv(fpb[WR], 1);
		close(fpa[WR]); 
		close(fpb[RD]); 
		close(fpc[RD]); 
		close(fpc[WR]); 
		execl("/usr/lib/refer/mkey", "mkey", "-s", 0);
		_assert(0);
	}
	if (  (pid2 = fork()) == 0)
	{
		char coarg[20];
		sprintf(coarg, "-C%d", colevel);
		fmv(fpb[RD], 0);
		fmv(fpc[WR], 1);
		close(fpa[RD]); 
		close(fpa[WR]); 
		close(fpb[WR]); 
		close(fpc[RD]);
		execl("/usr/lib/refer/hunt", "hunt",
		/* "-P", */
		coarg, "-Ty", "-Fn", "/usr/dict/lookall/All", 0);
		_assert(0);
	}
	_assert (pid1 != -1); 
	_assert(pid2 != -1);
	close(fpb[RD]); 
	close(fpb[WR]); 
	close(fpa[RD]); 
	close(fpc[WR]);
	ansf = fopen("/dev/null", "r");
	fmv (fpc[RD], ansf->_file);
	for(iarg=1; iarg<argc; iarg++)
		prod(fpa[WR], argv[iarg]);
	close(fpa[WR]);
	s=fnames;
	af=files;
	while (af < files+NFILES)
	{
		if (fgets(af->nm=s, NAMES, ansf)==0)
			break;
		trimnl(s);
		if (*s==0) continue;
		while (*s++);
		_assert(s<fnames+NAMES);
		st = stat(af->nm, &statbuf);
		if (st<0) continue;
		af->uid = statbuf.st_uid;
		af->fdate = statbuf.st_mtime;
		af->size = statbuf.st_size;
		af++;
	}
	fclose(ansf);
	return(af-files);
}

prod(f,s)
char *s;
{
	write (f, s, strlen(s));
	write (f, "\n", 1);
}