Annotation of 43BSDReno/share/doc/ps1/04.pascal/csfix.c, revision 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: char copyright[] =
        !             9: "@(#) Copyright (c) 1980 Regents of the University of California.\n\
        !            10:  All rights reserved.\n";
        !            11: #endif not lint
        !            12: 
        !            13: #ifndef lint
        !            14: static char sccsid[] = "@(#)csfix.c    6.2 (Berkeley) 5/7/86";
        !            15: #endif not lint
        !            16: 
        !            17: #include <stdio.h>
        !            18: /*
        !            19:  * csfix - fix constant spacing for error message flags in troff
        !            20:  *
        !            21:  * Bill Joy UCB September 11, 1977
        !            22:  *
        !            23:  * This would be better written in snobol!
        !            24:  *
        !            25:  * Normally fixes error flags in a pi listing
        !            26:  * Optional - causes fixing of '---' and initial blank widthin a pxp profile.
        !            27:  */
        !            28: 
        !            29: char   flag, dflag;
        !            30: 
        !            31: main(argc, argv)
        !            32:        int argc;
        !            33:        char *argv[];
        !            34: {
        !            35: 
        !            36:        argc--, argv++;
        !            37:        if (argc > 0 && argv[0][0] == '-' && argv[0][1] == 'd')
        !            38:                dflag++, argc--, argv++;
        !            39:        if (argc > 0 && argv[0][0] == '-')
        !            40:                flag++, argc--, argv++;
        !            41:        if (argc != 0) {
        !            42:                write(2, "Usage: csfix\n", 13);
        !            43:                exit(1);
        !            44:        }
        !            45:        while (getline()) {
        !            46:                if (errline()) {
        !            47:                        flag ? fixpxp() : reformat();
        !            48:                        continue;
        !            49:                }
        !            50:                if (flag) {
        !            51:                        fixdigits();
        !            52:                        continue;
        !            53:                }
        !            54:                if (spwarn())
        !            55:                        continue;
        !            56:                if (nontriv())
        !            57:                        save();
        !            58:                if (dflag)
        !            59:                        fixdigits();
        !            60:                else
        !            61:                        putline();
        !            62:        }
        !            63:        exit(0);
        !            64: }
        !            65: 
        !            66: char   line[160], flagee[160], *digitty();
        !            67: 
        !            68: getline()
        !            69: {
        !            70:        register char *cp, c;
        !            71: 
        !            72:        for (cp = line, c = getchar(); c != '\n' && c != EOF; c = getchar())
        !            73:                *cp++ = c;
        !            74:        if (c == EOF)
        !            75:                return (0);
        !            76:        *cp = 0;
        !            77:        return (1);
        !            78: }
        !            79: 
        !            80: errline()
        !            81: {
        !            82:        register int i;
        !            83:        register char *cp;
        !            84: 
        !            85:        for (cp = line; cp[0] && cp[1] && cp[2]; cp++)
        !            86:                if (cp[0] == '-' && cp[1] == '-' && cp[2] == '-')
        !            87:                        return (1);
        !            88:        return (0);
        !            89: }
        !            90: 
        !            91: reformat()
        !            92: {
        !            93:        register char *cp, c, *tail;
        !            94: 
        !            95:        printf("%2.2s", line);
        !            96:        if (line[0] != 'w')
        !            97:                printf("\\l'\\w`w `u-\\w`%2.2s`u '", line);
        !            98:        for (cp = line; *cp != 0 && *cp != '^'; cp++)
        !            99:                continue;
        !           100:        tail = cp + 1;
        !           101:        if (cp[-1] == '\b' && cp[-2] == '|')
        !           102:                cp -= 2;
        !           103:        c = flagee[cp - line];
        !           104:        flagee[cp - line] = 0;
        !           105:        printf("\\l'\\w`%s`u-\\w`w `u\\&\\(rh'", flagee);
        !           106:        flagee[cp - line] = c;
        !           107:        if (c == '\0')
        !           108:                c = flagee[cp - line - 1];
        !           109:        printf("\\l'(\\w`%c`u-\\w`^`u)/2 '", c);
        !           110:        printf("\\(ua");
        !           111:        printf("\\l'(\\w`%c`u-\\w`^`u)/2 '", c);
        !           112:        printf("\\l'\\w`---`u\\&\\(rh'%s\n", tail+3);
        !           113: }
        !           114: 
        !           115: nontriv()
        !           116: {
        !           117: 
        !           118:        switch (line[0]) {
        !           119:                case 'E':
        !           120:                case 'e':
        !           121:                case 'w':
        !           122:                case 's':
        !           123:                case 0:
        !           124:                        return (0);
        !           125:        }
        !           126:        return (1);
        !           127: }
        !           128: 
        !           129: save()
        !           130: {
        !           131: 
        !           132:        strcpy(flagee, line);
        !           133: }
        !           134: 
        !           135: putline()
        !           136: {
        !           137: 
        !           138:        printf("%s\n", flag ? digitty(0) : line);
        !           139: }
        !           140: 
        !           141: spwarn()
        !           142: {
        !           143: 
        !           144:        if (line[0] != ' ' || line[1] != ' ' || line[2] != 'w')
        !           145:                return (0);
        !           146:        printf("  \\l'(\\w`E`u-\\w`w`u)/2 'w\\l'(\\w`E`u-\\w`w`u)/2 '");
        !           147:        printf(&line[3]);
        !           148:        printf("\n");
        !           149:        return (1);
        !           150: }
        !           151: 
        !           152: fixpxp()
        !           153: {
        !           154:        register char *cp;
        !           155: 
        !           156:        for (cp = line; *cp != '-'; cp++)
        !           157:                continue;
        !           158:        *cp = 0;
        !           159:        printf("%s\\l'\\w`\\0\\0\\0\\0`u-\\w`.`u\\&\\(rh'%s\n", digitty(1), cp + 3);
        !           160: }
        !           161: 
        !           162: char *
        !           163: digitty(yup)
        !           164:        char yup;
        !           165: {
        !           166:        register char *cp, *dp, *lp;
        !           167: 
        !           168:        for (lp = line; *lp && *lp != '|'; lp++)
        !           169:                continue;
        !           170:        if (yup == 0 && !*lp)
        !           171:                return (line);
        !           172:        for (cp = line, dp = flagee; cp < lp; cp++)
        !           173:                if (*cp == ' ')
        !           174:                        *dp++ = '\\', *dp++ = '0';
        !           175:                else
        !           176:                        *dp++ = *cp;
        !           177:        strcpy(dp, cp);
        !           178:        return (flagee);
        !           179: }
        !           180: 
        !           181: fixdigits()
        !           182: {
        !           183:        register char *cp, c;
        !           184: 
        !           185:        for (cp = line; *cp == ' ' || *cp >= '0' && *cp <= '9'; cp++)
        !           186:                continue;
        !           187:        c = *cp, *cp = 0;
        !           188:        digitty(1);
        !           189:        *cp = c;
        !           190:        printf("%s%s\n", flagee, cp);
        !           191: }

unix.superglobalmegacorp.com

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