summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTodd C. Miller <millert@cvs.openbsd.org>1997-11-13 04:15:28 +0000
committerTodd C. Miller <millert@cvs.openbsd.org>1997-11-13 04:15:28 +0000
commit373e68caa1478a8393ed8bcca3fccd67dd69d98c (patch)
treede027230a2508da7402ca6c50573356d5fe46e59
parentdd23b68005df91269d7997a47d250602d06cd57a (diff)
Changes from NetBSD (mrg):
add a manual for getNAME. also, change the `default' output to be in a form much more useful for an apropos(1) database. this will be used by makewhatis(1) to generate the whatis.db file's now... OpenBSD changes: use basename(3) instead of doing a half-hearted job inline. use strncat(3) because I am anal.
-rw-r--r--libexec/getNAME/Makefile6
-rw-r--r--libexec/getNAME/getNAME.890
-rw-r--r--libexec/getNAME/getNAME.c82
3 files changed, 143 insertions, 35 deletions
diff --git a/libexec/getNAME/Makefile b/libexec/getNAME/Makefile
index 5f93e6b1886..a85e02a7041 100644
--- a/libexec/getNAME/Makefile
+++ b/libexec/getNAME/Makefile
@@ -1,7 +1,7 @@
-# from: @(#)Makefile 5.3 (Berkeley) 5/11/90
-# $Id: Makefile,v 1.1 1995/10/18 08:43:16 deraadt Exp $
+# $OpenBSD: Makefile,v 1.2 1997/11/13 04:15:27 millert Exp $
+# from: @(#)Makefile 8.1 (Berkeley) 6/4/93
PROG= getNAME
-NOMAN= noman
+MAN= getNAME.8
.include <bsd.prog.mk>
diff --git a/libexec/getNAME/getNAME.8 b/libexec/getNAME/getNAME.8
new file mode 100644
index 00000000000..04e4c69d3e8
--- /dev/null
+++ b/libexec/getNAME/getNAME.8
@@ -0,0 +1,90 @@
+.\" $NetBSD: getNAME.8,v 1.2.2.1 1997/11/10 19:54:39 thorpej Exp $
+.\"
+.\" Copyright (c) 1997 Matthew R. Green
+.\" 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. The name of the author may not be used to endorse or promote products
+.\" derived from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+.\"
+.Dd October 31, 1997
+.Dt GETNAME 8
+.Os NetBSD
+.Sh NAME
+.Nm getNAME
+.Nd get NAME sections from manual source for whatis/apropos data base
+.Sh SYNOPSIS
+.Nm ""
+.Op Fl itw
+.Ar path Op Ar path ...
+.Sh DESCRIPTION
+The
+.Nm
+program looks inside manual sources to find the name and of the manual.
+It can be used to create a table of contents, report the style of manual,
+or to create an introduction manual. By default,
+.Nm
+returns data for use in an
+.Xr apropos 1
+database.
+.Nm
+is designed to be called from
+.Xr makewhatis 8
+or other manual grovelling tools, not to be used directly.
+.Sh OPTIONS
+The following options are available:
+.Bl -tag -width Ds
+.It Fl i
+The
+.Fl i
+option returns information useful in creating an introduction manual. See
+.Xr intro 1 ,
+.Xr intro 2 ,
+etc. for examples.
+.It Fl t
+The
+.Fl t
+option returns information useful for creating a table of contents.
+.It Fl w
+The
+.Fl w
+option determines whether traditional man
+.Pq Dq OLD ,
+new mandoc
+.Pq Dq NEW ,
+or some unknown
+.Pq Dq UNKNOWN
+format exists.
+.El
+.Sh HISTORY
+The
+.Nm
+command first appeared
+.Bx 2.0
+.Sh BUGS
+It would be nice if
+.Nm
+could deal with preformatted manuals.
+.Sh SEE ALSO
+.Xr man 1 ,
+.Xr catman 8 ,
+.Xr makewhatis 8
diff --git a/libexec/getNAME/getNAME.c b/libexec/getNAME/getNAME.c
index 952f8f15c20..d0562a25992 100644
--- a/libexec/getNAME/getNAME.c
+++ b/libexec/getNAME/getNAME.c
@@ -1,4 +1,5 @@
-/* $OpenBSD: getNAME.c,v 1.4 1997/11/13 03:56:53 millert Exp $ */
+/* $OpenBSD: getNAME.c,v 1.5 1997/11/13 04:15:25 millert Exp $ */
+/* $NetBSD: getNAME.c,v 1.7.2.1 1997/11/10 19:54:46 thorpej Exp $ */
/*-
* Copyright (c) 1980, 1993
@@ -43,7 +44,7 @@ static char copyright[] =
#if 0
static char sccsid[] = "@(#)getNAME.c 8.1 (Berkeley) 6/30/93";
#else
-static char rcsid[] = "$OpenBSD: getNAME.c,v 1.4 1997/11/13 03:56:53 millert Exp $";
+static char rcsid[] = "$OpenBSD: getNAME.c,v 1.5 1997/11/13 04:15:25 millert Exp $";
#endif
#endif /* not lint */
@@ -51,11 +52,13 @@ static char rcsid[] = "$OpenBSD: getNAME.c,v 1.4 1997/11/13 03:56:53 millert Exp
* 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;
@@ -67,17 +70,17 @@ void getfrom __P((char *));
void split __P((char *, char *));
void trimln __P((char *));
void usage __P((void));
+int main __P((int, char *[]));
int
main(argc, argv)
int argc;
char *argv[];
{
- extern int optind;
int ch;
while ((ch = getopt(argc, argv, "itw")) != -1)
- switch(ch) {
+ switch (ch) {
case 'i':
intro = 1;
break;
@@ -107,20 +110,18 @@ getfrom(pathname)
char *pathname;
{
int i = 0;
- char *name, *loc;
+ char *name, *loc, *s, *t;
char headbuf[BUFSIZ];
char linbuf[BUFSIZ];
+ char savebuf[BUFSIZ];
if (freopen(pathname, "r", stdin) == 0) {
perror(pathname);
return;
}
- if (name = strrchr(pathname, '/'))
- name++;
- else
- name = pathname;
+ name = basename(pathname);
for (;;) {
- if (fgets(headbuf, sizeof headbuf, stdin) == NULL) {
+ if (fgets(headbuf, sizeof(headbuf), stdin) == NULL) {
if (typeflag)
printf("%-60s UNKNOWN\n", pathname);
return;
@@ -130,20 +131,15 @@ getfrom(pathname)
if ((headbuf[1] == 'T' && headbuf[2] == 'H') ||
(headbuf[1] == 't' && headbuf[2] == 'h'))
break;
- if (headbuf[1] == 'D' && headbuf[2] == 't') {
- if (typeflag) {
- printf("%-60s NEW\n", pathname);
- return;
- }
+ 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)
+ if (fgets(linbuf, sizeof(linbuf), stdin) == NULL)
return;
if (linbuf[0] != '.')
continue;
@@ -155,11 +151,9 @@ getfrom(pathname)
trimln(headbuf);
if (tocrc)
doname(name);
- if (!tocrc && !intro)
- printf("%s\t", headbuf);
linbuf[0] = '\0';
for (;;) {
- if (fgets(headbuf, sizeof headbuf, stdin) == NULL)
+ if (fgets(headbuf, sizeof(headbuf), stdin) == NULL)
break;
if (headbuf[0] == '.') {
if (headbuf[1] == 'S' && headbuf[2] == 'H')
@@ -168,10 +162,24 @@ getfrom(pathname)
break;
}
if (i != 0)
- strcat(linbuf, " ");
+ strncat(linbuf, " ", sizeof(linbuf) - 1);
i++;
trimln(headbuf);
- strcat(linbuf, headbuf);
+ strncat(linbuf, headbuf, sizeof(linbuf) - 1);
+ /* change the \- into (N) - */
+ if ((s = strstr(linbuf, "\\-")) != NULL) {
+ strcpy(savebuf, s+1);
+ if ((t = strchr(name, '.')) != NULL) {
+ t++;
+ *s++ = '(';
+ while (*t)
+ *s++ = *t++;
+ *s++ = ')';
+ *s++ = ' ';
+ *s++ = '\0';
+ }
+ strncat(linbuf, savebuf, sizeof(linbuf) - strlen(savebuf) - 1);
+ }
}
if (intro)
split(linbuf, name);
@@ -180,8 +188,12 @@ getfrom(pathname)
return;
newman:
+ if (typeflag) {
+ printf("%-60s NEW\n", pathname);
+ return;
+ }
for (;;) {
- if (fgets(linbuf, sizeof linbuf, stdin) == NULL)
+ if (fgets(linbuf, sizeof(linbuf), stdin) == NULL)
return;
if (linbuf[0] != '.')
continue;
@@ -191,18 +203,16 @@ newman:
trimln(headbuf);
if (tocrc)
doname(name);
- if (!tocrc && !intro)
- printf(".TH%s\t", &headbuf[3]);
linbuf[0] = '\0';
for (;;) {
- if (fgets(headbuf, sizeof headbuf, stdin) == NULL)
+ if (fgets(headbuf, sizeof(headbuf), stdin) == NULL)
break;
if (headbuf[0] == '.') {
if (headbuf[1] == 'S' && headbuf[2] == 'h')
break;
}
if (i != 0)
- strcat(linbuf, " ");
+ strncat(linbuf, " ", sizeof(linbuf) - 1);
i++;
trimln(headbuf);
for (loc = strchr(headbuf, ' '); loc; loc = strchr(loc, ' '))
@@ -211,7 +221,7 @@ newman:
else
loc++;
if (headbuf[0] != '.') {
- strcat(linbuf, headbuf);
+ strncat(linbuf, headbuf, sizeof(linbuf) - 1);
} else {
/*
* Get rid of quotes in macros.
@@ -230,15 +240,23 @@ newman:
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')
- strcat(linbuf, "\\- ");
+ if (headbuf[1] == 'N' && headbuf[2] == 'd') {
+ if ((t = strchr(name, '.')) != NULL) {
+ strncat(linbuf, "(", sizeof(linbuf)-1);
+ strncat(linbuf, t+1, sizeof(linbuf)-1);
+ strncat(linbuf, ") ", sizeof(linbuf)-1);
+ }
+ strncat(linbuf, "- ", sizeof(linbuf) - 1);
+ }
/*
* Skip over macro names.
*/
- strcat(linbuf, &headbuf[4]);
+ strncat(linbuf, &headbuf[4], sizeof(linbuf) - 1);
}
}
if (intro)
@@ -340,6 +358,6 @@ again:
void
usage()
{
- (void)fprintf(stderr, "usage: getNAME [-it] file ...\n");
+ (void)fprintf(stderr, "usage: getNAME [-itw] file ...\n");
exit(1);
}