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