diff options
author | Kiyoshi Aman <kiyoshi.aman+adelie@gmail.com> | 2019-06-02 10:52:30 -0500 |
---|---|---|
committer | Kiyoshi Aman <kiyoshi.aman+adelie@gmail.com> | 2019-06-02 10:52:30 -0500 |
commit | b0126834b834b58e44765d1fdf1303c4c4981478 (patch) | |
tree | 931dd27c1506e8334cfeed81352e8783cea6f19f | |
parent | c6717937f50b1fb9a40b50639d0b91979019f289 (diff) | |
download | userland-b0126834b834b58e44765d1fdf1303c4c4981478.tar.gz userland-b0126834b834b58e44765d1fdf1303c4c4981478.tar.bz2 userland-b0126834b834b58e44765d1fdf1303c4c4981478.tar.xz userland-b0126834b834b58e44765d1fdf1303c4c4981478.zip |
usr.bin/mkstr: how did this survive the not-POSIX-or-LSB pruning???
-rw-r--r-- | usr.bin/mkstr/mkstr.1 | 131 | ||||
-rw-r--r-- | usr.bin/mkstr/mkstr.c | 320 |
2 files changed, 0 insertions, 451 deletions
diff --git a/usr.bin/mkstr/mkstr.1 b/usr.bin/mkstr/mkstr.1 deleted file mode 100644 index 5fd812d..0000000 --- a/usr.bin/mkstr/mkstr.1 +++ /dev/null @@ -1,131 +0,0 @@ -.\" $NetBSD: mkstr.1,v 1.13 2017/07/03 21:34:20 wiz Exp $ -.\" -.\" Copyright (c) 1980, 1990, 1993 -.\" The Regents of the University of California. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 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. 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. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" @(#)mkstr.1 8.1 (Berkeley) 6/6/93 -.\" -.Dd June 6, 1993 -.Dt MKSTR 1 -.Os -.Sh NAME -.Nm mkstr -.Nd create an error message file by massaging C source -.Sh SYNOPSIS -.Nm -.Op Fl -.Ar messagefile -.Ar prefix file ... -.Sh DESCRIPTION -.Nm -creates files containing error messages extracted from C source, -and restructures the same C source, to use the created error message -file. -The intent of -.Nm -was to reduce the size of large programs and -reduce swapping (see -.Sx BUGS -section below). -.Pp -.Nm -processes each of the specified -.Ar files , -placing a restructured version of the input in a file whose name -consists of the specified -.Ar prefix -and the original name. -A typical usage of -.Nm -is -.Bd -literal -offset indent -mkstr pistrings xx *.c -.Ed -.Pp -This command causes all the error messages from the C source -files in the current directory to be placed in the file -.Ar pistrings -and restructured copies of the sources to be placed in -files whose names are prefixed with -.Ar \&xx . -.Pp -Options: -.Bl -tag -width indent -.It Fl -Error messages are placed at the end of the specified -message file for recompiling part of a large -.Nm -ed -program. -.El -.Pp -.Nm -finds error messages in the source by -searching for the string -.Li \&`error("' -in the input stream. -Each time it occurs, the C string starting at the -.Sq \&"\& -is stored -in the message file followed by a null character and a new-line character; -The new source is restructured with -.Xr lseek 2 -pointers into the error message file for retrieval. -.Bd -literal -offset indent -char efilname = "/usr/lib/pi_strings"; -int efil = -1; - -error(a1, a2, a3, a4) -\&{ - char buf[256]; - - if (efil < 0) { - efil = open(efilname, 0); - if (efil < 0) { -oops: - perror(efilname); - exit 1 ; - } - } - if (lseek(efil, a1, 0) < 0 || read(efil, buf, 256) \*[Le] 0) - goto oops; - printf(buf, a2, a3, a4); -} -.Ed -.Sh SEE ALSO -.Xr xstr 1 , -.Xr lseek 2 -.Sh HISTORY -.Nm -appeared in -.Bx 1 . -.Sh BUGS -.Nm -was intended for the limited architecture of the PDP-11 family. -Very few programs actually use it. -It is not an efficient method, the error messages -should be stored in the program text. diff --git a/usr.bin/mkstr/mkstr.c b/usr.bin/mkstr/mkstr.c deleted file mode 100644 index 0bfe6ca..0000000 --- a/usr.bin/mkstr/mkstr.c +++ /dev/null @@ -1,320 +0,0 @@ -/* $NetBSD: mkstr.c,v 1.17 2016/09/05 00:40:29 sevan Exp $ */ - -/* - * Copyright (c) 1980, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 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. 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. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include <sys/cdefs.h> -#ifndef lint -__COPYRIGHT("@(#) Copyright (c) 1980, 1993\ - The Regents of the University of California. All rights reserved."); -#endif /* not lint */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)mkstr.c 8.1 (Berkeley) 6/6/93"; -#else -__RCSID("$NetBSD: mkstr.c,v 1.17 2016/09/05 00:40:29 sevan Exp $"); -#endif -#endif /* not lint */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#define ungetchar(c) ungetc(c, stdin) - -/* - * mkstr - create a string error message file by massaging C source - * - * Bill Joy UCB August 1977 - * - * Modified March 1978 to hash old messages to be able to recompile - * without addding messages to the message file (usually) - * - * Based on an earlier program conceived by Bill Joy and Chuck Haley - * - * Program to create a string error message file - * from a group of C programs. Arguments are the name - * of the file where the strings are to be placed, the - * prefix of the new files where the processed source text - * is to be placed, and the files to be processed. - * - * The program looks for 'error("' in the source stream. - * Whenever it finds this, the following characters from the '"' - * to a '"' are replaced by 'seekpt' where seekpt is a - * pointer into the error message file. - * If the '(' is not immediately followed by a '"' no change occurs. - * - * The optional '-' causes strings to be added at the end of the - * existing error message file for recompilation of single routines. - */ - - -FILE *mesgread, *mesgwrite; -char *progname; -const char usagestr[] = "usage: %s [ - ] mesgfile prefix file ...\n"; -char name[100], *np; - -void process(void); -int match(const char *); -int octdigit(char); -void inithash(void); -long hashit(const char *, char, long); -void copystr(void); -int fgetNUL(char *, int, FILE *); - -int -main(int argc, char *argv[]) -{ - char addon = 0; - - argc--, progname = *argv++; - if (argc > 1 && argv[0][0] == '-') - addon++, argc--, argv++; - if (argc < 3) - fprintf(stderr, usagestr, progname), exit(1); - mesgwrite = fopen(argv[0], addon ? "a" : "w"); - if (mesgwrite == NULL) - perror(argv[0]), exit(1); - mesgread = fopen(argv[0], "r"); - if (mesgread == NULL) - perror(argv[0]), exit(1); - inithash(); - argc--, argv++; - strlcpy(name, argv[0], sizeof(name)); - np = name + strlen(name); - argc--, argv++; - do { - strlcpy(np, argv[0], sizeof(name) - (np - name)); - if (freopen(name, "w", stdout) == NULL) - perror(name), exit(1); - if (freopen(argv[0], "r", stdin) == NULL) - perror(argv[0]), exit(1); - process(); - argc--, argv++; - } while (argc > 0); - exit(0); -} - -void -process(void) -{ - int c; - - for (;;) { - c = getchar(); - if (c == EOF) - return; - if (c != 'e') { - putchar(c); - continue; - } - if (match("error(")) { - printf("error("); - c = getchar(); - if (c != '"') - putchar(c); - else - copystr(); - } - } -} - -int -match(const char *ocp) -{ - const char *cp; - int c; - - for (cp = ocp + 1; *cp; cp++) { - c = getchar(); - if (c != *cp) { - while (ocp < cp) - putchar(*ocp++); - ungetchar(c); - return (0); - } - } - return (1); -} - -void -copystr(void) -{ - int c, ch; - char buf[512]; - char *cp = buf; - - for (;;) { - c = getchar(); - if (c == EOF) - break; - switch (c) { - - case '"': - *cp++ = 0; - goto out; - case '\\': - c = getchar(); - switch (c) { - - case 'b': - c = '\b'; - break; - case 't': - c = '\t'; - break; - case 'r': - c = '\r'; - break; - case 'n': - c = '\n'; - break; - case '\n': - continue; - case 'f': - c = '\f'; - break; - case '0': - c = 0; - break; - case '\\': - break; - default: - if (!octdigit(c)) - break; - c -= '0'; - ch = getchar(); - if (!octdigit(ch)) - break; - c <<= 7, c += ch - '0'; - ch = getchar(); - if (!octdigit(ch)) - break; - c <<= 3, c+= ch - '0', ch = -1; - break; - } - } - *cp++ = c; - } -out: - *cp = 0; - printf("%ld", hashit(buf, 1, 0)); -} - -int -octdigit(char c) -{ - - return (c >= '0' && c <= '7'); -} - -void -inithash(void) -{ - char buf[512]; - long mesgpt = 0; - - rewind(mesgread); - while (fgetNUL(buf, sizeof buf, mesgread) != 0) { - hashit(buf, 0, mesgpt); - mesgpt += strlen(buf) + 2; - } -} - -#define NBUCKETS 511 - -struct hash { - long hval; - long hpt; - struct hash *hnext; -} *bucket[NBUCKETS]; - -long -hashit(const char *str, char really, long fakept) -{ - int i; - struct hash *hp; - char buf[512]; - long hashval = 0; - const char *cp; - -#ifdef __GNUC__ - hp = NULL; /* XXX gcc */ -#endif - if (really) - fflush(mesgwrite); - for (cp = str; *cp;) - hashval = (hashval << 1) + *cp++; - i = hashval % NBUCKETS; - if (i < 0) - i += NBUCKETS; - if (really != 0) - for (hp = bucket[i]; hp != 0; hp = hp->hnext) - if (hp->hval == hashval) { - fseek(mesgread, hp->hpt, 0); - fgetNUL(buf, sizeof buf, mesgread); -/* - fprintf(stderr, "Got (from %ld) %s\n", hp->hpt, buf); -*/ - if (strcmp(buf, str) == 0) - break; - } - if (!really || hp == 0) { - hp = (struct hash *) calloc(1, sizeof *hp); - hp->hnext = bucket[i]; - hp->hval = hashval; - hp->hpt = really ? ftell(mesgwrite) : fakept; - if (really) { - fwrite(str, sizeof (char), strlen(str) + 1, mesgwrite); - fwrite("\n", sizeof (char), 1, mesgwrite); - } - bucket[i] = hp; - } -/* - fprintf(stderr, "%s hashed to %ld at %ld\n", str, hp->hval, hp->hpt); -*/ - return (hp->hpt); -} - -#include <sys/types.h> -#include <sys/stat.h> - -int -fgetNUL(char *obuf, int rmdr, FILE *file) -{ - int c; - char *buf = obuf; - - while (--rmdr > 0 && (c = getc(file)) != 0 && c != EOF) - *buf++ = c; - *buf++ = 0; - getc(file); - return ((feof(file) || ferror(file)) ? 0 : 1); -} |