1 /*-
2 * Copyright (c) 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Barry Brachman.
7 *
8 * %sccs.include.redist.c%
9 */
10
11 #ifndef lint
12 static char copyright[] =
13 "@(#) Copyright (c) 1993\n\
14 The Regents of the University of California. All rights reserved.\n";
15 #endif /* not lint */
16
17 #ifndef lint
18 static char sccsid[] = "@(#)mkindex.c 8.1 (Berkeley) 06/11/93";
19 #endif /* not lint */
20
21 #include <stdio.h>
22
23 #include "bog.h"
24
25 char *nextword __P((FILE *, char *, int *, int *));
26
27 int
main(argc,argv)28 main(argc, argv)
29 int argc;
30 char *argv[];
31 {
32 int clen, rlen, prev;
33 long off, start;
34 char buf[MAXWORDLEN + 1];
35
36 prev = '\0';
37 off = start = 0L;
38 while (nextword(stdin, buf, &clen, &rlen) != NULL) {
39 if (*buf != prev) {
40 if (prev != '\0')
41 printf("%c %6ld %6ld\n", prev, start, off - 1);
42 prev = *buf;
43 start = off;
44 }
45 off += clen + 1;
46 }
47 printf("%c %6ld %6ld\n", prev, start, off - 1);
48 exit(0);
49 }
50
51 /*
52 * Return the next word in the compressed dictionary in 'buffer' or
53 * NULL on end-of-file
54 * Also set clen to the length of the compressed word (for mkindex) and
55 * rlen to the strlen() of the real word
56 */
57 char *
nextword(fp,buffer,clen,rlen)58 nextword(fp, buffer, clen, rlen)
59 FILE *fp;
60 char *buffer;
61 int *clen, *rlen;
62 {
63 register int ch, pcount;
64 register char *p, *q;
65 static char buf[MAXWORDLEN + 1];
66 static int first = 1;
67 static int lastch = 0;
68
69 if (first) {
70 if ((pcount = getc(fp)) == EOF)
71 return (NULL);
72 first = 0;
73 }
74 else if ((pcount = lastch) == EOF)
75 return (NULL);
76
77 p = buf + (*clen = pcount);
78
79 while ((ch = getc(fp)) != EOF && ch >= 'a')
80 *p++ = ch;
81 lastch = ch;
82 *p = '\0';
83
84 *rlen = (int) (p - buf);
85 *clen = *rlen - *clen;
86
87 p = buf;
88 q = buffer;
89 while ((*q++ = *p) != '\0') {
90 if (*p++ == 'q')
91 *q++ = 'u';
92 }
93 return (buffer);
94 }
95