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