Annotation of 43BSDTahoe/usr.bin/refer/hunt6.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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