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){
  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: }

Defined functions

dostop defined in line 253; never used
move defined in line 187; used 4 times
plot defined in line 165; used 2 times
ptinit defined in line 42; never used
ptlead defined in line 252; never used
ptout defined in line 84; never used
ptout1 defined in line 106; used 1 times
  • in line 96
twdone defined in line 71; used 1 times

Defined variables

bdmode defined in line 39; used 4 times
dtab defined in line 38; used 4 times
plotmode defined in line 40; used 3 times
Last modified: 1981-07-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 985
Valid CSS Valid XHTML 1.0 Strict