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