Commit | Line | Data |
---|---|---|
f2217188 BJ |
1 | #include "tdef.h" |
2 | #include <sgtty.h> | |
3 | extern | |
4 | #include "d.h" | |
5 | extern | |
6 | #include "v.h" | |
7 | #include "s.h" | |
8 | ||
9 | /* | |
10 | troff5.c | |
11 | ||
12 | misc processing requests | |
13 | */ | |
14 | ||
15 | extern int inchar[LNSIZE], *pinchar; /* XXX */ | |
16 | extern struct s *frame; | |
17 | extern struct s *litlev; | |
18 | extern filep ip; | |
19 | extern filep offset; | |
20 | ||
21 | extern int ascii; | |
22 | extern int nonumb; | |
23 | extern int admod; | |
24 | extern int ad; | |
25 | extern int fi; | |
26 | extern int cc; | |
27 | extern int c2; | |
28 | extern int ohc; | |
29 | extern int tabc; | |
30 | extern int dotc; | |
31 | extern int pendnf; | |
32 | extern int hyf; | |
33 | extern int ce; | |
34 | extern int po; | |
35 | extern int po1; | |
36 | extern int nc; | |
37 | extern int in; | |
38 | extern int un; | |
39 | extern int un1; | |
40 | extern int in1; | |
41 | extern int ll; | |
42 | extern int ll1; | |
43 | extern int lt; | |
44 | extern int lt1; | |
45 | extern int nlist[NTRAP]; | |
46 | extern int mlist[NTRAP]; | |
47 | extern int lgf; | |
48 | extern int pl; | |
49 | extern int npn; | |
50 | extern int npnflg; | |
51 | extern int copyf; | |
52 | extern char nextf[]; | |
53 | extern int trap; | |
54 | extern int lss; | |
55 | extern int em; | |
56 | extern int evlist[EVLSZ]; | |
57 | extern int evi; | |
58 | extern int ibf; | |
59 | extern int ev; | |
60 | extern int ch; | |
61 | extern int nflush; | |
62 | extern int tty; | |
63 | extern struct sgttyb ttys; | |
64 | extern int quiet; | |
65 | extern int iflg; | |
66 | extern int eschar; | |
67 | extern int lit; | |
68 | extern int ls; | |
69 | extern int ls1; | |
70 | extern int tabtab[]; | |
71 | extern char trtab[]; | |
72 | extern int ul; | |
73 | extern int cu; | |
74 | extern int sfont; | |
75 | extern int font; | |
76 | extern int fontlab[]; | |
77 | extern int it; | |
78 | extern int itmac; | |
79 | extern int noscale; | |
80 | extern int ic; | |
81 | extern int icf; | |
82 | extern int ics; | |
83 | extern int *vlist; | |
84 | extern int sv; | |
85 | extern int esc; | |
86 | extern int nn; | |
87 | extern int nms; | |
88 | extern int ndf; | |
89 | extern int lnmod; | |
90 | extern int ni; | |
91 | extern int lnsize; | |
92 | extern int nb; | |
93 | extern int nlflg; | |
94 | extern int apts, apts1, pts, pts1, font, font1; | |
95 | extern int ulfont; | |
96 | extern int ulbit; | |
97 | extern int error; | |
98 | extern int nmbits; | |
99 | extern int chbits; | |
100 | extern int tdelim; | |
101 | extern int xxx; | |
102 | int iflist[NIF]; | |
103 | int ifx; | |
104 | ||
105 | casead(){ | |
106 | register i; | |
107 | ||
108 | ad = 1; | |
109 | /*leave admod alone*/ | |
110 | if(skip())return; | |
111 | switch(i = getch() & CMASK){ | |
112 | case 'r': /*right adj, left ragged*/ | |
113 | admod = 2; | |
114 | break; | |
115 | case 'l': /*left adj, right ragged*/ | |
116 | admod = ad = 0; /*same as casena*/ | |
117 | break; | |
118 | case 'c': /*centered adj*/ | |
119 | admod = 1; | |
120 | break; | |
121 | case 'b': case 'n': | |
122 | admod = 0; | |
123 | break; | |
124 | case '0': case '2': case '4': | |
125 | ad = 0; | |
126 | case '1': case '3': case '5': | |
127 | admod = (i - '0')/2; | |
128 | } | |
129 | } | |
130 | casena(){ | |
131 | ad = 0; | |
132 | } | |
133 | casefi(){ | |
134 | tbreak(); | |
135 | fi++; | |
136 | pendnf = 0; | |
137 | lnsize = LNSIZE; | |
138 | } | |
139 | casenf(){ | |
140 | tbreak(); | |
141 | fi = 0; | |
142 | /* can't do while oline is only LNSIZE | |
143 | lnsize = LNSIZE + WDSIZE; | |
144 | */ | |
145 | } | |
146 | casers(){ | |
147 | dip->nls = 0; | |
148 | } | |
149 | casens(){ | |
150 | dip->nls++; | |
151 | } | |
152 | chget(c) | |
153 | int c; | |
154 | { | |
155 | register i; | |
156 | ||
157 | if(skip() || | |
158 | ((i = getch()) & MOT) || | |
159 | ((i&CMASK) == ' ') || | |
160 | ((i&CMASK) == '\n')){ | |
161 | ch = i; | |
162 | return(c); | |
163 | }else return(i & BMASK); | |
164 | } | |
165 | casecc(){ | |
166 | cc = chget('.'); | |
167 | } | |
168 | casec2(){ | |
169 | c2 = chget('\''); | |
170 | } | |
171 | casehc(){ | |
172 | ohc = chget(OHC); | |
173 | } | |
174 | casetc(){ | |
175 | tabc = chget(0); | |
176 | } | |
177 | caselc(){ | |
178 | dotc = chget(0); | |
179 | } | |
180 | casehy(){ | |
181 | register i; | |
182 | ||
183 | hyf = 1; | |
184 | if(skip())return; | |
185 | noscale++; | |
186 | i = atoi(); | |
187 | noscale = 0; | |
188 | if(nonumb)return; | |
189 | hyf = max(i,0); | |
190 | } | |
191 | casenh(){ | |
192 | hyf = 0; | |
193 | } | |
194 | max(aa,bb) | |
195 | int aa,bb; | |
196 | { | |
197 | if(aa>bb)return(aa); | |
198 | else return(bb); | |
199 | } | |
200 | casece(){ | |
201 | register i; | |
202 | ||
203 | noscale++; | |
204 | skip(); | |
205 | i = max(atoi(),0); | |
206 | if(nonumb)i = 1; | |
207 | tbreak(); | |
208 | ce = i; | |
209 | noscale = 0; | |
210 | } | |
211 | casein(){ | |
212 | register i; | |
213 | ||
214 | if(skip())i = in1; | |
215 | else i = max(hnumb(&in),0); | |
216 | tbreak(); | |
217 | in1 = in; | |
218 | in = i; | |
219 | if(!nc){ | |
220 | un = in; | |
221 | setnel(); | |
222 | } | |
223 | } | |
224 | casell(){ | |
225 | register i; | |
226 | ||
227 | if(skip())i = ll1; | |
228 | else i = max(hnumb(&ll),INCH/10); | |
229 | ll1 = ll; | |
230 | ll = i; | |
231 | setnel(); | |
232 | } | |
233 | caselt(){ | |
234 | register i; | |
235 | ||
236 | if(skip())i = lt1; | |
237 | else i = max(hnumb(<),0); | |
238 | lt1 = lt; | |
239 | lt = i; | |
240 | } | |
241 | caseti(){ | |
242 | register i; | |
243 | ||
244 | if(skip())return; | |
245 | i = max(hnumb(&in),0); | |
246 | tbreak(); | |
247 | un1 = i; | |
248 | setnel(); | |
249 | } | |
250 | casels(){ | |
251 | register i; | |
252 | ||
253 | noscale++; | |
254 | if(skip())i = ls1; | |
255 | else i = max(inumb(&ls),1); | |
256 | ls1 = ls; | |
257 | ls = i; | |
258 | noscale = 0; | |
259 | } | |
260 | casepo(){ | |
261 | register i; | |
262 | ||
263 | if(skip())i = po1; | |
264 | else i = max(hnumb(&po),0); | |
265 | po1 = po; | |
266 | po = i; | |
267 | #ifndef NROFF | |
268 | if(!ascii)esc += po - po1; | |
269 | #endif | |
270 | } | |
271 | casepl(){ | |
272 | register i; | |
273 | ||
274 | skip(); | |
275 | if((i = vnumb(&pl)) == 0)pl = 11 * INCH; /*11in*/ | |
276 | else pl = i; | |
277 | if(v.nl > pl)v.nl = pl; | |
278 | } | |
279 | casewh(){ | |
280 | register i, j, k; | |
281 | ||
282 | lgf++; | |
283 | skip(); | |
284 | i = vnumb((int *)0); | |
285 | if(nonumb)return; | |
286 | skip(); | |
287 | j = getrq(); | |
288 | if((k=findn(i)) != NTRAP){ | |
289 | mlist[k] = j; | |
290 | return; | |
291 | } | |
292 | for(k=0; k<NTRAP; k++)if(mlist[k] == 0)break; | |
293 | if(k == NTRAP){ | |
294 | prstrfl("Cannot plant trap.\n"); | |
295 | return; | |
296 | } | |
297 | mlist[k] = j; | |
298 | nlist[k] = i; | |
299 | } | |
300 | casech(){ | |
301 | register i, j, k; | |
302 | ||
303 | lgf++; | |
304 | skip(); | |
305 | if(!(j=getrq()))return; | |
306 | else for(k=0; k<NTRAP; k++)if(mlist[k] == j)break; | |
307 | if(k == NTRAP)return; | |
308 | skip(); | |
309 | i = vnumb((int *)0); | |
310 | if(nonumb)mlist[k] = 0; | |
311 | nlist[k] = i; | |
312 | } | |
313 | findn(i) | |
314 | int i; | |
315 | { | |
316 | register k; | |
317 | ||
318 | for(k=0; k<NTRAP; k++) | |
319 | if((nlist[k] == i) && (mlist[k] != 0))break; | |
320 | return(k); | |
321 | } | |
322 | casepn(){ | |
323 | register i; | |
324 | ||
325 | skip(); | |
326 | noscale++; | |
327 | i = max(inumb(&v.pn),0); | |
328 | noscale = 0; | |
329 | if(!nonumb){ | |
330 | npn = i; | |
331 | npnflg++; | |
332 | } | |
333 | } | |
334 | casebp(){ | |
335 | register i; | |
336 | register struct s *savframe; | |
337 | ||
338 | if(dip != d)return; | |
339 | savframe = frame; | |
340 | skip(); | |
341 | if((i = inumb(&v.pn)) < 0)i = 0; | |
342 | tbreak(); | |
343 | if(!nonumb){ | |
344 | npn = i; | |
345 | npnflg++; | |
346 | }else if(dip->nls)return; | |
347 | eject(savframe); | |
348 | } | |
349 | casetm(x) int x;{ | |
350 | register i; | |
351 | char tmbuf[NTM]; | |
352 | ||
353 | lgf++; | |
354 | copyf++; | |
355 | if(skip() && x)prstrfl("User Abort."); | |
356 | for(i=0; i<NTM-2;)if((tmbuf[i++]=getch()) == '\n')break; | |
357 | if(i == NTM-2)tmbuf[i++] = '\n'; | |
358 | tmbuf[i] = 0; | |
359 | prstrfl(tmbuf); | |
360 | copyf--; | |
361 | } | |
362 | casesp(a) | |
363 | int a; | |
364 | { | |
365 | register i, j, savlss; | |
366 | ||
367 | tbreak(); | |
368 | if(dip->nls || trap)return; | |
369 | i = findt1(); | |
370 | if(!a){ | |
371 | skip(); | |
372 | j = vnumb((int *)0); | |
373 | if(nonumb)j = lss; | |
374 | }else j = a; | |
375 | if(j == 0)return; | |
376 | if(i < j)j = i; | |
377 | savlss = lss; | |
378 | if(dip != d)i = dip->dnl; else i = v.nl; | |
379 | if((i + j) < 0)j = -i; | |
380 | lss = j; | |
381 | newline(0); | |
382 | lss = savlss; | |
383 | } | |
384 | casert(){ | |
385 | register a, *p; | |
386 | ||
387 | skip(); | |
388 | if(dip != d)p = &dip->dnl; else p = &v.nl; | |
389 | a = vnumb(p); | |
390 | if(nonumb)a = dip->mkline; | |
391 | if((a < 0) || (a >= *p))return; | |
392 | nb++; | |
393 | casesp(a - *p); | |
394 | } | |
395 | caseem(){ | |
396 | lgf++; | |
397 | skip(); | |
398 | em = getrq(); | |
399 | } | |
400 | casefl(){ | |
401 | tbreak(); | |
402 | flusho(); | |
403 | } | |
404 | caseev(){ | |
405 | register nxev; | |
406 | extern int block; | |
407 | ||
408 | if(skip()){ | |
409 | e0: | |
410 | if(evi == 0)return; | |
411 | nxev = evlist[--evi]; | |
412 | goto e1; | |
413 | } | |
414 | noscale++; | |
415 | nxev = atoi(); | |
416 | noscale = 0; | |
417 | if(nonumb)goto e0; | |
418 | flushi(); | |
419 | if((nxev >= NEV) || (nxev < 0) || (evi >= EVLSZ)){ | |
420 | prstrfl("Cannot do ev.\n"); | |
421 | if(error)done2(040);else edone(040); | |
422 | return; | |
423 | } | |
424 | evlist[evi++] = ev; | |
425 | e1: | |
426 | if(ev == nxev)return; | |
427 | lseek(ibf, (long)(ev*EVS*sizeof(int)), 0); | |
428 | write(ibf,(char *)&block, EVS*sizeof(int)); | |
429 | lseek(ibf, (long)(nxev*EVS*sizeof(int)), 0); | |
430 | read(ibf,(char *)&block, EVS*sizeof(int)); | |
431 | ev = nxev; | |
432 | } | |
433 | caseel(){ | |
434 | if(--ifx < 0){ | |
435 | ifx = 0; | |
436 | iflist[0] = 0; | |
437 | } | |
438 | caseif(2); | |
439 | } | |
440 | caseie(){ | |
441 | if(ifx >= NIF){ | |
442 | prstr("if-else overflow.\n"); | |
443 | ifx = 0; | |
444 | edone(040); | |
445 | } | |
446 | caseif(1); | |
447 | ifx++; | |
448 | } | |
449 | caseif(x) | |
450 | int x; | |
451 | { | |
452 | register i, notflag, true; | |
453 | ||
454 | if(x == 2){ | |
455 | notflag = 0; | |
456 | true = iflist[ifx]; | |
457 | goto i1; | |
458 | } | |
459 | true = 0; | |
460 | skip(); | |
461 | if(((i = getch()) & CMASK) == '!'){ | |
462 | notflag = 1; | |
463 | }else{ | |
464 | notflag = 0; | |
465 | ch = i; | |
466 | } | |
467 | i = atoi(); | |
468 | if(!nonumb){ | |
469 | if(i > 0)true++; | |
470 | goto i1; | |
471 | } | |
472 | switch((i = getch()) & CMASK){ | |
473 | case 'e': | |
474 | if(!(v.pn & 01))true++; | |
475 | break; | |
476 | case 'o': | |
477 | if(v.pn & 01)true++; | |
478 | break; | |
479 | #ifdef NROFF | |
480 | case 'n': | |
481 | true++; | |
482 | case 't': | |
483 | #endif | |
484 | #ifndef NROFF | |
485 | case 't': | |
486 | true++; | |
487 | case 'n': | |
488 | #endif | |
489 | case ' ': | |
490 | break; | |
491 | default: | |
492 | true = cmpstr(i); | |
493 | } | |
494 | i1: | |
495 | true ^= notflag; | |
496 | if(x == 1)iflist[ifx] = !true; | |
497 | if(true){ | |
498 | i2: | |
499 | do{ | |
500 | v.hp = 0; | |
501 | pinchar = inchar; /* XXX */ | |
502 | } | |
503 | while(((i = getch()) & CMASK) == ' '); | |
504 | if((i & CMASK) == LEFT)goto i2; | |
505 | ch = i; | |
506 | nflush++; | |
507 | }else{ | |
508 | copyf++; | |
509 | if(eat(LEFT) == LEFT){ | |
510 | while(eatblk(RIGHT,LEFT) != RIGHT)nlflg = 0; | |
511 | } | |
512 | copyf--; | |
513 | } | |
514 | } | |
515 | eatblk(right,left) | |
516 | int right,left; | |
517 | { | |
518 | register i; | |
519 | ||
520 | e0: | |
521 | while(((i = getch() & CMASK) != right) && | |
522 | (i != left) && | |
523 | (i != '\n')); | |
524 | if(i == left){ | |
525 | while((i=eatblk(right,left)) != right)nlflg = 0; | |
526 | goto e0; | |
527 | } | |
528 | return(i); | |
529 | } | |
530 | cmpstr(delim) | |
531 | int delim; | |
532 | { | |
533 | register i, j; | |
534 | register filep p; | |
535 | extern filep alloc(); | |
536 | extern filep incoff(); | |
537 | filep begin; | |
538 | int cnt, k; | |
539 | int savapts, savapts1, savfont, savfont1, | |
540 | savpts, savpts1; | |
541 | ||
542 | if(delim & MOT)return(0); | |
543 | delim &= CMASK; | |
544 | if(dip != d)wbfl(); | |
545 | if((offset = begin = alloc()) == (filep)0)return(0); | |
546 | cnt = 0; | |
547 | v.hp = 0; | |
548 | pinchar = inchar; /* XXX */ | |
549 | savapts = apts; | |
550 | savapts1 = apts1; | |
551 | savfont = font; | |
552 | savfont1 = font1; | |
553 | savpts = pts; | |
554 | savpts1 = pts1; | |
555 | while(((j = (i=getch()) & CMASK) != delim) && (j != '\n')){ | |
556 | wbf(i); | |
557 | cnt++; | |
558 | } | |
559 | wbt(0); | |
560 | k = !cnt; | |
561 | if(nlflg)goto rtn; | |
562 | p = begin; | |
563 | apts = savapts; | |
564 | apts1 = savapts1; | |
565 | font = savfont; | |
566 | font1 = savfont1; | |
567 | pts = savpts; | |
568 | pts1 = savpts1; | |
569 | mchbits(); | |
570 | v.hp = 0; | |
571 | pinchar = inchar; /* XXX */ | |
572 | while(((j = (i=getch()) & CMASK) != delim) && (j != '\n')){ | |
573 | if(rbf0(p) != i){ | |
574 | eat(delim); | |
575 | k = 0; | |
576 | break; | |
577 | } | |
578 | p = incoff(p); | |
579 | k = !(--cnt); | |
580 | } | |
581 | rtn: | |
582 | apts = savapts; | |
583 | apts1 = savapts1; | |
584 | font = savfont; | |
585 | font1 = savfont1; | |
586 | pts = savpts; | |
587 | pts1 = savpts1; | |
588 | mchbits(); | |
589 | offset = dip->op; | |
590 | ffree(begin); | |
591 | return(k); | |
592 | } | |
593 | caserd(){ | |
594 | ||
595 | lgf++; | |
596 | skip(); | |
597 | getname(); | |
598 | if(!iflg){ | |
599 | if(quiet){ | |
600 | ttys.sg_flags &= ~ECHO; | |
601 | stty(0, &ttys); | |
602 | prstrfl("\a"); /*bell*/ | |
603 | }else{ | |
604 | if(nextf[0]){ | |
605 | prstr(nextf); | |
606 | prstr(":"); | |
607 | }else{ | |
608 | prstr("\a"); /*bell*/ | |
609 | } | |
610 | } | |
611 | } | |
612 | collect(); | |
613 | tty++; | |
614 | pushi((filep)-1); | |
615 | } | |
616 | rdtty(){ | |
617 | char onechar; | |
618 | ||
619 | onechar = 0; | |
620 | if(read(0, &onechar, 1) == 1){ | |
621 | if(onechar == '\n')tty++; | |
622 | else tty = 1; | |
623 | if(tty != 3)return(onechar); | |
624 | } | |
625 | popi(); | |
626 | tty = 0; | |
627 | if(quiet){ | |
628 | ttys.sg_flags |= ECHO; | |
629 | stty(0, &ttys); | |
630 | } | |
631 | return(0); | |
632 | } | |
633 | caseec(){ | |
634 | eschar = chget('\\'); | |
635 | } | |
636 | caseeo(){ | |
637 | eschar = 0; | |
638 | } | |
639 | caseli(){ | |
640 | ||
641 | skip(); | |
642 | lit = max(inumb((int *)0),1); | |
643 | litlev = frame; | |
644 | if((dip == d) && (v.nl == -1))newline(1); | |
645 | } | |
646 | caseta(){ | |
647 | register i; | |
648 | ||
649 | tabtab[0] = nonumb = 0; | |
650 | for(i=0; ((i < (NTAB-1)) && !nonumb); i++){ | |
651 | if(skip())break; | |
652 | tabtab[i] = max(hnumb(&tabtab[max(i-1,0)]),0) & TMASK; | |
653 | if(!nonumb) switch(ch & CMASK){ | |
654 | case 'C': | |
655 | tabtab[i] |= CTAB; | |
656 | break; | |
657 | case 'R': | |
658 | tabtab[i] |= RTAB; | |
659 | break; | |
660 | default: /*includes L*/ | |
661 | break; | |
662 | } | |
663 | nonumb = ch = 0; | |
664 | } | |
665 | tabtab[i] = 0; | |
666 | } | |
667 | casene(){ | |
668 | register i, j; | |
669 | ||
670 | skip(); | |
671 | i = vnumb((int *)0); | |
672 | if(nonumb)i = lss; | |
673 | if(i > (j = findt1())){ | |
674 | i = lss; | |
675 | lss = j; | |
676 | dip->nls = 0; | |
677 | newline(0); | |
678 | lss = i; | |
679 | } | |
680 | } | |
681 | casetr(){ | |
682 | register i, j; | |
683 | ||
684 | lgf++; | |
685 | skip(); | |
686 | while((i = getch() & CMASK) != '\n'){ | |
687 | if((i & MOT) || ((j = getch()) & MOT))return; | |
688 | if((j &= CMASK) == '\n')j = ' '; | |
689 | trtab[i] = j; | |
690 | } | |
691 | } | |
692 | casecu(){ | |
693 | cu++; | |
694 | caseul(); | |
695 | } | |
696 | caseul(){ | |
697 | register i; | |
698 | ||
699 | noscale++; | |
700 | if(skip())i = 1; | |
701 | else i = atoi(); | |
702 | if(ul && (i == 0)){ | |
703 | font = sfont; | |
704 | ul = cu = 0; | |
705 | } | |
706 | if(i){ | |
707 | if(!ul){ | |
708 | sfont = font; | |
709 | font = ulfont; | |
710 | } | |
711 | ul = i; | |
712 | } | |
713 | noscale = 0; | |
714 | mchbits(); | |
715 | } | |
716 | caseuf(){ | |
717 | register i, j; | |
718 | ||
719 | if(skip() || !(i = getrq()) || (i == 'S') || | |
720 | ((j = find(i,fontlab)) == -1)) | |
721 | ulfont = 1; /*default position 2*/ | |
722 | else ulfont = j; | |
723 | #ifdef NROFF | |
724 | if(ulfont == 0)ulfont = 1; | |
725 | #endif | |
726 | ulbit = ulfont<<9; | |
727 | } | |
728 | caseit(){ | |
729 | register i; | |
730 | ||
731 | lgf++; | |
732 | it = itmac = 0; | |
733 | noscale++; | |
734 | skip(); | |
735 | i = atoi(); | |
736 | skip(); | |
737 | if(!nonumb && (itmac = getrq()))it = i; | |
738 | noscale = 0; | |
739 | } | |
740 | casemc(){ | |
741 | register i; | |
742 | ||
743 | if(icf > 1)ic = 0; | |
744 | icf = 0; | |
745 | if(skip())return; | |
746 | ic = getch(); | |
747 | icf = 1; | |
748 | skip(); | |
749 | i = max(hnumb((int *)0),0); | |
750 | if(!nonumb)ics = i; | |
751 | } | |
752 | casemk(){ | |
753 | register i, j; | |
754 | ||
755 | if(dip != d)j = dip->dnl; else j = v.nl; | |
756 | if(skip()){ | |
757 | dip->mkline = j; | |
758 | return; | |
759 | } | |
760 | if((i = getrq()) == 0)return; | |
761 | vlist[findr(i)] = j; | |
762 | } | |
763 | casesv(){ | |
764 | register i; | |
765 | ||
766 | skip(); | |
767 | if((i = vnumb((int *)0)) < 0)return; | |
768 | if(nonumb)i = 1; | |
769 | sv += i; | |
770 | caseos(); | |
771 | } | |
772 | caseos(){ | |
773 | register savlss; | |
774 | ||
775 | if(sv <= findt1()){ | |
776 | savlss = lss; | |
777 | lss = sv; | |
778 | newline(0); | |
779 | lss = savlss; | |
780 | sv = 0; | |
781 | } | |
782 | } | |
783 | casenm(){ | |
784 | register i; | |
785 | ||
786 | lnmod = nn = 0; | |
787 | if(skip())return; | |
788 | lnmod++; | |
789 | noscale++; | |
790 | i = inumb(&v.ln); | |
791 | if(!nonumb)v.ln = max(i,0); | |
792 | getnm(&ndf,1); | |
793 | getnm(&nms,0); | |
794 | getnm(&ni,0); | |
795 | noscale = 0; | |
796 | nmbits = chbits; | |
797 | } | |
798 | getnm(p,min) | |
799 | int *p, min; | |
800 | { | |
801 | register i; | |
802 | ||
803 | eat(' '); | |
804 | if(skip())return; | |
805 | i = atoi(); | |
806 | if(nonumb)return; | |
807 | *p = max(i,min); | |
808 | } | |
809 | casenn(){ | |
810 | noscale++; | |
811 | skip(); | |
812 | nn = max(atoi(),1); | |
813 | noscale = 0; | |
814 | } | |
815 | caseab(){ | |
816 | dummy(); | |
817 | casetm(1); | |
818 | done2(0); | |
819 | } |