xref: /csrg-svn/usr.bin/pascal/USD.doc/csfix.c (revision 27789)
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