Annotation of 43BSDReno/libexec/getNAME/getNAME.c, revision 1.1.1.1

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.3 (Berkeley) 5/15/90";
                      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 <stdio.h>
                     18: #include <string.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: }

unix.superglobalmegacorp.com

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