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(&lt), 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