diff options
Diffstat (limited to 'libexec/getNAME/getNAME.c')
-rw-r--r-- | libexec/getNAME/getNAME.c | 342 |
1 files changed, 0 insertions, 342 deletions
diff --git a/libexec/getNAME/getNAME.c b/libexec/getNAME/getNAME.c deleted file mode 100644 index 5238ffc666c..00000000000 --- a/libexec/getNAME/getNAME.c +++ /dev/null @@ -1,342 +0,0 @@ -/* $OpenBSD: getNAME.c,v 1.16 2009/10/27 23:59:31 deraadt Exp $ */ -/* $NetBSD: getNAME.c,v 1.7.2.1 1997/11/10 19:54:46 thorpej 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. - */ - -/* - * Get name sections from manual pages. - * -t for building toc - * -i for building intro entries - * -w for querying type of manual source - * other apropos database - */ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <libgen.h> - -int tocrc; -int intro; -int typeflag; - -void doname(char *); -void dorefname(char *); -void getfrom(char *); -void split(char *, char *); -void trimln(char *); -__dead void usage(void); -int main(int, char *[]); - -int -main(int argc, char *argv[]) -{ - int ch; - - while ((ch = getopt(argc, argv, "itw")) != -1) - switch (ch) { - case 'i': - intro = 1; - break; - case 't': - tocrc = 1; - break; - case 'w': - typeflag = 1; - break; - case '?': - default: - usage(); - } - argc -= optind; - argv += optind; - - if (!*argv) - usage(); - - for (; *argv; ++argv) - getfrom(*argv); - exit(0); -} - -void -getfrom(char *pathname) -{ - int i = 0; - char *name, *loc, *s, *t; - char headbuf[BUFSIZ]; - char linbuf[BUFSIZ]; - char savebuf[BUFSIZ]; - - if (freopen(pathname, "r", stdin) == 0) { - perror(pathname); - return; - } - name = basename(pathname); - for (;;) { - if (fgets(headbuf, sizeof(headbuf), stdin) == NULL) { - if (typeflag) - printf("%-60s UNKNOWN\n", pathname); - return; - } - if (headbuf[0] != '.') - continue; - if ((headbuf[1] == 'T' && headbuf[2] == 'H') || - (headbuf[1] == 't' && headbuf[2] == 'h')) - break; - if (headbuf[1] == 'D' && headbuf[2] == 't') - goto newman; - } - if (typeflag) { - printf("%-60s OLD\n", pathname); - return; - } - for (;;) { - if (fgets(linbuf, sizeof(linbuf), stdin) == NULL) - return; - if (linbuf[0] != '.') - continue; - if (linbuf[1] == 'S' && linbuf[2] == 'H') - break; - if (linbuf[1] == 's' && linbuf[2] == 'h') - break; - } - trimln(headbuf); - if (tocrc) - doname(name); - linbuf[0] = '\0'; - for (;;) { - if (fgets(headbuf, sizeof(headbuf), stdin) == NULL) - break; - if (headbuf[0] == '.') { - if (headbuf[1] == 'S' && headbuf[2] == 'H') - break; - if (headbuf[1] == 's' && headbuf[2] == 'h') - break; - } - if (i != 0) - strlcat(linbuf, " ", sizeof(linbuf)); - i++; - trimln(headbuf); - strlcat(linbuf, headbuf, sizeof(linbuf)); - /* change the \- into (N) - */ - if ((s = strstr(linbuf, "\\-")) != NULL) { - strlcpy(savebuf, s+1, sizeof savebuf); - if ((t = strchr(name, '.')) != NULL) { - t++; - *s++ = '('; - while (*t) - *s++ = *t++; - *s++ = ')'; - *s++ = ' '; - *s++ = '\0'; - } - strlcat(linbuf, savebuf, sizeof(linbuf)); - } - } - if (intro) - split(linbuf, name); - else - printf("%s\n", linbuf); - return; - -newman: - if (typeflag) { - printf("%-60s NEW\n", pathname); - return; - } - for (;;) { - if (fgets(linbuf, sizeof(linbuf), stdin) == NULL) - return; - if (linbuf[0] != '.') - continue; - if (linbuf[1] == 'S' && linbuf[2] == 'h') - break; - } - trimln(headbuf); - if (tocrc) - doname(name); - linbuf[0] = '\0'; - for (;;) { - if (fgets(headbuf, sizeof(headbuf), stdin) == NULL) - break; - if (headbuf[0] == '.') { - if (headbuf[1] == 'S' && headbuf[2] == 'h') - break; - } - if (i != 0) - strlcat(linbuf, " ", sizeof(linbuf)); - i++; - trimln(headbuf); - for (loc = strchr(headbuf, ' '); loc; loc = strchr(loc, ' ')) - if (loc[1] == ',') - memmove(loc, &loc[1], strlen(&loc[1])+1); - else - loc++; - if (headbuf[0] != '.') { - strlcat(linbuf, headbuf, sizeof(linbuf)); - } else { - /* - * Get rid of quotes in macros. - */ - for (loc = strchr(&headbuf[4], '"'); loc; ) { - memmove(loc, &loc[1], strlen(&loc[1])+1); - loc = strchr(loc, '"'); - } - /* - * Handle cross references - */ - if (headbuf[1] == 'X' && headbuf[2] == 'r') { - for (loc = &headbuf[4]; *loc != ' '; loc++) - continue; - loc[0] = '('; - loc[2] = ')'; - loc[3] = '\0'; - } - - /* - * Put dash between names and description. - * Put section and dash between names and description. - */ - if (headbuf[1] == 'N' && headbuf[2] == 'd') { - if ((t = strchr(name, '.')) != NULL) { - char *str; - - if (asprintf(&str, "(%s)", t+1) == -1) - return; - strlcat(linbuf, str, sizeof(linbuf)); - free(str); - } - strlcat(linbuf, "- ", sizeof(linbuf)); - } - /* - * Skip over macro names. - */ - strlcat(linbuf, &headbuf[4], sizeof(linbuf)); - } - } - if (intro) - split(linbuf, name); - else - printf("%s\n", linbuf); -} - -void -trimln(char *cp) -{ - - while (*cp) - cp++; - if (*--cp == '\n') - *cp = 0; -} - -void -doname(char *name) -{ - char *dp = name, *ep; - -again: - while (*dp && *dp != '.') - putchar(*dp++); - if (*dp) - for (ep = dp+1; *ep; ep++) - if (*ep == '.') { - putchar(*dp++); - goto again; - } - putchar('('); - if (*dp) - dp++; - while (*dp) - putchar(*dp++); - putchar(')'); - putchar(' '); -} - -void -split(char *line, char *name) -{ - char *cp, *dp; - char *sp, *sep; - - cp = strchr(line, '-'); - if (cp == 0) - return; - sp = cp + 1; - for (--cp; *cp == ' ' || *cp == '\t' || *cp == '\\'; cp--) - ; - *++cp = '\0'; - while (*sp && (*sp == ' ' || *sp == '\t')) - sp++; - for (sep = "", dp = line; dp && *dp; dp = cp, sep = "\n") { - cp = strchr(dp, ','); - if (cp) { - char *tp; - - for (tp = cp - 1; *tp == ' ' || *tp == '\t'; tp--) - ; - *++tp = '\0'; - for (++cp; *cp == ' ' || *cp == '\t'; cp++) - ; - } - printf("%s%s\t", sep, dp); - dorefname(name); - printf("\t%s", sp); - } -} - -void -dorefname(char *name) -{ - char *dp = name, *ep; - -again: - while (*dp && *dp != '.') - putchar(*dp++); - if (*dp) - for (ep = dp+1; *ep; ep++) - if (*ep == '.') { - putchar(*dp++); - goto again; - } - putchar('.'); - if (*dp) - dp++; - while (*dp) - putchar(*dp++); -} - -void -usage(void) -{ - extern char *__progname; - (void)fprintf(stderr, "usage: %s [-itw] file ...\n", __progname); - exit(1); -} |