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