summaryrefslogtreecommitdiff
path: root/libexec/getNAME/getNAME.c
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>1995-10-18 08:53:40 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>1995-10-18 08:53:40 +0000
commitd6583bb2a13f329cf0332ef2570eb8bb8fc0e39c (patch)
treeece253b876159b39c620e62b6c9b1174642e070e /libexec/getNAME/getNAME.c
initial import of NetBSD tree
Diffstat (limited to 'libexec/getNAME/getNAME.c')
-rw-r--r--libexec/getNAME/getNAME.c235
1 files changed, 235 insertions, 0 deletions
diff --git a/libexec/getNAME/getNAME.c b/libexec/getNAME/getNAME.c
new file mode 100644
index 00000000000..531b356d8b5
--- /dev/null
+++ b/libexec/getNAME/getNAME.c
@@ -0,0 +1,235 @@
+/*-
+ * Copyright (c) 1980 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. 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
+ * 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.
+ */
+
+#ifndef lint
+char copyright[] =
+"@(#) Copyright (c) 1980 The Regents of the University of California.\n\
+ All rights reserved.\n";
+#endif /* not lint */
+
+#ifndef lint
+/*static char sccsid[] = "from: @(#)getNAME.c 5.4 (Berkeley) 1/20/91";*/
+static char rcsid[] = "$Id: getNAME.c,v 1.1 1995/10/18 08:43:16 deraadt Exp $";
+#endif /* not lint */
+
+/*
+ * Get name sections from manual pages.
+ * -t for building toc
+ * -i for building intro entries
+ * other apropos database
+ */
+#include <stdio.h>
+#include <string.h>
+
+int tocrc;
+int intro;
+
+main(argc, argv)
+ int argc;
+ char **argv;
+{
+ extern int optind;
+ int ch;
+
+ while ((ch = getopt(argc, argv, "it")) != EOF)
+ switch(ch) {
+ case 'i':
+ intro = 1;
+ break;
+ case 't':
+ tocrc = 1;
+ break;
+ case '?':
+ default:
+ usage();
+ }
+ argc -= optind;
+ argv += optind;
+
+ if (!*argv)
+ usage();
+
+ for (; *argv; ++argv)
+ getfrom(*argv);
+ exit(0);
+}
+
+getfrom(name)
+ char *name;
+{
+ int i = 0;
+ char headbuf[BUFSIZ];
+ char linbuf[BUFSIZ];
+
+ if (freopen(name, "r", stdin) == 0) {
+ perror(name);
+ return;
+ }
+ for (;;) {
+ if (fgets(headbuf, sizeof headbuf, stdin) == NULL)
+ return;
+ if (headbuf[0] != '.')
+ continue;
+ if (headbuf[1] == 'T' && headbuf[2] == 'H')
+ break;
+ if (headbuf[1] == 't' && headbuf[2] == 'h')
+ break;
+ }
+ 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);
+ if (!intro)
+ printf("%s\t", headbuf);
+ for (;;) {
+ if (fgets(linbuf, sizeof linbuf, stdin) == NULL)
+ break;
+ if (linbuf[0] == '.') {
+ if (linbuf[1] == 'S' && linbuf[2] == 'H')
+ break;
+ if (linbuf[1] == 's' && linbuf[2] == 'h')
+ break;
+ }
+ trimln(linbuf);
+ if (intro) {
+ split(linbuf, name);
+ continue;
+ }
+ if (i != 0)
+ printf(" ");
+ i++;
+ printf("%s", linbuf);
+ }
+ printf("\n");
+}
+
+trimln(cp)
+ register char *cp;
+{
+
+ while (*cp)
+ cp++;
+ if (*--cp == '\n')
+ *cp = 0;
+}
+
+doname(name)
+ char *name;
+{
+ register 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(' ');
+}
+
+split(line, name)
+ char *line, *name;
+{
+ register char *cp, *dp;
+ char *sp, *sep;
+
+ cp = index(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 = index(dp, ',');
+ if (cp) {
+ register 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);
+ }
+}
+
+dorefname(name)
+ char *name;
+{
+ register 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++);
+}
+
+usage()
+{
+ (void)fprintf(stderr, "usage: getNAME [-it] file ...\n");
+ exit(1);
+}