18861e462Sjaap #ifndef lint
2*6f545661Sjaap static char sccsid[] = "@(#)n5.c	2.1 (CWI) 85/07/18";
38861e462Sjaap #endif lint
48861e462Sjaap #include "tdef.h"
58861e462Sjaap #include <sgtty.h>
6*6f545661Sjaap #include "ext.h"
78861e462Sjaap 
88861e462Sjaap /*
9*6f545661Sjaap  * troff5.c
10*6f545661Sjaap  *
11*6f545661Sjaap  * misc processing requests
128861e462Sjaap  */
138861e462Sjaap 
148861e462Sjaap int	iflist[NIF];
158861e462Sjaap int	ifx;
168861e462Sjaap 
178861e462Sjaap casead()
188861e462Sjaap {
198861e462Sjaap 	register i;
208861e462Sjaap 
218861e462Sjaap 	ad = 1;
228861e462Sjaap 	/*leave admod alone*/
238861e462Sjaap 	if (skip())
248861e462Sjaap 		return;
258861e462Sjaap 	switch (i = cbits(getch())) {
268861e462Sjaap 	case 'r':	/*right adj, left ragged*/
278861e462Sjaap 		admod = 2;
288861e462Sjaap 		break;
298861e462Sjaap 	case 'l':	/*left adj, right ragged*/
308861e462Sjaap 		admod = ad = 0;	/*same as casena*/
318861e462Sjaap 		break;
328861e462Sjaap 	case 'c':	/*centered adj*/
338861e462Sjaap 		admod = 1;
348861e462Sjaap 		break;
358861e462Sjaap 	case 'b':
368861e462Sjaap 	case 'n':
378861e462Sjaap 		admod = 0;
388861e462Sjaap 		break;
398861e462Sjaap 	case '0':
408861e462Sjaap 	case '2':
418861e462Sjaap 	case '4':
428861e462Sjaap 		ad = 0;
438861e462Sjaap 	case '1':
448861e462Sjaap 	case '3':
458861e462Sjaap 	case '5':
468861e462Sjaap 		admod = (i - '0') / 2;
478861e462Sjaap 	}
488861e462Sjaap }
498861e462Sjaap 
508861e462Sjaap 
518861e462Sjaap casena()
528861e462Sjaap {
538861e462Sjaap 	ad = 0;
548861e462Sjaap }
558861e462Sjaap 
568861e462Sjaap 
578861e462Sjaap casefi()
588861e462Sjaap {
598861e462Sjaap 	tbreak();
608861e462Sjaap 	fi++;
618861e462Sjaap 	pendnf = 0;
628861e462Sjaap 	lnsize = LNSIZE;
638861e462Sjaap }
648861e462Sjaap 
658861e462Sjaap 
668861e462Sjaap casenf()
678861e462Sjaap {
688861e462Sjaap 	tbreak();
698861e462Sjaap 	fi = 0;
708861e462Sjaap }
718861e462Sjaap 
728861e462Sjaap 
738861e462Sjaap casers()
748861e462Sjaap {
758861e462Sjaap 	dip->nls = 0;
768861e462Sjaap }
778861e462Sjaap 
788861e462Sjaap 
798861e462Sjaap casens()
808861e462Sjaap {
818861e462Sjaap 	dip->nls++;
828861e462Sjaap }
838861e462Sjaap 
848861e462Sjaap 
858861e462Sjaap chget(c)
868861e462Sjaap int	c;
878861e462Sjaap {
888861e462Sjaap 	tchar i;
898861e462Sjaap 
908861e462Sjaap 	if (skip() || ismot(i = getch()) || cbits(i) == ' ' || cbits(i) == '\n') {
918861e462Sjaap 		ch = i;
928861e462Sjaap 		return(c);
938861e462Sjaap 	} else
94*6f545661Sjaap 		return(i & BYTEMASK);
958861e462Sjaap }
968861e462Sjaap 
978861e462Sjaap 
988861e462Sjaap casecc()
998861e462Sjaap {
1008861e462Sjaap 	cc = chget('.');
1018861e462Sjaap }
1028861e462Sjaap 
1038861e462Sjaap 
1048861e462Sjaap casec2()
1058861e462Sjaap {
1068861e462Sjaap 	c2 = chget('\'');
1078861e462Sjaap }
1088861e462Sjaap 
1098861e462Sjaap 
1108861e462Sjaap casehc()
1118861e462Sjaap {
1128861e462Sjaap 	ohc = chget(OHC);
1138861e462Sjaap }
1148861e462Sjaap 
1158861e462Sjaap 
1168861e462Sjaap casetc()
1178861e462Sjaap {
1188861e462Sjaap 	tabc = chget(0);
1198861e462Sjaap }
1208861e462Sjaap 
1218861e462Sjaap 
1228861e462Sjaap caselc()
1238861e462Sjaap {
1248861e462Sjaap 	dotc = chget(0);
1258861e462Sjaap }
1268861e462Sjaap 
1278861e462Sjaap 
1288861e462Sjaap casehy()
1298861e462Sjaap {
1308861e462Sjaap 	register i;
1318861e462Sjaap 
1328861e462Sjaap 	hyf = 1;
1338861e462Sjaap 	if (skip())
1348861e462Sjaap 		return;
1358861e462Sjaap 	noscale++;
1368861e462Sjaap 	i = atoi();
1378861e462Sjaap 	noscale = 0;
1388861e462Sjaap 	if (nonumb)
1398861e462Sjaap 		return;
1408861e462Sjaap 	hyf = max(i, 0);
1418861e462Sjaap }
1428861e462Sjaap 
1438861e462Sjaap 
1448861e462Sjaap casenh()
1458861e462Sjaap {
1468861e462Sjaap 	hyf = 0;
1478861e462Sjaap }
1488861e462Sjaap 
1498861e462Sjaap 
1508861e462Sjaap max(aa, bb)
1518861e462Sjaap int	aa, bb;
1528861e462Sjaap {
1538861e462Sjaap 	if (aa > bb)
1548861e462Sjaap 		return(aa);
1558861e462Sjaap 	else
1568861e462Sjaap 		return(bb);
1578861e462Sjaap }
1588861e462Sjaap 
1598861e462Sjaap 
1608861e462Sjaap casece()
1618861e462Sjaap {
1628861e462Sjaap 	register i;
1638861e462Sjaap 
1648861e462Sjaap 	noscale++;
1658861e462Sjaap 	skip();
1668861e462Sjaap 	i = max(atoi(), 0);
1678861e462Sjaap 	if (nonumb)
1688861e462Sjaap 		i = 1;
1698861e462Sjaap 	tbreak();
1708861e462Sjaap 	ce = i;
1718861e462Sjaap 	noscale = 0;
1728861e462Sjaap }
1738861e462Sjaap 
1748861e462Sjaap 
1758861e462Sjaap casein()
1768861e462Sjaap {
1778861e462Sjaap 	register i;
1788861e462Sjaap 
1798861e462Sjaap 	if (skip())
1808861e462Sjaap 		i = in1;
1818861e462Sjaap 	else
1828861e462Sjaap 		i = max(hnumb(&in), 0);
1838861e462Sjaap 	tbreak();
1848861e462Sjaap 	in1 = in;
1858861e462Sjaap 	in = i;
1868861e462Sjaap 	if (!nc) {
1878861e462Sjaap 		un = in;
1888861e462Sjaap 		setnel();
1898861e462Sjaap 	}
1908861e462Sjaap }
1918861e462Sjaap 
1928861e462Sjaap 
1938861e462Sjaap casell()
1948861e462Sjaap {
1958861e462Sjaap 	register i;
1968861e462Sjaap 
1978861e462Sjaap 	if (skip())
1988861e462Sjaap 		i = ll1;
1998861e462Sjaap 	else
2008861e462Sjaap 		i = max(hnumb(&ll), INCH / 10);
2018861e462Sjaap 	ll1 = ll;
2028861e462Sjaap 	ll = i;
2038861e462Sjaap 	setnel();
2048861e462Sjaap }
2058861e462Sjaap 
2068861e462Sjaap 
2078861e462Sjaap caselt()
2088861e462Sjaap {
2098861e462Sjaap 	register i;
2108861e462Sjaap 
2118861e462Sjaap 	if (skip())
2128861e462Sjaap 		i = lt1;
2138861e462Sjaap 	else
2148861e462Sjaap 		i = max(hnumb(&lt), 0);
2158861e462Sjaap 	lt1 = lt;
2168861e462Sjaap 	lt = i;
2178861e462Sjaap }
2188861e462Sjaap 
2198861e462Sjaap 
2208861e462Sjaap caseti()
2218861e462Sjaap {
2228861e462Sjaap 	register i;
2238861e462Sjaap 
2248861e462Sjaap 	if (skip())
2258861e462Sjaap 		return;
2268861e462Sjaap 	i = max(hnumb(&in), 0);
2278861e462Sjaap 	tbreak();
2288861e462Sjaap 	un1 = i;
2298861e462Sjaap 	setnel();
2308861e462Sjaap }
2318861e462Sjaap 
2328861e462Sjaap 
2338861e462Sjaap casels()
2348861e462Sjaap {
2358861e462Sjaap 	register i;
2368861e462Sjaap 
2378861e462Sjaap 	noscale++;
2388861e462Sjaap 	if (skip())
2398861e462Sjaap 		i = ls1;
2408861e462Sjaap 	else
2418861e462Sjaap 		i = max(inumb(&ls), 1);
2428861e462Sjaap 	ls1 = ls;
2438861e462Sjaap 	ls = i;
2448861e462Sjaap 	noscale = 0;
2458861e462Sjaap }
2468861e462Sjaap 
2478861e462Sjaap 
2488861e462Sjaap casepo()
2498861e462Sjaap {
2508861e462Sjaap 	register i;
2518861e462Sjaap 
2528861e462Sjaap 	if (skip())
2538861e462Sjaap 		i = po1;
2548861e462Sjaap 	else
2558861e462Sjaap 		i = max(hnumb(&po), 0);
2568861e462Sjaap 	po1 = po;
2578861e462Sjaap 	po = i;
2588861e462Sjaap #ifndef NROFF
2598861e462Sjaap 	if (!ascii)
2608861e462Sjaap 		esc += po - po1;
2618861e462Sjaap #endif
2628861e462Sjaap }
2638861e462Sjaap 
2648861e462Sjaap 
2658861e462Sjaap casepl()
2668861e462Sjaap {
2678861e462Sjaap 	register i;
2688861e462Sjaap 
2698861e462Sjaap 	skip();
2708861e462Sjaap 	if ((i = vnumb(&pl)) == 0)
2718861e462Sjaap 		pl = 11 * INCH; /*11in*/
2728861e462Sjaap 	else
2738861e462Sjaap 		pl = i;
274*6f545661Sjaap 	if (numtab[NL].val > pl)
275*6f545661Sjaap 		numtab[NL].val = pl;
2768861e462Sjaap }
2778861e462Sjaap 
2788861e462Sjaap 
2798861e462Sjaap casewh()
2808861e462Sjaap {
2818861e462Sjaap 	register i, j, k;
2828861e462Sjaap 
2838861e462Sjaap 	lgf++;
2848861e462Sjaap 	skip();
2858861e462Sjaap 	i = vnumb((int *)0);
2868861e462Sjaap 	if (nonumb)
2878861e462Sjaap 		return;
2888861e462Sjaap 	skip();
2898861e462Sjaap 	j = getrq();
2908861e462Sjaap 	if ((k = findn(i)) != NTRAP) {
2918861e462Sjaap 		mlist[k] = j;
2928861e462Sjaap 		return;
2938861e462Sjaap 	}
2948861e462Sjaap 	for (k = 0; k < NTRAP; k++)
2958861e462Sjaap 		if (mlist[k] == 0)
2968861e462Sjaap 			break;
2978861e462Sjaap 	if (k == NTRAP) {
2988861e462Sjaap 		flusho();
299*6f545661Sjaap 		errprint("cannot plant trap.");
3008861e462Sjaap 		return;
3018861e462Sjaap 	}
3028861e462Sjaap 	mlist[k] = j;
3038861e462Sjaap 	nlist[k] = i;
3048861e462Sjaap }
3058861e462Sjaap 
3068861e462Sjaap 
3078861e462Sjaap casech()
3088861e462Sjaap {
3098861e462Sjaap 	register i, j, k;
3108861e462Sjaap 
3118861e462Sjaap 	lgf++;
3128861e462Sjaap 	skip();
3138861e462Sjaap 	if (!(j = getrq()))
3148861e462Sjaap 		return;
3158861e462Sjaap 	else
3168861e462Sjaap 		for (k = 0; k < NTRAP; k++)
3178861e462Sjaap 			if (mlist[k] == j)
3188861e462Sjaap 				break;
3198861e462Sjaap 	if (k == NTRAP)
3208861e462Sjaap 		return;
3218861e462Sjaap 	skip();
3228861e462Sjaap 	i = vnumb((int *)0);
3238861e462Sjaap 	if (nonumb)
3248861e462Sjaap 		mlist[k] = 0;
3258861e462Sjaap 	nlist[k] = i;
3268861e462Sjaap }
3278861e462Sjaap 
3288861e462Sjaap 
3298861e462Sjaap findn(i)
3308861e462Sjaap int	i;
3318861e462Sjaap {
3328861e462Sjaap 	register k;
3338861e462Sjaap 
3348861e462Sjaap 	for (k = 0; k < NTRAP; k++)
3358861e462Sjaap 		if ((nlist[k] == i) && (mlist[k] != 0))
3368861e462Sjaap 			break;
3378861e462Sjaap 	return(k);
3388861e462Sjaap }
3398861e462Sjaap 
3408861e462Sjaap 
3418861e462Sjaap casepn()
3428861e462Sjaap {
3438861e462Sjaap 	register i;
3448861e462Sjaap 
3458861e462Sjaap 	skip();
3468861e462Sjaap 	noscale++;
347*6f545661Sjaap 	i = max(inumb(&numtab[PN].val), 0);
3488861e462Sjaap 	noscale = 0;
3498861e462Sjaap 	if (!nonumb) {
3508861e462Sjaap 		npn = i;
3518861e462Sjaap 		npnflg++;
3528861e462Sjaap 	}
3538861e462Sjaap }
3548861e462Sjaap 
3558861e462Sjaap 
3568861e462Sjaap casebp()
3578861e462Sjaap {
3588861e462Sjaap 	register i;
3598861e462Sjaap 	register struct s *savframe;
3608861e462Sjaap 
3618861e462Sjaap 	if (dip != d)
3628861e462Sjaap 		return;
3638861e462Sjaap 	savframe = frame;
3648861e462Sjaap 	skip();
365*6f545661Sjaap 	if ((i = inumb(&numtab[PN].val)) < 0)
3668861e462Sjaap 		i = 0;
3678861e462Sjaap 	tbreak();
3688861e462Sjaap 	if (!nonumb) {
3698861e462Sjaap 		npn = i;
3708861e462Sjaap 		npnflg++;
3718861e462Sjaap 	} else if (dip->nls)
3728861e462Sjaap 		return;
3738861e462Sjaap 	eject(savframe);
3748861e462Sjaap }
3758861e462Sjaap 
3768861e462Sjaap 
377*6f545661Sjaap casetm(ab)
378*6f545661Sjaap 	int ab;
3798861e462Sjaap {
3808861e462Sjaap 	register i;
3818861e462Sjaap 	char	tmbuf[NTM];
3828861e462Sjaap 
3838861e462Sjaap 	lgf++;
3848861e462Sjaap 	copyf++;
385*6f545661Sjaap 	skip();
3868861e462Sjaap 	for (i = 0; i < NTM - 2; )
3878861e462Sjaap 		if ((tmbuf[i++] = getch()) == '\n')
3888861e462Sjaap 			break;
3898861e462Sjaap 	if (i == NTM - 2)
3908861e462Sjaap 		tmbuf[i++] = '\n';
3918861e462Sjaap 	tmbuf[i] = 0;
392*6f545661Sjaap 	if (ab)	/* truncate output */
393*6f545661Sjaap 		obufp = obuf;	/* should be a function in n2.c */
3948861e462Sjaap 	flusho();
395*6f545661Sjaap 	fdprintf(stderr, "%s", tmbuf);
3968861e462Sjaap 	copyf--;
397*6f545661Sjaap 	lgf--;
3988861e462Sjaap }
3998861e462Sjaap 
4008861e462Sjaap 
4018861e462Sjaap casesp(a)
4028861e462Sjaap int	a;
4038861e462Sjaap {
4048861e462Sjaap 	register i, j, savlss;
4058861e462Sjaap 
4068861e462Sjaap 	tbreak();
4078861e462Sjaap 	if (dip->nls || trap)
4088861e462Sjaap 		return;
4098861e462Sjaap 	i = findt1();
4108861e462Sjaap 	if (!a) {
4118861e462Sjaap 		skip();
4128861e462Sjaap 		j = vnumb((int *)0);
4138861e462Sjaap 		if (nonumb)
4148861e462Sjaap 			j = lss;
4158861e462Sjaap 	} else
4168861e462Sjaap 		j = a;
4178861e462Sjaap 	if (j == 0)
4188861e462Sjaap 		return;
4198861e462Sjaap 	if (i < j)
4208861e462Sjaap 		j = i;
4218861e462Sjaap 	savlss = lss;
4228861e462Sjaap 	if (dip != d)
4238861e462Sjaap 		i = dip->dnl;
4248861e462Sjaap 	else
425*6f545661Sjaap 		i = numtab[NL].val;
4268861e462Sjaap 	if ((i + j) < 0)
4278861e462Sjaap 		j = -i;
4288861e462Sjaap 	lss = j;
4298861e462Sjaap 	newline(0);
4308861e462Sjaap 	lss = savlss;
4318861e462Sjaap }
4328861e462Sjaap 
4338861e462Sjaap 
4348861e462Sjaap casert()
4358861e462Sjaap {
4368861e462Sjaap 	register a, *p;
4378861e462Sjaap 
4388861e462Sjaap 	skip();
4398861e462Sjaap 	if (dip != d)
4408861e462Sjaap 		p = &dip->dnl;
4418861e462Sjaap 	else
442*6f545661Sjaap 		p = &numtab[NL].val;
4438861e462Sjaap 	a = vnumb(p);
4448861e462Sjaap 	if (nonumb)
4458861e462Sjaap 		a = dip->mkline;
4468861e462Sjaap 	if ((a < 0) || (a >= *p))
4478861e462Sjaap 		return;
4488861e462Sjaap 	nb++;
4498861e462Sjaap 	casesp(a - *p);
4508861e462Sjaap }
4518861e462Sjaap 
4528861e462Sjaap 
4538861e462Sjaap caseem()
4548861e462Sjaap {
4558861e462Sjaap 	lgf++;
4568861e462Sjaap 	skip();
4578861e462Sjaap 	em = getrq();
4588861e462Sjaap }
4598861e462Sjaap 
4608861e462Sjaap 
4618861e462Sjaap casefl()
4628861e462Sjaap {
4638861e462Sjaap 	tbreak();
4648861e462Sjaap 	flusho();
4658861e462Sjaap }
4668861e462Sjaap 
4678861e462Sjaap 
4688861e462Sjaap caseev()
4698861e462Sjaap {
4708861e462Sjaap 	register nxev;
4718861e462Sjaap 
4728861e462Sjaap 	if (skip()) {
4738861e462Sjaap e0:
4748861e462Sjaap 		if (evi == 0)
4758861e462Sjaap 			return;
4768861e462Sjaap 		nxev =  evlist[--evi];
4778861e462Sjaap 		goto e1;
4788861e462Sjaap 	}
4798861e462Sjaap 	noscale++;
4808861e462Sjaap 	nxev = atoi();
4818861e462Sjaap 	noscale = 0;
4828861e462Sjaap 	if (nonumb)
4838861e462Sjaap 		goto e0;
4848861e462Sjaap 	flushi();
4858861e462Sjaap 	if ((nxev >= NEV) || (nxev < 0) || (evi >= EVLSZ)) {
4868861e462Sjaap 		flusho();
487*6f545661Sjaap 		errprint("cannot do ev.");
4888861e462Sjaap 		if (error)
4898861e462Sjaap 			done2(040);
4908861e462Sjaap 		else
4918861e462Sjaap 			edone(040);
4928861e462Sjaap 		return;
4938861e462Sjaap 	}
4948861e462Sjaap 	evlist[evi++] = ev;
4958861e462Sjaap e1:
4968861e462Sjaap 	if (ev == nxev)
4978861e462Sjaap 		return;
498*6f545661Sjaap 	lseek(ibf, ev * (long)sizeof(env), 0);
499*6f545661Sjaap 	write(ibf, (char *) & env, sizeof(env));
500*6f545661Sjaap 	lseek(ibf, nxev * (long)sizeof(env), 0);
501*6f545661Sjaap 	read(ibf, (char *) & env, sizeof(env));
5028861e462Sjaap 	ev = nxev;
5038861e462Sjaap }
5048861e462Sjaap 
5058861e462Sjaap 
5068861e462Sjaap caseel()
5078861e462Sjaap {
5088861e462Sjaap 	if (--ifx < 0) {
5098861e462Sjaap 		ifx = 0;
5108861e462Sjaap 		iflist[0] = 0;
5118861e462Sjaap 	}
5128861e462Sjaap 	caseif(2);
5138861e462Sjaap }
5148861e462Sjaap 
5158861e462Sjaap 
5168861e462Sjaap caseie()
5178861e462Sjaap {
5188861e462Sjaap 	if (ifx >= NIF) {
519*6f545661Sjaap 		errprint("if-else overflow.");
5208861e462Sjaap 		ifx = 0;
5218861e462Sjaap 		edone(040);
5228861e462Sjaap 	}
5238861e462Sjaap 	caseif(1);
5248861e462Sjaap 	ifx++;
5258861e462Sjaap }
5268861e462Sjaap 
5278861e462Sjaap 
5288861e462Sjaap caseif(x)
5298861e462Sjaap int	x;
5308861e462Sjaap {
5318861e462Sjaap 	extern int falsef;
532*6f545661Sjaap 	register notflag, true;
5338861e462Sjaap 	tchar i;
5348861e462Sjaap 
5358861e462Sjaap 	if (x == 2) {
5368861e462Sjaap 		notflag = 0;
5378861e462Sjaap 		true = iflist[ifx];
5388861e462Sjaap 		goto i1;
5398861e462Sjaap 	}
5408861e462Sjaap 	true = 0;
5418861e462Sjaap 	skip();
5428861e462Sjaap 	if ((cbits(i = getch())) == '!') {
5438861e462Sjaap 		notflag = 1;
5448861e462Sjaap 	} else {
5458861e462Sjaap 		notflag = 0;
5468861e462Sjaap 		ch = i;
5478861e462Sjaap 	}
5488861e462Sjaap 	i = atoi();
5498861e462Sjaap 	if (!nonumb) {
5508861e462Sjaap 		if (i > 0)
5518861e462Sjaap 			true++;
5528861e462Sjaap 		goto i1;
5538861e462Sjaap 	}
5548861e462Sjaap 	i = getch();
555*6f545661Sjaap 	switch (cbits(i)) {
5568861e462Sjaap 	case 'e':
557*6f545661Sjaap 		if (!(numtab[PN].val & 01))
5588861e462Sjaap 			true++;
5598861e462Sjaap 		break;
5608861e462Sjaap 	case 'o':
561*6f545661Sjaap 		if (numtab[PN].val & 01)
5628861e462Sjaap 			true++;
5638861e462Sjaap 		break;
5648861e462Sjaap #ifdef NROFF
5658861e462Sjaap 	case 'n':
5668861e462Sjaap 		true++;
5678861e462Sjaap 	case 't':
5688861e462Sjaap #endif
5698861e462Sjaap #ifndef NROFF
5708861e462Sjaap 	case 't':
5718861e462Sjaap 		true++;
5728861e462Sjaap 	case 'n':
5738861e462Sjaap #endif
5748861e462Sjaap 	case ' ':
5758861e462Sjaap 		break;
5768861e462Sjaap 	default:
5778861e462Sjaap 		true = cmpstr(i);
5788861e462Sjaap 	}
5798861e462Sjaap i1:
5808861e462Sjaap 	true ^= notflag;
5818861e462Sjaap 	if (x == 1)
5828861e462Sjaap 		iflist[ifx] = !true;
5838861e462Sjaap 	if (true) {
5848861e462Sjaap i2:
585*6f545661Sjaap 		while ((cbits(i = getch())) == ' ')
586*6f545661Sjaap 			;
5878861e462Sjaap 		if (cbits(i) == LEFT)
5888861e462Sjaap 			goto i2;
5898861e462Sjaap 		ch = i;
5908861e462Sjaap 		nflush++;
5918861e462Sjaap 	} else {
5928861e462Sjaap 		copyf++;
5938861e462Sjaap 		falsef++;
594*6f545661Sjaap 		eatblk(0);
5958861e462Sjaap 		copyf--;
5968861e462Sjaap 		falsef--;
5978861e462Sjaap 	}
5988861e462Sjaap }
5998861e462Sjaap 
600*6f545661Sjaap eatblk(inblk)
601*6f545661Sjaap int inblk;
602*6f545661Sjaap {	register int cnt, i;
6038861e462Sjaap 
604*6f545661Sjaap 	cnt = 0;
605*6f545661Sjaap 	do {
606*6f545661Sjaap 		if (ch)	{
607*6f545661Sjaap 			i = cbits(ch);
608*6f545661Sjaap 			ch = 0;
609*6f545661Sjaap 		} else
610*6f545661Sjaap 			i = cbits(getch0());
611*6f545661Sjaap 		if (i == ESC)
612*6f545661Sjaap 			cnt++;
613*6f545661Sjaap 		else {
614*6f545661Sjaap 			if (cnt == 1)
615*6f545661Sjaap 				switch (i) {
616*6f545661Sjaap 				case '{':  i = LEFT; break;
617*6f545661Sjaap 				case '}':  i = RIGHT; break;
618*6f545661Sjaap 				case '\n': i = 'x'; break;
6198861e462Sjaap 				}
620*6f545661Sjaap 			cnt = 0;
6218861e462Sjaap 		}
622*6f545661Sjaap 		if (i == LEFT) eatblk(1);
623*6f545661Sjaap 	} while ((!inblk && (i != '\n')) || (inblk && (i != RIGHT)));
624*6f545661Sjaap 	if (i == '\n')
625*6f545661Sjaap 		nlflg++;
6268861e462Sjaap }
6278861e462Sjaap 
6288861e462Sjaap 
6298861e462Sjaap cmpstr(c)
6308861e462Sjaap tchar c;
6318861e462Sjaap {
6328861e462Sjaap 	register j, delim;
633*6f545661Sjaap 	register tchar i;
634*6f545661Sjaap 	register val;
635*6f545661Sjaap 	int savapts, savapts1, savfont, savfont1, savpts, savpts1;
636*6f545661Sjaap 	tchar string[1280];
637*6f545661Sjaap 	register tchar *sp;
6388861e462Sjaap 
6398861e462Sjaap 	if (ismot(c))
6408861e462Sjaap 		return(0);
6418861e462Sjaap 	delim = cbits(c);
6428861e462Sjaap 	savapts = apts;
6438861e462Sjaap 	savapts1 = apts1;
6448861e462Sjaap 	savfont = font;
6458861e462Sjaap 	savfont1 = font1;
6468861e462Sjaap 	savpts = pts;
6478861e462Sjaap 	savpts1 = pts1;
648*6f545661Sjaap 	sp = string;
649*6f545661Sjaap 	while ((j = cbits(i = getch()))!=delim && j!='\n' && sp<&string[1280-1])
650*6f545661Sjaap 		*sp++ = i;
651*6f545661Sjaap 	if (sp >= string + 1280) {
652*6f545661Sjaap 		errprint("too-long string compare.");
653*6f545661Sjaap 		edone(0100);
6548861e462Sjaap 	}
655*6f545661Sjaap 	if (nlflg) {
656*6f545661Sjaap 		val = sp==string;
6578861e462Sjaap 		goto rtn;
658*6f545661Sjaap 	}
659*6f545661Sjaap 	*sp++ = 0;
6608861e462Sjaap 	apts = savapts;
6618861e462Sjaap 	apts1 = savapts1;
6628861e462Sjaap 	font = savfont;
6638861e462Sjaap 	font1 = savfont1;
6648861e462Sjaap 	pts = savpts;
6658861e462Sjaap 	pts1 = savpts1;
6668861e462Sjaap 	mchbits();
667*6f545661Sjaap 	val = 1;
668*6f545661Sjaap 	sp = string;
6698861e462Sjaap 	while ((j = cbits(i = getch())) != delim && j != '\n') {
670*6f545661Sjaap 		if (*sp != i) {
6718861e462Sjaap 			eat(delim);
672*6f545661Sjaap 			val = 0;
673*6f545661Sjaap 			goto rtn;
6748861e462Sjaap 		}
675*6f545661Sjaap 		sp++;
6768861e462Sjaap 	}
677*6f545661Sjaap 	if (*sp)
678*6f545661Sjaap 		val = 0;
6798861e462Sjaap rtn:
6808861e462Sjaap 	apts = savapts;
6818861e462Sjaap 	apts1 = savapts1;
6828861e462Sjaap 	font = savfont;
6838861e462Sjaap 	font1 = savfont1;
6848861e462Sjaap 	pts = savpts;
6858861e462Sjaap 	pts1 = savpts1;
6868861e462Sjaap 	mchbits();
687*6f545661Sjaap 	return(val);
6888861e462Sjaap }
6898861e462Sjaap 
6908861e462Sjaap 
6918861e462Sjaap caserd()
6928861e462Sjaap {
6938861e462Sjaap 
6948861e462Sjaap 	lgf++;
6958861e462Sjaap 	skip();
6968861e462Sjaap 	getname();
6978861e462Sjaap 	if (!iflg) {
6988861e462Sjaap 		if (quiet) {
6998861e462Sjaap 			ttys.sg_flags &= ~ECHO;
7008861e462Sjaap 			stty(0, &ttys);
7018861e462Sjaap 			flusho();
702*6f545661Sjaap 			fdprintf(stderr, "\007"); /*bell*/
7038861e462Sjaap 		} else {
7048861e462Sjaap 			if (nextf[0]) {
705*6f545661Sjaap 				fdprintf(stderr, "%s:", nextf);
7068861e462Sjaap 			} else {
707*6f545661Sjaap 				fdprintf(stderr, "\007"); /*bell*/
7088861e462Sjaap 			}
7098861e462Sjaap 		}
7108861e462Sjaap 	}
7118861e462Sjaap 	collect();
7128861e462Sjaap 	tty++;
713*6f545661Sjaap 	pushi(NBLIST*BLK, PAIR('r','d'));
7148861e462Sjaap }
7158861e462Sjaap 
7168861e462Sjaap 
7178861e462Sjaap rdtty()
7188861e462Sjaap {
7198861e462Sjaap 	char	onechar;
7208861e462Sjaap 
7218861e462Sjaap 	onechar = 0;
7228861e462Sjaap 	if (read(0, &onechar, 1) == 1) {
7238861e462Sjaap 		if (onechar == '\n')
7248861e462Sjaap 			tty++;
7258861e462Sjaap 		else
7268861e462Sjaap 			tty = 1;
7278861e462Sjaap 		if (tty != 3)
7288861e462Sjaap 			return(onechar);
7298861e462Sjaap 	}
7308861e462Sjaap 	popi();
7318861e462Sjaap 	tty = 0;
7328861e462Sjaap 	if (quiet) {
7338861e462Sjaap 		ttys.sg_flags |= ECHO;
7348861e462Sjaap 		stty(0, &ttys);
7358861e462Sjaap 	}
7368861e462Sjaap 	return(0);
7378861e462Sjaap }
7388861e462Sjaap 
7398861e462Sjaap 
7408861e462Sjaap caseec()
7418861e462Sjaap {
7428861e462Sjaap 	eschar = chget('\\');
7438861e462Sjaap }
7448861e462Sjaap 
7458861e462Sjaap 
7468861e462Sjaap caseeo()
7478861e462Sjaap {
7488861e462Sjaap 	eschar = 0;
7498861e462Sjaap }
7508861e462Sjaap 
7518861e462Sjaap 
7528861e462Sjaap caseta()
7538861e462Sjaap {
7548861e462Sjaap 	register i;
7558861e462Sjaap 
7568861e462Sjaap 	tabtab[0] = nonumb = 0;
7578861e462Sjaap 	for (i = 0; ((i < (NTAB - 1)) && !nonumb); i++) {
7588861e462Sjaap 		if (skip())
7598861e462Sjaap 			break;
760*6f545661Sjaap 		tabtab[i] = max(hnumb(&tabtab[max(i-1,0)]), 0) & TABMASK;
7618861e462Sjaap 		if (!nonumb)
7628861e462Sjaap 			switch (cbits(ch)) {
7638861e462Sjaap 			case 'C':
7648861e462Sjaap 				tabtab[i] |= CTAB;
7658861e462Sjaap 				break;
7668861e462Sjaap 			case 'R':
7678861e462Sjaap 				tabtab[i] |= RTAB;
7688861e462Sjaap 				break;
7698861e462Sjaap 			default: /*includes L*/
7708861e462Sjaap 				break;
7718861e462Sjaap 			}
7728861e462Sjaap 		nonumb = ch = 0;
7738861e462Sjaap 	}
7748861e462Sjaap 	tabtab[i] = 0;
7758861e462Sjaap }
7768861e462Sjaap 
7778861e462Sjaap 
7788861e462Sjaap casene()
7798861e462Sjaap {
7808861e462Sjaap 	register i, j;
7818861e462Sjaap 
7828861e462Sjaap 	skip();
7838861e462Sjaap 	i = vnumb((int *)0);
7848861e462Sjaap 	if (nonumb)
7858861e462Sjaap 		i = lss;
7868861e462Sjaap 	if (i > (j = findt1())) {
7878861e462Sjaap 		i = lss;
7888861e462Sjaap 		lss = j;
7898861e462Sjaap 		dip->nls = 0;
7908861e462Sjaap 		newline(0);
7918861e462Sjaap 		lss = i;
7928861e462Sjaap 	}
7938861e462Sjaap }
7948861e462Sjaap 
7958861e462Sjaap 
7968861e462Sjaap casetr()
7978861e462Sjaap {
7988861e462Sjaap 	register i, j;
7998861e462Sjaap 	tchar k;
8008861e462Sjaap 
8018861e462Sjaap 	lgf++;
8028861e462Sjaap 	skip();
8038861e462Sjaap 	while ((i = cbits(k=getch())) != '\n') {
8048861e462Sjaap 		if (ismot(k))
8058861e462Sjaap 			return;
8068861e462Sjaap 		if (ismot(k = getch()))
8078861e462Sjaap 			return;
8088861e462Sjaap 		if ((j = cbits(k)) == '\n')
8098861e462Sjaap 			j = ' ';
8108861e462Sjaap 		trtab[i] = j;
8118861e462Sjaap 	}
8128861e462Sjaap }
8138861e462Sjaap 
8148861e462Sjaap 
8158861e462Sjaap casecu()
8168861e462Sjaap {
8178861e462Sjaap 	cu++;
8188861e462Sjaap 	caseul();
8198861e462Sjaap }
8208861e462Sjaap 
8218861e462Sjaap 
8228861e462Sjaap caseul()
8238861e462Sjaap {
8248861e462Sjaap 	register i;
8258861e462Sjaap 
8268861e462Sjaap 	noscale++;
8278861e462Sjaap 	if (skip())
8288861e462Sjaap 		i = 1;
8298861e462Sjaap 	else
8308861e462Sjaap 		i = atoi();
8318861e462Sjaap 	if (ul && (i == 0)) {
8328861e462Sjaap 		font = sfont;
8338861e462Sjaap 		ul = cu = 0;
8348861e462Sjaap 	}
8358861e462Sjaap 	if (i) {
8368861e462Sjaap 		if (!ul) {
8378861e462Sjaap 			sfont = font;
8388861e462Sjaap 			font = ulfont;
8398861e462Sjaap 		}
8408861e462Sjaap 		ul = i;
8418861e462Sjaap 	}
8428861e462Sjaap 	noscale = 0;
8438861e462Sjaap 	mchbits();
8448861e462Sjaap }
8458861e462Sjaap 
8468861e462Sjaap 
8478861e462Sjaap caseuf()
8488861e462Sjaap {
8498861e462Sjaap 	register i, j;
8508861e462Sjaap 
8518861e462Sjaap 	if (skip() || !(i = getrq()) || i == 'S' ||  (j = findft(i))  == -1)
852*6f545661Sjaap 		ulfont = ULFONT; /*default underline position*/
8538861e462Sjaap 	else
8548861e462Sjaap 		ulfont = j;
8558861e462Sjaap #ifdef NROFF
856*6f545661Sjaap 	if (ulfont == FT)
857*6f545661Sjaap 		ulfont = ULFONT;
8588861e462Sjaap #endif
8598861e462Sjaap }
8608861e462Sjaap 
8618861e462Sjaap 
8628861e462Sjaap caseit()
8638861e462Sjaap {
8648861e462Sjaap 	register i;
8658861e462Sjaap 
8668861e462Sjaap 	lgf++;
8678861e462Sjaap 	it = itmac = 0;
8688861e462Sjaap 	noscale++;
8698861e462Sjaap 	skip();
8708861e462Sjaap 	i = atoi();
8718861e462Sjaap 	skip();
8728861e462Sjaap 	if (!nonumb && (itmac = getrq()))
8738861e462Sjaap 		it = i;
8748861e462Sjaap 	noscale = 0;
8758861e462Sjaap }
8768861e462Sjaap 
8778861e462Sjaap 
8788861e462Sjaap casemc()
8798861e462Sjaap {
8808861e462Sjaap 	register i;
8818861e462Sjaap 
8828861e462Sjaap 	if (icf > 1)
8838861e462Sjaap 		ic = 0;
8848861e462Sjaap 	icf = 0;
8858861e462Sjaap 	if (skip())
8868861e462Sjaap 		return;
8878861e462Sjaap 	ic = getch();
8888861e462Sjaap 	icf = 1;
8898861e462Sjaap 	skip();
8908861e462Sjaap 	i = max(hnumb((int *)0), 0);
8918861e462Sjaap 	if (!nonumb)
8928861e462Sjaap 		ics = i;
8938861e462Sjaap }
8948861e462Sjaap 
8958861e462Sjaap 
8968861e462Sjaap casemk()
8978861e462Sjaap {
8988861e462Sjaap 	register i, j;
8998861e462Sjaap 
9008861e462Sjaap 	if (dip != d)
9018861e462Sjaap 		j = dip->dnl;
9028861e462Sjaap 	else
903*6f545661Sjaap 		j = numtab[NL].val;
9048861e462Sjaap 	if (skip()) {
9058861e462Sjaap 		dip->mkline = j;
9068861e462Sjaap 		return;
9078861e462Sjaap 	}
9088861e462Sjaap 	if ((i = getrq()) == 0)
9098861e462Sjaap 		return;
910*6f545661Sjaap 	numtab[findr(i)].val = j;
9118861e462Sjaap }
9128861e462Sjaap 
9138861e462Sjaap 
9148861e462Sjaap casesv()
9158861e462Sjaap {
9168861e462Sjaap 	register i;
9178861e462Sjaap 
9188861e462Sjaap 	skip();
9198861e462Sjaap 	if ((i = vnumb((int *)0)) < 0)
9208861e462Sjaap 		return;
9218861e462Sjaap 	if (nonumb)
9228861e462Sjaap 		i = 1;
9238861e462Sjaap 	sv += i;
9248861e462Sjaap 	caseos();
9258861e462Sjaap }
9268861e462Sjaap 
9278861e462Sjaap 
9288861e462Sjaap caseos()
9298861e462Sjaap {
9308861e462Sjaap 	register savlss;
9318861e462Sjaap 
9328861e462Sjaap 	if (sv <= findt1()) {
9338861e462Sjaap 		savlss = lss;
9348861e462Sjaap 		lss = sv;
9358861e462Sjaap 		newline(0);
9368861e462Sjaap 		lss = savlss;
9378861e462Sjaap 		sv = 0;
9388861e462Sjaap 	}
9398861e462Sjaap }
9408861e462Sjaap 
9418861e462Sjaap 
9428861e462Sjaap casenm()
9438861e462Sjaap {
9448861e462Sjaap 	register i;
9458861e462Sjaap 
9468861e462Sjaap 	lnmod = nn = 0;
9478861e462Sjaap 	if (skip())
9488861e462Sjaap 		return;
9498861e462Sjaap 	lnmod++;
9508861e462Sjaap 	noscale++;
951*6f545661Sjaap 	i = inumb(&numtab[LN].val);
9528861e462Sjaap 	if (!nonumb)
953*6f545661Sjaap 		numtab[LN].val = max(i, 0);
9548861e462Sjaap 	getnm(&ndf, 1);
9558861e462Sjaap 	getnm(&nms, 0);
9568861e462Sjaap 	getnm(&ni, 0);
9578861e462Sjaap 	noscale = 0;
9588861e462Sjaap 	nmbits = chbits;
9598861e462Sjaap }
9608861e462Sjaap 
9618861e462Sjaap 
9628861e462Sjaap getnm(p, min)
9638861e462Sjaap int	*p, min;
9648861e462Sjaap {
9658861e462Sjaap 	register i;
9668861e462Sjaap 
9678861e462Sjaap 	eat(' ');
9688861e462Sjaap 	if (skip())
9698861e462Sjaap 		return;
9708861e462Sjaap 	i = atoi();
9718861e462Sjaap 	if (nonumb)
9728861e462Sjaap 		return;
9738861e462Sjaap 	*p = max(i, min);
9748861e462Sjaap }
9758861e462Sjaap 
9768861e462Sjaap 
9778861e462Sjaap casenn()
9788861e462Sjaap {
9798861e462Sjaap 	noscale++;
9808861e462Sjaap 	skip();
9818861e462Sjaap 	nn = max(atoi(), 1);
9828861e462Sjaap 	noscale = 0;
9838861e462Sjaap }
9848861e462Sjaap 
9858861e462Sjaap 
9868861e462Sjaap caseab()
9878861e462Sjaap {
9888861e462Sjaap 	casetm(1);
989*6f545661Sjaap 	done3(0);
9908861e462Sjaap }
991