|
|
1.1 ! root 1: #include "tdef.h" ! 2: #include <sgtty.h> ! 3: extern ! 4: #include "d.h" ! 5: extern ! 6: #include "v.h" ! 7: extern ! 8: #include "tw.h" ! 9: /* ! 10: nroff10.c ! 11: ! 12: Device interfaces ! 13: */ ! 14: ! 15: extern int lss; ! 16: extern char obuf[]; ! 17: extern char *obufp; ! 18: extern int xfont; ! 19: extern int esc; ! 20: extern int lead; ! 21: extern int oline[]; ! 22: extern int *olinep; ! 23: extern int ulfont; ! 24: extern int esct; ! 25: extern int sps; ! 26: extern int ics; ! 27: extern int ttysave; ! 28: extern struct sgttyb ttys; ! 29: extern char termtab[]; ! 30: extern int ptid; ! 31: extern int waitf; ! 32: extern int pipeflg; ! 33: extern int eqflg; ! 34: extern int hflg; ! 35: extern int tabtab[]; ! 36: extern int ascii; ! 37: extern int xxx; ! 38: int dtab; ! 39: int bdmode; ! 40: int plotmode; ! 41: ! 42: ptinit(){ ! 43: register i, j; ! 44: register char **p; ! 45: char *q; ! 46: int x[8]; ! 47: extern char *setbrk(); ! 48: ! 49: if(((i=open(termtab,0)) < 0) && (i=open("/usr/lib/term/tablpr",0)) < 0){ ! 50: prstr("Cannot open "); ! 51: prstr(termtab); ! 52: prstr("\n"); ! 53: exit(-1); ! 54: } ! 55: read(i,(char *)x,8*sizeof(int)); ! 56: read(i,(char *)&t.bset,j = sizeof(int)*((int *)&t.zzz - &t.bset)); ! 57: x[2] -= j; ! 58: q = setbrk(x[2]); ! 59: lseek(i,(long)t.twinit+8*sizeof(int),0); ! 60: i = read(i,q,x[2]); ! 61: j = q - t.twinit; ! 62: for(p = &t.twinit; p < &t.zzz; p++){ ! 63: if(*p)*p += j;else *p = ""; ! 64: } ! 65: sps = EM; ! 66: ics = EM*2; ! 67: dtab = 8 * t.Em; ! 68: for(i=0; i<16; i++)tabtab[i] = dtab * (i+1); ! 69: if(eqflg)t.Adj = t.Hor; ! 70: } ! 71: twdone(){ ! 72: obufp = obuf; ! 73: oputs(t.twrest); ! 74: flusho(); ! 75: if(pipeflg){ ! 76: close(ptid); ! 77: wait(&waitf); ! 78: } ! 79: if(ttysave != -1) { ! 80: ttys.sg_flags = ttysave; ! 81: stty(1, &ttys); ! 82: } ! 83: } ! 84: ptout(i) ! 85: int i; ! 86: { ! 87: *olinep++ = i; ! 88: if(olinep >= &oline[LNSIZE])olinep--; ! 89: if((i&CMASK) != '\n')return; ! 90: olinep--; ! 91: lead += dip->blss + lss - t.Newline; ! 92: dip->blss = 0; ! 93: esct = esc = 0; ! 94: if(olinep>oline){ ! 95: move(); ! 96: ptout1(); ! 97: oputs(t.twnl); ! 98: }else{ ! 99: lead += t.Newline; ! 100: move(); ! 101: } ! 102: lead += dip->alss; ! 103: dip->alss = 0; ! 104: olinep = oline; ! 105: } ! 106: ptout1() ! 107: { ! 108: register i, k; ! 109: register char *codep; ! 110: extern char *plot(); ! 111: int *q, w, j, phyw; ! 112: ! 113: for(q=oline; q<olinep; q++){ ! 114: if((i = *q) & MOT){ ! 115: j = i & ~MOTV; ! 116: if(i & NMOT)j = -j; ! 117: if(i & VMOT)lead += j; ! 118: else esc += j; ! 119: continue; ! 120: } ! 121: if((k = (i & CMASK)) <= 040){ ! 122: switch(k){ ! 123: case ' ': /*space*/ ! 124: esc += t.Char; ! 125: break; ! 126: } ! 127: continue; ! 128: } ! 129: codep = t.codetab[k-32]; ! 130: w = t.Char * (*codep++ & 0177); ! 131: phyw = w; ! 132: if(i&ZBIT)w = 0; ! 133: if(*codep && (esc || lead))move(); ! 134: esct += w; ! 135: if(i&074000)xfont = (i>>9) & 03; ! 136: if(*t.bdon & 0377){ ! 137: if(!bdmode && (xfont == 2)){ ! 138: oputs(t.bdon); ! 139: bdmode++; ! 140: } ! 141: if(bdmode && (xfont != 2)){ ! 142: oputs(t.bdoff); ! 143: bdmode = 0; ! 144: } ! 145: } ! 146: if(xfont == ulfont){ ! 147: for(k=w/t.Char;k>0;k--)oput('_'); ! 148: for(k=w/t.Char;k>0;k--)oput('\b'); ! 149: } ! 150: while(*codep != 0){ ! 151: if(*codep & 0200){ ! 152: codep = plot(codep); ! 153: oputs(t.plotoff); ! 154: oput(' '); ! 155: }else{ ! 156: if(plotmode)oputs(t.plotoff); ! 157: *obufp++ = *codep++; ! 158: if(obufp == (obuf + OBUFSZ + ascii - 1))flusho(); ! 159: /* oput(*codep++);*/ ! 160: } ! 161: } ! 162: if(!w)for(k=phyw/t.Char;k>0;k--)oput('\b'); ! 163: } ! 164: } ! 165: char *plot(x) ! 166: char *x; ! 167: { ! 168: register int i; ! 169: register char *j, *k; ! 170: ! 171: if(!plotmode)oputs(t.ploton); ! 172: k = x; ! 173: if((*k & 0377) == 0200)k++; ! 174: for(; *k; k++){ ! 175: if(*k & 0200){ ! 176: if(*k & 0100){ ! 177: if(*k & 040)j = t.up; else j = t.down; ! 178: }else{ ! 179: if(*k & 040)j = t.left; else j = t.right; ! 180: } ! 181: if(!(i = *k & 037))return(++k); ! 182: while(i--)oputs(j); ! 183: }else oput(*k); ! 184: } ! 185: return(k); ! 186: } ! 187: move(){ ! 188: register k; ! 189: register char *i, *j; ! 190: char *p, *q; ! 191: int iesct, dt; ! 192: ! 193: iesct = esct; ! 194: if(esct += esc)i = "\0"; else i = "\n\0"; ! 195: j = t.hlf; ! 196: p = t.right; ! 197: q = t.down; ! 198: if(lead){ ! 199: if(lead < 0){ ! 200: lead = -lead; ! 201: i = t.flr; ! 202: /* if(!esct)i = t.flr; else i = "\0";*/ ! 203: j = t.hlr; ! 204: q = t.up; ! 205: } ! 206: if(*i & 0377){ ! 207: k = lead/t.Newline; ! 208: lead = lead%t.Newline; ! 209: while(k--)oputs(i); ! 210: } ! 211: if(*j & 0377){ ! 212: k = lead/t.Halfline; ! 213: lead = lead%t.Halfline; ! 214: while(k--)oputs(j); ! 215: } ! 216: else { /* no half-line forward, not at line begining */ ! 217: k = lead/t.Newline; ! 218: lead = lead%t.Newline; ! 219: if (k>0) esc=esct; ! 220: i = "\n"; ! 221: while (k--) oputs(i); ! 222: } ! 223: } ! 224: if(esc){ ! 225: if(esc < 0){ ! 226: esc = -esc; ! 227: j = "\b"; ! 228: p = t.left; ! 229: }else{ ! 230: j = " "; ! 231: if(hflg)while((dt = dtab - (iesct%dtab)) <= esc){ ! 232: if(dt%t.Em)break; ! 233: oput(TAB); ! 234: esc -= dt; ! 235: iesct += dt; ! 236: } ! 237: } ! 238: k = esc/t.Em; ! 239: esc = esc%t.Em; ! 240: while(k--)oputs(j); ! 241: } ! 242: if((*t.ploton & 0377) && (esc || lead)){ ! 243: if(!plotmode)oputs(t.ploton); ! 244: esc /= t.Hor; ! 245: lead /= t.Vert; ! 246: while(esc--)oputs(p); ! 247: while(lead--)oputs(q); ! 248: oputs(t.plotoff); ! 249: } ! 250: esc = lead = 0; ! 251: } ! 252: ptlead(){move();} ! 253: dostop(){ ! 254: char junk; ! 255: ! 256: flusho(); ! 257: read(2,&junk,1); ! 258: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.