Bell 32V development
authorTom London <tbl@research.uucp>
Mon, 22 Jan 1979 12:29:58 +0000 (07:29 -0500)
committerTom London <tbl@research.uucp>
Mon, 22 Jan 1979 12:29:58 +0000 (07:29 -0500)
Work on file usr/src/cmd/refer/inv2.c

Co-Authored-By: John Reiser <jfr@research.uucp>
Synthesized-from: 32v

usr/src/cmd/refer/inv2.c [new file with mode: 0644]

diff --git a/usr/src/cmd/refer/inv2.c b/usr/src/cmd/refer/inv2.c
new file mode 100644 (file)
index 0000000..a3f9e41
--- /dev/null
@@ -0,0 +1,90 @@
+# include "stdio.h"
+# include "assert.h"
+newkeys (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
+*/
+
+# define LINESIZ 1250
+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;
+}