17069Srrh #ifndef lint 2*13479Ssam static char sccsid[] = "@(#)n5.c 4.2 06/30/83"; 37069Srrh #endif lint 47069Srrh 57069Srrh #include "tdef.h" 67069Srrh #include <sgtty.h> 77069Srrh extern 87069Srrh #include "d.h" 97069Srrh extern 107069Srrh #include "v.h" 117069Srrh #include "sdef.h" 127069Srrh 137069Srrh /* 147069Srrh troff5.c 157069Srrh 167069Srrh misc processing requests 177069Srrh */ 187069Srrh 197069Srrh extern int inchar[LNSIZE], *pinchar; /* XXX */ 207069Srrh extern struct s *frame; 217069Srrh extern struct s *litlev; 227069Srrh extern filep ip; 237069Srrh extern filep offset; 247069Srrh 257069Srrh extern int ascii; 267069Srrh extern int nonumb; 277069Srrh extern int admod; 287069Srrh extern int ad; 297069Srrh extern int fi; 307069Srrh extern int cc; 317069Srrh extern int c2; 327069Srrh extern int ohc; 337069Srrh extern int tabc; 347069Srrh extern int dotc; 357069Srrh extern int pendnf; 367069Srrh extern int hyf; 377069Srrh extern int ce; 387069Srrh extern int po; 397069Srrh extern int po1; 407069Srrh extern int nc; 417069Srrh extern int in; 427069Srrh extern int un; 437069Srrh extern int un1; 447069Srrh extern int in1; 457069Srrh extern int ll; 467069Srrh extern int ll1; 477069Srrh extern int lt; 487069Srrh extern int lt1; 497069Srrh extern int nlist[NTRAP]; 507069Srrh extern int mlist[NTRAP]; 517069Srrh extern int lgf; 527069Srrh extern int pl; 537069Srrh extern int npn; 547069Srrh extern int npnflg; 557069Srrh extern int copyf; 567069Srrh extern char nextf[]; 577069Srrh extern int trap; 587069Srrh extern int lss; 597069Srrh extern int em; 607069Srrh extern int evlist[EVLSZ]; 617069Srrh extern int evi; 627069Srrh extern int ibf; 637069Srrh extern int ev; 647069Srrh extern int ch; 657069Srrh extern int nflush; 667069Srrh extern int tty; 677069Srrh extern struct sgttyb ttys; 687069Srrh extern int quiet; 697069Srrh extern int iflg; 707069Srrh extern int eschar; 717069Srrh extern int lit; 727069Srrh extern int ls; 737069Srrh extern int ls1; 747069Srrh extern int tabtab[]; 757069Srrh extern char trtab[]; 767069Srrh extern int ul; 777069Srrh extern int cu; 787069Srrh extern int sfont; 797069Srrh extern int font; 807069Srrh extern int fontlab[]; 817069Srrh extern int it; 827069Srrh extern int itmac; 837069Srrh extern int noscale; 847069Srrh extern int ic; 857069Srrh extern int icf; 867069Srrh extern int ics; 877069Srrh extern int *vlist; 887069Srrh extern int sv; 897069Srrh extern int esc; 907069Srrh extern int nn; 917069Srrh extern int nms; 927069Srrh extern int ndf; 937069Srrh extern int lnmod; 947069Srrh extern int ni; 957069Srrh extern int lnsize; 967069Srrh extern int nb; 977069Srrh extern int nlflg; 987069Srrh extern int apts, apts1, pts, pts1, font, font1; 997069Srrh extern int ulfont; 1007069Srrh extern int ulbit; 1017069Srrh extern int error; 1027069Srrh extern int nmbits; 1037069Srrh extern int chbits; 1047069Srrh extern int tdelim; 1057069Srrh extern int xxx; 1067069Srrh int iflist[NIF]; 1077069Srrh int ifx; 1087069Srrh 1097069Srrh casead(){ 1107069Srrh register i; 1117069Srrh 1127069Srrh ad = 1; 1137069Srrh /*leave admod alone*/ 1147069Srrh if(skip())return; 1157069Srrh switch(i = getch() & CMASK){ 1167069Srrh case 'r': /*right adj, left ragged*/ 1177069Srrh admod = 2; 1187069Srrh break; 1197069Srrh case 'l': /*left adj, right ragged*/ 1207069Srrh admod = ad = 0; /*same as casena*/ 1217069Srrh break; 1227069Srrh case 'c': /*centered adj*/ 1237069Srrh admod = 1; 1247069Srrh break; 1257069Srrh case 'b': case 'n': 1267069Srrh admod = 0; 1277069Srrh break; 1287069Srrh case '0': case '2': case '4': 1297069Srrh ad = 0; 1307069Srrh case '1': case '3': case '5': 1317069Srrh admod = (i - '0')/2; 1327069Srrh } 1337069Srrh } 1347069Srrh casena(){ 1357069Srrh ad = 0; 1367069Srrh } 1377069Srrh casefi(){ 1387069Srrh tbreak(); 1397069Srrh fi++; 1407069Srrh pendnf = 0; 1417069Srrh lnsize = LNSIZE; 1427069Srrh } 1437069Srrh casenf(){ 1447069Srrh tbreak(); 1457069Srrh fi = 0; 1467069Srrh /* can't do while oline is only LNSIZE 1477069Srrh lnsize = LNSIZE + WDSIZE; 1487069Srrh */ 1497069Srrh } 1507069Srrh casers(){ 1517069Srrh dip->nls = 0; 1527069Srrh } 1537069Srrh casens(){ 1547069Srrh dip->nls++; 1557069Srrh } 1567069Srrh chget(c) 1577069Srrh int c; 1587069Srrh { 1597069Srrh register i; 1607069Srrh 1617069Srrh if(skip() || 1627069Srrh ((i = getch()) & MOT) || 1637069Srrh ((i&CMASK) == ' ') || 1647069Srrh ((i&CMASK) == '\n')){ 1657069Srrh ch = i; 1667069Srrh return(c); 1677069Srrh }else return(i & BMASK); 1687069Srrh } 1697069Srrh casecc(){ 1707069Srrh cc = chget('.'); 1717069Srrh } 1727069Srrh casec2(){ 1737069Srrh c2 = chget('\''); 1747069Srrh } 1757069Srrh casehc(){ 1767069Srrh ohc = chget(OHC); 1777069Srrh } 1787069Srrh casetc(){ 1797069Srrh tabc = chget(0); 1807069Srrh } 1817069Srrh caselc(){ 1827069Srrh dotc = chget(0); 1837069Srrh } 1847069Srrh casehy(){ 1857069Srrh register i; 1867069Srrh 1877069Srrh hyf = 1; 1887069Srrh if(skip())return; 1897069Srrh noscale++; 1907069Srrh i = atoi(); 1917069Srrh noscale = 0; 1927069Srrh if(nonumb)return; 1937069Srrh hyf = max(i,0); 1947069Srrh } 1957069Srrh casenh(){ 1967069Srrh hyf = 0; 1977069Srrh } 1987069Srrh max(aa,bb) 1997069Srrh int aa,bb; 2007069Srrh { 2017069Srrh if(aa>bb)return(aa); 2027069Srrh else return(bb); 2037069Srrh } 2047069Srrh casece(){ 2057069Srrh register i; 2067069Srrh 2077069Srrh noscale++; 2087069Srrh skip(); 2097069Srrh i = max(atoi(),0); 2107069Srrh if(nonumb)i = 1; 2117069Srrh tbreak(); 2127069Srrh ce = i; 2137069Srrh noscale = 0; 2147069Srrh } 2157069Srrh casein(){ 2167069Srrh register i; 2177069Srrh 2187069Srrh if(skip())i = in1; 2197069Srrh else i = max(hnumb(&in),0); 2207069Srrh tbreak(); 2217069Srrh in1 = in; 2227069Srrh in = i; 2237069Srrh if(!nc){ 2247069Srrh un = in; 2257069Srrh setnel(); 2267069Srrh } 2277069Srrh } 2287069Srrh casell(){ 2297069Srrh register i; 2307069Srrh 2317069Srrh if(skip())i = ll1; 2327069Srrh else i = max(hnumb(&ll),INCH/10); 2337069Srrh ll1 = ll; 2347069Srrh ll = i; 2357069Srrh setnel(); 2367069Srrh } 2377069Srrh caselt(){ 2387069Srrh register i; 2397069Srrh 2407069Srrh if(skip())i = lt1; 2417069Srrh else i = max(hnumb(<),0); 2427069Srrh lt1 = lt; 2437069Srrh lt = i; 2447069Srrh } 2457069Srrh caseti(){ 2467069Srrh register i; 2477069Srrh 2487069Srrh if(skip())return; 2497069Srrh i = max(hnumb(&in),0); 2507069Srrh tbreak(); 2517069Srrh un1 = i; 2527069Srrh setnel(); 2537069Srrh } 2547069Srrh casels(){ 2557069Srrh register i; 2567069Srrh 2577069Srrh noscale++; 2587069Srrh if(skip())i = ls1; 2597069Srrh else i = max(inumb(&ls),1); 2607069Srrh ls1 = ls; 2617069Srrh ls = i; 2627069Srrh noscale = 0; 2637069Srrh } 2647069Srrh casepo(){ 2657069Srrh register i; 2667069Srrh 2677069Srrh if(skip())i = po1; 2687069Srrh else i = max(hnumb(&po),0); 2697069Srrh po1 = po; 2707069Srrh po = i; 2717069Srrh #ifndef NROFF 2727069Srrh if(!ascii)esc += po - po1; 2737069Srrh #endif 2747069Srrh } 2757069Srrh casepl(){ 2767069Srrh register i; 2777069Srrh 2787069Srrh skip(); 2797069Srrh if((i = vnumb(&pl)) == 0)pl = 11 * INCH; /*11in*/ 2807069Srrh else pl = i; 2817069Srrh if(v.nl > pl)v.nl = pl; 2827069Srrh } 2837069Srrh casewh(){ 2847069Srrh register i, j, k; 2857069Srrh 2867069Srrh lgf++; 2877069Srrh skip(); 2887069Srrh i = vnumb((int *)0); 2897069Srrh if(nonumb)return; 2907069Srrh skip(); 2917069Srrh j = getrq(); 2927069Srrh if((k=findn(i)) != NTRAP){ 2937069Srrh mlist[k] = j; 2947069Srrh return; 2957069Srrh } 2967069Srrh for(k=0; k<NTRAP; k++)if(mlist[k] == 0)break; 2977069Srrh if(k == NTRAP){ 2987069Srrh prstrfl("Cannot plant trap.\n"); 2997069Srrh return; 3007069Srrh } 3017069Srrh mlist[k] = j; 3027069Srrh nlist[k] = i; 3037069Srrh } 3047069Srrh casech(){ 3057069Srrh register i, j, k; 3067069Srrh 3077069Srrh lgf++; 3087069Srrh skip(); 3097069Srrh if(!(j=getrq()))return; 3107069Srrh else for(k=0; k<NTRAP; k++)if(mlist[k] == j)break; 3117069Srrh if(k == NTRAP)return; 3127069Srrh skip(); 3137069Srrh i = vnumb((int *)0); 3147069Srrh if(nonumb)mlist[k] = 0; 3157069Srrh nlist[k] = i; 3167069Srrh } 3177069Srrh findn(i) 3187069Srrh int i; 3197069Srrh { 3207069Srrh register k; 3217069Srrh 3227069Srrh for(k=0; k<NTRAP; k++) 3237069Srrh if((nlist[k] == i) && (mlist[k] != 0))break; 3247069Srrh return(k); 3257069Srrh } 3267069Srrh casepn(){ 3277069Srrh register i; 3287069Srrh 3297069Srrh skip(); 3307069Srrh noscale++; 3317069Srrh i = max(inumb(&v.pn),0); 3327069Srrh noscale = 0; 3337069Srrh if(!nonumb){ 3347069Srrh npn = i; 3357069Srrh npnflg++; 3367069Srrh } 3377069Srrh } 3387069Srrh casebp(){ 3397069Srrh register i; 3407069Srrh register struct s *savframe; 3417069Srrh 3427069Srrh if(dip != d)return; 3437069Srrh savframe = frame; 3447069Srrh skip(); 3457069Srrh if((i = inumb(&v.pn)) < 0)i = 0; 3467069Srrh tbreak(); 3477069Srrh if(!nonumb){ 3487069Srrh npn = i; 3497069Srrh npnflg++; 3507069Srrh }else if(dip->nls)return; 3517069Srrh eject(savframe); 3527069Srrh } 3537069Srrh casetm(x) int x;{ 3547069Srrh register i; 3557069Srrh char tmbuf[NTM]; 3567069Srrh 3577069Srrh lgf++; 3587069Srrh copyf++; 3597069Srrh if(skip() && x)prstrfl("User Abort."); 3607069Srrh for(i=0; i<NTM-2;)if((tmbuf[i++]=getch()) == '\n')break; 3617069Srrh if(i == NTM-2)tmbuf[i++] = '\n'; 3627069Srrh tmbuf[i] = 0; 3637069Srrh prstrfl(tmbuf); 3647069Srrh copyf--; 3657069Srrh } 3667069Srrh casesp(a) 3677069Srrh int a; 3687069Srrh { 3697069Srrh register i, j, savlss; 3707069Srrh 3717069Srrh tbreak(); 3727069Srrh if(dip->nls || trap)return; 3737069Srrh i = findt1(); 3747069Srrh if(!a){ 3757069Srrh skip(); 3767069Srrh j = vnumb((int *)0); 3777069Srrh if(nonumb)j = lss; 3787069Srrh }else j = a; 3797069Srrh if(j == 0)return; 3807069Srrh if(i < j)j = i; 3817069Srrh savlss = lss; 3827069Srrh if(dip != d)i = dip->dnl; else i = v.nl; 3837069Srrh if((i + j) < 0)j = -i; 3847069Srrh lss = j; 3857069Srrh newline(0); 3867069Srrh lss = savlss; 3877069Srrh } 3887069Srrh casert(){ 3897069Srrh register a, *p; 3907069Srrh 3917069Srrh skip(); 3927069Srrh if(dip != d)p = &dip->dnl; else p = &v.nl; 3937069Srrh a = vnumb(p); 3947069Srrh if(nonumb)a = dip->mkline; 3957069Srrh if((a < 0) || (a >= *p))return; 3967069Srrh nb++; 3977069Srrh casesp(a - *p); 3987069Srrh } 3997069Srrh caseem(){ 4007069Srrh lgf++; 4017069Srrh skip(); 4027069Srrh em = getrq(); 4037069Srrh } 4047069Srrh casefl(){ 4057069Srrh tbreak(); 4067069Srrh flusho(); 4077069Srrh } 4087069Srrh caseev(){ 4097069Srrh register nxev; 4107069Srrh extern int block; 4117069Srrh 4127069Srrh if(skip()){ 4137069Srrh e0: 4147069Srrh if(evi == 0)return; 4157069Srrh nxev = evlist[--evi]; 4167069Srrh goto e1; 4177069Srrh } 4187069Srrh noscale++; 4197069Srrh nxev = atoi(); 4207069Srrh noscale = 0; 4217069Srrh if(nonumb)goto e0; 4227069Srrh flushi(); 4237069Srrh if((nxev >= NEV) || (nxev < 0) || (evi >= EVLSZ)){ 4247069Srrh prstrfl("Cannot do ev.\n"); 4257069Srrh if(error)done2(040);else edone(040); 4267069Srrh return; 4277069Srrh } 4287069Srrh evlist[evi++] = ev; 4297069Srrh e1: 4307069Srrh if(ev == nxev)return; 4317069Srrh lseek(ibf, (long)(ev*EVS*sizeof(int)), 0); 4327069Srrh write(ibf,(char *)&block, EVS*sizeof(int)); 4337069Srrh lseek(ibf, (long)(nxev*EVS*sizeof(int)), 0); 4347069Srrh read(ibf,(char *)&block, EVS*sizeof(int)); 4357069Srrh ev = nxev; 4367069Srrh } 4377069Srrh caseel(){ 4387069Srrh if(--ifx < 0){ 4397069Srrh ifx = 0; 4407069Srrh iflist[0] = 0; 4417069Srrh } 4427069Srrh caseif(2); 4437069Srrh } 4447069Srrh caseie(){ 4457069Srrh if(ifx >= NIF){ 4467069Srrh prstr("if-else overflow.\n"); 4477069Srrh ifx = 0; 4487069Srrh edone(040); 4497069Srrh } 4507069Srrh caseif(1); 4517069Srrh ifx++; 4527069Srrh } 4537069Srrh caseif(x) 4547069Srrh int x; 4557069Srrh { 4567069Srrh register i, notflag, true; 4577069Srrh 4587069Srrh if(x == 2){ 4597069Srrh notflag = 0; 4607069Srrh true = iflist[ifx]; 4617069Srrh goto i1; 4627069Srrh } 4637069Srrh true = 0; 4647069Srrh skip(); 4657069Srrh if(((i = getch()) & CMASK) == '!'){ 4667069Srrh notflag = 1; 4677069Srrh }else{ 4687069Srrh notflag = 0; 4697069Srrh ch = i; 4707069Srrh } 4717069Srrh i = atoi(); 4727069Srrh if(!nonumb){ 4737069Srrh if(i > 0)true++; 4747069Srrh goto i1; 4757069Srrh } 4767069Srrh switch((i = getch()) & CMASK){ 4777069Srrh case 'e': 4787069Srrh if(!(v.pn & 01))true++; 4797069Srrh break; 4807069Srrh case 'o': 4817069Srrh if(v.pn & 01)true++; 4827069Srrh break; 4837069Srrh #ifdef NROFF 4847069Srrh case 'n': 4857069Srrh true++; 4867069Srrh case 't': 4877069Srrh #endif 4887069Srrh #ifndef NROFF 4897069Srrh case 't': 4907069Srrh true++; 4917069Srrh case 'n': 4927069Srrh #endif 4937069Srrh case ' ': 4947069Srrh break; 4957069Srrh default: 4967069Srrh true = cmpstr(i); 4977069Srrh } 4987069Srrh i1: 4997069Srrh true ^= notflag; 5007069Srrh if(x == 1)iflist[ifx] = !true; 5017069Srrh if(true){ 5027069Srrh i2: 5037069Srrh do{ 5047069Srrh v.hp = 0; 5057069Srrh pinchar = inchar; /* XXX */ 5067069Srrh } 5077069Srrh while(((i = getch()) & CMASK) == ' '); 5087069Srrh if((i & CMASK) == LEFT)goto i2; 5097069Srrh ch = i; 5107069Srrh nflush++; 5117069Srrh }else{ 5127069Srrh copyf++; 5137069Srrh if(eat(LEFT) == LEFT){ 5147069Srrh while(eatblk(RIGHT,LEFT) != RIGHT)nlflg = 0; 5157069Srrh } 5167069Srrh copyf--; 5177069Srrh } 5187069Srrh } 5197069Srrh eatblk(right,left) 5207069Srrh int right,left; 5217069Srrh { 5227069Srrh register i; 5237069Srrh 5247069Srrh e0: 5257069Srrh while(((i = getch() & CMASK) != right) && 5267069Srrh (i != left) && 5277069Srrh (i != '\n')); 5287069Srrh if(i == left){ 5297069Srrh while((i=eatblk(right,left)) != right)nlflg = 0; 5307069Srrh goto e0; 5317069Srrh } 5327069Srrh return(i); 5337069Srrh } 5347069Srrh cmpstr(delim) 5357069Srrh int delim; 5367069Srrh { 5377069Srrh register i, j; 5387069Srrh register filep p; 5397069Srrh extern filep alloc(); 5407069Srrh extern filep incoff(); 5417069Srrh filep begin; 5427069Srrh int cnt, k; 5437069Srrh int savapts, savapts1, savfont, savfont1, 5447069Srrh savpts, savpts1; 5457069Srrh 5467069Srrh if(delim & MOT)return(0); 5477069Srrh delim &= CMASK; 5487069Srrh if(dip != d)wbfl(); 5497069Srrh if((offset = begin = alloc()) == (filep)0)return(0); 5507069Srrh cnt = 0; 5517069Srrh v.hp = 0; 5527069Srrh pinchar = inchar; /* XXX */ 5537069Srrh savapts = apts; 5547069Srrh savapts1 = apts1; 5557069Srrh savfont = font; 5567069Srrh savfont1 = font1; 5577069Srrh savpts = pts; 5587069Srrh savpts1 = pts1; 5597069Srrh while(((j = (i=getch()) & CMASK) != delim) && (j != '\n')){ 5607069Srrh wbf(i); 5617069Srrh cnt++; 5627069Srrh } 5637069Srrh wbt(0); 5647069Srrh k = !cnt; 5657069Srrh if(nlflg)goto rtn; 5667069Srrh p = begin; 5677069Srrh apts = savapts; 5687069Srrh apts1 = savapts1; 5697069Srrh font = savfont; 5707069Srrh font1 = savfont1; 5717069Srrh pts = savpts; 5727069Srrh pts1 = savpts1; 5737069Srrh mchbits(); 5747069Srrh v.hp = 0; 5757069Srrh pinchar = inchar; /* XXX */ 5767069Srrh while(((j = (i=getch()) & CMASK) != delim) && (j != '\n')){ 5777069Srrh if(rbf0(p) != i){ 5787069Srrh eat(delim); 5797069Srrh k = 0; 5807069Srrh break; 5817069Srrh } 5827069Srrh p = incoff(p); 5837069Srrh k = !(--cnt); 5847069Srrh } 5857069Srrh rtn: 5867069Srrh apts = savapts; 5877069Srrh apts1 = savapts1; 5887069Srrh font = savfont; 5897069Srrh font1 = savfont1; 5907069Srrh pts = savpts; 5917069Srrh pts1 = savpts1; 5927069Srrh mchbits(); 5937069Srrh offset = dip->op; 5947069Srrh ffree(begin); 5957069Srrh return(k); 5967069Srrh } 5977069Srrh caserd(){ 5987069Srrh 5997069Srrh lgf++; 6007069Srrh skip(); 6017069Srrh getname(); 6027069Srrh if(!iflg){ 6037069Srrh if(quiet){ 6047069Srrh ttys.sg_flags &= ~ECHO; 6057069Srrh stty(0, &ttys); 6067069Srrh prstrfl(""); /*bell*/ 6077069Srrh }else{ 6087069Srrh if(nextf[0]){ 6097069Srrh prstr(nextf); 6107069Srrh prstr(":"); 6117069Srrh }else{ 6127069Srrh prstr(""); /*bell*/ 6137069Srrh } 6147069Srrh } 6157069Srrh } 6167069Srrh collect(); 6177069Srrh tty++; 6187069Srrh pushi((filep)-1); 6197069Srrh } 6207069Srrh rdtty(){ 6217069Srrh char onechar; 6227069Srrh 6237069Srrh onechar = 0; 6247069Srrh if(read(0, &onechar, 1) == 1){ 6257069Srrh if(onechar == '\n')tty++; 6267069Srrh else tty = 1; 6277069Srrh if(tty != 3)return(onechar); 6287069Srrh } 6297069Srrh popi(); 6307069Srrh tty = 0; 6317069Srrh if(quiet){ 6327069Srrh ttys.sg_flags |= ECHO; 6337069Srrh stty(0, &ttys); 6347069Srrh } 6357069Srrh return(0); 6367069Srrh } 6377069Srrh caseec(){ 6387069Srrh eschar = chget('\\'); 6397069Srrh } 6407069Srrh caseeo(){ 6417069Srrh eschar = 0; 6427069Srrh } 6437069Srrh caseli(){ 6447069Srrh 6457069Srrh skip(); 6467069Srrh lit = max(inumb((int *)0),1); 6477069Srrh litlev = frame; 6487069Srrh if((dip == d) && (v.nl == -1))newline(1); 6497069Srrh } 6507069Srrh caseta(){ 6517069Srrh register i; 6527069Srrh 6537069Srrh tabtab[0] = nonumb = 0; 6547069Srrh for(i=0; ((i < (NTAB-1)) && !nonumb); i++){ 6557069Srrh if(skip())break; 656*13479Ssam tabtab[i] = tabtab[max(i-1,0)] & TMASK; 657*13479Ssam tabtab[i] = max(hnumb(&tabtab[i]),0) & TMASK; 6587069Srrh if(!nonumb) switch(ch & CMASK){ 6597069Srrh case 'C': 6607069Srrh tabtab[i] |= CTAB; 6617069Srrh break; 6627069Srrh case 'R': 6637069Srrh tabtab[i] |= RTAB; 6647069Srrh break; 6657069Srrh default: /*includes L*/ 6667069Srrh break; 6677069Srrh } 6687069Srrh nonumb = ch = 0; 6697069Srrh } 6707069Srrh tabtab[i] = 0; 6717069Srrh } 6727069Srrh casene(){ 6737069Srrh register i, j; 6747069Srrh 6757069Srrh skip(); 6767069Srrh i = vnumb((int *)0); 6777069Srrh if(nonumb)i = lss; 6787069Srrh if(i > (j = findt1())){ 6797069Srrh i = lss; 6807069Srrh lss = j; 6817069Srrh dip->nls = 0; 6827069Srrh newline(0); 6837069Srrh lss = i; 6847069Srrh } 6857069Srrh } 6867069Srrh casetr(){ 6877069Srrh register i, j; 6887069Srrh 6897069Srrh lgf++; 6907069Srrh skip(); 6917069Srrh while((i = getch() & CMASK) != '\n'){ 6927069Srrh if((i & MOT) || ((j = getch()) & MOT))return; 6937069Srrh if((j &= CMASK) == '\n')j = ' '; 6947069Srrh trtab[i] = j; 6957069Srrh } 6967069Srrh } 6977069Srrh casecu(){ 6987069Srrh cu++; 6997069Srrh caseul(); 7007069Srrh } 7017069Srrh caseul(){ 7027069Srrh register i; 7037069Srrh 7047069Srrh noscale++; 7057069Srrh if(skip())i = 1; 7067069Srrh else i = atoi(); 7077069Srrh if(ul && (i == 0)){ 7087069Srrh font = sfont; 7097069Srrh ul = cu = 0; 7107069Srrh } 7117069Srrh if(i){ 7127069Srrh if(!ul){ 7137069Srrh sfont = font; 7147069Srrh font = ulfont; 7157069Srrh } 7167069Srrh ul = i; 7177069Srrh } 7187069Srrh noscale = 0; 7197069Srrh mchbits(); 7207069Srrh } 7217069Srrh caseuf(){ 7227069Srrh register i, j; 7237069Srrh 7247069Srrh if(skip() || !(i = getrq()) || (i == 'S') || 7257069Srrh ((j = find(i,fontlab)) == -1)) 7267069Srrh ulfont = 1; /*default position 2*/ 7277069Srrh else ulfont = j; 7287069Srrh #ifdef NROFF 7297069Srrh if(ulfont == 0)ulfont = 1; 7307069Srrh #endif 7317069Srrh ulbit = ulfont<<9; 7327069Srrh } 7337069Srrh caseit(){ 7347069Srrh register i; 7357069Srrh 7367069Srrh lgf++; 7377069Srrh it = itmac = 0; 7387069Srrh noscale++; 7397069Srrh skip(); 7407069Srrh i = atoi(); 7417069Srrh skip(); 7427069Srrh if(!nonumb && (itmac = getrq()))it = i; 7437069Srrh noscale = 0; 7447069Srrh } 7457069Srrh casemc(){ 7467069Srrh register i; 7477069Srrh 7487069Srrh if(icf > 1)ic = 0; 7497069Srrh icf = 0; 7507069Srrh if(skip())return; 7517069Srrh ic = getch(); 7527069Srrh icf = 1; 7537069Srrh skip(); 7547069Srrh i = max(hnumb((int *)0),0); 7557069Srrh if(!nonumb)ics = i; 7567069Srrh } 7577069Srrh casemk(){ 7587069Srrh register i, j; 7597069Srrh 7607069Srrh if(dip != d)j = dip->dnl; else j = v.nl; 7617069Srrh if(skip()){ 7627069Srrh dip->mkline = j; 7637069Srrh return; 7647069Srrh } 7657069Srrh if((i = getrq()) == 0)return; 7667069Srrh vlist[findr(i)] = j; 7677069Srrh } 7687069Srrh casesv(){ 7697069Srrh register i; 7707069Srrh 7717069Srrh skip(); 7727069Srrh if((i = vnumb((int *)0)) < 0)return; 7737069Srrh if(nonumb)i = 1; 7747069Srrh sv += i; 7757069Srrh caseos(); 7767069Srrh } 7777069Srrh caseos(){ 7787069Srrh register savlss; 7797069Srrh 7807069Srrh if(sv <= findt1()){ 7817069Srrh savlss = lss; 7827069Srrh lss = sv; 7837069Srrh newline(0); 7847069Srrh lss = savlss; 7857069Srrh sv = 0; 7867069Srrh } 7877069Srrh } 7887069Srrh casenm(){ 7897069Srrh register i; 7907069Srrh 7917069Srrh lnmod = nn = 0; 7927069Srrh if(skip())return; 7937069Srrh lnmod++; 7947069Srrh noscale++; 7957069Srrh i = inumb(&v.ln); 7967069Srrh if(!nonumb)v.ln = max(i,0); 7977069Srrh getnm(&ndf,1); 7987069Srrh getnm(&nms,0); 7997069Srrh getnm(&ni,0); 8007069Srrh noscale = 0; 8017069Srrh nmbits = chbits; 8027069Srrh } 8037069Srrh getnm(p,min) 8047069Srrh int *p, min; 8057069Srrh { 8067069Srrh register i; 8077069Srrh 8087069Srrh eat(' '); 8097069Srrh if(skip())return; 8107069Srrh i = atoi(); 8117069Srrh if(nonumb)return; 8127069Srrh *p = max(i,min); 8137069Srrh } 8147069Srrh casenn(){ 8157069Srrh noscale++; 8167069Srrh skip(); 8177069Srrh nn = max(atoi(),1); 8187069Srrh noscale = 0; 8197069Srrh } 8207069Srrh caseab(){ 8217069Srrh dummy(); 8227069Srrh casetm(1); 8237069Srrh done2(0); 8247069Srrh } 825