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: }
Defined functions
Defined variables
sccsid
defined in line
2;
never used
Defined macros