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