Annotation of 42BSD/usr.bin/refer/inv2.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char *sccsid = "@(#)inv2.c      4.1 (Berkeley) 5/6/83";
                      3: #endif
                      4: 
                      5: #include <stdio.h>
                      6: #include <assert.h>
                      7: #define LINESIZ 1250
                      8: 
                      9: newkeys (outf, inf, recf, nhash, fd, iflong)
                     10: FILE *outf, *inf, *recf, *fd;
                     11: int *iflong;
                     12: {
                     13:        /* reads key lines from inf; hashes and writes on outf;
                     14:         * writes orig key on recf, records pointer on outf too.
                     15:         * format of outf is : hash code space record pointer
                     16:         */
                     17: 
                     18:        long lp, ftell();
                     19:        long ld = 0; 
                     20:        int ll = 0, lt = 0;
                     21:        char line[LINESIZ];
                     22:        char key[30], bkeys[40];
                     23:        char *p, *s;
                     24:        char *keyv[500];
                     25:        int i, nk, ndoc = 0, more = 0, c;
                     26: 
                     27:        lp = ftell (recf);
                     28:        while (fgets(line, LINESIZ, inf))
                     29:        {
                     30:                p = line;
                     31:                while (*p != '\t') p++;
                     32:                *p++ =0;
                     33:                fputs(line, recf);
                     34:                if (fd)
                     35:                {
                     36:                        sprintf(bkeys, ";%ld", ld);
                     37:                        ll = strlen(p);
                     38:                        lt = strlen(bkeys);
                     39:                        fputs(bkeys, recf);
                     40:                        sprintf(bkeys, ",%d", ll);
                     41:                        lt += strlen(bkeys);
                     42:                        fputs(bkeys, recf);
                     43:                        ld += ll;
                     44:                        fputs(p, fd);
                     45:                }
                     46:                putc('\n',recf);
                     47:                for(s=p; *s; s++);
                     48:                if (*--s == '\n')
                     49:                {
                     50:                        more=0;
                     51:                        *s=0;
                     52:                }
                     53:                else
                     54:                        more=1;
                     55:                _assert (fd==0 || more==0);
                     56:                nk = getargs(p, keyv);
                     57:                if (more)
                     58:                        nk--;
                     59:                for(i=0; i<nk; i++)
                     60:                        fprintf(outf,"%04d %06ld\n",hash(keyv[i])%nhash, lp);
                     61: # if D1
                     62:                for(i=0; i<nk; i++)
                     63:                        printf("key %s hash %d\n",keyv[i],hash(keyv[i])%nhash);
                     64: # endif
                     65:                if (more) /* allow more than LINESIZ keys */
                     66:                {
                     67:                        strcpy(key, keyv[nk]);
                     68:                        for(s=key; *s; s++);
                     69:                        while ( (c=getc(inf)) != '\n')
                     70:                        {
                     71:                                if (c != ' ')
                     72:                                {
                     73:                                        *s++ = c;
                     74:                                        continue;
                     75:                                }
                     76:                                *s=0;
                     77:                                if (s>key)
                     78:                                        fprintf(outf, "%04d %06ld\n",hash(key)%nhash, lp);
                     79:                                s = key;
                     80:                        }
                     81:                }
                     82:                lp += (strlen(line)+lt+1);
                     83:                ndoc++;
                     84:        }
                     85:        *iflong = (lp>=65536L);
                     86:        if (sizeof(int)>2) *iflong=1; /* force long on VAX */
                     87:        fclose(recf);
                     88:        return(ndoc);
                     89: }
                     90: 
                     91: trimnl(p)
                     92: char *p;
                     93: {
                     94:        while (*p) p++;
                     95:        p--;
                     96:        if (*p == '\n') *p=0;
                     97: }

unix.superglobalmegacorp.com

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