X-Git-Url: https://git.cameronkatri.com/bsdgames-darwin.git/blobdiff_plain/0b20d56bada201132ad678efaca6aaa176ed40c1..HEAD:/boggle/mkindex/mkindex.c?ds=inline diff --git a/boggle/mkindex/mkindex.c b/boggle/mkindex/mkindex.c index 2951486c..fad22644 100644 --- a/boggle/mkindex/mkindex.c +++ b/boggle/mkindex/mkindex.c @@ -1,4 +1,4 @@ -/* $NetBSD: mkindex.c,v 1.6 1999/09/18 20:50:29 jsm Exp $ */ +/* $NetBSD: mkindex.c,v 1.12 2021/05/02 12:50:44 rillig Exp $ */ /*- * Copyright (c) 1993 @@ -15,11 +15,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -36,33 +32,29 @@ * SUCH DAMAGE. */ -#include #ifndef lint -__COPYRIGHT("@(#) Copyright (c) 1993\n\ - The Regents of the University of California. All rights reserved.\n"); -#endif /* not lint */ +static char copyright[] = "@(#) Copyright (c) 1993\n\ + The Regents of the University of California. All rights reserved.\n"; -#ifndef lint #if 0 static char sccsid[] = "@(#)mkindex.c 8.1 (Berkeley) 6/11/93"; #else -__RCSID("$NetBSD: mkindex.c,v 1.6 1999/09/18 20:50:29 jsm Exp $"); +static char rcsid[] = + "$NetBSD: mkindex.c,v 1.12 2021/05/02 12:50:44 rillig Exp $"; #endif #endif /* not lint */ -#include #include #include #include "bog.h" -int main __P((void)); -char *nextword __P((FILE *, char *, int *, int *)); +static char *nextword(FILE *, char *, int *, int *); int main(void) { - int clen, rlen, prev; + int clen, rlen, prev, i; long off, start; char buf[MAXWORDLEN + 1]; @@ -70,17 +62,29 @@ main(void) off = start = 0L; while (nextword(stdin, buf, &clen, &rlen) != NULL) { if (*buf != prev) { + /* + * Boggle expects a full index even if the dictionary + * had no words beginning with some letters. + * So we write out entries for every letter from prev + * to *buf. + */ if (prev != '\0') printf("%c %6ld %6ld\n", prev, start, off - 1); + for (i = (prev ? prev + 1 : 'a'); i < *buf; i++) + printf("%c %6ld %6ld\n", i, off, off - 1); prev = *buf; start = off; } off += clen + 1; } printf("%c %6ld %6ld\n", prev, start, off - 1); + for (i = prev + 1; i <= 'z'; i++) + printf("%c %6ld %6ld\n", i, off, off - 1); fflush(stdout); - if (ferror(stdout)) - err(1, "writing standard output"); + if (ferror(stdout)) { + perror("error writing standard output"); + exit(1); + } exit(0); } @@ -90,11 +94,8 @@ main(void) * Also set clen to the length of the compressed word (for mkindex) and * rlen to the strlen() of the real word */ -char * -nextword(fp, buffer, clen, rlen) - FILE *fp; - char *buffer; - int *clen, *rlen; +static char * +nextword(FILE *fp, char *buffer, int *clen, int *rlen) { int ch, pcount; char *p, *q; @@ -111,7 +112,7 @@ nextword(fp, buffer, clen, rlen) return (NULL); p = buf + (*clen = pcount); - + while ((ch = getc(fp)) != EOF && ch >= 'a') *p++ = ch; lastch = ch;