18861e462Sjaap #ifndef lint
2*cbcd6dcaSkarels /*
332a10137Sjaap static char sccsid[] = "@(#)n5.c 2.2 (CWI) 87/03/31";
4*cbcd6dcaSkarels */
5*cbcd6dcaSkarels static char sccsid[] = "@(#)n5.c 2.3 (Berkeley) 11/03/90";
68861e462Sjaap #endif lint
78861e462Sjaap #include "tdef.h"
88861e462Sjaap #include <sgtty.h>
96f545661Sjaap #include "ext.h"
108861e462Sjaap
118861e462Sjaap /*
126f545661Sjaap * troff5.c
136f545661Sjaap *
146f545661Sjaap * misc processing requests
158861e462Sjaap */
168861e462Sjaap
178861e462Sjaap int iflist[NIF];
188861e462Sjaap int ifx;
198861e462Sjaap
casead()208861e462Sjaap casead()
218861e462Sjaap {
228861e462Sjaap register i;
238861e462Sjaap
248861e462Sjaap ad = 1;
258861e462Sjaap /*leave admod alone*/
268861e462Sjaap if (skip())
278861e462Sjaap return;
288861e462Sjaap switch (i = cbits(getch())) {
298861e462Sjaap case 'r': /*right adj, left ragged*/
308861e462Sjaap admod = 2;
318861e462Sjaap break;
328861e462Sjaap case 'l': /*left adj, right ragged*/
338861e462Sjaap admod = ad = 0; /*same as casena*/
348861e462Sjaap break;
358861e462Sjaap case 'c': /*centered adj*/
368861e462Sjaap admod = 1;
378861e462Sjaap break;
388861e462Sjaap case 'b':
398861e462Sjaap case 'n':
408861e462Sjaap admod = 0;
418861e462Sjaap break;
428861e462Sjaap case '0':
438861e462Sjaap case '2':
448861e462Sjaap case '4':
458861e462Sjaap ad = 0;
468861e462Sjaap case '1':
478861e462Sjaap case '3':
488861e462Sjaap case '5':
498861e462Sjaap admod = (i - '0') / 2;
508861e462Sjaap }
518861e462Sjaap }
528861e462Sjaap
538861e462Sjaap
casena()548861e462Sjaap casena()
558861e462Sjaap {
568861e462Sjaap ad = 0;
578861e462Sjaap }
588861e462Sjaap
598861e462Sjaap
casefi()608861e462Sjaap casefi()
618861e462Sjaap {
628861e462Sjaap tbreak();
638861e462Sjaap fi++;
648861e462Sjaap pendnf = 0;
658861e462Sjaap lnsize = LNSIZE;
668861e462Sjaap }
678861e462Sjaap
688861e462Sjaap
casenf()698861e462Sjaap casenf()
708861e462Sjaap {
718861e462Sjaap tbreak();
728861e462Sjaap fi = 0;
738861e462Sjaap }
748861e462Sjaap
758861e462Sjaap
casers()768861e462Sjaap casers()
778861e462Sjaap {
788861e462Sjaap dip->nls = 0;
798861e462Sjaap }
808861e462Sjaap
818861e462Sjaap
casens()828861e462Sjaap casens()
838861e462Sjaap {
848861e462Sjaap dip->nls++;
858861e462Sjaap }
868861e462Sjaap
878861e462Sjaap
chget(c)888861e462Sjaap chget(c)
898861e462Sjaap int c;
908861e462Sjaap {
918861e462Sjaap tchar i;
928861e462Sjaap
938861e462Sjaap if (skip() || ismot(i = getch()) || cbits(i) == ' ' || cbits(i) == '\n') {
948861e462Sjaap ch = i;
958861e462Sjaap return(c);
968861e462Sjaap } else
976f545661Sjaap return(i & BYTEMASK);
988861e462Sjaap }
998861e462Sjaap
1008861e462Sjaap
casecc()1018861e462Sjaap casecc()
1028861e462Sjaap {
1038861e462Sjaap cc = chget('.');
1048861e462Sjaap }
1058861e462Sjaap
1068861e462Sjaap
casec2()1078861e462Sjaap casec2()
1088861e462Sjaap {
1098861e462Sjaap c2 = chget('\'');
1108861e462Sjaap }
1118861e462Sjaap
1128861e462Sjaap
casehc()1138861e462Sjaap casehc()
1148861e462Sjaap {
1158861e462Sjaap ohc = chget(OHC);
1168861e462Sjaap }
1178861e462Sjaap
1188861e462Sjaap
casetc()1198861e462Sjaap casetc()
1208861e462Sjaap {
1218861e462Sjaap tabc = chget(0);
1228861e462Sjaap }
1238861e462Sjaap
1248861e462Sjaap
caselc()1258861e462Sjaap caselc()
1268861e462Sjaap {
1278861e462Sjaap dotc = chget(0);
1288861e462Sjaap }
1298861e462Sjaap
1308861e462Sjaap
casehy()1318861e462Sjaap casehy()
1328861e462Sjaap {
1338861e462Sjaap register i;
1348861e462Sjaap
1358861e462Sjaap hyf = 1;
1368861e462Sjaap if (skip())
1378861e462Sjaap return;
1388861e462Sjaap noscale++;
1398861e462Sjaap i = atoi();
1408861e462Sjaap noscale = 0;
1418861e462Sjaap if (nonumb)
1428861e462Sjaap return;
1438861e462Sjaap hyf = max(i, 0);
1448861e462Sjaap }
1458861e462Sjaap
1468861e462Sjaap
casenh()1478861e462Sjaap casenh()
1488861e462Sjaap {
1498861e462Sjaap hyf = 0;
1508861e462Sjaap }
1518861e462Sjaap
1528861e462Sjaap
max(aa,bb)1538861e462Sjaap max(aa, bb)
1548861e462Sjaap int aa, bb;
1558861e462Sjaap {
1568861e462Sjaap if (aa > bb)
1578861e462Sjaap return(aa);
1588861e462Sjaap else
1598861e462Sjaap return(bb);
1608861e462Sjaap }
1618861e462Sjaap
1628861e462Sjaap
casece()1638861e462Sjaap casece()
1648861e462Sjaap {
1658861e462Sjaap register i;
1668861e462Sjaap
1678861e462Sjaap noscale++;
1688861e462Sjaap skip();
1698861e462Sjaap i = max(atoi(), 0);
1708861e462Sjaap if (nonumb)
1718861e462Sjaap i = 1;
1728861e462Sjaap tbreak();
1738861e462Sjaap ce = i;
1748861e462Sjaap noscale = 0;
1758861e462Sjaap }
1768861e462Sjaap
1778861e462Sjaap
casein()1788861e462Sjaap casein()
1798861e462Sjaap {
1808861e462Sjaap register i;
1818861e462Sjaap
1828861e462Sjaap if (skip())
1838861e462Sjaap i = in1;
1848861e462Sjaap else
1858861e462Sjaap i = max(hnumb(&in), 0);
1868861e462Sjaap tbreak();
1878861e462Sjaap in1 = in;
1888861e462Sjaap in = i;
1898861e462Sjaap if (!nc) {
1908861e462Sjaap un = in;
1918861e462Sjaap setnel();
1928861e462Sjaap }
1938861e462Sjaap }
1948861e462Sjaap
1958861e462Sjaap
casell()1968861e462Sjaap casell()
1978861e462Sjaap {
1988861e462Sjaap register i;
1998861e462Sjaap
2008861e462Sjaap if (skip())
2018861e462Sjaap i = ll1;
2028861e462Sjaap else
2038861e462Sjaap i = max(hnumb(&ll), INCH / 10);
2048861e462Sjaap ll1 = ll;
2058861e462Sjaap ll = i;
2068861e462Sjaap setnel();
2078861e462Sjaap }
2088861e462Sjaap
2098861e462Sjaap
caselt()2108861e462Sjaap caselt()
2118861e462Sjaap {
2128861e462Sjaap register i;
2138861e462Sjaap
2148861e462Sjaap if (skip())
2158861e462Sjaap i = lt1;
2168861e462Sjaap else
2178861e462Sjaap i = max(hnumb(<), 0);
2188861e462Sjaap lt1 = lt;
2198861e462Sjaap lt = i;
2208861e462Sjaap }
2218861e462Sjaap
2228861e462Sjaap
caseti()2238861e462Sjaap caseti()
2248861e462Sjaap {
2258861e462Sjaap register i;
2268861e462Sjaap
2278861e462Sjaap if (skip())
2288861e462Sjaap return;
2298861e462Sjaap i = max(hnumb(&in), 0);
2308861e462Sjaap tbreak();
2318861e462Sjaap un1 = i;
2328861e462Sjaap setnel();
2338861e462Sjaap }
2348861e462Sjaap
2358861e462Sjaap
casels()2368861e462Sjaap casels()
2378861e462Sjaap {
2388861e462Sjaap register i;
2398861e462Sjaap
2408861e462Sjaap noscale++;
2418861e462Sjaap if (skip())
2428861e462Sjaap i = ls1;
2438861e462Sjaap else
2448861e462Sjaap i = max(inumb(&ls), 1);
2458861e462Sjaap ls1 = ls;
2468861e462Sjaap ls = i;
2478861e462Sjaap noscale = 0;
2488861e462Sjaap }
2498861e462Sjaap
2508861e462Sjaap
casepo()2518861e462Sjaap casepo()
2528861e462Sjaap {
2538861e462Sjaap register i;
2548861e462Sjaap
2558861e462Sjaap if (skip())
2568861e462Sjaap i = po1;
2578861e462Sjaap else
2588861e462Sjaap i = max(hnumb(&po), 0);
2598861e462Sjaap po1 = po;
2608861e462Sjaap po = i;
2618861e462Sjaap #ifndef NROFF
2628861e462Sjaap if (!ascii)
2638861e462Sjaap esc += po - po1;
2648861e462Sjaap #endif
2658861e462Sjaap }
2668861e462Sjaap
2678861e462Sjaap
casepl()2688861e462Sjaap casepl()
2698861e462Sjaap {
2708861e462Sjaap register i;
2718861e462Sjaap
2728861e462Sjaap skip();
2738861e462Sjaap if ((i = vnumb(&pl)) == 0)
2748861e462Sjaap pl = 11 * INCH; /*11in*/
2758861e462Sjaap else
2768861e462Sjaap pl = i;
2776f545661Sjaap if (numtab[NL].val > pl)
2786f545661Sjaap numtab[NL].val = pl;
2798861e462Sjaap }
2808861e462Sjaap
2818861e462Sjaap
casewh()2828861e462Sjaap casewh()
2838861e462Sjaap {
2848861e462Sjaap register i, j, k;
2858861e462Sjaap
2868861e462Sjaap lgf++;
2878861e462Sjaap skip();
2888861e462Sjaap i = vnumb((int *)0);
2898861e462Sjaap if (nonumb)
2908861e462Sjaap return;
2918861e462Sjaap skip();
2928861e462Sjaap j = getrq();
2938861e462Sjaap if ((k = findn(i)) != NTRAP) {
2948861e462Sjaap mlist[k] = j;
2958861e462Sjaap return;
2968861e462Sjaap }
2978861e462Sjaap for (k = 0; k < NTRAP; k++)
2988861e462Sjaap if (mlist[k] == 0)
2998861e462Sjaap break;
3008861e462Sjaap if (k == NTRAP) {
3018861e462Sjaap flusho();
3026f545661Sjaap errprint("cannot plant trap.");
3038861e462Sjaap return;
3048861e462Sjaap }
3058861e462Sjaap mlist[k] = j;
3068861e462Sjaap nlist[k] = i;
3078861e462Sjaap }
3088861e462Sjaap
3098861e462Sjaap
casech()3108861e462Sjaap casech()
3118861e462Sjaap {
3128861e462Sjaap register i, j, k;
3138861e462Sjaap
3148861e462Sjaap lgf++;
3158861e462Sjaap skip();
3168861e462Sjaap if (!(j = getrq()))
3178861e462Sjaap return;
3188861e462Sjaap else
3198861e462Sjaap for (k = 0; k < NTRAP; k++)
3208861e462Sjaap if (mlist[k] == j)
3218861e462Sjaap break;
3228861e462Sjaap if (k == NTRAP)
3238861e462Sjaap return;
3248861e462Sjaap skip();
3258861e462Sjaap i = vnumb((int *)0);
3268861e462Sjaap if (nonumb)
3278861e462Sjaap mlist[k] = 0;
3288861e462Sjaap nlist[k] = i;
3298861e462Sjaap }
3308861e462Sjaap
3318861e462Sjaap
findn(i)3328861e462Sjaap findn(i)
3338861e462Sjaap int i;
3348861e462Sjaap {
3358861e462Sjaap register k;
3368861e462Sjaap
3378861e462Sjaap for (k = 0; k < NTRAP; k++)
3388861e462Sjaap if ((nlist[k] == i) && (mlist[k] != 0))
3398861e462Sjaap break;
3408861e462Sjaap return(k);
3418861e462Sjaap }
3428861e462Sjaap
3438861e462Sjaap
casepn()3448861e462Sjaap casepn()
3458861e462Sjaap {
3468861e462Sjaap register i;
3478861e462Sjaap
3488861e462Sjaap skip();
3498861e462Sjaap noscale++;
3506f545661Sjaap i = max(inumb(&numtab[PN].val), 0);
3518861e462Sjaap noscale = 0;
3528861e462Sjaap if (!nonumb) {
3538861e462Sjaap npn = i;
3548861e462Sjaap npnflg++;
3558861e462Sjaap }
3568861e462Sjaap }
3578861e462Sjaap
3588861e462Sjaap
casebp()3598861e462Sjaap casebp()
3608861e462Sjaap {
3618861e462Sjaap register i;
3628861e462Sjaap register struct s *savframe;
3638861e462Sjaap
3648861e462Sjaap if (dip != d)
3658861e462Sjaap return;
3668861e462Sjaap savframe = frame;
3678861e462Sjaap skip();
3686f545661Sjaap if ((i = inumb(&numtab[PN].val)) < 0)
3698861e462Sjaap i = 0;
3708861e462Sjaap tbreak();
3718861e462Sjaap if (!nonumb) {
3728861e462Sjaap npn = i;
3738861e462Sjaap npnflg++;
3748861e462Sjaap } else if (dip->nls)
3758861e462Sjaap return;
3768861e462Sjaap eject(savframe);
3778861e462Sjaap }
3788861e462Sjaap
3798861e462Sjaap
casetm(ab)3806f545661Sjaap casetm(ab)
3816f545661Sjaap int ab;
3828861e462Sjaap {
3838861e462Sjaap register i;
3848861e462Sjaap char tmbuf[NTM];
3858861e462Sjaap
3868861e462Sjaap lgf++;
3878861e462Sjaap copyf++;
3886f545661Sjaap skip();
3898861e462Sjaap for (i = 0; i < NTM - 2; )
3908861e462Sjaap if ((tmbuf[i++] = getch()) == '\n')
3918861e462Sjaap break;
3928861e462Sjaap if (i == NTM - 2)
3938861e462Sjaap tmbuf[i++] = '\n';
3948861e462Sjaap tmbuf[i] = 0;
3958861e462Sjaap flusho();
3966f545661Sjaap fdprintf(stderr, "%s", tmbuf);
3978861e462Sjaap copyf--;
3986f545661Sjaap lgf--;
3998861e462Sjaap }
4008861e462Sjaap
4018861e462Sjaap
casesp(a)4028861e462Sjaap casesp(a)
4038861e462Sjaap int a;
4048861e462Sjaap {
4058861e462Sjaap register i, j, savlss;
4068861e462Sjaap
4078861e462Sjaap tbreak();
4088861e462Sjaap if (dip->nls || trap)
4098861e462Sjaap return;
4108861e462Sjaap i = findt1();
4118861e462Sjaap if (!a) {
4128861e462Sjaap skip();
4138861e462Sjaap j = vnumb((int *)0);
4148861e462Sjaap if (nonumb)
4158861e462Sjaap j = lss;
4168861e462Sjaap } else
4178861e462Sjaap j = a;
4188861e462Sjaap if (j == 0)
4198861e462Sjaap return;
4208861e462Sjaap if (i < j)
4218861e462Sjaap j = i;
4228861e462Sjaap savlss = lss;
4238861e462Sjaap if (dip != d)
4248861e462Sjaap i = dip->dnl;
4258861e462Sjaap else
4266f545661Sjaap i = numtab[NL].val;
4278861e462Sjaap if ((i + j) < 0)
4288861e462Sjaap j = -i;
4298861e462Sjaap lss = j;
4308861e462Sjaap newline(0);
4318861e462Sjaap lss = savlss;
4328861e462Sjaap }
4338861e462Sjaap
4348861e462Sjaap
casert()4358861e462Sjaap casert()
4368861e462Sjaap {
4378861e462Sjaap register a, *p;
4388861e462Sjaap
4398861e462Sjaap skip();
4408861e462Sjaap if (dip != d)
4418861e462Sjaap p = &dip->dnl;
4428861e462Sjaap else
4436f545661Sjaap p = &numtab[NL].val;
4448861e462Sjaap a = vnumb(p);
4458861e462Sjaap if (nonumb)
4468861e462Sjaap a = dip->mkline;
4478861e462Sjaap if ((a < 0) || (a >= *p))
4488861e462Sjaap return;
4498861e462Sjaap nb++;
4508861e462Sjaap casesp(a - *p);
4518861e462Sjaap }
4528861e462Sjaap
4538861e462Sjaap
caseem()4548861e462Sjaap caseem()
4558861e462Sjaap {
4568861e462Sjaap lgf++;
4578861e462Sjaap skip();
4588861e462Sjaap em = getrq();
4598861e462Sjaap }
4608861e462Sjaap
4618861e462Sjaap
casefl()4628861e462Sjaap casefl()
4638861e462Sjaap {
4648861e462Sjaap tbreak();
4658861e462Sjaap flusho();
4668861e462Sjaap }
4678861e462Sjaap
4688861e462Sjaap
caseev()4698861e462Sjaap caseev()
4708861e462Sjaap {
4718861e462Sjaap register nxev;
4728861e462Sjaap
4738861e462Sjaap if (skip()) {
474*cbcd6dcaSkarels if (evi != 0) {
475*cbcd6dcaSkarels ev = evlist[--evi];
476*cbcd6dcaSkarels env = &env_array[ev];
477*cbcd6dcaSkarels }
4788861e462Sjaap return;
4798861e462Sjaap }
4808861e462Sjaap noscale++;
4818861e462Sjaap nxev = atoi();
4828861e462Sjaap noscale = 0;
483*cbcd6dcaSkarels if (nonumb) {
484*cbcd6dcaSkarels if (evi != 0) {
485*cbcd6dcaSkarels ev = evlist[--evi];
486*cbcd6dcaSkarels env = &env_array[ev];
487*cbcd6dcaSkarels }
488*cbcd6dcaSkarels return;
489*cbcd6dcaSkarels }
4908861e462Sjaap flushi();
4918861e462Sjaap if ((nxev >= NEV) || (nxev < 0) || (evi >= EVLSZ)) {
4928861e462Sjaap flusho();
49332a10137Sjaap errprint("cannot do ev %d. (evi %d)", nxev, evi);
4948861e462Sjaap if (error)
4958861e462Sjaap done2(040);
4968861e462Sjaap else
4978861e462Sjaap edone(040);
4988861e462Sjaap return;
4998861e462Sjaap }
5008861e462Sjaap evlist[evi++] = ev;
5018861e462Sjaap ev = nxev;
502*cbcd6dcaSkarels env = &env_array[ev];
5038861e462Sjaap }
5048861e462Sjaap
5058861e462Sjaap
caseel()5068861e462Sjaap caseel()
5078861e462Sjaap {
5088861e462Sjaap if (--ifx < 0) {
5098861e462Sjaap ifx = 0;
5108861e462Sjaap iflist[0] = 0;
5118861e462Sjaap }
5128861e462Sjaap caseif(2);
5138861e462Sjaap }
5148861e462Sjaap
5158861e462Sjaap
caseie()5168861e462Sjaap caseie()
5178861e462Sjaap {
5188861e462Sjaap if (ifx >= NIF) {
5196f545661Sjaap errprint("if-else overflow.");
5208861e462Sjaap ifx = 0;
5218861e462Sjaap edone(040);
5228861e462Sjaap }
5238861e462Sjaap caseif(1);
5248861e462Sjaap ifx++;
5258861e462Sjaap }
5268861e462Sjaap
5278861e462Sjaap
caseif(x)5288861e462Sjaap caseif(x)
5298861e462Sjaap int x;
5308861e462Sjaap {
5318861e462Sjaap extern int falsef;
5326f545661Sjaap 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();
5556f545661Sjaap switch (cbits(i)) {
5568861e462Sjaap case 'e':
5576f545661Sjaap if (!(numtab[PN].val & 01))
5588861e462Sjaap true++;
5598861e462Sjaap break;
5608861e462Sjaap case 'o':
5616f545661Sjaap 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:
5856f545661Sjaap while ((cbits(i = getch())) == ' ')
5866f545661Sjaap ;
5878861e462Sjaap if (cbits(i) == LEFT)
5888861e462Sjaap goto i2;
5898861e462Sjaap ch = i;
5908861e462Sjaap nflush++;
5918861e462Sjaap } else {
5928861e462Sjaap copyf++;
5938861e462Sjaap falsef++;
5946f545661Sjaap eatblk(0);
5958861e462Sjaap copyf--;
5968861e462Sjaap falsef--;
5978861e462Sjaap }
5988861e462Sjaap }
5998861e462Sjaap
eatblk(inblk)6006f545661Sjaap eatblk(inblk)
6016f545661Sjaap int inblk;
6026f545661Sjaap { register int cnt, i;
6038861e462Sjaap
6046f545661Sjaap cnt = 0;
6056f545661Sjaap do {
6066f545661Sjaap if (ch) {
6076f545661Sjaap i = cbits(ch);
6086f545661Sjaap ch = 0;
6096f545661Sjaap } else
6106f545661Sjaap i = cbits(getch0());
6116f545661Sjaap if (i == ESC)
6126f545661Sjaap cnt++;
6136f545661Sjaap else {
6146f545661Sjaap if (cnt == 1)
6156f545661Sjaap switch (i) {
6166f545661Sjaap case '{': i = LEFT; break;
6176f545661Sjaap case '}': i = RIGHT; break;
6186f545661Sjaap case '\n': i = 'x'; break;
6198861e462Sjaap }
6206f545661Sjaap cnt = 0;
6218861e462Sjaap }
6226f545661Sjaap if (i == LEFT) eatblk(1);
6236f545661Sjaap } while ((!inblk && (i != '\n')) || (inblk && (i != RIGHT)));
6246f545661Sjaap if (i == '\n')
6256f545661Sjaap nlflg++;
6268861e462Sjaap }
6278861e462Sjaap
6288861e462Sjaap
cmpstr(c)6298861e462Sjaap cmpstr(c)
6308861e462Sjaap tchar c;
6318861e462Sjaap {
6328861e462Sjaap register j, delim;
6336f545661Sjaap register tchar i;
6346f545661Sjaap register val;
6356f545661Sjaap int savapts, savapts1, savfont, savfont1, savpts, savpts1;
6366f545661Sjaap tchar string[1280];
6376f545661Sjaap 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;
6486f545661Sjaap sp = string;
6496f545661Sjaap while ((j = cbits(i = getch()))!=delim && j!='\n' && sp<&string[1280-1])
6506f545661Sjaap *sp++ = i;
6516f545661Sjaap if (sp >= string + 1280) {
6526f545661Sjaap errprint("too-long string compare.");
6536f545661Sjaap edone(0100);
6548861e462Sjaap }
6556f545661Sjaap if (nlflg) {
6566f545661Sjaap val = sp==string;
6578861e462Sjaap goto rtn;
6586f545661Sjaap }
6596f545661Sjaap *sp++ = 0;
6608861e462Sjaap apts = savapts;
6618861e462Sjaap apts1 = savapts1;
6628861e462Sjaap font = savfont;
6638861e462Sjaap font1 = savfont1;
6648861e462Sjaap pts = savpts;
6658861e462Sjaap pts1 = savpts1;
6668861e462Sjaap mchbits();
6676f545661Sjaap val = 1;
6686f545661Sjaap sp = string;
6698861e462Sjaap while ((j = cbits(i = getch())) != delim && j != '\n') {
6706f545661Sjaap if (*sp != i) {
6718861e462Sjaap eat(delim);
6726f545661Sjaap val = 0;
6736f545661Sjaap goto rtn;
6748861e462Sjaap }
6756f545661Sjaap sp++;
6768861e462Sjaap }
6776f545661Sjaap if (*sp)
6786f545661Sjaap val = 0;
6798861e462Sjaap rtn:
6808861e462Sjaap apts = savapts;
6818861e462Sjaap apts1 = savapts1;
6828861e462Sjaap font = savfont;
6838861e462Sjaap font1 = savfont1;
6848861e462Sjaap pts = savpts;
6858861e462Sjaap pts1 = savpts1;
6868861e462Sjaap mchbits();
6876f545661Sjaap return(val);
6888861e462Sjaap }
6898861e462Sjaap
6908861e462Sjaap
caserd()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();
7026f545661Sjaap fdprintf(stderr, "\007"); /*bell*/
7038861e462Sjaap } else {
7048861e462Sjaap if (nextf[0]) {
7056f545661Sjaap fdprintf(stderr, "%s:", nextf);
7068861e462Sjaap } else {
7076f545661Sjaap fdprintf(stderr, "\007"); /*bell*/
7088861e462Sjaap }
7098861e462Sjaap }
7108861e462Sjaap }
7118861e462Sjaap collect();
7128861e462Sjaap tty++;
7136f545661Sjaap pushi(NBLIST*BLK, PAIR('r','d'));
7148861e462Sjaap }
7158861e462Sjaap
7168861e462Sjaap
rdtty()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
caseec()7408861e462Sjaap caseec()
7418861e462Sjaap {
7428861e462Sjaap eschar = chget('\\');
7438861e462Sjaap }
7448861e462Sjaap
7458861e462Sjaap
caseeo()7468861e462Sjaap caseeo()
7478861e462Sjaap {
7488861e462Sjaap eschar = 0;
7498861e462Sjaap }
7508861e462Sjaap
7518861e462Sjaap
caseta()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;
7606f545661Sjaap 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
casene()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
casetr()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
casecu()8158861e462Sjaap casecu()
8168861e462Sjaap {
8178861e462Sjaap cu++;
8188861e462Sjaap caseul();
8198861e462Sjaap }
8208861e462Sjaap
8218861e462Sjaap
caseul()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
caseuf()8478861e462Sjaap caseuf()
8488861e462Sjaap {
8498861e462Sjaap register i, j;
8508861e462Sjaap
8518861e462Sjaap if (skip() || !(i = getrq()) || i == 'S' || (j = findft(i)) == -1)
8526f545661Sjaap ulfont = ULFONT; /*default underline position*/
8538861e462Sjaap else
8548861e462Sjaap ulfont = j;
8558861e462Sjaap #ifdef NROFF
8566f545661Sjaap if (ulfont == FT)
8576f545661Sjaap ulfont = ULFONT;
8588861e462Sjaap #endif
8598861e462Sjaap }
8608861e462Sjaap
8618861e462Sjaap
caseit()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
casemc()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
casemk()8968861e462Sjaap casemk()
8978861e462Sjaap {
8988861e462Sjaap register i, j;
8998861e462Sjaap
9008861e462Sjaap if (dip != d)
9018861e462Sjaap j = dip->dnl;
9028861e462Sjaap else
9036f545661Sjaap j = numtab[NL].val;
9048861e462Sjaap if (skip()) {
9058861e462Sjaap dip->mkline = j;
9068861e462Sjaap return;
9078861e462Sjaap }
9088861e462Sjaap if ((i = getrq()) == 0)
9098861e462Sjaap return;
9106f545661Sjaap numtab[findr(i)].val = j;
9118861e462Sjaap }
9128861e462Sjaap
9138861e462Sjaap
casesv()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
caseos()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
casenm()9428861e462Sjaap casenm()
9438861e462Sjaap {
9448861e462Sjaap register i;
9458861e462Sjaap
9468861e462Sjaap lnmod = nn = 0;
9478861e462Sjaap if (skip())
9488861e462Sjaap return;
9498861e462Sjaap lnmod++;
9508861e462Sjaap noscale++;
9516f545661Sjaap i = inumb(&numtab[LN].val);
9528861e462Sjaap if (!nonumb)
9536f545661Sjaap 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
getnm(p,min)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
casenn()9778861e462Sjaap casenn()
9788861e462Sjaap {
9798861e462Sjaap noscale++;
9808861e462Sjaap skip();
9818861e462Sjaap nn = max(atoi(), 1);
9828861e462Sjaap noscale = 0;
9838861e462Sjaap }
9848861e462Sjaap
9858861e462Sjaap
caseab()9868861e462Sjaap caseab()
9878861e462Sjaap {
9888861e462Sjaap casetm(1);
9896f545661Sjaap done3(0);
9908861e462Sjaap }
991