1*48150Sbostic /*- 2*48150Sbostic * Copyright (c) 1980 The Regents of the University of California. 3*48150Sbostic * All rights reserved. 4*48150Sbostic * 5*48150Sbostic * %sccs.include.redist.c% 627789Smckusick */ 727789Smckusick 827789Smckusick #ifndef lint 927789Smckusick char copyright[] = 10*48150Sbostic "@(#) Copyright (c) 1980 The Regents of the University of California.\n\ 1127789Smckusick All rights reserved.\n"; 12*48150Sbostic #endif /* not lint */ 1327789Smckusick 1427789Smckusick #ifndef lint 15*48150Sbostic static char sccsid[] = "@(#)csfix.c 6.3 (Berkeley) 04/17/91"; 16*48150Sbostic #endif /* not lint */ 1727789Smckusick 1827789Smckusick #include <stdio.h> 1927789Smckusick /* 2027789Smckusick * csfix - fix constant spacing for error message flags in troff 2127789Smckusick * 2227789Smckusick * Bill Joy UCB September 11, 1977 2327789Smckusick * 2427789Smckusick * This would be better written in snobol! 2527789Smckusick * 2627789Smckusick * Normally fixes error flags in a pi listing 2727789Smckusick * Optional - causes fixing of '---' and initial blank widthin a pxp profile. 2827789Smckusick */ 2927789Smckusick 3027789Smckusick char flag, dflag; 3127789Smckusick 3227789Smckusick main(argc, argv) 3327789Smckusick int argc; 3427789Smckusick char *argv[]; 3527789Smckusick { 3627789Smckusick 3727789Smckusick argc--, argv++; 3827789Smckusick if (argc > 0 && argv[0][0] == '-' && argv[0][1] == 'd') 3927789Smckusick dflag++, argc--, argv++; 4027789Smckusick if (argc > 0 && argv[0][0] == '-') 4127789Smckusick flag++, argc--, argv++; 4227789Smckusick if (argc != 0) { 4327789Smckusick write(2, "Usage: csfix\n", 13); 4427789Smckusick exit(1); 4527789Smckusick } 4627789Smckusick while (getline()) { 4727789Smckusick if (errline()) { 4827789Smckusick flag ? fixpxp() : reformat(); 4927789Smckusick continue; 5027789Smckusick } 5127789Smckusick if (flag) { 5227789Smckusick fixdigits(); 5327789Smckusick continue; 5427789Smckusick } 5527789Smckusick if (spwarn()) 5627789Smckusick continue; 5727789Smckusick if (nontriv()) 5827789Smckusick save(); 5927789Smckusick if (dflag) 6027789Smckusick fixdigits(); 6127789Smckusick else 6227789Smckusick putline(); 6327789Smckusick } 6427789Smckusick exit(0); 6527789Smckusick } 6627789Smckusick 6727791Smckusick char line[160], flagee[160], *digitty(); 6827789Smckusick 6927789Smckusick getline() 7027789Smckusick { 7127789Smckusick register char *cp, c; 7227789Smckusick 7327789Smckusick for (cp = line, c = getchar(); c != '\n' && c != EOF; c = getchar()) 7427789Smckusick *cp++ = c; 7527789Smckusick if (c == EOF) 7627789Smckusick return (0); 7727789Smckusick *cp = 0; 7827789Smckusick return (1); 7927789Smckusick } 8027789Smckusick 8127789Smckusick errline() 8227789Smckusick { 8327789Smckusick register int i; 8427789Smckusick register char *cp; 8527789Smckusick 8627789Smckusick for (cp = line; cp[0] && cp[1] && cp[2]; cp++) 8727789Smckusick if (cp[0] == '-' && cp[1] == '-' && cp[2] == '-') 8827789Smckusick return (1); 8927789Smckusick return (0); 9027789Smckusick } 9127789Smckusick 9227789Smckusick reformat() 9327789Smckusick { 9427789Smckusick register char *cp, c, *tail; 9527789Smckusick 9627789Smckusick printf("%2.2s", line); 9727789Smckusick if (line[0] != 'w') 9827789Smckusick printf("\\l'\\w`w `u-\\w`%2.2s`u '", line); 9927789Smckusick for (cp = line; *cp != 0 && *cp != '^'; cp++) 10027789Smckusick continue; 10127789Smckusick tail = cp + 1; 10227789Smckusick if (cp[-1] == '\b' && cp[-2] == '|') 10327791Smckusick cp -= 2; 10427789Smckusick c = flagee[cp - line]; 10527789Smckusick flagee[cp - line] = 0; 10627789Smckusick printf("\\l'\\w`%s`u-\\w`w `u\\&\\(rh'", flagee); 10727789Smckusick flagee[cp - line] = c; 10827798Smckusick if (c == '\0') 10927798Smckusick c = flagee[cp - line - 1]; 11027789Smckusick printf("\\l'(\\w`%c`u-\\w`^`u)/2 '", c); 11127789Smckusick printf("\\(ua"); 11227789Smckusick printf("\\l'(\\w`%c`u-\\w`^`u)/2 '", c); 11327789Smckusick printf("\\l'\\w`---`u\\&\\(rh'%s\n", tail+3); 11427789Smckusick } 11527789Smckusick 11627789Smckusick nontriv() 11727789Smckusick { 11827789Smckusick 11927789Smckusick switch (line[0]) { 12027789Smckusick case 'E': 12127789Smckusick case 'e': 12227789Smckusick case 'w': 12327789Smckusick case 's': 12427789Smckusick case 0: 12527789Smckusick return (0); 12627789Smckusick } 12727789Smckusick return (1); 12827789Smckusick } 12927789Smckusick 13027789Smckusick save() 13127789Smckusick { 13227789Smckusick 13327789Smckusick strcpy(flagee, line); 13427789Smckusick } 13527789Smckusick 13627789Smckusick putline() 13727789Smckusick { 13827789Smckusick 13927789Smckusick printf("%s\n", flag ? digitty(0) : line); 14027789Smckusick } 14127789Smckusick 14227789Smckusick spwarn() 14327789Smckusick { 14427789Smckusick 14527789Smckusick if (line[0] != ' ' || line[1] != ' ' || line[2] != 'w') 14627789Smckusick return (0); 14727789Smckusick printf(" \\l'(\\w`E`u-\\w`w`u)/2 'w\\l'(\\w`E`u-\\w`w`u)/2 '"); 14827789Smckusick printf(&line[3]); 14927789Smckusick printf("\n"); 15027789Smckusick return (1); 15127789Smckusick } 15227789Smckusick 15327789Smckusick fixpxp() 15427789Smckusick { 15527789Smckusick register char *cp; 15627789Smckusick 15727789Smckusick for (cp = line; *cp != '-'; cp++) 15827789Smckusick continue; 15927789Smckusick *cp = 0; 16027789Smckusick printf("%s\\l'\\w`\\0\\0\\0\\0`u-\\w`.`u\\&\\(rh'%s\n", digitty(1), cp + 3); 16127789Smckusick } 16227789Smckusick 16327791Smckusick char * 16427789Smckusick digitty(yup) 16527789Smckusick char yup; 16627789Smckusick { 16727789Smckusick register char *cp, *dp, *lp; 16827789Smckusick 16927789Smckusick for (lp = line; *lp && *lp != '|'; lp++) 17027789Smckusick continue; 17127789Smckusick if (yup == 0 && !*lp) 17227789Smckusick return (line); 17327789Smckusick for (cp = line, dp = flagee; cp < lp; cp++) 17427789Smckusick if (*cp == ' ') 17527789Smckusick *dp++ = '\\', *dp++ = '0'; 17627789Smckusick else 17727789Smckusick *dp++ = *cp; 17827789Smckusick strcpy(dp, cp); 17927789Smckusick return (flagee); 18027789Smckusick } 18127789Smckusick 18227789Smckusick fixdigits() 18327789Smckusick { 18427789Smckusick register char *cp, c; 18527789Smckusick 18627789Smckusick for (cp = line; *cp == ' ' || *cp >= '0' && *cp <= '9'; cp++) 18727789Smckusick continue; 18827789Smckusick c = *cp, *cp = 0; 18927789Smckusick digitty(1); 19027789Smckusick *cp = c; 19127789Smckusick printf("%s%s\n", flagee, cp); 19227789Smckusick } 193