Annotation of 42BSD/usr.lib/getNAME.c, revision 1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.