112287Stut #ifndef lint 2*17679Sralph static char *sccsid = "@(#)hunt6.c 4.2 (Berkeley) 01/09/85"; 312287Stut #endif 412287Stut 512287Stut #include <stdio.h> 612287Stut #include <assert.h> 712287Stut #define TXTLEN 1000 812287Stut 912287Stut char *outbuf = 0; 1012287Stut extern char *soutput; 1112287Stut extern int soutlen, iflong; 1212287Stut extern long indexdate; 1312287Stut 1412287Stut baddrop(master, nf, fc, nitem, qitem, rprog, full) 1512287Stut union ptr { 1612287Stut unsigned *a; 1712287Stut long *b; 1812287Stut } 1912287Stut master; 2012287Stut FILE *fc; 2112287Stut char *qitem[], *rprog; 2212287Stut { 2312287Stut /* checks list of drops for real bad drops; finds items with "deliv" */ 2412287Stut int i, g, j, need, got, na, len; 2512287Stut long lp; 2612287Stut char res[100], *ar[50], output[TXTLEN]; 2712287Stut extern int colevel, reached; 2812287Stut # if D1 2912287Stut if (iflong) 3012287Stut fprintf(stderr,"in baddrop, nf %d master %ld %ld %ld\n", 3112287Stut nf, master.b[0], master.b[1], master.b[2]); 3212287Stut else 3312287Stut fprintf(stderr,"in baddrop, nf %d master %d %d %d\n", 3412287Stut nf, master.a[0], master.a[1], master.a[2]); 3512287Stut # endif 3612287Stut for (i=g=0; i<nf; i++) 3712287Stut { 3812287Stut lp = iflong ? master.b[i] : master.a[i]; 3912287Stut # if D1 4012287Stut if (iflong) 4112287Stut fprintf(stderr, "i %d master %lo lp %lo\n", 4212287Stut i, master.b[i], lp); 4312287Stut else 4412287Stut fprintf(stderr, "i %d master %o lp %lo\n", 4512287Stut i, master.a[i], lp); 4612287Stut # endif 4712287Stut fseek (fc, lp, 0); 4812287Stut fgets( res, 100, fc); 4912287Stut # if D1 5012287Stut fprintf(stderr, "tag %s", res); 5112287Stut # endif 5212287Stut if (!auxil(res,output)) 5312287Stut { 5412287Stut char *s; 5512287Stut int c; 5612287Stut # if D1 5712287Stut fprintf(stderr, "not auxil try rprog %c\n", 5812287Stut rprog? 'y': 'n'); 5912287Stut # endif 6012287Stut for(s=res; c= *s; s++) 6112287Stut if (c == ';' || c == '\n') 6212287Stut { 6312287Stut *s=0; 6412287Stut break; 6512287Stut } 6612287Stut len = rprog ? 6712287Stut corout (res, output, rprog, 0, TXTLEN) : 6812287Stut findline (res, output, TXTLEN, indexdate); 6912287Stut } 7012287Stut # if D1 7112287Stut _assert (len <TXTLEN); 7212287Stut fprintf(stderr,"item %d of %d, tag %s len %d output\n%s\n..\n", 7312287Stut i, nf, res, len, output); 7412287Stut # endif 7512287Stut if (len==0) 7612287Stut continue; 7712287Stut need = colevel ? reached : nitem; 7812287Stut na=0; 7912287Stut ar[na++] = "fgrep"; 8012287Stut ar[na++] = "-r"; 8112287Stut ar[na++] = "-n"; 82*17679Sralph ar[na++] = (char *) need; 8312287Stut ar[na++] = "-i"; 8412287Stut ar[na++] = output; 85*17679Sralph ar[na++] = (char *) len; 8612287Stut for(j=0; j<nitem; j++) 8712287Stut ar[na++] = qitem[j]; 8812287Stut # ifdef D1 8912287Stut fprintf(stderr, "calling fgrep len %d ar[4] %s %o %d \n", 9012287Stut len,ar[4],ar[5],ar[6]); 9112287Stut # endif 9212287Stut if (fgrep(na, ar)==0) 9312287Stut { 9412287Stut # ifdef D1 9512287Stut fprintf(stderr, "fgrep found it\n"); 9612287Stut # endif 9712287Stut if (iflong) 9812287Stut master.b[g++] = master.b[i]; 9912287Stut else 10012287Stut master.a[g++] = master.a[i]; 10112287Stut if (full >= g) 10212287Stut if (soutput==0) 10312287Stut fputs(output, stdout); 10412287Stut else 10512287Stut strcpy (soutput, output); 10612287Stut } 10712287Stut # ifdef D1 10812287Stut fprintf(stderr, "after fgrep\n"); 10912287Stut # endif 11012287Stut } 11112287Stut return(g); 11212287Stut } 11312287Stut 11412287Stut auxil( res, output) 11512287Stut char *res, *output; 11612287Stut { 11712287Stut extern FILE *fd; 11812287Stut long lp, c; 11912287Stut int len; 12012287Stut if (fd==0)return(0); 12112287Stut while (c = *res++) 12212287Stut { 12312287Stut if (c == ';') 12412287Stut { 12512287Stut sscanf(res, "%ld,%d", &lp, &len); 12612287Stut fseek (fd, lp, 0); 12712287Stut fgets(output, len, fd); 12812287Stut return(1); 12912287Stut } 13012287Stut } 13112287Stut return(0); 13212287Stut } 133