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