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

newkeys defined in line 9; used 1 times
trimnl defined in line 91; never used

Defined variables

sccsid defined in line 2; never used

Defined macros

LINESIZ defined in line 7; used 2 times
Last modified: 1987-02-17
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 2348
Valid CSS Valid XHTML 1.0 Strict