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