Annotation of researchv10no/cmd/refer/glue1.c, revision 1.1.1.1

1.1       root        1: # include "stdio.h"
                      2: # define unopen(fil) {if (fil!=NULL) {fclose(fil); fil=NULL;}}
                      3: extern char refdir[];
                      4: int lmaster = 1000;
                      5: int reached = 0;
                      6: FILE *fd  = 0;
                      7: long *zalloc();
                      8: char *todir();
                      9: FILE *iopen();
                     10: int *hfreq, hfrflg;
                     11: int colevel = 0;
                     12: static union {unsigned *a; long *b;} master;
                     13: int iflong;
                     14: extern char *fgnames[], **fgnamp;
                     15: int prfreqs = 0;
                     16: int typeindex  = 0;
                     17: char usedir[100];
                     18: static int full = 1000;
                     19: static int tags  = 0;
                     20: char *sinput, *soutput, *tagout;
                     21: long indexdate  = 0, gdate();
                     22: int soutlen = 1000;
                     23: int taglen  = 1000;
                     24: 
                     25: huntmain(argc,argv)
                     26:        char *argv[];
                     27: {
                     28: /* read query from stdin, expect name of indexes in argv[1] */
                     29: static FILE *fa, *fb, *fc;
                     30: char indexname[100], *qitem[100], *rprog = 0;
                     31: char grepquery[200];
                     32: static char oldname[30] ;
                     33: static int nhash  = 0;
                     34: static int maxhash  = 0;
                     35: int falseflg = 0, nitem, nfound, frtbl;
                     36: static long *hpt  = 0;
                     37: # if D1
                     38: fprintf(stderr, "in glue1 argc %d argv %o %o\n", argc, argv[0],argv[1]);
                     39: # endif
                     40: savedir();
                     41: while (argv[1][0] == '-')
                     42:        {
                     43: # if D1
                     44: fprintf(stderr, "argv.1 is %s\n",argv[1]);
                     45: # endif
                     46:        switch(argv[1][1])
                     47:                {
                     48:                case 'a': /* all output, incl. false drops */
                     49:                        falseflg = 1; break;
                     50:                case 'r':
                     51:                        argc--; argv++;
                     52:                        rprog = argv[1];
                     53:                        break;
                     54:                case 'F': /* put out full text */
                     55:                        full = setfrom(argv[1][2]);
                     56:                        break;
                     57:                case 'T': /* put out tags */
                     58:                        tags = setfrom(argv[1][2]);
                     59:                        break;
                     60:                case 'i': /* input in argument string */
                     61:                        argc--; argv++;
                     62:                        sinput = argv[1];
                     63:                        break;
                     64:                case 's': /*text output to string */
                     65:                case 'o':
                     66:                        argc--; argv++;
                     67:                        soutput = argv[1];
                     68:                        if ((int)(argv[2])<16000)
                     69:                                {
                     70:                                soutlen = (int) argv[2];
                     71:                                argc--; argv++;
                     72:                                }
                     73:                        break;
                     74:                case 't': /*tag output to string */
                     75:                        argc--; argv++;
                     76:                        tagout = argv[1];
                     77:                        if ((int)(argv[2])<16000)
                     78:                                {
                     79:                                taglen = (int)argv[2];
                     80:                                argc--; argv++;
                     81:                                }
                     82:                        break;
                     83:                case 'l': /* specify length of lists */
                     84:                        argc--; argv++;
                     85:                        lmaster = atoi(argv[1]);
                     86: # if D1
                     87:                        fprintf(stderr, "lmaster now %d\n",lmaster);
                     88: # endif
                     89:                        break;
                     90:                case 'C': 
                     91:                        argc--; argv++;
                     92:                        colevel = atoi(argv[1]);
                     93:                        break;
                     94:                }
                     95:        argc--; argv++;
                     96:        }
                     97: strcpy (indexname, todir(argv[1]));
                     98: # if D1
                     99: fprintf(stderr, "in huntmain indexname %s typeindex %d\n", indexname, typeindex);
                    100: # endif
                    101: if (typeindex == 0 || strcmp (oldname, indexname) !=0)
                    102:        {
                    103:        strcpy (oldname, indexname);
                    104:        unopen(fa); unopen(fb); unopen(fc);
                    105: 
                    106:        if (ckexist(indexname, ".ib"))
                    107:                {
                    108: # if D1
                    109:                fprintf(stderr, "found old index\n");
                    110: # endif
                    111:                fa = iopen(indexname, ".ia");
                    112:                fb = iopen(indexname, ".ib");
                    113:                fc = iopen(indexname, ".ic");
                    114:                typeindex =1;
                    115: # if D1
                    116:                fprintf(stderr, "opened f's as %o %o %o\n",fa,fb,fc);
                    117: # endif
                    118:                indexdate = gdate(fb);
                    119:                fread (&nhash, sizeof(nhash), 1, fa);
                    120:                fread (&iflong, sizeof(iflong), 1, fa);
                    121:                if (nhash > maxhash)
                    122:                        {
                    123:                        if (hpt)
                    124:                                free (hpt, maxhash, sizeof(*hpt));
                    125:                        hpt=0;
                    126:                        if (hfreq)
                    127:                                free(hfreq, maxhash, sizeof(*hfreq));
                    128:                        hfreq=0;
                    129:                        maxhash=nhash;
                    130: # if D1
                    131:                        fprintf(stderr, "Freed if needed maxhash %d\n",maxhash);
                    132: # endif
                    133:                        }
                    134:                if (hpt==0)
                    135:                hpt = zalloc(nhash, sizeof(*hpt));
                    136: # if D1
                    137:                fprintf(stderr, "hpt now %o\n",hpt);
                    138: # endif
                    139:                if (hpt == NULL)
                    140:                        err ("No space for hash list (%d)", nhash);
                    141:                fread( hpt, sizeof(*hpt), nhash, fa);
                    142:                if (hfreq==0)
                    143:                hfreq= (int *) zalloc(nhash, sizeof(*hfreq));
                    144:                if (hfreq==NULL)
                    145:                        err ("No space for hash frequencies (%d)", nhash);
                    146:                frtbl = fread(hfreq, sizeof(*hfreq), nhash, fa);
                    147:                hfrflg = (frtbl == nhash);
                    148: # if D1
                    149:                fprintf(stderr,"Read pointer files\n");
                    150: # endif
                    151:                if (master.a == NULL)
                    152:                        if (iflong)
                    153:                                master.b = zalloc(lmaster, sizeof(long));
                    154:                        else
                    155:                                master.a = (unsigned *)zalloc(lmaster, sizeof(int));
                    156:                if (master.a == NULL)
                    157:                        err ("no space for answer list",0);
                    158:                }
                    159:        else
                    160:        if (makefgrep(indexname))
                    161:                typeindex=2;
                    162:        else
                    163:                {
                    164:                err ("No files %s\n",indexname);
                    165:                exit(1);
                    166:                }
                    167:        }
                    168: 
                    169: # if D1
                    170: fprintf(stderr, "typeindex now %d\n",typeindex);
                    171: # endif
                    172: tagout[0]=0;
                    173: if (typeindex==2)
                    174:        {
                    175:        grepcall(sinput, tagout, indexname);
                    176: # if D1
                    177:        fprintf(stderr, " back from grepcall\n");
                    178: # endif
                    179:        restodir();
                    180:        return;
                    181:        }
                    182: nitem = getq(qitem);
                    183: # if D1
                    184: fprintf(stderr, "approaching doquery fb %o\n", fb);
                    185: # endif
                    186: nfound = doquery(hpt, nhash, fb, nitem, qitem, master);
                    187: # ifdef D1
                    188:        fprintf(stderr, "return from doquery with nfound %d\n", nfound);
                    189: # endif
                    190: if (falseflg == 0)
                    191:        nfound = baddrop(master, nfound, fc, nitem, qitem, rprog, full);
                    192: # ifdef D1
                    193:        fprintf(stderr, "after baddrop with nfound %d\n",nfound);
                    194:        fprintf(stderr, "tagout is /%s/, sout /%s/\n",tagout, soutput);
                    195: # endif
                    196: if (tags)
                    197:        result (master, nfound >tags ? tags : nfound, fc);
                    198: # if D1
                    199: fprintf(stderr, "done with huntmain\n");
                    200: fprintf(stderr, "tagout is /%s/\n", tagout);
                    201: fprintf(stderr, "string out is /%s/\n", soutput);
                    202: # endif
                    203: if (fgnamp>fgnames)
                    204:        {
                    205:        char **fgp;
                    206:        int k;
                    207: # if D1
                    208:        fprintf(stderr, "were %d bad files\n", fgnamp-fgnames);
                    209: # endif
                    210:        grepquery[0]=0;
                    211:        for(k=0; k<nitem; k++)
                    212:                {
                    213:                strcat(grepquery, " ");
                    214:                strcat(grepquery, qitem[k]);
                    215:                }
                    216:        for(fgp=fgnames; fgp<fgnamp; fgp++)
                    217:                {
                    218: # if D1
                    219:                fprintf(stderr, "Now on %s query /%s/\n", *fgp, grepquery);
                    220: # endif
                    221:                makefgrep(*fgp);
                    222:                grepcall(grepquery, tagout, *fgp);
                    223: # if D1
                    224:                fprintf(stderr, "tagout now /%s/\n", tagout);
                    225: # endif
                    226:                }
                    227:        }
                    228: restodir();
                    229: }
                    230: 
                    231: char *
                    232: todir(t)
                    233:        char *t;
                    234: {
                    235:        char *s;
                    236:        s=t;
                    237:        while (*s) s++;
                    238:        while (s>=t && *s != '/') s--;
                    239:        if (s<t) return(t);
                    240: *s++ = 0;
                    241: t = (*t ? t : "/");
                    242: chdir (t);
                    243: strcpy (usedir,t);
                    244: return(s);
                    245: }
                    246: setfrom(c)
                    247: {
                    248: switch(c)
                    249:        {
                    250:        case 'y': case '\0':
                    251:        default:
                    252:                return(1000);
                    253:        case '1':
                    254:        case '2': case '3': case '4': case '5':
                    255:        case '6': case '7': case '8': case '9':
                    256:                return(c-'0');
                    257:        case 'n': case '0':
                    258:                return(0);
                    259:        }
                    260: }

unix.superglobalmegacorp.com

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