#include <stdio.h>
#include <assert.h>
#define LINESIZ 1250
extern int hash();
int
newkeys(FILE *outf, FILE *inf, FILE *recf, int nhash, FILE *fd, int *iflong)
{
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) {
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;
fclose(recf);
return (ndoc);
}
void
trimnl(char *p)
{
while (*p) p++;
p--;
if (*p == '\n') *p = 0;
}