2 * Copyright (c) 1980, 1993
3 * The Regents of the University of California. All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software
14 * must display the following acknowledgement:
15 * This product includes software developed by the University of
16 * California, Berkeley and its contributors.
17 * 4. Neither the name of the University nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * @(#) Copyright (c) 1980, 1993 The Regents of the University of California. All rights reserved.
34 * @(#)getNAME.c 8.1 (Berkeley) 6/30/93
35 * $FreeBSD: src/libexec/getNAME/getNAME.c,v 1.7 1999/08/28 00:09:33 peter Exp $
36 * $DragonFly: src/libexec/getNAME/Attic/getNAME.c,v 1.3 2003/11/14 03:54:30 dillon Exp $
40 * Get name sections from manual pages.
42 * -i for building intro entries
43 * other apropos database
56 void dorefname (char *);
57 void getfrom (char *);
58 void split (char *, char *);
60 static void usage (void);
69 while ((ch = getopt(argc, argv, "itw")) != -1)
100 char headbuf[BUFSIZ];
103 if (freopen(pathname, "r", stdin) == 0) {
104 warn("%s", pathname);
107 if ((name = strrchr(pathname, '/')))
112 if (fgets(headbuf, sizeof headbuf, stdin) == NULL) {
114 printf("%-60s UNKNOWN\n", pathname);
117 if (headbuf[0] != '.')
119 if ((headbuf[1] == 'T' && headbuf[2] == 'H') ||
120 (headbuf[1] == 't' && headbuf[2] == 'h'))
122 if (headbuf[1] == 'D' && headbuf[2] == 't') {
124 printf("%-60s NEW\n", pathname);
131 printf("%-60s OLD\n", pathname);
135 if (fgets(linbuf, sizeof linbuf, stdin) == NULL)
137 if (linbuf[0] != '.')
139 if (linbuf[1] == 'S' && linbuf[2] == 'H')
141 if (linbuf[1] == 's' && linbuf[2] == 'h')
147 if (!tocrc && !intro)
148 printf("%s\t", headbuf);
151 if (fgets(headbuf, sizeof headbuf, stdin) == NULL)
153 if (headbuf[0] == '.') {
154 if (headbuf[1] == 'S' && headbuf[2] == 'H')
156 if (headbuf[1] == 's' && headbuf[2] == 'h')
163 strcat(linbuf, headbuf);
168 printf("%s\n", linbuf);
173 if (fgets(linbuf, sizeof linbuf, stdin) == NULL)
175 if (linbuf[0] != '.')
177 if (linbuf[1] == 'S' && linbuf[2] == 'h')
183 if (!tocrc && !intro)
184 printf(".TH%s\t", &headbuf[3]);
187 if (fgets(headbuf, sizeof headbuf, stdin) == NULL)
189 if (headbuf[0] == '.') {
190 if (headbuf[1] == 'S' && headbuf[2] == 'h')
197 for (loc = strchr(headbuf, ' '); loc; loc = strchr(loc, ' '))
199 strcpy(loc, &loc[1]);
202 if (headbuf[0] != '.') {
203 strcat(linbuf, headbuf);
206 * Get rid of quotes in macros.
208 for (loc = strchr(&headbuf[4], '"'); loc; ) {
209 strcpy(loc, &loc[1]);
210 loc = strchr(loc, '"');
213 * Handle cross references
215 if (headbuf[1] == 'X' && headbuf[2] == 'r') {
216 for (loc = &headbuf[4]; *loc != ' '; loc++)
223 * Put dash between names and description.
225 if (headbuf[1] == 'N' && headbuf[2] == 'd')
226 strcat(linbuf, "\\- ");
228 * Skip over macro names.
230 strcat(linbuf, &headbuf[4]);
236 printf("%s\n", linbuf);
254 register char *dp = name, *ep;
257 while (*dp && *dp != '.')
260 for (ep = dp+1; *ep; ep++)
278 register char *cp, *dp;
281 cp = strchr(line, '-');
285 for (--cp; *cp == ' ' || *cp == '\t' || *cp == '\\'; cp--)
288 while (*sp && (*sp == ' ' || *sp == '\t'))
290 for (sep = "", dp = line; dp && *dp; dp = cp, sep = "\n") {
291 cp = strchr(dp, ',');
295 for (tp = cp - 1; *tp == ' ' || *tp == '\t'; tp--)
298 for (++cp; *cp == ' ' || *cp == '\t'; cp++)
301 printf("%s%s\t", sep, dp);
311 register char *dp = name, *ep;
314 while (*dp && *dp != '.')
317 for (ep = dp+1; *ep; ep++)
332 (void)fprintf(stderr, "usage: getNAME [-itw] file ...\n");