+# 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);
+}