Annotation of researchv10no/cmd/refer/hunt1.c, revision 1.1

1.1     ! root        1: # include "stdio.h"
        !             2: # include "assert.h"
        !             3: extern char refdir[];
        !             4: extern int keepold;
        !             5: extern char *fgnames[];
        !             6: extern char **fgnamp;
        !             7: FILE *fd =NULL;
        !             8: int lmaster =500;
        !             9: int *hfreq, hfrflg;
        !            10: int colevel =0;
        !            11: int measure=0;
        !            12: int soutlen =1000;
        !            13: int reached =0;
        !            14: int iflong =0;
        !            15: int prfreqs =0;
        !            16: char usedir[100];
        !            17: char * calloc(); char * todir();
        !            18: char gfile[50];
        !            19: static int full =1000;
        !            20: static int tags =0;
        !            21: char *sinput, *soutput, *tagout;
        !            22: long indexdate =0, gdate();
        !            23: 
        !            24: main(argc,argv)
        !            25:        char *argv[];
        !            26: {
        !            27: /* read query from stdin, expect name of indexes in argv[1] */
        !            28: static FILE *fa, *fb, *fc;
        !            29: char nma[100], nmb[100], nmc[100], *qitem[100], *rprog = NULL;
        !            30: char nmd[100], grepquery[256];
        !            31: static char oldname[30] ;
        !            32: static int was =0;
        !            33: /* these pointers are unions of pointer to int and pointer to long */
        !            34: long *hpt;
        !            35: unsigned *master =0;
        !            36: int falseflg, nhash, nitem, nfound, frtbl, kk;
        !            37: 
        !            38:        /* special wart for refpart: default is tags only */
        !            39: 
        !            40: while (argv[1][0] == '-')
        !            41:        {
        !            42:        switch(argv[1][1])
        !            43:                {
        !            44:                case 'a': /* all output, incl. false drops */
        !            45:                        falseflg = 1; break;
        !            46:                case 'r':
        !            47:                        argc--; argv++;
        !            48:                        rprog = argv[1];
        !            49:                        break;
        !            50:                case 'F': /* put out full text */
        !            51:                        full = setfrom(argv[1][2]);
        !            52:                        break;
        !            53:                case 'T': /* put out tags */
        !            54:                        tags = setfrom(argv[1][2]);
        !            55:                        break;
        !            56:                case 'i': /* input in argument string */
        !            57:                        argc--; argv++;
        !            58:                        sinput = argv[1];
        !            59:                        break;
        !            60:                case 's': /*text output to string */
        !            61:                case 'o':
        !            62:                        argc--; argv++;
        !            63:                        soutput = argv[1];
        !            64:                        if (argv[2]<(char *)16000) /* this is a crazy kludge and only left to show what not to do */
        !            65:                                {
        !            66:                                soutlen = (int)argv[2];
        !            67:                                argc--; argv++;
        !            68:                                }
        !            69:                        break;
        !            70:                case 't': /*tag output to string */
        !            71:                        argc--; argv++;
        !            72:                        tagout = argv[1];
        !            73:                        break;
        !            74:                case 'l': /* length of internal lists */
        !            75:                        argc--; argv++;
        !            76:                        lmaster = atoi(argv[1]);
        !            77:                        break;
        !            78:                case 'g': /* suppress fgrep search on old files */
        !            79:                        keepold = 0;
        !            80:                        break;
        !            81:                case 'C': /* coordination level */
        !            82:                        colevel = atoi(argv[1]+2);
        !            83: # if D1
        !            84: fprintf(stderr, "colevel set to %d\n",colevel);
        !            85: # endif
        !            86:                        break;
        !            87:                case 'P': /* print term freqs */
        !            88:                        prfreqs=1; break;
        !            89:                case 'm':
        !            90:                        measure=1; break;
        !            91:                }
        !            92:        argc--; argv++;
        !            93:        }
        !            94: strcpy (nma, todir(argv[1]));
        !            95: if (was == 0 || strcmp (oldname, nma) !=0)
        !            96:        {
        !            97:        strcpy (oldname,nma);
        !            98:        strcpy (nmb, nma); strcpy (nmc, nmb); strcpy(nmd,nma);
        !            99:        strcat (nma, ".ia");
        !           100:        strcat (nmb, ".ib");
        !           101:        strcat (nmc, ".ic");
        !           102:        strcat (nmd, ".id");
        !           103:        if (was)
        !           104:                {fclose(fa); fclose(fb); fclose(fc);}
        !           105: 
        !           106:        fa = fopen(nma, "r");
        !           107:        if (fa==NULL)
        !           108:                {
        !           109:                strcpy(*fgnamp++ = calloc(strlen(oldname)+2,1), oldname);
        !           110:                fb=NULL;
        !           111:                goto search;
        !           112:                }
        !           113:        fb = fopen(nmb, "r");
        !           114:        fc = fopen(nmc, "r");
        !           115:        was =1;
        !           116:        if (fb== NULL || fc ==NULL)
        !           117:                {
        !           118:                err("Index incomplete %s", nmb);
        !           119:                exit(1);
        !           120:                }
        !           121:        indexdate = gdate(fb);
        !           122:        fd = fopen(nmd, "r");
        !           123:        }
        !           124: fseek (fa, 0L, 0);
        !           125: fread (&nhash, sizeof(nhash), 1, fa);
        !           126: fread (&iflong, sizeof(iflong), 1, fa);
        !           127: if(master==0)
        !           128: master = (unsigned *) calloc (lmaster, iflong? sizeof(long): sizeof(int));
        !           129: hpt = (long *) calloc(nhash, sizeof(*hpt));
        !           130: kk=fread( hpt, sizeof(*hpt), nhash, fa);
        !           131: # if D1
        !           132: fprintf(stderr,"read %d hashes, iflong %d, nhash %d\n", kk, iflong, nhash);
        !           133: # endif
        !           134: assert (kk==nhash);
        !           135: hfreq = (int *) calloc(nhash, sizeof(*hfreq));
        !           136: assert (hfreq != NULL);
        !           137: frtbl = fread(hfreq, sizeof(*hfreq), nhash, fa);
        !           138: hfrflg = (frtbl == nhash);
        !           139: # if D1
        !           140: fprintf(stderr, "read freqs %d\n", frtbl);
        !           141: # endif
        !           142: 
        !           143: search:
        !           144: while (1)
        !           145:        {
        !           146:        nitem = getq(qitem);
        !           147:        if (measure) tick();
        !           148:        if (nitem==0) continue;
        !           149:        if (nitem < 0) break;
        !           150:        if (tagout) tagout[0]=0;
        !           151:        if (fb!=NULL)
        !           152:        {
        !           153:        nfound = doquery(hpt, nhash, fb, nitem, qitem, master);
        !           154: # if D1
        !           155:        fprintf(stderr,"after doquery nfound %d\n", nfound);
        !           156: # endif
        !           157:        fgnamp=fgnames;
        !           158:        if (falseflg == 0)
        !           159:                nfound = baddrop(master, nfound, fc, nitem, qitem, rprog, full);
        !           160: # if D1
        !           161:        fprintf(stderr,"after baddrop nfound %d\n", nfound);
        !           162: # endif
        !           163:        }
        !           164:        if (fgnamp>fgnames)
        !           165:                {
        !           166:                char **fgp, tgbuff[100];
        !           167:                int k;
        !           168: # if D1
        !           169:                fprintf(stderr, "were %d bad files\n", fgnamp-fgnames);
        !           170: # endif
        !           171:                grepquery[0]=0;
        !           172:                for(k=0; k<nitem; k++)
        !           173:                        {
        !           174:                        strcat(grepquery, " ");
        !           175:                        strcat(grepquery, qitem[k]);
        !           176:                        }
        !           177: # if D1
        !           178:                fprintf(stderr, "grepquery %s\n",grepquery);
        !           179: # endif
        !           180:                for(fgp=fgnames; fgp<fgnamp; fgp++)
        !           181:                        {
        !           182: # if D1
        !           183:                        fprintf(stderr, "Now on %s query /%s/\n", *fgp, grepquery);
        !           184: # endif
        !           185:                        makefgrep(*fgp);
        !           186: # if D1
        !           187:                        fprintf(stderr, "grepmade\n");
        !           188: # endif
        !           189:                        if (tagout==0)
        !           190:                                tagout=tgbuff;
        !           191:                        grepcall(grepquery, tagout, *fgp);
        !           192: # if D1
        !           193:                        fprintf(stderr, "tagout now /%s/\n", tagout);
        !           194: # endif
        !           195:                        if (full)
        !           196:                                {
        !           197:                                char bout[1000];
        !           198:                                findline(tagout, bout, 1000);
        !           199:                                fputs(bout,stdout);
        !           200:                                }
        !           201:                        }
        !           202:                }
        !           203:        if (tags)
        !           204:                result (master, nfound >tags ? tags: nfound, fc);
        !           205:        if (measure) tock();
        !           206:        }
        !           207: }
        !           208: 
        !           209: char *
        !           210: todir(t)
        !           211:        char *t;
        !           212: {
        !           213:        char *s;
        !           214:        s=t;
        !           215:        while (*s) s++;
        !           216:        while (s>=t && *s != '/') s--;
        !           217:        if (s<t) return(t);
        !           218: *s++ = 0;
        !           219: t = (*t ? t : "/");
        !           220: chdir (t);
        !           221: strcpy (usedir,t);
        !           222: return(s);
        !           223: }
        !           224: setfrom(c)
        !           225: {
        !           226: switch(c)
        !           227:        {
        !           228:        case 'y': case '\0':
        !           229:        default:
        !           230:                return(1000);
        !           231:        case '1':
        !           232:        case '2': case '3': case '4': case '5':
        !           233:        case '6': case '7': case '8': case '9':
        !           234:                return(c-'0');
        !           235:        case 'n': case '0':
        !           236:                return(0);
        !           237:        }
        !           238: }

unix.superglobalmegacorp.com

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