123883Sjaap #ifndef lint
2*64044Sbostic /*
330698Sjaap static char sccsid[] = "@(#)n5.c 2.2 (CWI) 87/03/31";
4*64044Sbostic */
5*64044Sbostic static char sccsid[] = "@(#)n5.c 2.3 (Berkeley) 07/27/93";
623883Sjaap #endif lint
723883Sjaap #include "tdef.h"
823883Sjaap #include <sgtty.h>
923905Sjaap #include "ext.h"
1023883Sjaap
1123883Sjaap /*
1223905Sjaap * troff5.c
1323905Sjaap *
1423905Sjaap * misc processing requests
1523905Sjaap */
1623883Sjaap
1723883Sjaap int iflist[NIF];
1823883Sjaap int ifx;
1923883Sjaap
casead()2023883Sjaap casead()
2123883Sjaap {
2223883Sjaap register i;
2323883Sjaap
2423883Sjaap ad = 1;
2523883Sjaap /*leave admod alone*/
2623883Sjaap if (skip())
2723883Sjaap return;
2823883Sjaap switch (i = cbits(getch())) {
2923883Sjaap case 'r': /*right adj, left ragged*/
3023883Sjaap admod = 2;
3123883Sjaap break;
3223883Sjaap case 'l': /*left adj, right ragged*/
3323883Sjaap admod = ad = 0; /*same as casena*/
3423883Sjaap break;
3523883Sjaap case 'c': /*centered adj*/
3623883Sjaap admod = 1;
3723883Sjaap break;
3823883Sjaap case 'b':
3923883Sjaap case 'n':
4023883Sjaap admod = 0;
4123883Sjaap break;
4223883Sjaap case '0':
4323883Sjaap case '2':
4423883Sjaap case '4':
4523883Sjaap ad = 0;
4623883Sjaap case '1':
4723883Sjaap case '3':
4823883Sjaap case '5':
4923883Sjaap admod = (i - '0') / 2;
5023883Sjaap }
5123883Sjaap }
5223883Sjaap
5323883Sjaap
casena()5423883Sjaap casena()
5523883Sjaap {
5623883Sjaap ad = 0;
5723883Sjaap }
5823883Sjaap
5923883Sjaap
casefi()6023883Sjaap casefi()
6123883Sjaap {
6223883Sjaap tbreak();
6323883Sjaap fi++;
6423883Sjaap pendnf = 0;
6523883Sjaap lnsize = LNSIZE;
6623883Sjaap }
6723883Sjaap
6823883Sjaap
casenf()6923883Sjaap casenf()
7023883Sjaap {
7123883Sjaap tbreak();
7223883Sjaap fi = 0;
7323883Sjaap }
7423883Sjaap
7523883Sjaap
casers()7623883Sjaap casers()
7723883Sjaap {
7823883Sjaap dip->nls = 0;
7923883Sjaap }
8023883Sjaap
8123883Sjaap
casens()8223883Sjaap casens()
8323883Sjaap {
8423883Sjaap dip->nls++;
8523883Sjaap }
8623883Sjaap
8723883Sjaap
chget(c)8823883Sjaap chget(c)
8923883Sjaap int c;
9023883Sjaap {
9123883Sjaap tchar i;
9223883Sjaap
9323883Sjaap if (skip() || ismot(i = getch()) || cbits(i) == ' ' || cbits(i) == '\n') {
9423883Sjaap ch = i;
9523883Sjaap return(c);
9623883Sjaap } else
9723905Sjaap return(i & BYTEMASK);
9823883Sjaap }
9923883Sjaap
10023883Sjaap
casecc()10123883Sjaap casecc()
10223883Sjaap {
10323883Sjaap cc = chget('.');
10423883Sjaap }
10523883Sjaap
10623883Sjaap
casec2()10723883Sjaap casec2()
10823883Sjaap {
10923883Sjaap c2 = chget('\'');
11023883Sjaap }
11123883Sjaap
11223883Sjaap
casehc()11323883Sjaap casehc()
11423883Sjaap {
11523883Sjaap ohc = chget(OHC);
11623883Sjaap }
11723883Sjaap
11823883Sjaap
casetc()11923883Sjaap casetc()
12023883Sjaap {
12123883Sjaap tabc = chget(0);
12223883Sjaap }
12323883Sjaap
12423883Sjaap
caselc()12523883Sjaap caselc()
12623883Sjaap {
12723883Sjaap dotc = chget(0);
12823883Sjaap }
12923883Sjaap
13023883Sjaap
casehy()13123883Sjaap casehy()
13223883Sjaap {
13323883Sjaap register i;
13423883Sjaap
13523883Sjaap hyf = 1;
13623883Sjaap if (skip())
13723883Sjaap return;
13823883Sjaap noscale++;
13923883Sjaap i = atoi();
14023883Sjaap noscale = 0;
14123883Sjaap if (nonumb)
14223883Sjaap return;
14323883Sjaap hyf = max(i, 0);
14423883Sjaap }
14523883Sjaap
14623883Sjaap
casenh()14723883Sjaap casenh()
14823883Sjaap {
14923883Sjaap hyf = 0;
15023883Sjaap }
15123883Sjaap
15223883Sjaap
max(aa,bb)15323883Sjaap max(aa, bb)
15423883Sjaap int aa, bb;
15523883Sjaap {
15623883Sjaap if (aa > bb)
15723883Sjaap return(aa);
15823883Sjaap else
15923883Sjaap return(bb);
16023883Sjaap }
16123883Sjaap
16223883Sjaap
casece()16323883Sjaap casece()
16423883Sjaap {
16523883Sjaap register i;
16623883Sjaap
16723883Sjaap noscale++;
16823883Sjaap skip();
16923883Sjaap i = max(atoi(), 0);
17023883Sjaap if (nonumb)
17123883Sjaap i = 1;
17223883Sjaap tbreak();
17323883Sjaap ce = i;
17423883Sjaap noscale = 0;
17523883Sjaap }
17623883Sjaap
17723883Sjaap
casein()17823883Sjaap casein()
17923883Sjaap {
18023883Sjaap register i;
18123883Sjaap
18223883Sjaap if (skip())
18323883Sjaap i = in1;
18423883Sjaap else
18523883Sjaap i = max(hnumb(&in), 0);
18623883Sjaap tbreak();
18723883Sjaap in1 = in;
18823883Sjaap in = i;
18923883Sjaap if (!nc) {
19023883Sjaap un = in;
19123883Sjaap setnel();
19223883Sjaap }
19323883Sjaap }
19423883Sjaap
19523883Sjaap
casell()19623883Sjaap casell()
19723883Sjaap {
19823883Sjaap register i;
19923883Sjaap
20023883Sjaap if (skip())
20123883Sjaap i = ll1;
20223883Sjaap else
20323883Sjaap i = max(hnumb(&ll), INCH / 10);
20423883Sjaap ll1 = ll;
20523883Sjaap ll = i;
20623883Sjaap setnel();
20723883Sjaap }
20823883Sjaap
20923883Sjaap
caselt()21023883Sjaap caselt()
21123883Sjaap {
21223883Sjaap register i;
21323883Sjaap
21423883Sjaap if (skip())
21523883Sjaap i = lt1;
21623883Sjaap else
21723883Sjaap i = max(hnumb(<), 0);
21823883Sjaap lt1 = lt;
21923883Sjaap lt = i;
22023883Sjaap }
22123883Sjaap
22223883Sjaap
caseti()22323883Sjaap caseti()
22423883Sjaap {
22523883Sjaap register i;
22623883Sjaap
22723883Sjaap if (skip())
22823883Sjaap return;
22923883Sjaap i = max(hnumb(&in), 0);
23023883Sjaap tbreak();
23123883Sjaap un1 = i;
23223883Sjaap setnel();
23323883Sjaap }
23423883Sjaap
23523883Sjaap
casels()23623883Sjaap casels()
23723883Sjaap {
23823883Sjaap register i;
23923883Sjaap
24023883Sjaap noscale++;
24123883Sjaap if (skip())
24223883Sjaap i = ls1;
24323883Sjaap else
24423883Sjaap i = max(inumb(&ls), 1);
24523883Sjaap ls1 = ls;
24623883Sjaap ls = i;
24723883Sjaap noscale = 0;
24823883Sjaap }
24923883Sjaap
25023883Sjaap
casepo()25123883Sjaap casepo()
25223883Sjaap {
25323883Sjaap register i;
25423883Sjaap
25523883Sjaap if (skip())
25623883Sjaap i = po1;
25723883Sjaap else
25823883Sjaap i = max(hnumb(&po), 0);
25923883Sjaap po1 = po;
26023883Sjaap po = i;
26123883Sjaap #ifndef NROFF
26223883Sjaap if (!ascii)
26323883Sjaap esc += po - po1;
26423883Sjaap #endif
26523883Sjaap }
26623883Sjaap
26723883Sjaap
casepl()26823883Sjaap casepl()
26923883Sjaap {
27023883Sjaap register i;
27123883Sjaap
27223883Sjaap skip();
27323883Sjaap if ((i = vnumb(&pl)) == 0)
27423883Sjaap pl = 11 * INCH; /*11in*/
27523883Sjaap else
27623883Sjaap pl = i;
27723905Sjaap if (numtab[NL].val > pl)
27823905Sjaap numtab[NL].val = pl;
27923883Sjaap }
28023883Sjaap
28123883Sjaap
casewh()28223883Sjaap casewh()
28323883Sjaap {
28423883Sjaap register i, j, k;
28523883Sjaap
28623883Sjaap lgf++;
28723883Sjaap skip();
28823883Sjaap i = vnumb((int *)0);
28923883Sjaap if (nonumb)
29023883Sjaap return;
29123883Sjaap skip();
29223883Sjaap j = getrq();
29323883Sjaap if ((k = findn(i)) != NTRAP) {
29423883Sjaap mlist[k] = j;
29523883Sjaap return;
29623883Sjaap }
29723883Sjaap for (k = 0; k < NTRAP; k++)
29823883Sjaap if (mlist[k] == 0)
29923883Sjaap break;
30023883Sjaap if (k == NTRAP) {
30123883Sjaap flusho();
30223905Sjaap errprint("cannot plant trap.");
30323883Sjaap return;
30423883Sjaap }
30523883Sjaap mlist[k] = j;
30623883Sjaap nlist[k] = i;
30723883Sjaap }
30823883Sjaap
30923883Sjaap
casech()31023883Sjaap casech()
31123883Sjaap {
31223883Sjaap register i, j, k;
31323883Sjaap
31423883Sjaap lgf++;
31523883Sjaap skip();
31623883Sjaap if (!(j = getrq()))
31723883Sjaap return;
31823883Sjaap else
31923883Sjaap for (k = 0; k < NTRAP; k++)
32023883Sjaap if (mlist[k] == j)
32123883Sjaap break;
32223883Sjaap if (k == NTRAP)
32323883Sjaap return;
32423883Sjaap skip();
32523883Sjaap i = vnumb((int *)0);
32623883Sjaap if (nonumb)
32723883Sjaap mlist[k] = 0;
32823883Sjaap nlist[k] = i;
32923883Sjaap }
33023883Sjaap
33123883Sjaap
findn(i)33223883Sjaap findn(i)
33323883Sjaap int i;
33423883Sjaap {
33523883Sjaap register k;
33623883Sjaap
33723883Sjaap for (k = 0; k < NTRAP; k++)
33823883Sjaap if ((nlist[k] == i) && (mlist[k] != 0))
33923883Sjaap break;
34023883Sjaap return(k);
34123883Sjaap }
34223883Sjaap
34323883Sjaap
casepn()34423883Sjaap casepn()
34523883Sjaap {
34623883Sjaap register i;
34723883Sjaap
34823883Sjaap skip();
34923883Sjaap noscale++;
35023905Sjaap i = max(inumb(&numtab[PN].val), 0);
35123883Sjaap noscale = 0;
35223883Sjaap if (!nonumb) {
35323883Sjaap npn = i;
35423883Sjaap npnflg++;
35523883Sjaap }
35623883Sjaap }
35723883Sjaap
35823883Sjaap
casebp()35923883Sjaap casebp()
36023883Sjaap {
36123883Sjaap register i;
36223883Sjaap register struct s *savframe;
36323883Sjaap
36423883Sjaap if (dip != d)
36523883Sjaap return;
36623883Sjaap savframe = frame;
36723883Sjaap skip();
36823905Sjaap if ((i = inumb(&numtab[PN].val)) < 0)
36923883Sjaap i = 0;
37023883Sjaap tbreak();
37123883Sjaap if (!nonumb) {
37223883Sjaap npn = i;
37323883Sjaap npnflg++;
37423883Sjaap } else if (dip->nls)
37523883Sjaap return;
37623883Sjaap eject(savframe);
37723883Sjaap }
37823883Sjaap
37923883Sjaap
casetm(ab)38023905Sjaap casetm(ab)
38123905Sjaap int ab;
38223883Sjaap {
38323883Sjaap register i;
38423883Sjaap char tmbuf[NTM];
38523883Sjaap
38623883Sjaap lgf++;
38723883Sjaap copyf++;
38823905Sjaap skip();
38923883Sjaap for (i = 0; i < NTM - 2; )
39023883Sjaap if ((tmbuf[i++] = getch()) == '\n')
39123883Sjaap break;
39223883Sjaap if (i == NTM - 2)
39323883Sjaap tmbuf[i++] = '\n';
39423883Sjaap tmbuf[i] = 0;
39523883Sjaap flusho();
39623905Sjaap fdprintf(stderr, "%s", tmbuf);
39723883Sjaap copyf--;
39823905Sjaap lgf--;
39923883Sjaap }
40023883Sjaap
40123883Sjaap
casesp(a)40223883Sjaap casesp(a)
40323883Sjaap int a;
40423883Sjaap {
40523883Sjaap register i, j, savlss;
40623883Sjaap
40723883Sjaap tbreak();
40823883Sjaap if (dip->nls || trap)
40923883Sjaap return;
41023883Sjaap i = findt1();
41123883Sjaap if (!a) {
41223883Sjaap skip();
41323883Sjaap j = vnumb((int *)0);
41423883Sjaap if (nonumb)
41523883Sjaap j = lss;
41623883Sjaap } else
41723883Sjaap j = a;
41823883Sjaap if (j == 0)
41923883Sjaap return;
42023883Sjaap if (i < j)
42123883Sjaap j = i;
42223883Sjaap savlss = lss;
42323883Sjaap if (dip != d)
42423883Sjaap i = dip->dnl;
42523883Sjaap else
42623905Sjaap i = numtab[NL].val;
42723883Sjaap if ((i + j) < 0)
42823883Sjaap j = -i;
42923883Sjaap lss = j;
43023883Sjaap newline(0);
43123883Sjaap lss = savlss;
43223883Sjaap }
43323883Sjaap
43423883Sjaap
casert()43523883Sjaap casert()
43623883Sjaap {
43723883Sjaap register a, *p;
43823883Sjaap
43923883Sjaap skip();
44023883Sjaap if (dip != d)
44123883Sjaap p = &dip->dnl;
44223883Sjaap else
44323905Sjaap p = &numtab[NL].val;
44423883Sjaap a = vnumb(p);
44523883Sjaap if (nonumb)
44623883Sjaap a = dip->mkline;
44723883Sjaap if ((a < 0) || (a >= *p))
44823883Sjaap return;
44923883Sjaap nb++;
45023883Sjaap casesp(a - *p);
45123883Sjaap }
45223883Sjaap
45323883Sjaap
caseem()45423883Sjaap caseem()
45523883Sjaap {
45623883Sjaap lgf++;
45723883Sjaap skip();
45823883Sjaap em = getrq();
45923883Sjaap }
46023883Sjaap
46123883Sjaap
casefl()46223883Sjaap casefl()
46323883Sjaap {
46423883Sjaap tbreak();
46523883Sjaap flusho();
46623883Sjaap }
46723883Sjaap
46823883Sjaap
caseev()46923883Sjaap caseev()
47023883Sjaap {
47123883Sjaap register nxev;
47223883Sjaap
47323883Sjaap if (skip()) {
474*64044Sbostic if (evi != 0) {
475*64044Sbostic ev = evlist[--evi];
476*64044Sbostic env = &env_array[ev];
477*64044Sbostic }
478*64044Sbostic return;
47923883Sjaap }
48023883Sjaap noscale++;
48123883Sjaap nxev = atoi();
48223883Sjaap noscale = 0;
483*64044Sbostic if (nonumb) {
484*64044Sbostic if (evi != 0) {
485*64044Sbostic ev = evlist[--evi];
486*64044Sbostic env = &env_array[ev];
487*64044Sbostic }
488*64044Sbostic return;
489*64044Sbostic }
49023883Sjaap flushi();
49123883Sjaap if ((nxev >= NEV) || (nxev < 0) || (evi >= EVLSZ)) {
49223883Sjaap flusho();
49330698Sjaap errprint("cannot do ev %d. (evi %d)", nxev, evi);
49423883Sjaap if (error)
49523883Sjaap done2(040);
49623883Sjaap else
49723883Sjaap edone(040);
49823883Sjaap return;
49923883Sjaap }
50023883Sjaap evlist[evi++] = ev;
50123883Sjaap ev = nxev;
502*64044Sbostic env = &env_array[ev];
50323883Sjaap }
50423883Sjaap
50523883Sjaap
caseel()50623883Sjaap caseel()
50723883Sjaap {
50823883Sjaap if (--ifx < 0) {
50923883Sjaap ifx = 0;
51023883Sjaap iflist[0] = 0;
51123883Sjaap }
51223883Sjaap caseif(2);
51323883Sjaap }
51423883Sjaap
51523883Sjaap
caseie()51623883Sjaap caseie()
51723883Sjaap {
51823883Sjaap if (ifx >= NIF) {
51923905Sjaap errprint("if-else overflow.");
52023883Sjaap ifx = 0;
52123883Sjaap edone(040);
52223883Sjaap }
52323883Sjaap caseif(1);
52423883Sjaap ifx++;
52523883Sjaap }
52623883Sjaap
52723883Sjaap
caseif(x)52823883Sjaap caseif(x)
52923883Sjaap int x;
53023883Sjaap {
53123883Sjaap extern int falsef;
53223905Sjaap register notflag, true;
53323883Sjaap tchar i;
53423883Sjaap
53523883Sjaap if (x == 2) {
53623883Sjaap notflag = 0;
53723883Sjaap true = iflist[ifx];
53823883Sjaap goto i1;
53923883Sjaap }
54023883Sjaap true = 0;
54123883Sjaap skip();
54223883Sjaap if ((cbits(i = getch())) == '!') {
54323883Sjaap notflag = 1;
54423883Sjaap } else {
54523883Sjaap notflag = 0;
54623883Sjaap ch = i;
54723883Sjaap }
54823883Sjaap i = atoi();
54923883Sjaap if (!nonumb) {
55023883Sjaap if (i > 0)
55123883Sjaap true++;
55223883Sjaap goto i1;
55323883Sjaap }
55423883Sjaap i = getch();
55523905Sjaap switch (cbits(i)) {
55623883Sjaap case 'e':
55723905Sjaap if (!(numtab[PN].val & 01))
55823883Sjaap true++;
55923883Sjaap break;
56023883Sjaap case 'o':
56123905Sjaap if (numtab[PN].val & 01)
56223883Sjaap true++;
56323883Sjaap break;
56423883Sjaap #ifdef NROFF
56523883Sjaap case 'n':
56623883Sjaap true++;
56723883Sjaap case 't':
56823883Sjaap #endif
56923883Sjaap #ifndef NROFF
57023883Sjaap case 't':
57123883Sjaap true++;
57223883Sjaap case 'n':
57323883Sjaap #endif
57423883Sjaap case ' ':
57523883Sjaap break;
57623883Sjaap default:
57723883Sjaap true = cmpstr(i);
57823883Sjaap }
57923883Sjaap i1:
58023883Sjaap true ^= notflag;
58123883Sjaap if (x == 1)
58223883Sjaap iflist[ifx] = !true;
58323883Sjaap if (true) {
58423883Sjaap i2:
58523905Sjaap while ((cbits(i = getch())) == ' ')
58623905Sjaap ;
58723883Sjaap if (cbits(i) == LEFT)
58823883Sjaap goto i2;
58923883Sjaap ch = i;
59023883Sjaap nflush++;
59123883Sjaap } else {
59223883Sjaap copyf++;
59323883Sjaap falsef++;
59423905Sjaap eatblk(0);
59523883Sjaap copyf--;
59623883Sjaap falsef--;
59723883Sjaap }
59823883Sjaap }
59923883Sjaap
eatblk(inblk)60023905Sjaap eatblk(inblk)
60123905Sjaap int inblk;
60223905Sjaap { register int cnt, i;
60323883Sjaap
60423905Sjaap cnt = 0;
60523905Sjaap do {
60623905Sjaap if (ch) {
60723905Sjaap i = cbits(ch);
60823905Sjaap ch = 0;
60923905Sjaap } else
61023905Sjaap i = cbits(getch0());
61123905Sjaap if (i == ESC)
61223905Sjaap cnt++;
61323905Sjaap else {
61423905Sjaap if (cnt == 1)
61523905Sjaap switch (i) {
61623905Sjaap case '{': i = LEFT; break;
61723905Sjaap case '}': i = RIGHT; break;
61823905Sjaap case '\n': i = 'x'; break;
61923905Sjaap }
62023905Sjaap cnt = 0;
62123905Sjaap }
62223905Sjaap if (i == LEFT) eatblk(1);
62323905Sjaap } while ((!inblk && (i != '\n')) || (inblk && (i != RIGHT)));
62423905Sjaap if (i == '\n')
62523905Sjaap nlflg++;
62623883Sjaap }
62723883Sjaap
62823883Sjaap
cmpstr(c)62923883Sjaap cmpstr(c)
63023883Sjaap tchar c;
63123883Sjaap {
63223883Sjaap register j, delim;
63323905Sjaap register tchar i;
63423905Sjaap register val;
63523905Sjaap int savapts, savapts1, savfont, savfont1, savpts, savpts1;
63623905Sjaap tchar string[1280];
63723905Sjaap register tchar *sp;
63823883Sjaap
63923883Sjaap if (ismot(c))
64023883Sjaap return(0);
64123883Sjaap delim = cbits(c);
64223883Sjaap savapts = apts;
64323883Sjaap savapts1 = apts1;
64423883Sjaap savfont = font;
64523883Sjaap savfont1 = font1;
64623883Sjaap savpts = pts;
64723883Sjaap savpts1 = pts1;
64823905Sjaap sp = string;
64923905Sjaap while ((j = cbits(i = getch()))!=delim && j!='\n' && sp<&string[1280-1])
65023905Sjaap *sp++ = i;
65123905Sjaap if (sp >= string + 1280) {
65223905Sjaap errprint("too-long string compare.");
65323905Sjaap edone(0100);
65423883Sjaap }
65523905Sjaap if (nlflg) {
65623905Sjaap val = sp==string;
65723883Sjaap goto rtn;
65823905Sjaap }
65923905Sjaap *sp++ = 0;
66023883Sjaap apts = savapts;
66123883Sjaap apts1 = savapts1;
66223883Sjaap font = savfont;
66323883Sjaap font1 = savfont1;
66423883Sjaap pts = savpts;
66523883Sjaap pts1 = savpts1;
66623883Sjaap mchbits();
66723905Sjaap val = 1;
66823905Sjaap sp = string;
66923883Sjaap while ((j = cbits(i = getch())) != delim && j != '\n') {
67023905Sjaap if (*sp != i) {
67123883Sjaap eat(delim);
67223905Sjaap val = 0;
67323905Sjaap goto rtn;
67423883Sjaap }
67523905Sjaap sp++;
67623883Sjaap }
67723905Sjaap if (*sp)
67823905Sjaap val = 0;
67923883Sjaap rtn:
68023883Sjaap apts = savapts;
68123883Sjaap apts1 = savapts1;
68223883Sjaap font = savfont;
68323883Sjaap font1 = savfont1;
68423883Sjaap pts = savpts;
68523883Sjaap pts1 = savpts1;
68623883Sjaap mchbits();
68723905Sjaap return(val);
68823883Sjaap }
68923883Sjaap
69023883Sjaap
caserd()69123883Sjaap caserd()
69223883Sjaap {
69323883Sjaap
69423883Sjaap lgf++;
69523883Sjaap skip();
69623883Sjaap getname();
69723883Sjaap if (!iflg) {
69823883Sjaap if (quiet) {
69923883Sjaap ttys.sg_flags &= ~ECHO;
70023883Sjaap stty(0, &ttys);
70123883Sjaap flusho();
70223905Sjaap fdprintf(stderr, "\007"); /*bell*/
70323883Sjaap } else {
70423883Sjaap if (nextf[0]) {
70523905Sjaap fdprintf(stderr, "%s:", nextf);
70623883Sjaap } else {
70723905Sjaap fdprintf(stderr, "\007"); /*bell*/
70823883Sjaap }
70923883Sjaap }
71023883Sjaap }
71123883Sjaap collect();
71223883Sjaap tty++;
71323905Sjaap pushi(NBLIST*BLK, PAIR('r','d'));
71423883Sjaap }
71523883Sjaap
71623883Sjaap
rdtty()71723883Sjaap rdtty()
71823883Sjaap {
71923883Sjaap char onechar;
72023883Sjaap
72123883Sjaap onechar = 0;
72223883Sjaap if (read(0, &onechar, 1) == 1) {
72323883Sjaap if (onechar == '\n')
72423883Sjaap tty++;
72523883Sjaap else
72623883Sjaap tty = 1;
72723883Sjaap if (tty != 3)
72823883Sjaap return(onechar);
72923883Sjaap }
73023883Sjaap popi();
73123883Sjaap tty = 0;
73223883Sjaap if (quiet) {
73323883Sjaap ttys.sg_flags |= ECHO;
73423883Sjaap stty(0, &ttys);
73523883Sjaap }
73623883Sjaap return(0);
73723883Sjaap }
73823883Sjaap
73923883Sjaap
caseec()74023883Sjaap caseec()
74123883Sjaap {
74223883Sjaap eschar = chget('\\');
74323883Sjaap }
74423883Sjaap
74523883Sjaap
caseeo()74623883Sjaap caseeo()
74723883Sjaap {
74823883Sjaap eschar = 0;
74923883Sjaap }
75023883Sjaap
75123883Sjaap
caseta()75223883Sjaap caseta()
75323883Sjaap {
75423883Sjaap register i;
75523883Sjaap
75623883Sjaap tabtab[0] = nonumb = 0;
75723883Sjaap for (i = 0; ((i < (NTAB - 1)) && !nonumb); i++) {
75823883Sjaap if (skip())
75923883Sjaap break;
76023905Sjaap tabtab[i] = max(hnumb(&tabtab[max(i-1,0)]), 0) & TABMASK;
76123883Sjaap if (!nonumb)
76223883Sjaap switch (cbits(ch)) {
76323883Sjaap case 'C':
76423883Sjaap tabtab[i] |= CTAB;
76523883Sjaap break;
76623883Sjaap case 'R':
76723883Sjaap tabtab[i] |= RTAB;
76823883Sjaap break;
76923883Sjaap default: /*includes L*/
77023883Sjaap break;
77123883Sjaap }
77223883Sjaap nonumb = ch = 0;
77323883Sjaap }
77423883Sjaap tabtab[i] = 0;
77523883Sjaap }
77623883Sjaap
77723883Sjaap
casene()77823883Sjaap casene()
77923883Sjaap {
78023883Sjaap register i, j;
78123883Sjaap
78223883Sjaap skip();
78323883Sjaap i = vnumb((int *)0);
78423883Sjaap if (nonumb)
78523883Sjaap i = lss;
78623883Sjaap if (i > (j = findt1())) {
78723883Sjaap i = lss;
78823883Sjaap lss = j;
78923883Sjaap dip->nls = 0;
79023883Sjaap newline(0);
79123883Sjaap lss = i;
79223883Sjaap }
79323883Sjaap }
79423883Sjaap
79523883Sjaap
casetr()79623883Sjaap casetr()
79723883Sjaap {
79823883Sjaap register i, j;
79923883Sjaap tchar k;
80023883Sjaap
80123883Sjaap lgf++;
80223883Sjaap skip();
80323883Sjaap while ((i = cbits(k=getch())) != '\n') {
80423883Sjaap if (ismot(k))
80523883Sjaap return;
80623883Sjaap if (ismot(k = getch()))
80723883Sjaap return;
80823883Sjaap if ((j = cbits(k)) == '\n')
80923883Sjaap j = ' ';
81023883Sjaap trtab[i] = j;
81123883Sjaap }
81223883Sjaap }
81323883Sjaap
81423883Sjaap
casecu()81523883Sjaap casecu()
81623883Sjaap {
81723883Sjaap cu++;
81823883Sjaap caseul();
81923883Sjaap }
82023883Sjaap
82123883Sjaap
caseul()82223883Sjaap caseul()
82323883Sjaap {
82423883Sjaap register i;
82523883Sjaap
82623883Sjaap noscale++;
82723883Sjaap if (skip())
82823883Sjaap i = 1;
82923883Sjaap else
83023883Sjaap i = atoi();
83123883Sjaap if (ul && (i == 0)) {
83223883Sjaap font = sfont;
83323883Sjaap ul = cu = 0;
83423883Sjaap }
83523883Sjaap if (i) {
83623883Sjaap if (!ul) {
83723883Sjaap sfont = font;
83823883Sjaap font = ulfont;
83923883Sjaap }
84023883Sjaap ul = i;
84123883Sjaap }
84223883Sjaap noscale = 0;
84323883Sjaap mchbits();
84423883Sjaap }
84523883Sjaap
84623883Sjaap
caseuf()84723883Sjaap caseuf()
84823883Sjaap {
84923883Sjaap register i, j;
85023883Sjaap
85123883Sjaap if (skip() || !(i = getrq()) || i == 'S' || (j = findft(i)) == -1)
85223905Sjaap ulfont = ULFONT; /*default underline position*/
85323883Sjaap else
85423883Sjaap ulfont = j;
85523883Sjaap #ifdef NROFF
85623905Sjaap if (ulfont == FT)
85723905Sjaap ulfont = ULFONT;
85823883Sjaap #endif
85923883Sjaap }
86023883Sjaap
86123883Sjaap
caseit()86223883Sjaap caseit()
86323883Sjaap {
86423883Sjaap register i;
86523883Sjaap
86623883Sjaap lgf++;
86723883Sjaap it = itmac = 0;
86823883Sjaap noscale++;
86923883Sjaap skip();
87023883Sjaap i = atoi();
87123883Sjaap skip();
87223883Sjaap if (!nonumb && (itmac = getrq()))
87323883Sjaap it = i;
87423883Sjaap noscale = 0;
87523883Sjaap }
87623883Sjaap
87723883Sjaap
casemc()87823883Sjaap casemc()
87923883Sjaap {
88023883Sjaap register i;
88123883Sjaap
88223883Sjaap if (icf > 1)
88323883Sjaap ic = 0;
88423883Sjaap icf = 0;
88523883Sjaap if (skip())
88623883Sjaap return;
88723883Sjaap ic = getch();
88823883Sjaap icf = 1;
88923883Sjaap skip();
89023883Sjaap i = max(hnumb((int *)0), 0);
89123883Sjaap if (!nonumb)
89223883Sjaap ics = i;
89323883Sjaap }
89423883Sjaap
89523883Sjaap
casemk()89623883Sjaap casemk()
89723883Sjaap {
89823883Sjaap register i, j;
89923883Sjaap
90023883Sjaap if (dip != d)
90123883Sjaap j = dip->dnl;
90223883Sjaap else
90323905Sjaap j = numtab[NL].val;
90423883Sjaap if (skip()) {
90523883Sjaap dip->mkline = j;
90623883Sjaap return;
90723883Sjaap }
90823883Sjaap if ((i = getrq()) == 0)
90923883Sjaap return;
91023905Sjaap numtab[findr(i)].val = j;
91123883Sjaap }
91223883Sjaap
91323883Sjaap
casesv()91423883Sjaap casesv()
91523883Sjaap {
91623883Sjaap register i;
91723883Sjaap
91823883Sjaap skip();
91923883Sjaap if ((i = vnumb((int *)0)) < 0)
92023883Sjaap return;
92123883Sjaap if (nonumb)
92223883Sjaap i = 1;
92323883Sjaap sv += i;
92423883Sjaap caseos();
92523883Sjaap }
92623883Sjaap
92723883Sjaap
caseos()92823883Sjaap caseos()
92923883Sjaap {
93023883Sjaap register savlss;
93123883Sjaap
93223883Sjaap if (sv <= findt1()) {
93323883Sjaap savlss = lss;
93423883Sjaap lss = sv;
93523883Sjaap newline(0);
93623883Sjaap lss = savlss;
93723883Sjaap sv = 0;
93823883Sjaap }
93923883Sjaap }
94023883Sjaap
94123883Sjaap
casenm()94223883Sjaap casenm()
94323883Sjaap {
94423883Sjaap register i;
94523883Sjaap
94623883Sjaap lnmod = nn = 0;
94723883Sjaap if (skip())
94823883Sjaap return;
94923883Sjaap lnmod++;
95023883Sjaap noscale++;
95123905Sjaap i = inumb(&numtab[LN].val);
95223883Sjaap if (!nonumb)
95323905Sjaap numtab[LN].val = max(i, 0);
95423883Sjaap getnm(&ndf, 1);
95523883Sjaap getnm(&nms, 0);
95623883Sjaap getnm(&ni, 0);
95723883Sjaap noscale = 0;
95823883Sjaap nmbits = chbits;
95923883Sjaap }
96023883Sjaap
96123883Sjaap
getnm(p,min)96223883Sjaap getnm(p, min)
96323883Sjaap int *p, min;
96423883Sjaap {
96523883Sjaap register i;
96623883Sjaap
96723883Sjaap eat(' ');
96823883Sjaap if (skip())
96923883Sjaap return;
97023883Sjaap i = atoi();
97123883Sjaap if (nonumb)
97223883Sjaap return;
97323883Sjaap *p = max(i, min);
97423883Sjaap }
97523883Sjaap
97623883Sjaap
casenn()97723883Sjaap casenn()
97823883Sjaap {
97923883Sjaap noscale++;
98023883Sjaap skip();
98123883Sjaap nn = max(atoi(), 1);
98223883Sjaap noscale = 0;
98323883Sjaap }
98423883Sjaap
98523883Sjaap
caseab()98623883Sjaap caseab()
98723883Sjaap {
98823883Sjaap casetm(1);
98923905Sjaap done3(0);
99023883Sjaap }
991