Blame


1 5cedca1b 2004-05-15 devnull /*
2 5cedca1b 2004-05-15 devnull * troff5.c
3 fa325e9b 2020-01-10 cross *
4 5cedca1b 2004-05-15 devnull * misc processing requests
5 5cedca1b 2004-05-15 devnull */
6 5cedca1b 2004-05-15 devnull
7 5cedca1b 2004-05-15 devnull #include "tdef.h"
8 5cedca1b 2004-05-15 devnull #include "fns.h"
9 5cedca1b 2004-05-15 devnull #include "ext.h"
10 5cedca1b 2004-05-15 devnull
11 b2f08f61 2005-12-14 devnull int iflist[NIF];
12 5cedca1b 2004-05-15 devnull int ifx;
13 5cedca1b 2004-05-15 devnull int ifnum = 0; /* trying numeric expression for .if or .ie condition */
14 5cedca1b 2004-05-15 devnull
15 5cedca1b 2004-05-15 devnull void casead(void)
16 5cedca1b 2004-05-15 devnull {
17 5cedca1b 2004-05-15 devnull int i;
18 5cedca1b 2004-05-15 devnull
19 5cedca1b 2004-05-15 devnull ad = 1;
20 5cedca1b 2004-05-15 devnull /* leave admod alone */
21 5cedca1b 2004-05-15 devnull if (skip())
22 5cedca1b 2004-05-15 devnull return;
23 5cedca1b 2004-05-15 devnull switch (i = cbits(getch())) {
24 5cedca1b 2004-05-15 devnull case 'r': /* right adj, left ragged */
25 5cedca1b 2004-05-15 devnull admod = 2;
26 5cedca1b 2004-05-15 devnull break;
27 5cedca1b 2004-05-15 devnull case 'l': /* left adj, right ragged */
28 5cedca1b 2004-05-15 devnull admod = ad = 0; /* same as casena */
29 5cedca1b 2004-05-15 devnull break;
30 5cedca1b 2004-05-15 devnull case 'c': /*centered adj*/
31 5cedca1b 2004-05-15 devnull admod = 1;
32 5cedca1b 2004-05-15 devnull break;
33 fa325e9b 2020-01-10 cross case 'b':
34 5cedca1b 2004-05-15 devnull case 'n':
35 5cedca1b 2004-05-15 devnull admod = 0;
36 5cedca1b 2004-05-15 devnull break;
37 fa325e9b 2020-01-10 cross case '0':
38 fa325e9b 2020-01-10 cross case '2':
39 5cedca1b 2004-05-15 devnull case '4':
40 5cedca1b 2004-05-15 devnull ad = 0;
41 fa325e9b 2020-01-10 cross case '1':
42 fa325e9b 2020-01-10 cross case '3':
43 5cedca1b 2004-05-15 devnull case '5':
44 5cedca1b 2004-05-15 devnull admod = (i - '0') / 2;
45 5cedca1b 2004-05-15 devnull }
46 5cedca1b 2004-05-15 devnull }
47 5cedca1b 2004-05-15 devnull
48 5cedca1b 2004-05-15 devnull
49 5cedca1b 2004-05-15 devnull void casena(void)
50 5cedca1b 2004-05-15 devnull {
51 5cedca1b 2004-05-15 devnull ad = 0;
52 5cedca1b 2004-05-15 devnull }
53 5cedca1b 2004-05-15 devnull
54 5cedca1b 2004-05-15 devnull
55 5cedca1b 2004-05-15 devnull void casefi(void)
56 5cedca1b 2004-05-15 devnull {
57 5cedca1b 2004-05-15 devnull tbreak();
58 5cedca1b 2004-05-15 devnull fi = 1;
59 5cedca1b 2004-05-15 devnull pendnf = 0;
60 5cedca1b 2004-05-15 devnull }
61 5cedca1b 2004-05-15 devnull
62 5cedca1b 2004-05-15 devnull
63 5cedca1b 2004-05-15 devnull void casenf(void)
64 5cedca1b 2004-05-15 devnull {
65 5cedca1b 2004-05-15 devnull tbreak();
66 5cedca1b 2004-05-15 devnull fi = 0;
67 5cedca1b 2004-05-15 devnull }
68 5cedca1b 2004-05-15 devnull
69 5cedca1b 2004-05-15 devnull
70 5cedca1b 2004-05-15 devnull void casers(void)
71 5cedca1b 2004-05-15 devnull {
72 5cedca1b 2004-05-15 devnull dip->nls = 0;
73 5cedca1b 2004-05-15 devnull }
74 5cedca1b 2004-05-15 devnull
75 5cedca1b 2004-05-15 devnull
76 5cedca1b 2004-05-15 devnull void casens(void)
77 5cedca1b 2004-05-15 devnull {
78 5cedca1b 2004-05-15 devnull dip->nls++;
79 5cedca1b 2004-05-15 devnull }
80 5cedca1b 2004-05-15 devnull
81 c5561c23 2004-05-16 devnull int
82 5cedca1b 2004-05-15 devnull chget(int c)
83 5cedca1b 2004-05-15 devnull {
84 5cedca1b 2004-05-15 devnull Tchar i;
85 5cedca1b 2004-05-15 devnull
86 c5561c23 2004-05-16 devnull i = 0;
87 5cedca1b 2004-05-15 devnull if (skip() || ismot(i = getch()) || cbits(i) == ' ' || cbits(i) == '\n') {
88 5cedca1b 2004-05-15 devnull ch = i;
89 5cedca1b 2004-05-15 devnull return(c);
90 fa325e9b 2020-01-10 cross } else
91 5cedca1b 2004-05-15 devnull return cbits(i); /* was (i & BYTEMASK) */
92 5cedca1b 2004-05-15 devnull }
93 5cedca1b 2004-05-15 devnull
94 5cedca1b 2004-05-15 devnull
95 5cedca1b 2004-05-15 devnull void casecc(void)
96 5cedca1b 2004-05-15 devnull {
97 5cedca1b 2004-05-15 devnull cc = chget('.');
98 5cedca1b 2004-05-15 devnull }
99 5cedca1b 2004-05-15 devnull
100 5cedca1b 2004-05-15 devnull
101 5cedca1b 2004-05-15 devnull void casec2(void)
102 5cedca1b 2004-05-15 devnull {
103 5cedca1b 2004-05-15 devnull c2 = chget('\'');
104 5cedca1b 2004-05-15 devnull }
105 5cedca1b 2004-05-15 devnull
106 5cedca1b 2004-05-15 devnull
107 5cedca1b 2004-05-15 devnull void casehc(void)
108 5cedca1b 2004-05-15 devnull {
109 5cedca1b 2004-05-15 devnull ohc = chget(OHC);
110 5cedca1b 2004-05-15 devnull }
111 5cedca1b 2004-05-15 devnull
112 5cedca1b 2004-05-15 devnull
113 5cedca1b 2004-05-15 devnull void casetc(void)
114 5cedca1b 2004-05-15 devnull {
115 5cedca1b 2004-05-15 devnull tabc = chget(0);
116 5cedca1b 2004-05-15 devnull }
117 5cedca1b 2004-05-15 devnull
118 5cedca1b 2004-05-15 devnull
119 5cedca1b 2004-05-15 devnull void caselc(void)
120 5cedca1b 2004-05-15 devnull {
121 5cedca1b 2004-05-15 devnull dotc = chget(0);
122 5cedca1b 2004-05-15 devnull }
123 5cedca1b 2004-05-15 devnull
124 5cedca1b 2004-05-15 devnull
125 5cedca1b 2004-05-15 devnull void casehy(void)
126 5cedca1b 2004-05-15 devnull {
127 5cedca1b 2004-05-15 devnull int i;
128 5cedca1b 2004-05-15 devnull
129 5cedca1b 2004-05-15 devnull hyf = 1;
130 5cedca1b 2004-05-15 devnull if (skip())
131 5cedca1b 2004-05-15 devnull return;
132 5cedca1b 2004-05-15 devnull noscale++;
133 5cedca1b 2004-05-15 devnull i = atoi0();
134 5cedca1b 2004-05-15 devnull noscale = 0;
135 5cedca1b 2004-05-15 devnull if (nonumb)
136 5cedca1b 2004-05-15 devnull return;
137 5cedca1b 2004-05-15 devnull hyf = max(i, 0);
138 5cedca1b 2004-05-15 devnull }
139 5cedca1b 2004-05-15 devnull
140 5cedca1b 2004-05-15 devnull
141 5cedca1b 2004-05-15 devnull void casenh(void)
142 5cedca1b 2004-05-15 devnull {
143 5cedca1b 2004-05-15 devnull hyf = 0;
144 5cedca1b 2004-05-15 devnull }
145 5cedca1b 2004-05-15 devnull
146 c5561c23 2004-05-16 devnull int
147 5cedca1b 2004-05-15 devnull max(int aa, int bb)
148 5cedca1b 2004-05-15 devnull {
149 5cedca1b 2004-05-15 devnull if (aa > bb)
150 5cedca1b 2004-05-15 devnull return(aa);
151 fa325e9b 2020-01-10 cross else
152 5cedca1b 2004-05-15 devnull return(bb);
153 5cedca1b 2004-05-15 devnull }
154 5cedca1b 2004-05-15 devnull
155 5cedca1b 2004-05-15 devnull
156 5cedca1b 2004-05-15 devnull void casece(void)
157 5cedca1b 2004-05-15 devnull {
158 5cedca1b 2004-05-15 devnull int i;
159 5cedca1b 2004-05-15 devnull
160 5cedca1b 2004-05-15 devnull noscale++;
161 5cedca1b 2004-05-15 devnull skip();
162 5cedca1b 2004-05-15 devnull i = max(atoi0(), 0);
163 5cedca1b 2004-05-15 devnull if (nonumb)
164 5cedca1b 2004-05-15 devnull i = 1;
165 5cedca1b 2004-05-15 devnull tbreak();
166 5cedca1b 2004-05-15 devnull ce = i;
167 5cedca1b 2004-05-15 devnull noscale = 0;
168 5cedca1b 2004-05-15 devnull }
169 5cedca1b 2004-05-15 devnull
170 5cedca1b 2004-05-15 devnull
171 5cedca1b 2004-05-15 devnull void casein(void)
172 5cedca1b 2004-05-15 devnull {
173 5cedca1b 2004-05-15 devnull int i;
174 5cedca1b 2004-05-15 devnull
175 5cedca1b 2004-05-15 devnull if (skip())
176 5cedca1b 2004-05-15 devnull i = in1;
177 5cedca1b 2004-05-15 devnull else {
178 5cedca1b 2004-05-15 devnull i = max(hnumb(&in), 0);
179 5cedca1b 2004-05-15 devnull if (nonumb)
180 5cedca1b 2004-05-15 devnull i = in1;
181 5cedca1b 2004-05-15 devnull }
182 5cedca1b 2004-05-15 devnull tbreak();
183 5cedca1b 2004-05-15 devnull in1 = in;
184 5cedca1b 2004-05-15 devnull in = i;
185 5cedca1b 2004-05-15 devnull if (!nc) {
186 5cedca1b 2004-05-15 devnull un = in;
187 5cedca1b 2004-05-15 devnull setnel();
188 5cedca1b 2004-05-15 devnull }
189 5cedca1b 2004-05-15 devnull }
190 5cedca1b 2004-05-15 devnull
191 5cedca1b 2004-05-15 devnull
192 5cedca1b 2004-05-15 devnull void casell(void)
193 5cedca1b 2004-05-15 devnull {
194 5cedca1b 2004-05-15 devnull int i;
195 5cedca1b 2004-05-15 devnull
196 5cedca1b 2004-05-15 devnull if (skip())
197 5cedca1b 2004-05-15 devnull i = ll1;
198 5cedca1b 2004-05-15 devnull else {
199 5cedca1b 2004-05-15 devnull i = max(hnumb(&ll), INCH / 10);
200 5cedca1b 2004-05-15 devnull if (nonumb)
201 5cedca1b 2004-05-15 devnull i = ll1;
202 5cedca1b 2004-05-15 devnull }
203 5cedca1b 2004-05-15 devnull ll1 = ll;
204 5cedca1b 2004-05-15 devnull ll = i;
205 5cedca1b 2004-05-15 devnull setnel();
206 5cedca1b 2004-05-15 devnull }
207 5cedca1b 2004-05-15 devnull
208 5cedca1b 2004-05-15 devnull
209 5cedca1b 2004-05-15 devnull void caselt(void)
210 5cedca1b 2004-05-15 devnull {
211 5cedca1b 2004-05-15 devnull int i;
212 5cedca1b 2004-05-15 devnull
213 5cedca1b 2004-05-15 devnull if (skip())
214 5cedca1b 2004-05-15 devnull i = lt1;
215 5cedca1b 2004-05-15 devnull else {
216 5cedca1b 2004-05-15 devnull i = max(hnumb(&lt), 0);
217 5cedca1b 2004-05-15 devnull if (nonumb)
218 5cedca1b 2004-05-15 devnull i = lt1;
219 5cedca1b 2004-05-15 devnull }
220 5cedca1b 2004-05-15 devnull lt1 = lt;
221 5cedca1b 2004-05-15 devnull lt = i;
222 5cedca1b 2004-05-15 devnull }
223 5cedca1b 2004-05-15 devnull
224 5cedca1b 2004-05-15 devnull
225 5cedca1b 2004-05-15 devnull void caseti(void)
226 5cedca1b 2004-05-15 devnull {
227 5cedca1b 2004-05-15 devnull int i;
228 5cedca1b 2004-05-15 devnull
229 5cedca1b 2004-05-15 devnull if (skip())
230 5cedca1b 2004-05-15 devnull return;
231 5cedca1b 2004-05-15 devnull i = max(hnumb(&in), 0);
232 5cedca1b 2004-05-15 devnull tbreak();
233 5cedca1b 2004-05-15 devnull un1 = i;
234 5cedca1b 2004-05-15 devnull setnel();
235 5cedca1b 2004-05-15 devnull }
236 5cedca1b 2004-05-15 devnull
237 5cedca1b 2004-05-15 devnull
238 5cedca1b 2004-05-15 devnull void casels(void)
239 5cedca1b 2004-05-15 devnull {
240 5cedca1b 2004-05-15 devnull int i;
241 5cedca1b 2004-05-15 devnull
242 5cedca1b 2004-05-15 devnull noscale++;
243 5cedca1b 2004-05-15 devnull if (skip())
244 5cedca1b 2004-05-15 devnull i = ls1;
245 5cedca1b 2004-05-15 devnull else {
246 5cedca1b 2004-05-15 devnull i = max(inumb(&ls), 1);
247 5cedca1b 2004-05-15 devnull if (nonumb)
248 5cedca1b 2004-05-15 devnull i = ls1;
249 5cedca1b 2004-05-15 devnull }
250 5cedca1b 2004-05-15 devnull ls1 = ls;
251 5cedca1b 2004-05-15 devnull ls = i;
252 5cedca1b 2004-05-15 devnull noscale = 0;
253 5cedca1b 2004-05-15 devnull }
254 5cedca1b 2004-05-15 devnull
255 5cedca1b 2004-05-15 devnull
256 5cedca1b 2004-05-15 devnull void casepo(void)
257 5cedca1b 2004-05-15 devnull {
258 5cedca1b 2004-05-15 devnull int i;
259 5cedca1b 2004-05-15 devnull
260 5cedca1b 2004-05-15 devnull if (skip())
261 5cedca1b 2004-05-15 devnull i = po1;
262 5cedca1b 2004-05-15 devnull else {
263 5cedca1b 2004-05-15 devnull i = max(hnumb(&po), 0);
264 5cedca1b 2004-05-15 devnull if (nonumb)
265 5cedca1b 2004-05-15 devnull i = po1;
266 5cedca1b 2004-05-15 devnull }
267 5cedca1b 2004-05-15 devnull po1 = po;
268 5cedca1b 2004-05-15 devnull po = i;
269 5cedca1b 2004-05-15 devnull if (TROFF & !ascii)
270 5cedca1b 2004-05-15 devnull esc += po - po1;
271 5cedca1b 2004-05-15 devnull }
272 5cedca1b 2004-05-15 devnull
273 5cedca1b 2004-05-15 devnull
274 5cedca1b 2004-05-15 devnull void casepl(void)
275 5cedca1b 2004-05-15 devnull {
276 5cedca1b 2004-05-15 devnull int i;
277 5cedca1b 2004-05-15 devnull
278 5cedca1b 2004-05-15 devnull skip();
279 5cedca1b 2004-05-15 devnull if ((i = vnumb(&pl)) == 0)
280 5cedca1b 2004-05-15 devnull pl = 11 * INCH; /*11in*/
281 fa325e9b 2020-01-10 cross else
282 5cedca1b 2004-05-15 devnull pl = i;
283 5cedca1b 2004-05-15 devnull if (numtabp[NL].val > pl)
284 5cedca1b 2004-05-15 devnull numtabp[NL].val = pl;
285 5cedca1b 2004-05-15 devnull }
286 5cedca1b 2004-05-15 devnull
287 5cedca1b 2004-05-15 devnull
288 5cedca1b 2004-05-15 devnull void casewh(void)
289 5cedca1b 2004-05-15 devnull {
290 5cedca1b 2004-05-15 devnull int i, j, k;
291 5cedca1b 2004-05-15 devnull
292 5cedca1b 2004-05-15 devnull lgf++;
293 5cedca1b 2004-05-15 devnull skip();
294 5cedca1b 2004-05-15 devnull i = vnumb((int *)0);
295 5cedca1b 2004-05-15 devnull if (nonumb)
296 5cedca1b 2004-05-15 devnull return;
297 5cedca1b 2004-05-15 devnull skip();
298 5cedca1b 2004-05-15 devnull j = getrq();
299 5cedca1b 2004-05-15 devnull if ((k = findn(i)) != NTRAP) {
300 5cedca1b 2004-05-15 devnull mlist[k] = j;
301 5cedca1b 2004-05-15 devnull return;
302 5cedca1b 2004-05-15 devnull }
303 5cedca1b 2004-05-15 devnull for (k = 0; k < NTRAP; k++)
304 5cedca1b 2004-05-15 devnull if (mlist[k] == 0)
305 5cedca1b 2004-05-15 devnull break;
306 5cedca1b 2004-05-15 devnull if (k == NTRAP) {
307 5cedca1b 2004-05-15 devnull flusho();
308 5cedca1b 2004-05-15 devnull ERROR "cannot plant trap." WARN;
309 5cedca1b 2004-05-15 devnull return;
310 5cedca1b 2004-05-15 devnull }
311 5cedca1b 2004-05-15 devnull mlist[k] = j;
312 5cedca1b 2004-05-15 devnull nlist[k] = i;
313 5cedca1b 2004-05-15 devnull }
314 5cedca1b 2004-05-15 devnull
315 5cedca1b 2004-05-15 devnull
316 5cedca1b 2004-05-15 devnull void casech(void)
317 5cedca1b 2004-05-15 devnull {
318 5cedca1b 2004-05-15 devnull int i, j, k;
319 5cedca1b 2004-05-15 devnull
320 5cedca1b 2004-05-15 devnull lgf++;
321 5cedca1b 2004-05-15 devnull skip();
322 5cedca1b 2004-05-15 devnull if (!(j = getrq()))
323 5cedca1b 2004-05-15 devnull return;
324 fa325e9b 2020-01-10 cross else
325 5cedca1b 2004-05-15 devnull for (k = 0; k < NTRAP; k++)
326 5cedca1b 2004-05-15 devnull if (mlist[k] == j)
327 5cedca1b 2004-05-15 devnull break;
328 5cedca1b 2004-05-15 devnull if (k == NTRAP)
329 5cedca1b 2004-05-15 devnull return;
330 5cedca1b 2004-05-15 devnull skip();
331 5cedca1b 2004-05-15 devnull i = vnumb((int *)0);
332 5cedca1b 2004-05-15 devnull if (nonumb)
333 5cedca1b 2004-05-15 devnull mlist[k] = 0;
334 5cedca1b 2004-05-15 devnull nlist[k] = i;
335 5cedca1b 2004-05-15 devnull }
336 5cedca1b 2004-05-15 devnull
337 c5561c23 2004-05-16 devnull int
338 5cedca1b 2004-05-15 devnull findn(int i)
339 5cedca1b 2004-05-15 devnull {
340 5cedca1b 2004-05-15 devnull int k;
341 5cedca1b 2004-05-15 devnull
342 5cedca1b 2004-05-15 devnull for (k = 0; k < NTRAP; k++)
343 5cedca1b 2004-05-15 devnull if ((nlist[k] == i) && (mlist[k] != 0))
344 5cedca1b 2004-05-15 devnull break;
345 5cedca1b 2004-05-15 devnull return(k);
346 5cedca1b 2004-05-15 devnull }
347 5cedca1b 2004-05-15 devnull
348 5cedca1b 2004-05-15 devnull
349 5cedca1b 2004-05-15 devnull void casepn(void)
350 5cedca1b 2004-05-15 devnull {
351 5cedca1b 2004-05-15 devnull int i;
352 5cedca1b 2004-05-15 devnull
353 5cedca1b 2004-05-15 devnull skip();
354 5cedca1b 2004-05-15 devnull noscale++;
355 5cedca1b 2004-05-15 devnull i = max(inumb(&numtabp[PN].val), 0);
356 5cedca1b 2004-05-15 devnull noscale = 0;
357 5cedca1b 2004-05-15 devnull if (!nonumb) {
358 5cedca1b 2004-05-15 devnull npn = i;
359 5cedca1b 2004-05-15 devnull npnflg++;
360 5cedca1b 2004-05-15 devnull }
361 5cedca1b 2004-05-15 devnull }
362 5cedca1b 2004-05-15 devnull
363 5cedca1b 2004-05-15 devnull
364 5cedca1b 2004-05-15 devnull void casebp(void)
365 5cedca1b 2004-05-15 devnull {
366 5cedca1b 2004-05-15 devnull int i;
367 5cedca1b 2004-05-15 devnull Stack *savframe;
368 5cedca1b 2004-05-15 devnull
369 5cedca1b 2004-05-15 devnull if (dip != d)
370 5cedca1b 2004-05-15 devnull return;
371 5cedca1b 2004-05-15 devnull savframe = frame;
372 5cedca1b 2004-05-15 devnull skip();
373 5cedca1b 2004-05-15 devnull if ((i = inumb(&numtabp[PN].val)) < 0)
374 5cedca1b 2004-05-15 devnull i = 0;
375 5cedca1b 2004-05-15 devnull tbreak();
376 5cedca1b 2004-05-15 devnull if (!nonumb) {
377 5cedca1b 2004-05-15 devnull npn = i;
378 5cedca1b 2004-05-15 devnull npnflg++;
379 5cedca1b 2004-05-15 devnull } else if (dip->nls)
380 5cedca1b 2004-05-15 devnull return;
381 5cedca1b 2004-05-15 devnull eject(savframe);
382 5cedca1b 2004-05-15 devnull }
383 5cedca1b 2004-05-15 devnull
384 5cedca1b 2004-05-15 devnull void casetm(void)
385 5cedca1b 2004-05-15 devnull {
386 5cedca1b 2004-05-15 devnull casetm1(0, stderr);
387 5cedca1b 2004-05-15 devnull }
388 5cedca1b 2004-05-15 devnull
389 5cedca1b 2004-05-15 devnull
390 5cedca1b 2004-05-15 devnull void casefm(void)
391 5cedca1b 2004-05-15 devnull {
392 5cedca1b 2004-05-15 devnull static struct fcache {
393 5cedca1b 2004-05-15 devnull char *name;
394 5cedca1b 2004-05-15 devnull FILE *fp;
395 5cedca1b 2004-05-15 devnull } fcache[15];
396 5cedca1b 2004-05-15 devnull int i;
397 5cedca1b 2004-05-15 devnull
398 5cedca1b 2004-05-15 devnull if ( skip() || !getname()) {
399 5cedca1b 2004-05-15 devnull ERROR "fm: missing filename" WARN;
400 5cedca1b 2004-05-15 devnull return;
401 5cedca1b 2004-05-15 devnull }
402 fa325e9b 2020-01-10 cross
403 5cedca1b 2004-05-15 devnull for (i = 0; i < 15 && fcache[i].fp != NULL; i++) {
404 5cedca1b 2004-05-15 devnull if (strcmp(nextf, fcache[i].name) == 0)
405 5cedca1b 2004-05-15 devnull break;
406 5cedca1b 2004-05-15 devnull }
407 5cedca1b 2004-05-15 devnull if (i >= 15) {
408 5cedca1b 2004-05-15 devnull ERROR "fm: too many streams" WARN;
409 5cedca1b 2004-05-15 devnull return;
410 5cedca1b 2004-05-15 devnull }
411 5cedca1b 2004-05-15 devnull if (fcache[i].fp == NULL) {
412 1f72bc47 2004-05-17 devnull if( (fcache[i].fp = fopen(unsharp(nextf), "w")) == NULL) {
413 5cedca1b 2004-05-15 devnull ERROR "fm: cannot open %s", nextf WARN;
414 5cedca1b 2004-05-15 devnull return;
415 5cedca1b 2004-05-15 devnull }
416 5cedca1b 2004-05-15 devnull fcache[i].name = strdupl(nextf);
417 5cedca1b 2004-05-15 devnull }
418 5cedca1b 2004-05-15 devnull casetm1(0, fcache[i].fp);
419 5cedca1b 2004-05-15 devnull }
420 5cedca1b 2004-05-15 devnull
421 fa325e9b 2020-01-10 cross void casetm1(int ab, FILE *out)
422 5cedca1b 2004-05-15 devnull {
423 5cedca1b 2004-05-15 devnull int i, j, c;
424 5cedca1b 2004-05-15 devnull char *p;
425 5cedca1b 2004-05-15 devnull char tmbuf[NTM];
426 5cedca1b 2004-05-15 devnull
427 5cedca1b 2004-05-15 devnull lgf++;
428 5cedca1b 2004-05-15 devnull copyf++;
429 5cedca1b 2004-05-15 devnull if (ab) {
430 5cedca1b 2004-05-15 devnull if (skip())
431 5cedca1b 2004-05-15 devnull ERROR "User Abort" WARN;
432 5cedca1b 2004-05-15 devnull else {
433 5cedca1b 2004-05-15 devnull extern int error;
434 5cedca1b 2004-05-15 devnull int savtrac = trace;
435 5cedca1b 2004-05-15 devnull i = trace = 0;
436 5cedca1b 2004-05-15 devnull noscale++;
437 5cedca1b 2004-05-15 devnull i = inumb(&trace);
438 5cedca1b 2004-05-15 devnull noscale--;
439 5cedca1b 2004-05-15 devnull if (i) {
440 5cedca1b 2004-05-15 devnull error = i;
441 5cedca1b 2004-05-15 devnull if (nlflg || skip())
442 5cedca1b 2004-05-15 devnull ERROR "User Abort, exit code %d", i WARN;
443 5cedca1b 2004-05-15 devnull }
444 5cedca1b 2004-05-15 devnull trace = savtrac;
445 5cedca1b 2004-05-15 devnull }
446 5cedca1b 2004-05-15 devnull } else
447 fa325e9b 2020-01-10 cross skip();
448 5cedca1b 2004-05-15 devnull for (i = 0; i < NTM - 2; ) {
449 5cedca1b 2004-05-15 devnull if ((c = cbits(getch())) == '\n' || c == RIGHT)
450 5cedca1b 2004-05-15 devnull break;
451 5cedca1b 2004-05-15 devnull else if (c == MINUS) { /* special pleading for strange encodings */
452 5cedca1b 2004-05-15 devnull tmbuf[i++] = '\\';
453 5cedca1b 2004-05-15 devnull tmbuf[i++] = '-';
454 5cedca1b 2004-05-15 devnull } else if (c == PRESC) {
455 5cedca1b 2004-05-15 devnull tmbuf[i++] = '\\';
456 5cedca1b 2004-05-15 devnull tmbuf[i++] = 'e';
457 5cedca1b 2004-05-15 devnull } else if (c == FILLER) {
458 5cedca1b 2004-05-15 devnull tmbuf[i++] = '\\';
459 5cedca1b 2004-05-15 devnull tmbuf[i++] = '&';
460 5cedca1b 2004-05-15 devnull } else if (c == UNPAD) {
461 5cedca1b 2004-05-15 devnull tmbuf[i++] = '\\';
462 5cedca1b 2004-05-15 devnull tmbuf[i++] = ' ';
463 5cedca1b 2004-05-15 devnull } else if (c == OHC) {
464 5cedca1b 2004-05-15 devnull tmbuf[i++] = '\\';
465 5cedca1b 2004-05-15 devnull tmbuf[i++] = '%';
466 5cedca1b 2004-05-15 devnull } else if (c >= ALPHABET) {
467 5cedca1b 2004-05-15 devnull p = chname(c);
468 5cedca1b 2004-05-15 devnull switch (*p) {
469 5cedca1b 2004-05-15 devnull case MBchar:
470 c8d681e8 2008-11-18 rsc strcpy(&tmbuf[i], p+1);
471 5cedca1b 2004-05-15 devnull break;
472 5cedca1b 2004-05-15 devnull case Number:
473 5cedca1b 2004-05-15 devnull sprintf(&tmbuf[i], "\\N'%s'", p+1);
474 5cedca1b 2004-05-15 devnull break;
475 5cedca1b 2004-05-15 devnull case Troffchar:
476 5cedca1b 2004-05-15 devnull if ((j = strlen(p+1)) == 2)
477 5cedca1b 2004-05-15 devnull sprintf(&tmbuf[i], "\\(%s", p+1);
478 5cedca1b 2004-05-15 devnull else
479 5cedca1b 2004-05-15 devnull sprintf(&tmbuf[i], "\\C'%s'", p+1);
480 5cedca1b 2004-05-15 devnull break;
481 5cedca1b 2004-05-15 devnull default:
482 5cedca1b 2004-05-15 devnull sprintf(&tmbuf[i]," %s? ", p);
483 5cedca1b 2004-05-15 devnull break;
484 5cedca1b 2004-05-15 devnull }
485 5cedca1b 2004-05-15 devnull j = strlen(&tmbuf[i]);
486 5cedca1b 2004-05-15 devnull i += j;
487 5cedca1b 2004-05-15 devnull } else
488 5cedca1b 2004-05-15 devnull tmbuf[i++] = c;
489 5cedca1b 2004-05-15 devnull }
490 5cedca1b 2004-05-15 devnull tmbuf[i] = 0;
491 5cedca1b 2004-05-15 devnull if (ab) /* truncate output */
492 5cedca1b 2004-05-15 devnull obufp = obuf; /* should be a function in n2.c */
493 5cedca1b 2004-05-15 devnull flusho();
494 5cedca1b 2004-05-15 devnull if (i)
495 5cedca1b 2004-05-15 devnull fprintf(out, "%s\n", tmbuf);
496 5cedca1b 2004-05-15 devnull fflush(out);
497 5cedca1b 2004-05-15 devnull copyf--;
498 5cedca1b 2004-05-15 devnull lgf--;
499 5cedca1b 2004-05-15 devnull }
500 5cedca1b 2004-05-15 devnull
501 5cedca1b 2004-05-15 devnull
502 5cedca1b 2004-05-15 devnull void casesp(void)
503 5cedca1b 2004-05-15 devnull {
504 5cedca1b 2004-05-15 devnull casesp1(0);
505 5cedca1b 2004-05-15 devnull }
506 5cedca1b 2004-05-15 devnull
507 5cedca1b 2004-05-15 devnull void casesp1(int a)
508 5cedca1b 2004-05-15 devnull {
509 5cedca1b 2004-05-15 devnull int i, j, savlss;
510 5cedca1b 2004-05-15 devnull
511 5cedca1b 2004-05-15 devnull tbreak();
512 5cedca1b 2004-05-15 devnull if (dip->nls || trap)
513 5cedca1b 2004-05-15 devnull return;
514 5cedca1b 2004-05-15 devnull i = findt1();
515 5cedca1b 2004-05-15 devnull if (!a) {
516 5cedca1b 2004-05-15 devnull skip();
517 5cedca1b 2004-05-15 devnull j = vnumb((int *)0);
518 5cedca1b 2004-05-15 devnull if (nonumb)
519 5cedca1b 2004-05-15 devnull j = lss;
520 fa325e9b 2020-01-10 cross } else
521 5cedca1b 2004-05-15 devnull j = a;
522 5cedca1b 2004-05-15 devnull if (j == 0)
523 5cedca1b 2004-05-15 devnull return;
524 5cedca1b 2004-05-15 devnull if (i < j)
525 5cedca1b 2004-05-15 devnull j = i;
526 5cedca1b 2004-05-15 devnull savlss = lss;
527 5cedca1b 2004-05-15 devnull if (dip != d)
528 fa325e9b 2020-01-10 cross i = dip->dnl;
529 fa325e9b 2020-01-10 cross else
530 5cedca1b 2004-05-15 devnull i = numtabp[NL].val;
531 5cedca1b 2004-05-15 devnull if ((i + j) < 0)
532 5cedca1b 2004-05-15 devnull j = -i;
533 5cedca1b 2004-05-15 devnull lss = j;
534 5cedca1b 2004-05-15 devnull newline(0);
535 5cedca1b 2004-05-15 devnull lss = savlss;
536 5cedca1b 2004-05-15 devnull }
537 5cedca1b 2004-05-15 devnull
538 5cedca1b 2004-05-15 devnull
539 5cedca1b 2004-05-15 devnull void casert(void)
540 5cedca1b 2004-05-15 devnull {
541 5cedca1b 2004-05-15 devnull int a, *p;
542 5cedca1b 2004-05-15 devnull
543 5cedca1b 2004-05-15 devnull skip();
544 5cedca1b 2004-05-15 devnull if (dip != d)
545 fa325e9b 2020-01-10 cross p = &dip->dnl;
546 fa325e9b 2020-01-10 cross else
547 5cedca1b 2004-05-15 devnull p = &numtabp[NL].val;
548 5cedca1b 2004-05-15 devnull a = vnumb(p);
549 5cedca1b 2004-05-15 devnull if (nonumb)
550 5cedca1b 2004-05-15 devnull a = dip->mkline;
551 5cedca1b 2004-05-15 devnull if ((a < 0) || (a >= *p))
552 5cedca1b 2004-05-15 devnull return;
553 5cedca1b 2004-05-15 devnull nb++;
554 5cedca1b 2004-05-15 devnull casesp1(a - *p);
555 5cedca1b 2004-05-15 devnull }
556 5cedca1b 2004-05-15 devnull
557 5cedca1b 2004-05-15 devnull
558 5cedca1b 2004-05-15 devnull void caseem(void)
559 5cedca1b 2004-05-15 devnull {
560 5cedca1b 2004-05-15 devnull lgf++;
561 5cedca1b 2004-05-15 devnull skip();
562 5cedca1b 2004-05-15 devnull em = getrq();
563 5cedca1b 2004-05-15 devnull }
564 5cedca1b 2004-05-15 devnull
565 5cedca1b 2004-05-15 devnull
566 5cedca1b 2004-05-15 devnull void casefl(void)
567 5cedca1b 2004-05-15 devnull {
568 5cedca1b 2004-05-15 devnull tbreak();
569 5cedca1b 2004-05-15 devnull if (!ascii)
570 5cedca1b 2004-05-15 devnull ptflush();
571 5cedca1b 2004-05-15 devnull flusho();
572 5cedca1b 2004-05-15 devnull }
573 5cedca1b 2004-05-15 devnull
574 5cedca1b 2004-05-15 devnull
575 5cedca1b 2004-05-15 devnull void caseev(void)
576 5cedca1b 2004-05-15 devnull {
577 5cedca1b 2004-05-15 devnull int nxev;
578 5cedca1b 2004-05-15 devnull
579 5cedca1b 2004-05-15 devnull if (skip()) {
580 5cedca1b 2004-05-15 devnull e0:
581 5cedca1b 2004-05-15 devnull if (evi == 0)
582 5cedca1b 2004-05-15 devnull return;
583 5cedca1b 2004-05-15 devnull nxev = evlist[--evi];
584 5cedca1b 2004-05-15 devnull goto e1;
585 5cedca1b 2004-05-15 devnull }
586 5cedca1b 2004-05-15 devnull noscale++;
587 5cedca1b 2004-05-15 devnull nxev = atoi0();
588 5cedca1b 2004-05-15 devnull noscale = 0;
589 5cedca1b 2004-05-15 devnull if (nonumb)
590 5cedca1b 2004-05-15 devnull goto e0;
591 5cedca1b 2004-05-15 devnull flushi();
592 5cedca1b 2004-05-15 devnull if (nxev >= NEV || nxev < 0 || evi >= EVLSZ) {
593 5cedca1b 2004-05-15 devnull flusho();
594 5cedca1b 2004-05-15 devnull ERROR "cannot do .ev %d", nxev WARN;
595 5cedca1b 2004-05-15 devnull if (error)
596 5cedca1b 2004-05-15 devnull done2(040);
597 fa325e9b 2020-01-10 cross else
598 5cedca1b 2004-05-15 devnull edone(040);
599 5cedca1b 2004-05-15 devnull return;
600 5cedca1b 2004-05-15 devnull }
601 5cedca1b 2004-05-15 devnull evlist[evi++] = ev;
602 5cedca1b 2004-05-15 devnull e1:
603 5cedca1b 2004-05-15 devnull if (ev == nxev)
604 5cedca1b 2004-05-15 devnull return;
605 5cedca1b 2004-05-15 devnull ev = nxev;
606 5cedca1b 2004-05-15 devnull envp = &env[ev];
607 5cedca1b 2004-05-15 devnull }
608 5cedca1b 2004-05-15 devnull
609 5cedca1b 2004-05-15 devnull void envcopy(Env *e1, Env *e2) /* copy env e2 to e1 */
610 5cedca1b 2004-05-15 devnull {
611 5cedca1b 2004-05-15 devnull *e1 = *e2; /* rumor hath that this fails on some machines */
612 5cedca1b 2004-05-15 devnull }
613 5cedca1b 2004-05-15 devnull
614 5cedca1b 2004-05-15 devnull
615 5cedca1b 2004-05-15 devnull void caseel(void)
616 5cedca1b 2004-05-15 devnull {
617 5cedca1b 2004-05-15 devnull if (--ifx < 0) {
618 5cedca1b 2004-05-15 devnull ifx = 0;
619 5cedca1b 2004-05-15 devnull iflist[0] = 0;
620 5cedca1b 2004-05-15 devnull }
621 5cedca1b 2004-05-15 devnull caseif1(2);
622 5cedca1b 2004-05-15 devnull }
623 5cedca1b 2004-05-15 devnull
624 b2f08f61 2005-12-14 devnull
625 5cedca1b 2004-05-15 devnull void caseie(void)
626 5cedca1b 2004-05-15 devnull {
627 5cedca1b 2004-05-15 devnull if (ifx >= NIF) {
628 5cedca1b 2004-05-15 devnull ERROR "if-else overflow." WARN;
629 5cedca1b 2004-05-15 devnull ifx = 0;
630 5cedca1b 2004-05-15 devnull edone(040);
631 5cedca1b 2004-05-15 devnull }
632 5cedca1b 2004-05-15 devnull caseif1(1);
633 5cedca1b 2004-05-15 devnull ifx++;
634 5cedca1b 2004-05-15 devnull }
635 5cedca1b 2004-05-15 devnull
636 b2f08f61 2005-12-14 devnull
637 5cedca1b 2004-05-15 devnull void caseif(void)
638 5cedca1b 2004-05-15 devnull {
639 5cedca1b 2004-05-15 devnull caseif1(0);
640 5cedca1b 2004-05-15 devnull }
641 5cedca1b 2004-05-15 devnull
642 5cedca1b 2004-05-15 devnull void caseif1(int x)
643 5cedca1b 2004-05-15 devnull {
644 5cedca1b 2004-05-15 devnull extern int falsef;
645 5cedca1b 2004-05-15 devnull int notflag, true;
646 5cedca1b 2004-05-15 devnull Tchar i;
647 5cedca1b 2004-05-15 devnull
648 b2f08f61 2005-12-14 devnull if (x == 2) {
649 5cedca1b 2004-05-15 devnull notflag = 0;
650 5cedca1b 2004-05-15 devnull true = iflist[ifx];
651 5cedca1b 2004-05-15 devnull goto i1;
652 5cedca1b 2004-05-15 devnull }
653 5cedca1b 2004-05-15 devnull true = 0;
654 5cedca1b 2004-05-15 devnull skip();
655 5cedca1b 2004-05-15 devnull if ((cbits(i = getch())) == '!') {
656 5cedca1b 2004-05-15 devnull notflag = 1;
657 5cedca1b 2004-05-15 devnull } else {
658 5cedca1b 2004-05-15 devnull notflag = 0;
659 5cedca1b 2004-05-15 devnull ch = i;
660 5cedca1b 2004-05-15 devnull }
661 5cedca1b 2004-05-15 devnull ifnum++;
662 5cedca1b 2004-05-15 devnull i = atoi0();
663 5cedca1b 2004-05-15 devnull ifnum = 0;
664 5cedca1b 2004-05-15 devnull if (!nonumb) {
665 5cedca1b 2004-05-15 devnull if (i > 0)
666 5cedca1b 2004-05-15 devnull true++;
667 5cedca1b 2004-05-15 devnull goto i1;
668 5cedca1b 2004-05-15 devnull }
669 5cedca1b 2004-05-15 devnull i = getch();
670 5cedca1b 2004-05-15 devnull switch (cbits(i)) {
671 5cedca1b 2004-05-15 devnull case 'e':
672 5cedca1b 2004-05-15 devnull if (!(numtabp[PN].val & 01))
673 5cedca1b 2004-05-15 devnull true++;
674 5cedca1b 2004-05-15 devnull break;
675 5cedca1b 2004-05-15 devnull case 'o':
676 5cedca1b 2004-05-15 devnull if (numtabp[PN].val & 01)
677 5cedca1b 2004-05-15 devnull true++;
678 5cedca1b 2004-05-15 devnull break;
679 5cedca1b 2004-05-15 devnull case 'n':
680 5cedca1b 2004-05-15 devnull if (NROFF)
681 5cedca1b 2004-05-15 devnull true++;
682 5cedca1b 2004-05-15 devnull break;
683 5cedca1b 2004-05-15 devnull case 't':
684 5cedca1b 2004-05-15 devnull if (TROFF)
685 5cedca1b 2004-05-15 devnull true++;
686 5cedca1b 2004-05-15 devnull break;
687 5cedca1b 2004-05-15 devnull case ' ':
688 5cedca1b 2004-05-15 devnull break;
689 5cedca1b 2004-05-15 devnull default:
690 5cedca1b 2004-05-15 devnull true = cmpstr(i);
691 5cedca1b 2004-05-15 devnull }
692 5cedca1b 2004-05-15 devnull i1:
693 5cedca1b 2004-05-15 devnull true ^= notflag;
694 b2f08f61 2005-12-14 devnull if (x == 1)
695 b2f08f61 2005-12-14 devnull iflist[ifx] = !true;
696 5cedca1b 2004-05-15 devnull if (true) {
697 5cedca1b 2004-05-15 devnull i2:
698 5cedca1b 2004-05-15 devnull while ((cbits(i = getch())) == ' ')
699 5cedca1b 2004-05-15 devnull ;
700 5cedca1b 2004-05-15 devnull if (cbits(i) == LEFT)
701 5cedca1b 2004-05-15 devnull goto i2;
702 5cedca1b 2004-05-15 devnull ch = i;
703 5cedca1b 2004-05-15 devnull nflush++;
704 5cedca1b 2004-05-15 devnull } else {
705 5cedca1b 2004-05-15 devnull if (!nlflg) {
706 5cedca1b 2004-05-15 devnull copyf++;
707 5cedca1b 2004-05-15 devnull falsef++;
708 5cedca1b 2004-05-15 devnull eatblk(0);
709 5cedca1b 2004-05-15 devnull copyf--;
710 5cedca1b 2004-05-15 devnull falsef--;
711 5cedca1b 2004-05-15 devnull }
712 5cedca1b 2004-05-15 devnull }
713 5cedca1b 2004-05-15 devnull }
714 5cedca1b 2004-05-15 devnull
715 5cedca1b 2004-05-15 devnull void eatblk(int inblk)
716 5cedca1b 2004-05-15 devnull {
717 5cedca1b 2004-05-15 devnull int cnt, i;
718 5cedca1b 2004-05-15 devnull
719 5cedca1b 2004-05-15 devnull cnt = 0;
720 5cedca1b 2004-05-15 devnull do {
721 5cedca1b 2004-05-15 devnull if (ch) {
722 5cedca1b 2004-05-15 devnull i = cbits(ch);
723 5cedca1b 2004-05-15 devnull ch = 0;
724 5cedca1b 2004-05-15 devnull } else
725 5cedca1b 2004-05-15 devnull i = cbits(getch0());
726 5cedca1b 2004-05-15 devnull if (i == ESC)
727 5cedca1b 2004-05-15 devnull cnt++;
728 5cedca1b 2004-05-15 devnull else {
729 5cedca1b 2004-05-15 devnull if (cnt == 1)
730 5cedca1b 2004-05-15 devnull switch (i) {
731 5cedca1b 2004-05-15 devnull case '{': i = LEFT; break;
732 5cedca1b 2004-05-15 devnull case '}': i = RIGHT; break;
733 5cedca1b 2004-05-15 devnull case '\n': i = 'x'; break;
734 5cedca1b 2004-05-15 devnull }
735 5cedca1b 2004-05-15 devnull cnt = 0;
736 5cedca1b 2004-05-15 devnull }
737 5cedca1b 2004-05-15 devnull if (i == LEFT) eatblk(1);
738 5cedca1b 2004-05-15 devnull } while ((!inblk && (i != '\n')) || (inblk && (i != RIGHT)));
739 5cedca1b 2004-05-15 devnull if (i == '\n') {
740 5cedca1b 2004-05-15 devnull nlflg++;
741 5cedca1b 2004-05-15 devnull if (ip == 0)
742 5cedca1b 2004-05-15 devnull numtabp[CD].val++;
743 5cedca1b 2004-05-15 devnull }
744 5cedca1b 2004-05-15 devnull }
745 5cedca1b 2004-05-15 devnull
746 c5561c23 2004-05-16 devnull int
747 5cedca1b 2004-05-15 devnull cmpstr(Tchar c)
748 5cedca1b 2004-05-15 devnull {
749 5cedca1b 2004-05-15 devnull int j, delim;
750 5cedca1b 2004-05-15 devnull Tchar i;
751 5cedca1b 2004-05-15 devnull int val;
752 5cedca1b 2004-05-15 devnull int savapts, savapts1, savfont, savfont1, savpts, savpts1;
753 5cedca1b 2004-05-15 devnull Tchar string[1280];
754 5cedca1b 2004-05-15 devnull Tchar *sp;
755 5cedca1b 2004-05-15 devnull
756 5cedca1b 2004-05-15 devnull if (ismot(c))
757 5cedca1b 2004-05-15 devnull return(0);
758 5cedca1b 2004-05-15 devnull delim = cbits(c);
759 5cedca1b 2004-05-15 devnull savapts = apts;
760 5cedca1b 2004-05-15 devnull savapts1 = apts1;
761 5cedca1b 2004-05-15 devnull savfont = font;
762 5cedca1b 2004-05-15 devnull savfont1 = font1;
763 5cedca1b 2004-05-15 devnull savpts = pts;
764 5cedca1b 2004-05-15 devnull savpts1 = pts1;
765 5cedca1b 2004-05-15 devnull sp = string;
766 5cedca1b 2004-05-15 devnull while ((j = cbits(i = getch()))!=delim && j!='\n' && sp<&string[1280-1])
767 5cedca1b 2004-05-15 devnull *sp++ = i;
768 5cedca1b 2004-05-15 devnull if (sp >= string + 1280) {
769 5cedca1b 2004-05-15 devnull ERROR "too-long string compare." WARN;
770 5cedca1b 2004-05-15 devnull edone(0100);
771 5cedca1b 2004-05-15 devnull }
772 5cedca1b 2004-05-15 devnull if (nlflg) {
773 5cedca1b 2004-05-15 devnull val = sp==string;
774 5cedca1b 2004-05-15 devnull goto rtn;
775 5cedca1b 2004-05-15 devnull }
776 5cedca1b 2004-05-15 devnull *sp = 0;
777 5cedca1b 2004-05-15 devnull apts = savapts;
778 5cedca1b 2004-05-15 devnull apts1 = savapts1;
779 5cedca1b 2004-05-15 devnull font = savfont;
780 5cedca1b 2004-05-15 devnull font1 = savfont1;
781 5cedca1b 2004-05-15 devnull pts = savpts;
782 5cedca1b 2004-05-15 devnull pts1 = savpts1;
783 5cedca1b 2004-05-15 devnull mchbits();
784 5cedca1b 2004-05-15 devnull val = 1;
785 5cedca1b 2004-05-15 devnull sp = string;
786 5cedca1b 2004-05-15 devnull while ((j = cbits(i = getch())) != delim && j != '\n') {
787 5cedca1b 2004-05-15 devnull if (*sp != i) {
788 5cedca1b 2004-05-15 devnull eat(delim);
789 5cedca1b 2004-05-15 devnull val = 0;
790 5cedca1b 2004-05-15 devnull goto rtn;
791 5cedca1b 2004-05-15 devnull }
792 5cedca1b 2004-05-15 devnull sp++;
793 5cedca1b 2004-05-15 devnull }
794 5cedca1b 2004-05-15 devnull if (*sp)
795 5cedca1b 2004-05-15 devnull val = 0;
796 5cedca1b 2004-05-15 devnull rtn:
797 5cedca1b 2004-05-15 devnull apts = savapts;
798 5cedca1b 2004-05-15 devnull apts1 = savapts1;
799 5cedca1b 2004-05-15 devnull font = savfont;
800 5cedca1b 2004-05-15 devnull font1 = savfont1;
801 5cedca1b 2004-05-15 devnull pts = savpts;
802 5cedca1b 2004-05-15 devnull pts1 = savpts1;
803 5cedca1b 2004-05-15 devnull mchbits();
804 5cedca1b 2004-05-15 devnull return(val);
805 5cedca1b 2004-05-15 devnull }
806 5cedca1b 2004-05-15 devnull
807 5cedca1b 2004-05-15 devnull
808 5cedca1b 2004-05-15 devnull void caserd(void)
809 5cedca1b 2004-05-15 devnull {
810 5cedca1b 2004-05-15 devnull
811 5cedca1b 2004-05-15 devnull lgf++;
812 5cedca1b 2004-05-15 devnull skip();
813 5cedca1b 2004-05-15 devnull getname();
814 5cedca1b 2004-05-15 devnull if (!iflg) {
815 5cedca1b 2004-05-15 devnull if (quiet) {
816 5cedca1b 2004-05-15 devnull if (NROFF) {
817 5cedca1b 2004-05-15 devnull echo_off();
818 5cedca1b 2004-05-15 devnull flusho();
819 5cedca1b 2004-05-15 devnull }
820 5cedca1b 2004-05-15 devnull fprintf(stderr, "\007"); /*bell*/
821 5cedca1b 2004-05-15 devnull } else {
822 5cedca1b 2004-05-15 devnull if (nextf[0]) {
823 5cedca1b 2004-05-15 devnull fprintf(stderr, "%s:", nextf);
824 5cedca1b 2004-05-15 devnull } else {
825 5cedca1b 2004-05-15 devnull fprintf(stderr, "\007"); /*bell*/
826 5cedca1b 2004-05-15 devnull }
827 5cedca1b 2004-05-15 devnull }
828 5cedca1b 2004-05-15 devnull }
829 5cedca1b 2004-05-15 devnull collect();
830 5cedca1b 2004-05-15 devnull tty++;
831 5cedca1b 2004-05-15 devnull pushi(RD_OFFSET, PAIR('r','d'));
832 5cedca1b 2004-05-15 devnull }
833 5cedca1b 2004-05-15 devnull
834 c5561c23 2004-05-16 devnull int
835 5cedca1b 2004-05-15 devnull rdtty(void)
836 5cedca1b 2004-05-15 devnull {
837 5cedca1b 2004-05-15 devnull char onechar;
838 5cedca1b 2004-05-15 devnull
839 5cedca1b 2004-05-15 devnull onechar = 0;
840 5cedca1b 2004-05-15 devnull if (read(0, &onechar, 1) == 1) {
841 5cedca1b 2004-05-15 devnull if (onechar == '\n')
842 5cedca1b 2004-05-15 devnull tty++;
843 fa325e9b 2020-01-10 cross else
844 5cedca1b 2004-05-15 devnull tty = 1;
845 5cedca1b 2004-05-15 devnull if (tty != 3)
846 5cedca1b 2004-05-15 devnull return(onechar);
847 5cedca1b 2004-05-15 devnull }
848 5cedca1b 2004-05-15 devnull tty = 0;
849 5cedca1b 2004-05-15 devnull if (NROFF && quiet)
850 5cedca1b 2004-05-15 devnull echo_on();
851 5cedca1b 2004-05-15 devnull return(0);
852 5cedca1b 2004-05-15 devnull }
853 5cedca1b 2004-05-15 devnull
854 5cedca1b 2004-05-15 devnull
855 5cedca1b 2004-05-15 devnull void caseec(void)
856 5cedca1b 2004-05-15 devnull {
857 5cedca1b 2004-05-15 devnull eschar = chget('\\');
858 5cedca1b 2004-05-15 devnull }
859 5cedca1b 2004-05-15 devnull
860 5cedca1b 2004-05-15 devnull
861 5cedca1b 2004-05-15 devnull void caseeo(void)
862 5cedca1b 2004-05-15 devnull {
863 5cedca1b 2004-05-15 devnull eschar = 0;
864 5cedca1b 2004-05-15 devnull }
865 5cedca1b 2004-05-15 devnull
866 5cedca1b 2004-05-15 devnull
867 5cedca1b 2004-05-15 devnull void caseta(void)
868 5cedca1b 2004-05-15 devnull {
869 5cedca1b 2004-05-15 devnull int i, j, k;
870 5cedca1b 2004-05-15 devnull
871 5cedca1b 2004-05-15 devnull tabtab[0] = nonumb = 0;
872 5cedca1b 2004-05-15 devnull for (i = 0; ((i < (NTAB - 1)) && !nonumb); i++) {
873 5cedca1b 2004-05-15 devnull if (skip())
874 5cedca1b 2004-05-15 devnull break;
875 5cedca1b 2004-05-15 devnull k = tabtab[max(i-1, 0)] & TABMASK;
876 5cedca1b 2004-05-15 devnull if ((j = max(hnumb(&k), 0)) > TABMASK) {
877 5cedca1b 2004-05-15 devnull ERROR "Tab too far away" WARN;
878 5cedca1b 2004-05-15 devnull j = TABMASK;
879 5cedca1b 2004-05-15 devnull }
880 5cedca1b 2004-05-15 devnull tabtab[i] = j & TABMASK;
881 fa325e9b 2020-01-10 cross if (!nonumb)
882 5cedca1b 2004-05-15 devnull switch (cbits(ch)) {
883 5cedca1b 2004-05-15 devnull case 'C':
884 5cedca1b 2004-05-15 devnull tabtab[i] |= CTAB;
885 5cedca1b 2004-05-15 devnull break;
886 5cedca1b 2004-05-15 devnull case 'R':
887 5cedca1b 2004-05-15 devnull tabtab[i] |= RTAB;
888 5cedca1b 2004-05-15 devnull break;
889 5cedca1b 2004-05-15 devnull default: /*includes L*/
890 5cedca1b 2004-05-15 devnull break;
891 5cedca1b 2004-05-15 devnull }
892 5cedca1b 2004-05-15 devnull nonumb = ch = 0;
893 5cedca1b 2004-05-15 devnull }
894 5cedca1b 2004-05-15 devnull if (!skip())
895 5cedca1b 2004-05-15 devnull ERROR "Too many tab stops" WARN;
896 5cedca1b 2004-05-15 devnull tabtab[i] = 0;
897 5cedca1b 2004-05-15 devnull }
898 5cedca1b 2004-05-15 devnull
899 5cedca1b 2004-05-15 devnull
900 5cedca1b 2004-05-15 devnull void casene(void)
901 5cedca1b 2004-05-15 devnull {
902 5cedca1b 2004-05-15 devnull int i, j;
903 5cedca1b 2004-05-15 devnull
904 5cedca1b 2004-05-15 devnull skip();
905 5cedca1b 2004-05-15 devnull i = vnumb((int *)0);
906 5cedca1b 2004-05-15 devnull if (nonumb)
907 5cedca1b 2004-05-15 devnull i = lss;
908 5cedca1b 2004-05-15 devnull if (dip == d && numtabp[NL].val == -1) {
909 5cedca1b 2004-05-15 devnull newline(1);
910 5cedca1b 2004-05-15 devnull return;
911 5cedca1b 2004-05-15 devnull }
912 5cedca1b 2004-05-15 devnull if (i > (j = findt1())) {
913 5cedca1b 2004-05-15 devnull i = lss;
914 5cedca1b 2004-05-15 devnull lss = j;
915 5cedca1b 2004-05-15 devnull dip->nls = 0;
916 5cedca1b 2004-05-15 devnull newline(0);
917 5cedca1b 2004-05-15 devnull lss = i;
918 5cedca1b 2004-05-15 devnull }
919 5cedca1b 2004-05-15 devnull }
920 5cedca1b 2004-05-15 devnull
921 5cedca1b 2004-05-15 devnull
922 5cedca1b 2004-05-15 devnull void casetr(void)
923 5cedca1b 2004-05-15 devnull {
924 5cedca1b 2004-05-15 devnull int i, j;
925 5cedca1b 2004-05-15 devnull Tchar k;
926 5cedca1b 2004-05-15 devnull
927 5cedca1b 2004-05-15 devnull lgf++;
928 5cedca1b 2004-05-15 devnull skip();
929 5cedca1b 2004-05-15 devnull while ((i = cbits(k=getch())) != '\n') {
930 5cedca1b 2004-05-15 devnull if (ismot(k))
931 5cedca1b 2004-05-15 devnull return;
932 5cedca1b 2004-05-15 devnull if (ismot(k = getch()))
933 5cedca1b 2004-05-15 devnull return;
934 5cedca1b 2004-05-15 devnull if ((j = cbits(k)) == '\n')
935 5cedca1b 2004-05-15 devnull j = ' ';
936 5cedca1b 2004-05-15 devnull trtab[i] = j;
937 5cedca1b 2004-05-15 devnull }
938 5cedca1b 2004-05-15 devnull }
939 5cedca1b 2004-05-15 devnull
940 5cedca1b 2004-05-15 devnull
941 5cedca1b 2004-05-15 devnull void casecu(void)
942 5cedca1b 2004-05-15 devnull {
943 5cedca1b 2004-05-15 devnull cu++;
944 5cedca1b 2004-05-15 devnull caseul();
945 5cedca1b 2004-05-15 devnull }
946 5cedca1b 2004-05-15 devnull
947 5cedca1b 2004-05-15 devnull
948 5cedca1b 2004-05-15 devnull void caseul(void)
949 5cedca1b 2004-05-15 devnull {
950 5cedca1b 2004-05-15 devnull int i;
951 5cedca1b 2004-05-15 devnull
952 5cedca1b 2004-05-15 devnull noscale++;
953 5cedca1b 2004-05-15 devnull skip();
954 5cedca1b 2004-05-15 devnull i = max(atoi0(), 0);
955 5cedca1b 2004-05-15 devnull if (nonumb)
956 5cedca1b 2004-05-15 devnull i = 1;
957 5cedca1b 2004-05-15 devnull if (ul && (i == 0)) {
958 5cedca1b 2004-05-15 devnull font = sfont;
959 5cedca1b 2004-05-15 devnull ul = cu = 0;
960 5cedca1b 2004-05-15 devnull }
961 5cedca1b 2004-05-15 devnull if (i) {
962 5cedca1b 2004-05-15 devnull if (!ul) {
963 5cedca1b 2004-05-15 devnull sfont = font;
964 5cedca1b 2004-05-15 devnull font = ulfont;
965 5cedca1b 2004-05-15 devnull }
966 5cedca1b 2004-05-15 devnull ul = i;
967 5cedca1b 2004-05-15 devnull }
968 5cedca1b 2004-05-15 devnull noscale = 0;
969 5cedca1b 2004-05-15 devnull mchbits();
970 5cedca1b 2004-05-15 devnull }
971 5cedca1b 2004-05-15 devnull
972 5cedca1b 2004-05-15 devnull
973 5cedca1b 2004-05-15 devnull void caseuf(void)
974 5cedca1b 2004-05-15 devnull {
975 5cedca1b 2004-05-15 devnull int i, j;
976 5cedca1b 2004-05-15 devnull
977 5cedca1b 2004-05-15 devnull if (skip() || !(i = getrq()) || i == 'S' || (j = findft(i)) == -1)
978 5cedca1b 2004-05-15 devnull ulfont = ULFONT; /*default underline position*/
979 fa325e9b 2020-01-10 cross else
980 5cedca1b 2004-05-15 devnull ulfont = j;
981 5cedca1b 2004-05-15 devnull if (NROFF && ulfont == FT)
982 5cedca1b 2004-05-15 devnull ulfont = ULFONT;
983 5cedca1b 2004-05-15 devnull }
984 5cedca1b 2004-05-15 devnull
985 5cedca1b 2004-05-15 devnull
986 5cedca1b 2004-05-15 devnull void caseit(void)
987 5cedca1b 2004-05-15 devnull {
988 5cedca1b 2004-05-15 devnull int i;
989 5cedca1b 2004-05-15 devnull
990 5cedca1b 2004-05-15 devnull lgf++;
991 5cedca1b 2004-05-15 devnull it = itmac = 0;
992 5cedca1b 2004-05-15 devnull noscale++;
993 5cedca1b 2004-05-15 devnull skip();
994 5cedca1b 2004-05-15 devnull i = atoi0();
995 5cedca1b 2004-05-15 devnull skip();
996 5cedca1b 2004-05-15 devnull if (!nonumb && (itmac = getrq()))
997 5cedca1b 2004-05-15 devnull it = i;
998 5cedca1b 2004-05-15 devnull noscale = 0;
999 5cedca1b 2004-05-15 devnull }
1000 5cedca1b 2004-05-15 devnull
1001 5cedca1b 2004-05-15 devnull
1002 5cedca1b 2004-05-15 devnull void casemc(void)
1003 5cedca1b 2004-05-15 devnull {
1004 5cedca1b 2004-05-15 devnull int i;
1005 5cedca1b 2004-05-15 devnull
1006 5cedca1b 2004-05-15 devnull if (icf > 1)
1007 5cedca1b 2004-05-15 devnull ic = 0;
1008 5cedca1b 2004-05-15 devnull icf = 0;
1009 5cedca1b 2004-05-15 devnull if (skip())
1010 5cedca1b 2004-05-15 devnull return;
1011 5cedca1b 2004-05-15 devnull ic = getch();
1012 5cedca1b 2004-05-15 devnull icf = 1;
1013 5cedca1b 2004-05-15 devnull skip();
1014 5cedca1b 2004-05-15 devnull i = max(hnumb((int *)0), 0);
1015 5cedca1b 2004-05-15 devnull if (!nonumb)
1016 5cedca1b 2004-05-15 devnull ics = i;
1017 5cedca1b 2004-05-15 devnull }
1018 5cedca1b 2004-05-15 devnull
1019 5cedca1b 2004-05-15 devnull
1020 5cedca1b 2004-05-15 devnull void casemk(void)
1021 5cedca1b 2004-05-15 devnull {
1022 5cedca1b 2004-05-15 devnull int i, j;
1023 5cedca1b 2004-05-15 devnull
1024 5cedca1b 2004-05-15 devnull if (dip != d)
1025 fa325e9b 2020-01-10 cross j = dip->dnl;
1026 fa325e9b 2020-01-10 cross else
1027 5cedca1b 2004-05-15 devnull j = numtabp[NL].val;
1028 5cedca1b 2004-05-15 devnull if (skip()) {
1029 5cedca1b 2004-05-15 devnull dip->mkline = j;
1030 5cedca1b 2004-05-15 devnull return;
1031 5cedca1b 2004-05-15 devnull }
1032 5cedca1b 2004-05-15 devnull if ((i = getrq()) == 0)
1033 5cedca1b 2004-05-15 devnull return;
1034 5cedca1b 2004-05-15 devnull numtabp[findr(i)].val = j;
1035 5cedca1b 2004-05-15 devnull }
1036 5cedca1b 2004-05-15 devnull
1037 5cedca1b 2004-05-15 devnull
1038 5cedca1b 2004-05-15 devnull void casesv(void)
1039 5cedca1b 2004-05-15 devnull {
1040 5cedca1b 2004-05-15 devnull int i;
1041 5cedca1b 2004-05-15 devnull
1042 5cedca1b 2004-05-15 devnull skip();
1043 5cedca1b 2004-05-15 devnull if ((i = vnumb((int *)0)) < 0)
1044 5cedca1b 2004-05-15 devnull return;
1045 5cedca1b 2004-05-15 devnull if (nonumb)
1046 5cedca1b 2004-05-15 devnull i = 1;
1047 5cedca1b 2004-05-15 devnull sv += i;
1048 5cedca1b 2004-05-15 devnull caseos();
1049 5cedca1b 2004-05-15 devnull }
1050 5cedca1b 2004-05-15 devnull
1051 5cedca1b 2004-05-15 devnull
1052 5cedca1b 2004-05-15 devnull void caseos(void)
1053 5cedca1b 2004-05-15 devnull {
1054 5cedca1b 2004-05-15 devnull int savlss;
1055 5cedca1b 2004-05-15 devnull
1056 5cedca1b 2004-05-15 devnull if (sv <= findt1()) {
1057 5cedca1b 2004-05-15 devnull savlss = lss;
1058 5cedca1b 2004-05-15 devnull lss = sv;
1059 5cedca1b 2004-05-15 devnull newline(0);
1060 5cedca1b 2004-05-15 devnull lss = savlss;
1061 5cedca1b 2004-05-15 devnull sv = 0;
1062 5cedca1b 2004-05-15 devnull }
1063 5cedca1b 2004-05-15 devnull }
1064 5cedca1b 2004-05-15 devnull
1065 5cedca1b 2004-05-15 devnull
1066 5cedca1b 2004-05-15 devnull void casenm(void)
1067 5cedca1b 2004-05-15 devnull {
1068 5cedca1b 2004-05-15 devnull int i;
1069 5cedca1b 2004-05-15 devnull
1070 5cedca1b 2004-05-15 devnull lnmod = nn = 0;
1071 5cedca1b 2004-05-15 devnull if (skip())
1072 5cedca1b 2004-05-15 devnull return;
1073 5cedca1b 2004-05-15 devnull lnmod++;
1074 5cedca1b 2004-05-15 devnull noscale++;
1075 5cedca1b 2004-05-15 devnull i = inumb(&numtabp[LN].val);
1076 5cedca1b 2004-05-15 devnull if (!nonumb)
1077 5cedca1b 2004-05-15 devnull numtabp[LN].val = max(i, 0);
1078 5cedca1b 2004-05-15 devnull getnm(&ndf, 1);
1079 5cedca1b 2004-05-15 devnull getnm(&nms, 0);
1080 5cedca1b 2004-05-15 devnull getnm(&ni, 0);
1081 5cedca1b 2004-05-15 devnull getnm(&nmwid, 3); /* really kludgy! */
1082 5cedca1b 2004-05-15 devnull noscale = 0;
1083 5cedca1b 2004-05-15 devnull nmbits = chbits;
1084 5cedca1b 2004-05-15 devnull }
1085 5cedca1b 2004-05-15 devnull
1086 5cedca1b 2004-05-15 devnull /*
1087 5cedca1b 2004-05-15 devnull * .nm relies on the fact that illegal args are skipped; don't warn
1088 5cedca1b 2004-05-15 devnull * for illegality of these
1089 5cedca1b 2004-05-15 devnull */
1090 5cedca1b 2004-05-15 devnull void getnm(int *p, int min)
1091 5cedca1b 2004-05-15 devnull {
1092 5cedca1b 2004-05-15 devnull int i;
1093 5cedca1b 2004-05-15 devnull int savtr = trace;
1094 5cedca1b 2004-05-15 devnull
1095 5cedca1b 2004-05-15 devnull eat(' ');
1096 5cedca1b 2004-05-15 devnull if (skip())
1097 5cedca1b 2004-05-15 devnull return;
1098 5cedca1b 2004-05-15 devnull trace = 0;
1099 5cedca1b 2004-05-15 devnull i = atoi0();
1100 5cedca1b 2004-05-15 devnull if (nonumb)
1101 5cedca1b 2004-05-15 devnull return;
1102 5cedca1b 2004-05-15 devnull *p = max(i, min);
1103 5cedca1b 2004-05-15 devnull trace = savtr;
1104 5cedca1b 2004-05-15 devnull }
1105 5cedca1b 2004-05-15 devnull
1106 5cedca1b 2004-05-15 devnull
1107 5cedca1b 2004-05-15 devnull void casenn(void)
1108 5cedca1b 2004-05-15 devnull {
1109 5cedca1b 2004-05-15 devnull noscale++;
1110 5cedca1b 2004-05-15 devnull skip();
1111 5cedca1b 2004-05-15 devnull nn = max(atoi0(), 1);
1112 5cedca1b 2004-05-15 devnull noscale = 0;
1113 5cedca1b 2004-05-15 devnull }
1114 5cedca1b 2004-05-15 devnull
1115 5cedca1b 2004-05-15 devnull
1116 5cedca1b 2004-05-15 devnull void caseab(void)
1117 5cedca1b 2004-05-15 devnull {
1118 5cedca1b 2004-05-15 devnull casetm1(1, stderr);
1119 5cedca1b 2004-05-15 devnull done3(0);
1120 5cedca1b 2004-05-15 devnull }
1121 5cedca1b 2004-05-15 devnull
1122 5cedca1b 2004-05-15 devnull
1123 5cedca1b 2004-05-15 devnull /* nroff terminal handling has been pretty well excised */
1124 5cedca1b 2004-05-15 devnull /* as part of the merge with troff. these are ghostly remnants, */
1125 5cedca1b 2004-05-15 devnull /* called, but doing nothing. restore them at your peril. */
1126 5cedca1b 2004-05-15 devnull
1127 5cedca1b 2004-05-15 devnull
1128 5cedca1b 2004-05-15 devnull void save_tty(void) /*save any tty settings that may be changed*/
1129 5cedca1b 2004-05-15 devnull {
1130 5cedca1b 2004-05-15 devnull }
1131 5cedca1b 2004-05-15 devnull
1132 5cedca1b 2004-05-15 devnull
1133 5cedca1b 2004-05-15 devnull void restore_tty(void) /*restore tty settings from beginning*/
1134 5cedca1b 2004-05-15 devnull {
1135 5cedca1b 2004-05-15 devnull }
1136 5cedca1b 2004-05-15 devnull
1137 5cedca1b 2004-05-15 devnull
1138 5cedca1b 2004-05-15 devnull void set_tty(void)
1139 5cedca1b 2004-05-15 devnull {
1140 5cedca1b 2004-05-15 devnull }
1141 5cedca1b 2004-05-15 devnull
1142 5cedca1b 2004-05-15 devnull
1143 5cedca1b 2004-05-15 devnull void echo_off(void) /*turn off ECHO for .rd in "-q" mode*/
1144 5cedca1b 2004-05-15 devnull {
1145 5cedca1b 2004-05-15 devnull }
1146 5cedca1b 2004-05-15 devnull
1147 5cedca1b 2004-05-15 devnull
1148 5cedca1b 2004-05-15 devnull void echo_on(void) /*restore ECHO after .rd in "-q" mode*/
1149 5cedca1b 2004-05-15 devnull {
1150 5cedca1b 2004-05-15 devnull }