|
|
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.