148150Sbostic /*-
2*62764Sbostic * Copyright (c) 1980, 1993
3*62764Sbostic * The Regents of the University of California. All rights reserved.
448150Sbostic *
548150Sbostic * %sccs.include.redist.c%
627789Smckusick */
727789Smckusick
827789Smckusick #ifndef lint
9*62764Sbostic static char copyright[] =
10*62764Sbostic "@(#) Copyright (c) 1980, 1993\n\
11*62764Sbostic The Regents of the University of California. All rights reserved.\n";
1248150Sbostic #endif /* not lint */
1327789Smckusick
1427789Smckusick #ifndef lint
15*62764Sbostic static char sccsid[] = "@(#)csfix.c 8.1 (Berkeley) 06/08/93";
1648150Sbostic #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
main(argc,argv)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
getline()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
errline()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
reformat()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
nontriv()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
save()13027789Smckusick save()
13127789Smckusick {
13227789Smckusick
13327789Smckusick strcpy(flagee, line);
13427789Smckusick }
13527789Smckusick
putline()13627789Smckusick putline()
13727789Smckusick {
13827789Smckusick
13927789Smckusick printf("%s\n", flag ? digitty(0) : line);
14027789Smckusick }
14127789Smckusick
spwarn()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
fixpxp()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 *
digitty(yup)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
fixdigits()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