1: /*
2: * Copyright (c) 1980 Regents of the University of California.
3: * All rights reserved. The Berkeley software License Agreement
4: * specifies the terms and conditions for redistribution.
5: */
6:
7: #ifndef lint
8: static char sccsid[] = "@(#)getNAME.c 5.2 (Berkeley) 10/21/85";
9: #endif not lint
10:
11: /*
12: * Get name sections from manual pages.
13: * -t for building toc
14: * -i for building intro entries
15: * other apropos database
16: */
17: #include <strings.h>
18: #include <stdio.h>
19:
20: int tocrc;
21: int intro;
22:
23: main(argc, argv)
24: int argc;
25: char *argv[];
26: {
27:
28: argc--, argv++;
29: if (!strcmp(argv[0], "-t"))
30: argc--, argv++, tocrc++;
31: if (!strcmp(argv[0], "-i"))
32: argc--, argv++, intro++;
33: while (argc > 0)
34: getfrom(*argv++), argc--;
35: exit(0);
36: }
37:
38: getfrom(name)
39: char *name;
40: {
41: char headbuf[BUFSIZ];
42: char linbuf[BUFSIZ];
43: register char *cp;
44: int i = 0;
45:
46: if (freopen(name, "r", stdin) == 0) {
47: perror(name);
48: return;
49: }
50: for (;;) {
51: if (fgets(headbuf, sizeof headbuf, stdin) == NULL)
52: return;
53: if (headbuf[0] != '.')
54: continue;
55: if (headbuf[1] == 'T' && headbuf[2] == 'H')
56: break;
57: if (headbuf[1] == 't' && headbuf[2] == 'h')
58: break;
59: }
60: for (;;) {
61: if (fgets(linbuf, sizeof linbuf, stdin) == NULL)
62: return;
63: if (linbuf[0] != '.')
64: continue;
65: if (linbuf[1] == 'S' && linbuf[2] == 'H')
66: break;
67: if (linbuf[1] == 's' && linbuf[2] == 'h')
68: break;
69: }
70: trimln(headbuf);
71: if (tocrc)
72: doname(name);
73: if (!intro)
74: printf("%s\t", headbuf);
75: for (;;) {
76: if (fgets(linbuf, sizeof linbuf, stdin) == NULL)
77: break;
78: if (linbuf[0] == '.') {
79: if (linbuf[1] == 'S' && linbuf[2] == 'H')
80: break;
81: if (linbuf[1] == 's' && linbuf[2] == 'h')
82: break;
83: }
84: trimln(linbuf);
85: if (intro) {
86: split(linbuf, name);
87: continue;
88: }
89: if (i != 0)
90: printf(" ");
91: i++;
92: printf("%s", linbuf);
93: }
94: printf("\n");
95: }
96:
97: trimln(cp)
98: register char *cp;
99: {
100:
101: while (*cp)
102: cp++;
103: if (*--cp == '\n')
104: *cp = 0;
105: }
106:
107: doname(name)
108: char *name;
109: {
110: register char *dp = name, *ep;
111:
112: again:
113: while (*dp && *dp != '.')
114: putchar(*dp++);
115: if (*dp)
116: for (ep = dp+1; *ep; ep++)
117: if (*ep == '.') {
118: putchar(*dp++);
119: goto again;
120: }
121: putchar('(');
122: if (*dp)
123: dp++;
124: while (*dp)
125: putchar (*dp++);
126: putchar(')');
127: putchar(' ');
128: }
129:
130: split(line, name)
131: char *line, *name;
132: {
133: register char *cp, *dp;
134: char *sp, *sep;
135:
136: cp = index(line, '-');
137: if (cp == 0)
138: return;
139: sp = cp + 1;
140: for (--cp; *cp == ' ' || *cp == '\t' || *cp == '\\'; cp--)
141: ;
142: *++cp = '\0';
143: while (*sp && (*sp == ' ' || *sp == '\t'))
144: sp++;
145: for (sep = "", dp = line; dp && *dp; dp = cp, sep = "\n") {
146: cp = index(dp, ',');
147: if (cp) {
148: register char *tp;
149:
150: for (tp = cp - 1; *tp == ' ' || *tp == '\t'; tp--)
151: ;
152: *++tp = '\0';
153: for (++cp; *cp == ' ' || *cp == '\t'; cp++)
154: ;
155: }
156: printf("%s%s\t", sep, dp);
157: dorefname(name);
158: printf("\t%s", sp);
159: }
160: }
161:
162: dorefname(name)
163: char *name;
164: {
165: register char *dp = name, *ep;
166:
167: again:
168: while (*dp && *dp != '.')
169: putchar(*dp++);
170: if (*dp)
171: for (ep = dp+1; *ep; ep++)
172: if (*ep == '.') {
173: putchar(*dp++);
174: goto again;
175: }
176: putchar('.');
177: if (*dp)
178: dp++;
179: while (*dp)
180: putchar (*dp++);
181: }
Defined functions
main
defined in line
23;
never used
Defined variables
intro
defined in line
21; used 3 times
sccsid
defined in line
8;
never used
tocrc
defined in line
20; used 2 times