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