|
|
1.1 root 1: #ifndef lint
2: static char *sccsid = "@(#)hunt6.c 4.3 (Berkeley) 9/28/87";
3: #endif
4:
5: #include <stdio.h>
6: #include <assert.h>
7: #define TXTLEN 1000
8:
9: char *outbuf = 0;
10: extern char *soutput;
11: extern int soutlen, iflong;
12: extern long indexdate;
13:
14: baddrop(master, nf, fc, nitem, qitem, rprog, full)
15: unsigned *master;
16: FILE *fc;
17: char *qitem[], *rprog;
18: {
19: /* checks list of drops for real bad drops; finds items with "deliv" */
20: union ptr {
21: unsigned *a;
22: long *b;
23: } umaster;
24: int i, g, j, need, got, na, len;
25: long lp;
26: char res[100], *ar[50], output[TXTLEN];
27: extern int colevel, reached;
28:
29: if (iflong)
30: umaster.b = (long *) master;
31: else
32: umaster.a = master;
33: # if D1
34: if (iflong)
35: fprintf(stderr,"in baddrop, nf %d umaster %ld %ld %ld\n",
36: nf, umaster.b[0], umaster.b[1], umaster.b[2]);
37: else
38: fprintf(stderr,"in baddrop, nf %d umaster %d %d %d\n",
39: nf, umaster.a[0], umaster.a[1], umaster.a[2]);
40: # endif
41: for (i=g=0; i<nf; i++)
42: {
43: lp = iflong ? umaster.b[i] : umaster.a[i];
44: # if D1
45: if (iflong)
46: fprintf(stderr, "i %d umaster %lo lp %lo\n",
47: i, umaster.b[i], lp);
48: else
49: fprintf(stderr, "i %d umaster %o lp %lo\n",
50: i, umaster.a[i], lp);
51: # endif
52: fseek (fc, lp, 0);
53: fgets( res, 100, fc);
54: # if D1
55: fprintf(stderr, "tag %s", res);
56: # endif
57: if (!auxil(res,output))
58: {
59: char *s;
60: int c;
61: # if D1
62: fprintf(stderr, "not auxil try rprog %c\n",
63: rprog? 'y': 'n');
64: # endif
65: for(s=res; c= *s; s++)
66: if (c == ';' || c == '\n')
67: {
68: *s=0;
69: break;
70: }
71: len = rprog ?
72: corout (res, output, rprog, 0, TXTLEN) :
73: findline (res, output, TXTLEN, indexdate);
74: }
75: # if D1
76: _assert (len <TXTLEN);
77: fprintf(stderr,"item %d of %d, tag %s len %d output\n%s\n..\n",
78: i, nf, res, len, output);
79: # endif
80: if (len==0)
81: continue;
82: need = colevel ? reached : nitem;
83: na=0;
84: ar[na++] = "fgrep";
85: ar[na++] = "-r";
86: ar[na++] = "-n";
87: ar[na++] = (char *) need;
88: ar[na++] = "-i";
89: ar[na++] = output;
90: ar[na++] = (char *) len;
91: for(j=0; j<nitem; j++)
92: ar[na++] = qitem[j];
93: # ifdef D1
94: fprintf(stderr, "calling fgrep len %d ar[4] %s %o %d \n",
95: len,ar[4],ar[5],ar[6]);
96: # endif
97: if (fgrep(na, ar)==0)
98: {
99: # ifdef D1
100: fprintf(stderr, "fgrep found it\n");
101: # endif
102: if (iflong)
103: umaster.b[g++] = umaster.b[i];
104: else
105: umaster.a[g++] = umaster.a[i];
106: if (full >= g)
107: if (soutput==0)
108: fputs(output, stdout);
109: else
110: strcpy (soutput, output);
111: }
112: # ifdef D1
113: fprintf(stderr, "after fgrep\n");
114: # endif
115: }
116: return(g);
117: }
118:
119: auxil( res, output)
120: char *res, *output;
121: {
122: extern FILE *fd;
123: long lp, c;
124: int len;
125: if (fd==0)return(0);
126: while (c = *res++)
127: {
128: if (c == ';')
129: {
130: sscanf(res, "%ld,%d", &lp, &len);
131: fseek (fd, lp, 0);
132: fgets(output, len, fd);
133: return(1);
134: }
135: }
136: return(0);
137: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.