Sync to 4.4BSD-Lite2

This commit is contained in:
tls 1997-04-29 20:39:10 +00:00
parent eec1ea6c3f
commit 83c7e41542
2 changed files with 141 additions and 34 deletions

View File

@ -1,5 +1,5 @@
# from: @(#)Makefile 5.3 (Berkeley) 5/11/90
# $Id: Makefile,v 1.2 1993/08/01 05:39:22 mycroft Exp $
# from: @(#)Makefile 8.1 (Berkeley) 6/4/93
# $Id: Makefile,v 1.3 1997/04/29 20:39:10 tls Exp $
PROG= getNAME
NOMAN= noman

View File

@ -1,6 +1,6 @@
/*-
* Copyright (c) 1980 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 1980, 1993
* 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
@ -32,14 +32,16 @@
*/
#ifndef lint
char copyright[] =
"@(#) Copyright (c) 1980 The Regents of the University of California.\n\
All rights reserved.\n";
static char copyright[] =
"@(#) Copyright (c) 1980, 1993\n\
The Regents of the University of California. 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.2 1993/08/01 18:30:33 mycroft Exp $";
static char rcsid[] = "$Id: getNAME.c,v 1.3 1997/04/29 20:39:11 tls Exp $";
#if 0
static char sccsid[] = "@(#)getNAME.c 8.1 (Berkeley) 6/30/93";
#endif
#endif /* not lint */
/*
@ -49,19 +51,29 @@ static char rcsid[] = "$Id: getNAME.c,v 1.2 1993/08/01 18:30:33 mycroft Exp $";
* other apropos database
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int tocrc;
int intro;
int typeflag;
void doname __P((char *));
void dorefname __P((char *));
void getfrom __P((char *));
void split __P((char *, char *));
void trimln __P((char *));
void usage __P((void));
int
main(argc, argv)
int argc;
char **argv;
char *argv[];
{
extern int optind;
int ch;
while ((ch = getopt(argc, argv, "it")) != EOF)
while ((ch = getopt(argc, argv, "itw")) != EOF)
switch(ch) {
case 'i':
intro = 1;
@ -69,6 +81,9 @@ main(argc, argv)
case 't':
tocrc = 1;
break;
case 'w':
typeflag = 1;
break;
case '?':
default:
usage();
@ -84,26 +99,45 @@ main(argc, argv)
exit(0);
}
getfrom(name)
char *name;
void
getfrom(pathname)
char *pathname;
{
int i = 0;
char *name, *loc;
char headbuf[BUFSIZ];
char linbuf[BUFSIZ];
if (freopen(name, "r", stdin) == 0) {
perror(name);
if (freopen(pathname, "r", stdin) == 0) {
perror(pathname);
return;
}
if (name = strrchr(pathname, '/'))
name++;
else
name = pathname;
for (;;) {
if (fgets(headbuf, sizeof headbuf, stdin) == NULL)
if (fgets(headbuf, sizeof headbuf, stdin) == NULL) {
if (typeflag)
printf("%-60s UNKNOWN\n", pathname);
return;
}
if (headbuf[0] != '.')
continue;
if (headbuf[1] == 'T' && headbuf[2] == 'H')
break;
if (headbuf[1] == 't' && headbuf[2] == 'h')
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;
}
goto newman;
}
}
if (typeflag) {
printf("%-60s OLD\n", pathname);
return;
}
for (;;) {
if (fgets(linbuf, sizeof linbuf, stdin) == NULL)
@ -118,30 +152,99 @@ getfrom(name)
trimln(headbuf);
if (tocrc)
doname(name);
if (!intro)
if (!tocrc && !intro)
printf("%s\t", headbuf);
linbuf[0] = '\0';
for (;;) {
if (fgets(linbuf, sizeof linbuf, stdin) == NULL)
if (fgets(headbuf, sizeof headbuf, stdin) == NULL)
break;
if (linbuf[0] == '.') {
if (linbuf[1] == 'S' && linbuf[2] == 'H')
if (headbuf[0] == '.') {
if (headbuf[1] == 'S' && headbuf[2] == 'H')
break;
if (linbuf[1] == 's' && linbuf[2] == 'h')
if (headbuf[1] == 's' && headbuf[2] == 'h')
break;
}
trimln(linbuf);
if (intro) {
split(linbuf, name);
continue;
}
if (i != 0)
printf(" ");
strcat(linbuf, " ");
i++;
printf("%s", linbuf);
trimln(headbuf);
strcat(linbuf, headbuf);
}
printf("\n");
if (intro)
split(linbuf, name);
else
printf("%s\n", linbuf);
return;
newman:
for (;;) {
if (fgets(linbuf, sizeof linbuf, stdin) == NULL)
return;
if (linbuf[0] != '.')
continue;
if (linbuf[1] == 'S' && linbuf[2] == 'h')
break;
}
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)
break;
if (headbuf[0] == '.') {
if (headbuf[1] == 'S' && headbuf[2] == 'h')
break;
}
if (i != 0)
strcat(linbuf, " ");
i++;
trimln(headbuf);
for (loc = strchr(headbuf, ' '); loc; loc = strchr(loc, ' '))
if (loc[1] == ',')
strcpy(loc, &loc[1]);
else
loc++;
if (headbuf[0] != '.') {
strcat(linbuf, headbuf);
} else {
/*
* Get rid of quotes in macros.
*/
for (loc = strchr(&headbuf[4], '"'); loc; ) {
strcpy(loc, &loc[1]);
loc = strchr(loc, '"');
}
/*
* Handle cross references
*/
if (headbuf[1] == 'X' && headbuf[2] == 'r') {
for (loc = &headbuf[4]; *loc != ' '; loc++)
continue;
loc[0] = '(';
loc[2] = ')';
loc[3] = '\0';
}
/*
* Put dash between names and description.
*/
if (headbuf[1] == 'N' && headbuf[2] == 'd')
strcat(linbuf, "\\- ");
/*
* Skip over macro names.
*/
strcat(linbuf, &headbuf[4]);
}
}
if (intro)
split(linbuf, name);
else
printf("%s\n", linbuf);
}
void
trimln(cp)
register char *cp;
{
@ -152,6 +255,7 @@ trimln(cp)
*cp = 0;
}
void
doname(name)
char *name;
{
@ -175,13 +279,14 @@ again:
putchar(' ');
}
void
split(line, name)
char *line, *name;
{
register char *cp, *dp;
char *sp, *sep;
cp = index(line, '-');
cp = strchr(line, '-');
if (cp == 0)
return;
sp = cp + 1;
@ -191,7 +296,7 @@ split(line, name)
while (*sp && (*sp == ' ' || *sp == '\t'))
sp++;
for (sep = "", dp = line; dp && *dp; dp = cp, sep = "\n") {
cp = index(dp, ',');
cp = strchr(dp, ',');
if (cp) {
register char *tp;
@ -207,6 +312,7 @@ split(line, name)
}
}
void
dorefname(name)
char *name;
{
@ -228,6 +334,7 @@ again:
putchar (*dp++);
}
void
usage()
{
(void)fprintf(stderr, "usage: getNAME [-it] file ...\n");