Sync to 4.4BSD-Lite2
This commit is contained in:
parent
eec1ea6c3f
commit
83c7e41542
|
@ -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
|
||||
|
|
|
@ -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");
|
||||
|
|
Loading…
Reference in New Issue