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/getNAME.c,v 1.3 2003/11/14 04: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");