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