home *** CD-ROM | disk | FTP | other *** search
- # 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);
- }
-