summaryrefslogtreecommitdiff
path: root/usr.bin/locate/code/locate.code.c
diff options
context:
space:
mode:
authorjtc <jtc@NetBSD.org>1994-12-22 06:17:28 +0000
committerjtc <jtc@NetBSD.org>1994-12-22 06:17:28 +0000
commit7f8ee3fcb6f9098a04e1d2ca15a8dcacd0797c27 (patch)
tree5152d2be3ae2a12134f0e982d4ab9f30dfd36a61 /usr.bin/locate/code/locate.code.c
parent33cf3304f6537f7fccc48c79a0b64018d3318c2e (diff)
Merged with 4.4lite.
Changed to conform to NetBSD's new RCS Id convention.
Diffstat (limited to 'usr.bin/locate/code/locate.code.c')
-rw-r--r--usr.bin/locate/code/locate.code.c169
1 files changed, 110 insertions, 59 deletions
diff --git a/usr.bin/locate/code/locate.code.c b/usr.bin/locate/code/locate.code.c
index 1f56cfb1c5f..03b3e025c3f 100644
--- a/usr.bin/locate/code/locate.code.c
+++ b/usr.bin/locate/code/locate.code.c
@@ -1,6 +1,8 @@
+/* $NetBSD: locate.code.c,v 1.3 1994/12/22 06:17:43 jtc Exp $ */
+
/*
- * Copyright (c) 1989 The Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1989, 1993
+ * The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* James A. Woods.
@@ -35,14 +37,16 @@
*/
#ifndef lint
-char copyright[] =
-"@(#) Copyright (c) 1989 The Regents of the University of California.\n\
- All rights reserved.\n";
+static char copyright[] =
+"@(#) Copyright (c) 1989, 1993\n\
+ The Regents of the University of California. All rights reserved.\n";
#endif /* not lint */
#ifndef lint
-/*static char sccsid[] = "from: @(#)locate.code.c 4.8 (Berkeley) 6/1/90";*/
-static char rcsid[] = "$Id: locate.code.c,v 1.2 1993/08/01 18:13:52 mycroft Exp $";
+#if 0
+static char sccsid[] = "@(#)locate.code.c 8.1 (Berkeley) 6/6/93";
+#endif
+static char rcsid[] = "$NetBSD: locate.code.c,v 1.3 1994/12/22 06:17:43 jtc Exp $";
#endif /* not lint */
/*
@@ -54,7 +58,7 @@ static char rcsid[] = "$Id: locate.code.c,v 1.2 1993/08/01 18:13:52 mycroft Exp
* code common_bigrams < list > squozen_list
*
* METHOD: Uses 'front compression' (see ";login:", Volume 8, Number 1
- * February/March 1983, p. 8 ). Output format is, per line, an
+ * February/March 1983, p. 8). Output format is, per line, an
* offset differential count byte followed by a partially bigram-
* encoded ascii residue. A bigram is a two-character sequence,
* the first 128 most common of which are encoded in one byte.
@@ -67,100 +71,147 @@ static char rcsid[] = "$Id: locate.code.c,v 1.2 1993/08/01 18:13:52 mycroft Exp
* /usr/src/cmd/armadillo.c 14 armadillo.c
* /usr/tmp/zoo 5 tmp/zoo
*
- * The codes are:
+ * The codes are:
*
- * 0-28 likeliest differential counts + offset to make nonnegative
+ * 0-28 likeliest differential counts + offset to make nonnegative
* 30 switch code for out-of-range count to follow in next word
* 128-255 bigram codes (128 most common, as determined by 'updatedb')
* 32-127 single character (printable) ascii residue (ie, literal)
*
- * SEE ALSO: updatedb.csh, bigram.c, find.c
- *
+ * SEE ALSO: updatedb.csh, bigram.c
+ *
* AUTHOR: James A. Woods, Informatics General Corp.,
* NASA Ames Research Center, 10/82
*/
#include <sys/param.h>
+#include <err.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
#include <stdio.h>
#include "locate.h"
-#define BGBUFSIZE (NBG * 2) /* size of bigram buffer */
+#define BGBUFSIZE (NBG * 2) /* size of bigram buffer */
char buf1[MAXPATHLEN] = " ";
char buf2[MAXPATHLEN];
char bigrams[BGBUFSIZE + 1] = { 0 };
-main ( argc, argv )
- int argc; char *argv[];
+int bgindex __P((char *));
+void usage __P((void));
+
+int
+main(argc, argv)
+ int argc;
+ char *argv[];
{
- register char *cp, *oldpath = buf1, *path = buf2;
- int code, count, diffcount, oldcount = 0;
+ register char *cp, *oldpath, *path;
+ int ch, code, count, diffcount, oldcount;
FILE *fp;
- if ((fp = fopen(argv[1], "r")) == NULL) {
- printf("Usage: code common_bigrams < list > squozen_list\n");
- exit(1);
- }
- /* first copy bigram array to stdout */
- fgets ( bigrams, BGBUFSIZE + 1, fp );
- fwrite ( bigrams, 1, BGBUFSIZE, stdout );
- fclose( fp );
+ while ((ch = getopt(argc, argv, "")) != EOF)
+ switch(ch) {
+ case '?':
+ default:
+ usage();
+ }
+ argc -= optind;
+ argv += optind;
+
+ if (argc != 1)
+ usage();
+
+ if ((fp = fopen(argv[0], "r")) == NULL)
+ err(1, "%s", argv[0]);
+
+ /* First copy bigram array to stdout. */
+ (void)fgets(bigrams, BGBUFSIZE + 1, fp);
+ if (fwrite(bigrams, 1, BGBUFSIZE, stdout) != BGBUFSIZE)
+ err(1, "stdout");
+ (void)fclose(fp);
- while ( fgets ( path, sizeof(buf2), stdin ) != NULL ) {
- /* truncate newline */
+ oldpath = buf1;
+ path = buf2;
+ oldcount = 0;
+ while (fgets(path, sizeof(buf2), stdin) != NULL) {
+ /* Truncate newline. */
cp = path + strlen(path) - 1;
if (cp > path && *cp == '\n')
*cp = '\0';
- /* squelch characters that would botch the decoding */
- for ( cp = path; *cp != NULL; cp++ ) {
- if ( (unsigned char)*cp >= PARITY )
+
+ /* Squelch characters that would botch the decoding. */
+ for (cp = path; *cp != NULL; cp++) {
+ if ((u_char)*cp >= PARITY)
*cp &= PARITY-1;
- else if ( *cp <= SWITCH )
+ else if (*cp <= SWITCH)
*cp = '?';
}
- /* skip longest common prefix */
- for ( cp = path; *cp == *oldpath; cp++, oldpath++ )
- if ( *oldpath == NULL )
+
+ /* Skip longest common prefix. */
+ for (cp = path; *cp == *oldpath; cp++, oldpath++)
+ if (*oldpath == NULL)
break;
count = cp - path;
diffcount = count - oldcount + OFFSET;
oldcount = count;
- if ( diffcount < 0 || diffcount > 2*OFFSET ) {
- putc ( SWITCH, stdout );
- putw ( diffcount, stdout );
- }
- else
- putc ( diffcount, stdout );
+ if (diffcount < 0 || diffcount > 2 * OFFSET) {
+ if (putchar(SWITCH) == EOF ||
+ putw(diffcount, stdout) == EOF)
+ err(1, "stdout");
+ } else
+ if (putchar(diffcount) == EOF)
+ err(1, "stdout");
- while ( *cp != NULL ) {
- if ( *(cp + 1) == NULL ) {
- putchar ( *cp );
+ while (*cp != NULL) {
+ if (*(cp + 1) == NULL) {
+ if (putchar(*cp) == EOF)
+ err(1, "stdout");
break;
}
- if ( (code = bgindex ( cp )) < 0 ) {
- putchar ( *cp++ );
- putchar ( *cp++ );
- }
- else { /* found, so mark byte with parity bit */
- putchar ( (code / 2) | PARITY );
+ if ((code = bgindex(cp)) < 0) {
+ if (putchar(*cp++) == EOF ||
+ putchar(*cp++) == EOF)
+ err(1, "stdout");
+ } else {
+ /* Found, so mark byte with parity bit. */
+ if (putchar((code / 2) | PARITY) == EOF)
+ err(1, "stdout");
cp += 2;
}
}
- if ( path == buf1 ) /* swap pointers */
- path = buf2, oldpath = buf1;
- else
- path = buf1, oldpath = buf2;
+ if (path == buf1) { /* swap pointers */
+ path = buf2;
+ oldpath = buf1;
+ } else {
+ path = buf1;
+ oldpath = buf2;
+ }
}
+ /* Non-zero status if there were errors */
+ if (fflush(stdout) != 0 || ferror(stdout))
+ exit(1);
+ exit(0);
}
-bgindex ( bg ) /* return location of bg in bigrams or -1 */
+int
+bgindex(bg) /* Return location of bg in bigrams or -1. */
char *bg;
{
- register char *p;
- register char bg0 = bg[0], bg1 = bg[1];
+ register char bg0, bg1, *p;
- for ( p = bigrams; *p != NULL; p++ )
- if ( *p++ == bg0 && *p == bg1 )
+ bg0 = bg[0];
+ bg1 = bg[1];
+ for (p = bigrams; *p != NULL; p++)
+ if (*p++ == bg0 && *p == bg1)
break;
- return ( *p == NULL ? -1 : --p - bigrams );
+ return (*p == NULL ? -1 : --p - bigrams);
+}
+
+void
+usage()
+{
+ (void)fprintf(stderr,
+ "usage: locate.code common_bigrams < list > squozen_list\n");
+ exit(1);
}