1: # include "what..c"
2:
3: doclook(argc, argv, colevel)
4: char *argv[];
5: {
6: int fpa[2], fpb[2], fpc[2], pid1, pid2, st;
7: int iarg;
8: char *s;
9: FILE *ansf;
10: struct filans *af;
11: struct stat statbuf;
12: # define RD 0
13: # define WR 1
14: # define fmv(x,y) close(y); dup(x); close(x);
15: /* we want to run chkbib and then lhunt and pipe in & out */
16: pipe (fpa); /* from this program to chkbib */
17: pipe (fpb); /* from chkbib to lhunt */
18: pipe (fpc); /* from lhunt to us */
19: if ( (pid1 = fork()) ==0)
20: {
21: fmv(fpa[RD], 0);
22: fmv(fpb[WR], 1);
23: close(fpa[WR]); close(fpb[RD]); close(fpc[RD]); close(fpc[WR]);
24: execl("/usr/lib/refer/mkey", "mkey", "-s", 0);
25: _assert(0);
26: }
27: if ( (pid2 = fork()) == 0)
28: {
29: char coarg[20];
30: sprintf(coarg, "-C%d", colevel);
31: fmv(fpb[RD], 0);
32: fmv(fpc[WR], 1);
33: close(fpa[RD]); close(fpa[WR]); close(fpb[WR]); close(fpc[RD]);
34: execl("/usr/lib/refer/hunt", "hunt",
35: /* "-P", */
36: coarg, "-Ty", "-Fn", "/usr/dict/lookall/All", 0);
37: _assert(0);
38: }
39: _assert (pid1 != -1); _assert(pid2 != -1);
40: close(fpb[RD]); close(fpb[WR]); close(fpa[RD]); close(fpc[WR]);
41: ansf = fopen("/dev/null", "r");
42: fmv (fpc[RD], ansf->_file);
43: for(iarg=1; iarg<argc; iarg++)
44: prod(fpa[WR], argv[iarg]);
45: close(fpa[WR]);
46: s=fnames;
47: af=files;
48: while (af < files+NFILES)
49: {
50: if (fgets(af->nm=s, NAMES, ansf)==0)
51: break;
52: trimnl(s);
53: if (*s==0) continue;
54: while (*s++);
55: _assert(s<fnames+NAMES);
56: st = stat(af->nm, &statbuf);
57: if (st<0) continue;
58: af->uid = statbuf.st_uid;
59: af->fdate = statbuf.st_mtime;
60: af->size = statbuf.st_size;
61: af++;
62: }
63: fclose(ansf);
64: return(af-files);
65: }
66: prod(f,s)
67: char *s;
68: {
69: write (f, s, strlen(s));
70: write (f, "\n", 1);
71: }
Defined functions
prod
defined in line
66; used 1 times
Defined macros
RD
defined in line
12; used 9 times
WR
defined in line
13; used 10 times
fmv
defined in line
14; used 5 times