1*7069Srrh #ifndef lint 2*7069Srrh static char sccsid[] = "@(#)n5.c 4.1 06/07/82"; 3*7069Srrh #endif lint 4*7069Srrh 5*7069Srrh #include "tdef.h" 6*7069Srrh #include <sgtty.h> 7*7069Srrh extern 8*7069Srrh #include "d.h" 9*7069Srrh extern 10*7069Srrh #include "v.h" 11*7069Srrh #include "sdef.h" 12*7069Srrh 13*7069Srrh /* 14*7069Srrh troff5.c 15*7069Srrh 16*7069Srrh misc processing requests 17*7069Srrh */ 18*7069Srrh 19*7069Srrh extern int inchar[LNSIZE], *pinchar; /* XXX */ 20*7069Srrh extern struct s *frame; 21*7069Srrh extern struct s *litlev; 22*7069Srrh extern filep ip; 23*7069Srrh extern filep offset; 24*7069Srrh 25*7069Srrh extern int ascii; 26*7069Srrh extern int nonumb; 27*7069Srrh extern int admod; 28*7069Srrh extern int ad; 29*7069Srrh extern int fi; 30*7069Srrh extern int cc; 31*7069Srrh extern int c2; 32*7069Srrh extern int ohc; 33*7069Srrh extern int tabc; 34*7069Srrh extern int dotc; 35*7069Srrh extern int pendnf; 36*7069Srrh extern int hyf; 37*7069Srrh extern int ce; 38*7069Srrh extern int po; 39*7069Srrh extern int po1; 40*7069Srrh extern int nc; 41*7069Srrh extern int in; 42*7069Srrh extern int un; 43*7069Srrh extern int un1; 44*7069Srrh extern int in1; 45*7069Srrh extern int ll; 46*7069Srrh extern int ll1; 47*7069Srrh extern int lt; 48*7069Srrh extern int lt1; 49*7069Srrh extern int nlist[NTRAP]; 50*7069Srrh extern int mlist[NTRAP]; 51*7069Srrh extern int lgf; 52*7069Srrh extern int pl; 53*7069Srrh extern int npn; 54*7069Srrh extern int npnflg; 55*7069Srrh extern int copyf; 56*7069Srrh extern char nextf[]; 57*7069Srrh extern int trap; 58*7069Srrh extern int lss; 59*7069Srrh extern int em; 60*7069Srrh extern int evlist[EVLSZ]; 61*7069Srrh extern int evi; 62*7069Srrh extern int ibf; 63*7069Srrh extern int ev; 64*7069Srrh extern int ch; 65*7069Srrh extern int nflush; 66*7069Srrh extern int tty; 67*7069Srrh extern struct sgttyb ttys; 68*7069Srrh extern int quiet; 69*7069Srrh extern int iflg; 70*7069Srrh extern int eschar; 71*7069Srrh extern int lit; 72*7069Srrh extern int ls; 73*7069Srrh extern int ls1; 74*7069Srrh extern int tabtab[]; 75*7069Srrh extern char trtab[]; 76*7069Srrh extern int ul; 77*7069Srrh extern int cu; 78*7069Srrh extern int sfont; 79*7069Srrh extern int font; 80*7069Srrh extern int fontlab[]; 81*7069Srrh extern int it; 82*7069Srrh extern int itmac; 83*7069Srrh extern int noscale; 84*7069Srrh extern int ic; 85*7069Srrh extern int icf; 86*7069Srrh extern int ics; 87*7069Srrh extern int *vlist; 88*7069Srrh extern int sv; 89*7069Srrh extern int esc; 90*7069Srrh extern int nn; 91*7069Srrh extern int nms; 92*7069Srrh extern int ndf; 93*7069Srrh extern int lnmod; 94*7069Srrh extern int ni; 95*7069Srrh extern int lnsize; 96*7069Srrh extern int nb; 97*7069Srrh extern int nlflg; 98*7069Srrh extern int apts, apts1, pts, pts1, font, font1; 99*7069Srrh extern int ulfont; 100*7069Srrh extern int ulbit; 101*7069Srrh extern int error; 102*7069Srrh extern int nmbits; 103*7069Srrh extern int chbits; 104*7069Srrh extern int tdelim; 105*7069Srrh extern int xxx; 106*7069Srrh int iflist[NIF]; 107*7069Srrh int ifx; 108*7069Srrh 109*7069Srrh casead(){ 110*7069Srrh register i; 111*7069Srrh 112*7069Srrh ad = 1; 113*7069Srrh /*leave admod alone*/ 114*7069Srrh if(skip())return; 115*7069Srrh switch(i = getch() & CMASK){ 116*7069Srrh case 'r': /*right adj, left ragged*/ 117*7069Srrh admod = 2; 118*7069Srrh break; 119*7069Srrh case 'l': /*left adj, right ragged*/ 120*7069Srrh admod = ad = 0; /*same as casena*/ 121*7069Srrh break; 122*7069Srrh case 'c': /*centered adj*/ 123*7069Srrh admod = 1; 124*7069Srrh break; 125*7069Srrh case 'b': case 'n': 126*7069Srrh admod = 0; 127*7069Srrh break; 128*7069Srrh case '0': case '2': case '4': 129*7069Srrh ad = 0; 130*7069Srrh case '1': case '3': case '5': 131*7069Srrh admod = (i - '0')/2; 132*7069Srrh } 133*7069Srrh } 134*7069Srrh casena(){ 135*7069Srrh ad = 0; 136*7069Srrh } 137*7069Srrh casefi(){ 138*7069Srrh tbreak(); 139*7069Srrh fi++; 140*7069Srrh pendnf = 0; 141*7069Srrh lnsize = LNSIZE; 142*7069Srrh } 143*7069Srrh casenf(){ 144*7069Srrh tbreak(); 145*7069Srrh fi = 0; 146*7069Srrh /* can't do while oline is only LNSIZE 147*7069Srrh lnsize = LNSIZE + WDSIZE; 148*7069Srrh */ 149*7069Srrh } 150*7069Srrh casers(){ 151*7069Srrh dip->nls = 0; 152*7069Srrh } 153*7069Srrh casens(){ 154*7069Srrh dip->nls++; 155*7069Srrh } 156*7069Srrh chget(c) 157*7069Srrh int c; 158*7069Srrh { 159*7069Srrh register i; 160*7069Srrh 161*7069Srrh if(skip() || 162*7069Srrh ((i = getch()) & MOT) || 163*7069Srrh ((i&CMASK) == ' ') || 164*7069Srrh ((i&CMASK) == '\n')){ 165*7069Srrh ch = i; 166*7069Srrh return(c); 167*7069Srrh }else return(i & BMASK); 168*7069Srrh } 169*7069Srrh casecc(){ 170*7069Srrh cc = chget('.'); 171*7069Srrh } 172*7069Srrh casec2(){ 173*7069Srrh c2 = chget('\''); 174*7069Srrh } 175*7069Srrh casehc(){ 176*7069Srrh ohc = chget(OHC); 177*7069Srrh } 178*7069Srrh casetc(){ 179*7069Srrh tabc = chget(0); 180*7069Srrh } 181*7069Srrh caselc(){ 182*7069Srrh dotc = chget(0); 183*7069Srrh } 184*7069Srrh casehy(){ 185*7069Srrh register i; 186*7069Srrh 187*7069Srrh hyf = 1; 188*7069Srrh if(skip())return; 189*7069Srrh noscale++; 190*7069Srrh i = atoi(); 191*7069Srrh noscale = 0; 192*7069Srrh if(nonumb)return; 193*7069Srrh hyf = max(i,0); 194*7069Srrh } 195*7069Srrh casenh(){ 196*7069Srrh hyf = 0; 197*7069Srrh } 198*7069Srrh max(aa,bb) 199*7069Srrh int aa,bb; 200*7069Srrh { 201*7069Srrh if(aa>bb)return(aa); 202*7069Srrh else return(bb); 203*7069Srrh } 204*7069Srrh casece(){ 205*7069Srrh register i; 206*7069Srrh 207*7069Srrh noscale++; 208*7069Srrh skip(); 209*7069Srrh i = max(atoi(),0); 210*7069Srrh if(nonumb)i = 1; 211*7069Srrh tbreak(); 212*7069Srrh ce = i; 213*7069Srrh noscale = 0; 214*7069Srrh } 215*7069Srrh casein(){ 216*7069Srrh register i; 217*7069Srrh 218*7069Srrh if(skip())i = in1; 219*7069Srrh else i = max(hnumb(&in),0); 220*7069Srrh tbreak(); 221*7069Srrh in1 = in; 222*7069Srrh in = i; 223*7069Srrh if(!nc){ 224*7069Srrh un = in; 225*7069Srrh setnel(); 226*7069Srrh } 227*7069Srrh } 228*7069Srrh casell(){ 229*7069Srrh register i; 230*7069Srrh 231*7069Srrh if(skip())i = ll1; 232*7069Srrh else i = max(hnumb(&ll),INCH/10); 233*7069Srrh ll1 = ll; 234*7069Srrh ll = i; 235*7069Srrh setnel(); 236*7069Srrh } 237*7069Srrh caselt(){ 238*7069Srrh register i; 239*7069Srrh 240*7069Srrh if(skip())i = lt1; 241*7069Srrh else i = max(hnumb(<),0); 242*7069Srrh lt1 = lt; 243*7069Srrh lt = i; 244*7069Srrh } 245*7069Srrh caseti(){ 246*7069Srrh register i; 247*7069Srrh 248*7069Srrh if(skip())return; 249*7069Srrh i = max(hnumb(&in),0); 250*7069Srrh tbreak(); 251*7069Srrh un1 = i; 252*7069Srrh setnel(); 253*7069Srrh } 254*7069Srrh casels(){ 255*7069Srrh register i; 256*7069Srrh 257*7069Srrh noscale++; 258*7069Srrh if(skip())i = ls1; 259*7069Srrh else i = max(inumb(&ls),1); 260*7069Srrh ls1 = ls; 261*7069Srrh ls = i; 262*7069Srrh noscale = 0; 263*7069Srrh } 264*7069Srrh casepo(){ 265*7069Srrh register i; 266*7069Srrh 267*7069Srrh if(skip())i = po1; 268*7069Srrh else i = max(hnumb(&po),0); 269*7069Srrh po1 = po; 270*7069Srrh po = i; 271*7069Srrh #ifndef NROFF 272*7069Srrh if(!ascii)esc += po - po1; 273*7069Srrh #endif 274*7069Srrh } 275*7069Srrh casepl(){ 276*7069Srrh register i; 277*7069Srrh 278*7069Srrh skip(); 279*7069Srrh if((i = vnumb(&pl)) == 0)pl = 11 * INCH; /*11in*/ 280*7069Srrh else pl = i; 281*7069Srrh if(v.nl > pl)v.nl = pl; 282*7069Srrh } 283*7069Srrh casewh(){ 284*7069Srrh register i, j, k; 285*7069Srrh 286*7069Srrh lgf++; 287*7069Srrh skip(); 288*7069Srrh i = vnumb((int *)0); 289*7069Srrh if(nonumb)return; 290*7069Srrh skip(); 291*7069Srrh j = getrq(); 292*7069Srrh if((k=findn(i)) != NTRAP){ 293*7069Srrh mlist[k] = j; 294*7069Srrh return; 295*7069Srrh } 296*7069Srrh for(k=0; k<NTRAP; k++)if(mlist[k] == 0)break; 297*7069Srrh if(k == NTRAP){ 298*7069Srrh prstrfl("Cannot plant trap.\n"); 299*7069Srrh return; 300*7069Srrh } 301*7069Srrh mlist[k] = j; 302*7069Srrh nlist[k] = i; 303*7069Srrh } 304*7069Srrh casech(){ 305*7069Srrh register i, j, k; 306*7069Srrh 307*7069Srrh lgf++; 308*7069Srrh skip(); 309*7069Srrh if(!(j=getrq()))return; 310*7069Srrh else for(k=0; k<NTRAP; k++)if(mlist[k] == j)break; 311*7069Srrh if(k == NTRAP)return; 312*7069Srrh skip(); 313*7069Srrh i = vnumb((int *)0); 314*7069Srrh if(nonumb)mlist[k] = 0; 315*7069Srrh nlist[k] = i; 316*7069Srrh } 317*7069Srrh findn(i) 318*7069Srrh int i; 319*7069Srrh { 320*7069Srrh register k; 321*7069Srrh 322*7069Srrh for(k=0; k<NTRAP; k++) 323*7069Srrh if((nlist[k] == i) && (mlist[k] != 0))break; 324*7069Srrh return(k); 325*7069Srrh } 326*7069Srrh casepn(){ 327*7069Srrh register i; 328*7069Srrh 329*7069Srrh skip(); 330*7069Srrh noscale++; 331*7069Srrh i = max(inumb(&v.pn),0); 332*7069Srrh noscale = 0; 333*7069Srrh if(!nonumb){ 334*7069Srrh npn = i; 335*7069Srrh npnflg++; 336*7069Srrh } 337*7069Srrh } 338*7069Srrh casebp(){ 339*7069Srrh register i; 340*7069Srrh register struct s *savframe; 341*7069Srrh 342*7069Srrh if(dip != d)return; 343*7069Srrh savframe = frame; 344*7069Srrh skip(); 345*7069Srrh if((i = inumb(&v.pn)) < 0)i = 0; 346*7069Srrh tbreak(); 347*7069Srrh if(!nonumb){ 348*7069Srrh npn = i; 349*7069Srrh npnflg++; 350*7069Srrh }else if(dip->nls)return; 351*7069Srrh eject(savframe); 352*7069Srrh } 353*7069Srrh casetm(x) int x;{ 354*7069Srrh register i; 355*7069Srrh char tmbuf[NTM]; 356*7069Srrh 357*7069Srrh lgf++; 358*7069Srrh copyf++; 359*7069Srrh if(skip() && x)prstrfl("User Abort."); 360*7069Srrh for(i=0; i<NTM-2;)if((tmbuf[i++]=getch()) == '\n')break; 361*7069Srrh if(i == NTM-2)tmbuf[i++] = '\n'; 362*7069Srrh tmbuf[i] = 0; 363*7069Srrh prstrfl(tmbuf); 364*7069Srrh copyf--; 365*7069Srrh } 366*7069Srrh casesp(a) 367*7069Srrh int a; 368*7069Srrh { 369*7069Srrh register i, j, savlss; 370*7069Srrh 371*7069Srrh tbreak(); 372*7069Srrh if(dip->nls || trap)return; 373*7069Srrh i = findt1(); 374*7069Srrh if(!a){ 375*7069Srrh skip(); 376*7069Srrh j = vnumb((int *)0); 377*7069Srrh if(nonumb)j = lss; 378*7069Srrh }else j = a; 379*7069Srrh if(j == 0)return; 380*7069Srrh if(i < j)j = i; 381*7069Srrh savlss = lss; 382*7069Srrh if(dip != d)i = dip->dnl; else i = v.nl; 383*7069Srrh if((i + j) < 0)j = -i; 384*7069Srrh lss = j; 385*7069Srrh newline(0); 386*7069Srrh lss = savlss; 387*7069Srrh } 388*7069Srrh casert(){ 389*7069Srrh register a, *p; 390*7069Srrh 391*7069Srrh skip(); 392*7069Srrh if(dip != d)p = &dip->dnl; else p = &v.nl; 393*7069Srrh a = vnumb(p); 394*7069Srrh if(nonumb)a = dip->mkline; 395*7069Srrh if((a < 0) || (a >= *p))return; 396*7069Srrh nb++; 397*7069Srrh casesp(a - *p); 398*7069Srrh } 399*7069Srrh caseem(){ 400*7069Srrh lgf++; 401*7069Srrh skip(); 402*7069Srrh em = getrq(); 403*7069Srrh } 404*7069Srrh casefl(){ 405*7069Srrh tbreak(); 406*7069Srrh flusho(); 407*7069Srrh } 408*7069Srrh caseev(){ 409*7069Srrh register nxev; 410*7069Srrh extern int block; 411*7069Srrh 412*7069Srrh if(skip()){ 413*7069Srrh e0: 414*7069Srrh if(evi == 0)return; 415*7069Srrh nxev = evlist[--evi]; 416*7069Srrh goto e1; 417*7069Srrh } 418*7069Srrh noscale++; 419*7069Srrh nxev = atoi(); 420*7069Srrh noscale = 0; 421*7069Srrh if(nonumb)goto e0; 422*7069Srrh flushi(); 423*7069Srrh if((nxev >= NEV) || (nxev < 0) || (evi >= EVLSZ)){ 424*7069Srrh prstrfl("Cannot do ev.\n"); 425*7069Srrh if(error)done2(040);else edone(040); 426*7069Srrh return; 427*7069Srrh } 428*7069Srrh evlist[evi++] = ev; 429*7069Srrh e1: 430*7069Srrh if(ev == nxev)return; 431*7069Srrh lseek(ibf, (long)(ev*EVS*sizeof(int)), 0); 432*7069Srrh write(ibf,(char *)&block, EVS*sizeof(int)); 433*7069Srrh lseek(ibf, (long)(nxev*EVS*sizeof(int)), 0); 434*7069Srrh read(ibf,(char *)&block, EVS*sizeof(int)); 435*7069Srrh ev = nxev; 436*7069Srrh } 437*7069Srrh caseel(){ 438*7069Srrh if(--ifx < 0){ 439*7069Srrh ifx = 0; 440*7069Srrh iflist[0] = 0; 441*7069Srrh } 442*7069Srrh caseif(2); 443*7069Srrh } 444*7069Srrh caseie(){ 445*7069Srrh if(ifx >= NIF){ 446*7069Srrh prstr("if-else overflow.\n"); 447*7069Srrh ifx = 0; 448*7069Srrh edone(040); 449*7069Srrh } 450*7069Srrh caseif(1); 451*7069Srrh ifx++; 452*7069Srrh } 453*7069Srrh caseif(x) 454*7069Srrh int x; 455*7069Srrh { 456*7069Srrh register i, notflag, true; 457*7069Srrh 458*7069Srrh if(x == 2){ 459*7069Srrh notflag = 0; 460*7069Srrh true = iflist[ifx]; 461*7069Srrh goto i1; 462*7069Srrh } 463*7069Srrh true = 0; 464*7069Srrh skip(); 465*7069Srrh if(((i = getch()) & CMASK) == '!'){ 466*7069Srrh notflag = 1; 467*7069Srrh }else{ 468*7069Srrh notflag = 0; 469*7069Srrh ch = i; 470*7069Srrh } 471*7069Srrh i = atoi(); 472*7069Srrh if(!nonumb){ 473*7069Srrh if(i > 0)true++; 474*7069Srrh goto i1; 475*7069Srrh } 476*7069Srrh switch((i = getch()) & CMASK){ 477*7069Srrh case 'e': 478*7069Srrh if(!(v.pn & 01))true++; 479*7069Srrh break; 480*7069Srrh case 'o': 481*7069Srrh if(v.pn & 01)true++; 482*7069Srrh break; 483*7069Srrh #ifdef NROFF 484*7069Srrh case 'n': 485*7069Srrh true++; 486*7069Srrh case 't': 487*7069Srrh #endif 488*7069Srrh #ifndef NROFF 489*7069Srrh case 't': 490*7069Srrh true++; 491*7069Srrh case 'n': 492*7069Srrh #endif 493*7069Srrh case ' ': 494*7069Srrh break; 495*7069Srrh default: 496*7069Srrh true = cmpstr(i); 497*7069Srrh } 498*7069Srrh i1: 499*7069Srrh true ^= notflag; 500*7069Srrh if(x == 1)iflist[ifx] = !true; 501*7069Srrh if(true){ 502*7069Srrh i2: 503*7069Srrh do{ 504*7069Srrh v.hp = 0; 505*7069Srrh pinchar = inchar; /* XXX */ 506*7069Srrh } 507*7069Srrh while(((i = getch()) & CMASK) == ' '); 508*7069Srrh if((i & CMASK) == LEFT)goto i2; 509*7069Srrh ch = i; 510*7069Srrh nflush++; 511*7069Srrh }else{ 512*7069Srrh copyf++; 513*7069Srrh if(eat(LEFT) == LEFT){ 514*7069Srrh while(eatblk(RIGHT,LEFT) != RIGHT)nlflg = 0; 515*7069Srrh } 516*7069Srrh copyf--; 517*7069Srrh } 518*7069Srrh } 519*7069Srrh eatblk(right,left) 520*7069Srrh int right,left; 521*7069Srrh { 522*7069Srrh register i; 523*7069Srrh 524*7069Srrh e0: 525*7069Srrh while(((i = getch() & CMASK) != right) && 526*7069Srrh (i != left) && 527*7069Srrh (i != '\n')); 528*7069Srrh if(i == left){ 529*7069Srrh while((i=eatblk(right,left)) != right)nlflg = 0; 530*7069Srrh goto e0; 531*7069Srrh } 532*7069Srrh return(i); 533*7069Srrh } 534*7069Srrh cmpstr(delim) 535*7069Srrh int delim; 536*7069Srrh { 537*7069Srrh register i, j; 538*7069Srrh register filep p; 539*7069Srrh extern filep alloc(); 540*7069Srrh extern filep incoff(); 541*7069Srrh filep begin; 542*7069Srrh int cnt, k; 543*7069Srrh int savapts, savapts1, savfont, savfont1, 544*7069Srrh savpts, savpts1; 545*7069Srrh 546*7069Srrh if(delim & MOT)return(0); 547*7069Srrh delim &= CMASK; 548*7069Srrh if(dip != d)wbfl(); 549*7069Srrh if((offset = begin = alloc()) == (filep)0)return(0); 550*7069Srrh cnt = 0; 551*7069Srrh v.hp = 0; 552*7069Srrh pinchar = inchar; /* XXX */ 553*7069Srrh savapts = apts; 554*7069Srrh savapts1 = apts1; 555*7069Srrh savfont = font; 556*7069Srrh savfont1 = font1; 557*7069Srrh savpts = pts; 558*7069Srrh savpts1 = pts1; 559*7069Srrh while(((j = (i=getch()) & CMASK) != delim) && (j != '\n')){ 560*7069Srrh wbf(i); 561*7069Srrh cnt++; 562*7069Srrh } 563*7069Srrh wbt(0); 564*7069Srrh k = !cnt; 565*7069Srrh if(nlflg)goto rtn; 566*7069Srrh p = begin; 567*7069Srrh apts = savapts; 568*7069Srrh apts1 = savapts1; 569*7069Srrh font = savfont; 570*7069Srrh font1 = savfont1; 571*7069Srrh pts = savpts; 572*7069Srrh pts1 = savpts1; 573*7069Srrh mchbits(); 574*7069Srrh v.hp = 0; 575*7069Srrh pinchar = inchar; /* XXX */ 576*7069Srrh while(((j = (i=getch()) & CMASK) != delim) && (j != '\n')){ 577*7069Srrh if(rbf0(p) != i){ 578*7069Srrh eat(delim); 579*7069Srrh k = 0; 580*7069Srrh break; 581*7069Srrh } 582*7069Srrh p = incoff(p); 583*7069Srrh k = !(--cnt); 584*7069Srrh } 585*7069Srrh rtn: 586*7069Srrh apts = savapts; 587*7069Srrh apts1 = savapts1; 588*7069Srrh font = savfont; 589*7069Srrh font1 = savfont1; 590*7069Srrh pts = savpts; 591*7069Srrh pts1 = savpts1; 592*7069Srrh mchbits(); 593*7069Srrh offset = dip->op; 594*7069Srrh ffree(begin); 595*7069Srrh return(k); 596*7069Srrh } 597*7069Srrh caserd(){ 598*7069Srrh 599*7069Srrh lgf++; 600*7069Srrh skip(); 601*7069Srrh getname(); 602*7069Srrh if(!iflg){ 603*7069Srrh if(quiet){ 604*7069Srrh ttys.sg_flags &= ~ECHO; 605*7069Srrh stty(0, &ttys); 606*7069Srrh prstrfl(""); /*bell*/ 607*7069Srrh }else{ 608*7069Srrh if(nextf[0]){ 609*7069Srrh prstr(nextf); 610*7069Srrh prstr(":"); 611*7069Srrh }else{ 612*7069Srrh prstr(""); /*bell*/ 613*7069Srrh } 614*7069Srrh } 615*7069Srrh } 616*7069Srrh collect(); 617*7069Srrh tty++; 618*7069Srrh pushi((filep)-1); 619*7069Srrh } 620*7069Srrh rdtty(){ 621*7069Srrh char onechar; 622*7069Srrh 623*7069Srrh onechar = 0; 624*7069Srrh if(read(0, &onechar, 1) == 1){ 625*7069Srrh if(onechar == '\n')tty++; 626*7069Srrh else tty = 1; 627*7069Srrh if(tty != 3)return(onechar); 628*7069Srrh } 629*7069Srrh popi(); 630*7069Srrh tty = 0; 631*7069Srrh if(quiet){ 632*7069Srrh ttys.sg_flags |= ECHO; 633*7069Srrh stty(0, &ttys); 634*7069Srrh } 635*7069Srrh return(0); 636*7069Srrh } 637*7069Srrh caseec(){ 638*7069Srrh eschar = chget('\\'); 639*7069Srrh } 640*7069Srrh caseeo(){ 641*7069Srrh eschar = 0; 642*7069Srrh } 643*7069Srrh caseli(){ 644*7069Srrh 645*7069Srrh skip(); 646*7069Srrh lit = max(inumb((int *)0),1); 647*7069Srrh litlev = frame; 648*7069Srrh if((dip == d) && (v.nl == -1))newline(1); 649*7069Srrh } 650*7069Srrh caseta(){ 651*7069Srrh register i; 652*7069Srrh 653*7069Srrh tabtab[0] = nonumb = 0; 654*7069Srrh for(i=0; ((i < (NTAB-1)) && !nonumb); i++){ 655*7069Srrh if(skip())break; 656*7069Srrh tabtab[i] = max(hnumb(&tabtab[max(i-1,0)]),0) & TMASK; 657*7069Srrh if(!nonumb) switch(ch & CMASK){ 658*7069Srrh case 'C': 659*7069Srrh tabtab[i] |= CTAB; 660*7069Srrh break; 661*7069Srrh case 'R': 662*7069Srrh tabtab[i] |= RTAB; 663*7069Srrh break; 664*7069Srrh default: /*includes L*/ 665*7069Srrh break; 666*7069Srrh } 667*7069Srrh nonumb = ch = 0; 668*7069Srrh } 669*7069Srrh tabtab[i] = 0; 670*7069Srrh } 671*7069Srrh casene(){ 672*7069Srrh register i, j; 673*7069Srrh 674*7069Srrh skip(); 675*7069Srrh i = vnumb((int *)0); 676*7069Srrh if(nonumb)i = lss; 677*7069Srrh if(i > (j = findt1())){ 678*7069Srrh i = lss; 679*7069Srrh lss = j; 680*7069Srrh dip->nls = 0; 681*7069Srrh newline(0); 682*7069Srrh lss = i; 683*7069Srrh } 684*7069Srrh } 685*7069Srrh casetr(){ 686*7069Srrh register i, j; 687*7069Srrh 688*7069Srrh lgf++; 689*7069Srrh skip(); 690*7069Srrh while((i = getch() & CMASK) != '\n'){ 691*7069Srrh if((i & MOT) || ((j = getch()) & MOT))return; 692*7069Srrh if((j &= CMASK) == '\n')j = ' '; 693*7069Srrh trtab[i] = j; 694*7069Srrh } 695*7069Srrh } 696*7069Srrh casecu(){ 697*7069Srrh cu++; 698*7069Srrh caseul(); 699*7069Srrh } 700*7069Srrh caseul(){ 701*7069Srrh register i; 702*7069Srrh 703*7069Srrh noscale++; 704*7069Srrh if(skip())i = 1; 705*7069Srrh else i = atoi(); 706*7069Srrh if(ul && (i == 0)){ 707*7069Srrh font = sfont; 708*7069Srrh ul = cu = 0; 709*7069Srrh } 710*7069Srrh if(i){ 711*7069Srrh if(!ul){ 712*7069Srrh sfont = font; 713*7069Srrh font = ulfont; 714*7069Srrh } 715*7069Srrh ul = i; 716*7069Srrh } 717*7069Srrh noscale = 0; 718*7069Srrh mchbits(); 719*7069Srrh } 720*7069Srrh caseuf(){ 721*7069Srrh register i, j; 722*7069Srrh 723*7069Srrh if(skip() || !(i = getrq()) || (i == 'S') || 724*7069Srrh ((j = find(i,fontlab)) == -1)) 725*7069Srrh ulfont = 1; /*default position 2*/ 726*7069Srrh else ulfont = j; 727*7069Srrh #ifdef NROFF 728*7069Srrh if(ulfont == 0)ulfont = 1; 729*7069Srrh #endif 730*7069Srrh ulbit = ulfont<<9; 731*7069Srrh } 732*7069Srrh caseit(){ 733*7069Srrh register i; 734*7069Srrh 735*7069Srrh lgf++; 736*7069Srrh it = itmac = 0; 737*7069Srrh noscale++; 738*7069Srrh skip(); 739*7069Srrh i = atoi(); 740*7069Srrh skip(); 741*7069Srrh if(!nonumb && (itmac = getrq()))it = i; 742*7069Srrh noscale = 0; 743*7069Srrh } 744*7069Srrh casemc(){ 745*7069Srrh register i; 746*7069Srrh 747*7069Srrh if(icf > 1)ic = 0; 748*7069Srrh icf = 0; 749*7069Srrh if(skip())return; 750*7069Srrh ic = getch(); 751*7069Srrh icf = 1; 752*7069Srrh skip(); 753*7069Srrh i = max(hnumb((int *)0),0); 754*7069Srrh if(!nonumb)ics = i; 755*7069Srrh } 756*7069Srrh casemk(){ 757*7069Srrh register i, j; 758*7069Srrh 759*7069Srrh if(dip != d)j = dip->dnl; else j = v.nl; 760*7069Srrh if(skip()){ 761*7069Srrh dip->mkline = j; 762*7069Srrh return; 763*7069Srrh } 764*7069Srrh if((i = getrq()) == 0)return; 765*7069Srrh vlist[findr(i)] = j; 766*7069Srrh } 767*7069Srrh casesv(){ 768*7069Srrh register i; 769*7069Srrh 770*7069Srrh skip(); 771*7069Srrh if((i = vnumb((int *)0)) < 0)return; 772*7069Srrh if(nonumb)i = 1; 773*7069Srrh sv += i; 774*7069Srrh caseos(); 775*7069Srrh } 776*7069Srrh caseos(){ 777*7069Srrh register savlss; 778*7069Srrh 779*7069Srrh if(sv <= findt1()){ 780*7069Srrh savlss = lss; 781*7069Srrh lss = sv; 782*7069Srrh newline(0); 783*7069Srrh lss = savlss; 784*7069Srrh sv = 0; 785*7069Srrh } 786*7069Srrh } 787*7069Srrh casenm(){ 788*7069Srrh register i; 789*7069Srrh 790*7069Srrh lnmod = nn = 0; 791*7069Srrh if(skip())return; 792*7069Srrh lnmod++; 793*7069Srrh noscale++; 794*7069Srrh i = inumb(&v.ln); 795*7069Srrh if(!nonumb)v.ln = max(i,0); 796*7069Srrh getnm(&ndf,1); 797*7069Srrh getnm(&nms,0); 798*7069Srrh getnm(&ni,0); 799*7069Srrh noscale = 0; 800*7069Srrh nmbits = chbits; 801*7069Srrh } 802*7069Srrh getnm(p,min) 803*7069Srrh int *p, min; 804*7069Srrh { 805*7069Srrh register i; 806*7069Srrh 807*7069Srrh eat(' '); 808*7069Srrh if(skip())return; 809*7069Srrh i = atoi(); 810*7069Srrh if(nonumb)return; 811*7069Srrh *p = max(i,min); 812*7069Srrh } 813*7069Srrh casenn(){ 814*7069Srrh noscale++; 815*7069Srrh skip(); 816*7069Srrh nn = max(atoi(),1); 817*7069Srrh noscale = 0; 818*7069Srrh } 819*7069Srrh caseab(){ 820*7069Srrh dummy(); 821*7069Srrh casetm(1); 822*7069Srrh done2(0); 823*7069Srrh } 824