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