📄 inv2.c
字号:
#ifndef lintstatic char *sccsid = "@(#)inv2.c 4.1 (Berkeley) 5/6/83";#endif#include <stdio.h>#include <assert.h>#define LINESIZ 1250newkeys (outf, inf, recf, nhash, fd, iflong)FILE *outf, *inf, *recf, *fd;int *iflong;{ /* reads key lines from inf; hashes and writes on outf; * writes orig key on recf, records pointer on outf too. * format of outf is : hash code space record pointer */ long lp, ftell(); long ld = 0; int ll = 0, lt = 0; char line[LINESIZ]; char key[30], bkeys[40]; char *p, *s; char *keyv[500]; int i, nk, ndoc = 0, more = 0, c; lp = ftell (recf); while (fgets(line, LINESIZ, inf)) { p = line; while (*p != '\t') p++; *p++ =0; fputs(line, recf); if (fd) { sprintf(bkeys, ";%ld", ld); ll = strlen(p); lt = strlen(bkeys); fputs(bkeys, recf); sprintf(bkeys, ",%d", ll); lt += strlen(bkeys); fputs(bkeys, recf); ld += ll; fputs(p, fd); } putc('\n',recf); for(s=p; *s; s++); if (*--s == '\n') { more=0; *s=0; } else more=1; assert (fd==0 || more==0); nk = getargs(p, keyv); if (more) nk--; for(i=0; i<nk; i++) fprintf(outf,"%04d %06ld\n",hash(keyv[i])%nhash, lp);# if D1 for(i=0; i<nk; i++) printf("key %s hash %d\n",keyv[i],hash(keyv[i])%nhash);# endif if (more) /* allow more than LINESIZ keys */ { strcpy(key, keyv[nk]); for(s=key; *s; s++); while ( (c=getc(inf)) != '\n') { if (c != ' ') { *s++ = c; continue; } *s=0; if (s>key) fprintf(outf, "%04d %06ld\n",hash(key)%nhash, lp); s = key; } } lp += (strlen(line)+lt+1); ndoc++; } *iflong = (lp>=65536L); if (sizeof(int)>2) *iflong=1; /* force long on VAX */ fclose(recf); return(ndoc);}trimnl(p)char *p;{ while (*p) p++; p--; if (*p == '\n') *p=0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -