Annotation of 3BSD/cmd/refer/hunt6.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.