|
|
1.1 ! root 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.