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