diff options
author | Todd C. Miller <millert@cvs.openbsd.org> | 1997-11-13 04:15:28 +0000 |
---|---|---|
committer | Todd C. Miller <millert@cvs.openbsd.org> | 1997-11-13 04:15:28 +0000 |
commit | 373e68caa1478a8393ed8bcca3fccd67dd69d98c (patch) | |
tree | de027230a2508da7402ca6c50573356d5fe46e59 | |
parent | dd23b68005df91269d7997a47d250602d06cd57a (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/Makefile | 6 | ||||
-rw-r--r-- | libexec/getNAME/getNAME.8 | 90 | ||||
-rw-r--r-- | libexec/getNAME/getNAME.c | 82 |
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); } |