Blame


1 5cedca1b 2004-05-15 devnull #include "tdef.h"
2 5cedca1b 2004-05-15 devnull #include "fns.h"
3 5cedca1b 2004-05-15 devnull #include "ext.h"
4 5cedca1b 2004-05-15 devnull
5 5cedca1b 2004-05-15 devnull /*
6 5cedca1b 2004-05-15 devnull * troff10.c
7 fa325e9b 2020-01-10 cross *
8 5cedca1b 2004-05-15 devnull * typesetter interface
9 5cedca1b 2004-05-15 devnull */
10 5cedca1b 2004-05-15 devnull
11 5cedca1b 2004-05-15 devnull int vpos = 0; /* absolute vertical position on page */
12 5cedca1b 2004-05-15 devnull int hpos = 0; /* ditto horizontal */
13 5cedca1b 2004-05-15 devnull
14 5cedca1b 2004-05-15 devnull extern Font fonts[MAXFONTS+1];
15 5cedca1b 2004-05-15 devnull
16 5cedca1b 2004-05-15 devnull int Inch;
17 5cedca1b 2004-05-15 devnull int Hor;
18 5cedca1b 2004-05-15 devnull int Vert;
19 5cedca1b 2004-05-15 devnull int Unitwidth;
20 5cedca1b 2004-05-15 devnull int nfonts;
21 5cedca1b 2004-05-15 devnull
22 5cedca1b 2004-05-15 devnull
23 5cedca1b 2004-05-15 devnull
24 5cedca1b 2004-05-15 devnull void t_ptinit(void)
25 5cedca1b 2004-05-15 devnull {
26 5cedca1b 2004-05-15 devnull int i;
27 5cedca1b 2004-05-15 devnull char buf[100], *p;
28 5cedca1b 2004-05-15 devnull
29 5cedca1b 2004-05-15 devnull hmot = t_hmot;
30 5cedca1b 2004-05-15 devnull makem = t_makem;
31 5cedca1b 2004-05-15 devnull setabs = t_setabs;
32 5cedca1b 2004-05-15 devnull setch = t_setch;
33 5cedca1b 2004-05-15 devnull sethl = t_sethl;
34 5cedca1b 2004-05-15 devnull setht = t_setht;
35 5cedca1b 2004-05-15 devnull setslant = t_setslant;
36 5cedca1b 2004-05-15 devnull vmot = t_vmot;
37 5cedca1b 2004-05-15 devnull xlss = t_xlss;
38 5cedca1b 2004-05-15 devnull findft = t_findft;
39 5cedca1b 2004-05-15 devnull width = t_width;
40 5cedca1b 2004-05-15 devnull mchbits = t_mchbits;
41 5cedca1b 2004-05-15 devnull ptlead = t_ptlead;
42 5cedca1b 2004-05-15 devnull ptout = t_ptout;
43 5cedca1b 2004-05-15 devnull ptpause = t_ptpause;
44 5cedca1b 2004-05-15 devnull setfont = t_setfont;
45 5cedca1b 2004-05-15 devnull setps = t_setps;
46 5cedca1b 2004-05-15 devnull setwd = t_setwd;
47 5cedca1b 2004-05-15 devnull
48 5cedca1b 2004-05-15 devnull /* open table for device, */
49 5cedca1b 2004-05-15 devnull /* read in resolution, size info, font info, etc., set params */
50 5cedca1b 2004-05-15 devnull if ((p = getenv("TYPESETTER")) != 0)
51 5cedca1b 2004-05-15 devnull strcpy(devname, p);
52 5cedca1b 2004-05-15 devnull if (termtab[0] == 0)
53 5cedca1b 2004-05-15 devnull strcpy(termtab, DWBfontdir);
54 5cedca1b 2004-05-15 devnull if (fontdir[0] == 0)
55 5cedca1b 2004-05-15 devnull strcpy(fontdir, DWBfontdir);
56 5cedca1b 2004-05-15 devnull if (devname[0] == 0)
57 5cedca1b 2004-05-15 devnull strcpy(devname, TDEVNAME);
58 5cedca1b 2004-05-15 devnull hyf = 1;
59 5cedca1b 2004-05-15 devnull lg = 1;
60 5cedca1b 2004-05-15 devnull
61 5cedca1b 2004-05-15 devnull sprintf(buf, "/dev%s/DESC", devname);
62 5cedca1b 2004-05-15 devnull strcat(termtab, buf);
63 5cedca1b 2004-05-15 devnull if (getdesc(termtab) < 0) {
64 5cedca1b 2004-05-15 devnull ERROR "can't open DESC file %s", termtab WARN;
65 5cedca1b 2004-05-15 devnull done3(1);
66 5cedca1b 2004-05-15 devnull }
67 5cedca1b 2004-05-15 devnull if (!ascii) {
68 5cedca1b 2004-05-15 devnull OUT "x T %s\n", devname PUT;
69 5cedca1b 2004-05-15 devnull OUT "x res %d %d %d\n", Inch, Hor, Vert PUT;
70 5cedca1b 2004-05-15 devnull OUT "x init\n" PUT;
71 5cedca1b 2004-05-15 devnull }
72 5cedca1b 2004-05-15 devnull for (i = 1; i <= nfonts; i++)
73 5cedca1b 2004-05-15 devnull setfp(i, fontlab[i], (char *) 0, 0);
74 5cedca1b 2004-05-15 devnull sps = EM/3; /* space size */
75 5cedca1b 2004-05-15 devnull ics = EM; /* insertion character space */
76 5cedca1b 2004-05-15 devnull for (i = 0; i < (NTAB - 1) && DTAB * (i + 1) < TABMASK; i++)
77 5cedca1b 2004-05-15 devnull tabtab[i] = DTAB * (i + 1);
78 ada24b40 2008-05-10 rsc tabtab[NTAB-1] = 0;
79 5cedca1b 2004-05-15 devnull pl = 11 * INCH; /* paper length */
80 5cedca1b 2004-05-15 devnull po = PO; /* page offset */
81 5cedca1b 2004-05-15 devnull spacesz = SS;
82 5cedca1b 2004-05-15 devnull lss = lss1 = VS;
83 5cedca1b 2004-05-15 devnull ll = ll1 = lt = lt1 = LL;
84 5cedca1b 2004-05-15 devnull t_specnames(); /* install names like "hyphen", etc. */
85 5cedca1b 2004-05-15 devnull }
86 5cedca1b 2004-05-15 devnull
87 5cedca1b 2004-05-15 devnull void t_specnames(void)
88 5cedca1b 2004-05-15 devnull {
89 5cedca1b 2004-05-15 devnull int i;
90 5cedca1b 2004-05-15 devnull
91 5cedca1b 2004-05-15 devnull for (i = 0; spnames[i].n; i++)
92 5cedca1b 2004-05-15 devnull *spnames[i].n = chadd(spnames[i].v, Troffchar, Install);
93 5cedca1b 2004-05-15 devnull }
94 5cedca1b 2004-05-15 devnull
95 5cedca1b 2004-05-15 devnull void t_ptout(Tchar i)
96 5cedca1b 2004-05-15 devnull {
97 5cedca1b 2004-05-15 devnull int dv;
98 5cedca1b 2004-05-15 devnull Tchar *k;
99 5cedca1b 2004-05-15 devnull int temp, a, b;
100 5cedca1b 2004-05-15 devnull int diff;
101 5cedca1b 2004-05-15 devnull
102 5cedca1b 2004-05-15 devnull if (cbits(i) != '\n') {
103 5cedca1b 2004-05-15 devnull if (olinep >= oline + olnsize) {
104 5cedca1b 2004-05-15 devnull diff = olinep - oline;
105 5cedca1b 2004-05-15 devnull olnsize += OLNSIZE;
106 5cedca1b 2004-05-15 devnull if ((oline = (Tchar *)realloc((char *)oline, olnsize * sizeof(Tchar))) != NULL) {
107 5cedca1b 2004-05-15 devnull if (diff && olinep)
108 5cedca1b 2004-05-15 devnull olinep = oline + diff;
109 5cedca1b 2004-05-15 devnull } else {
110 5cedca1b 2004-05-15 devnull ERROR "Output line overflow." WARN;
111 5cedca1b 2004-05-15 devnull done(2);
112 5cedca1b 2004-05-15 devnull }
113 5cedca1b 2004-05-15 devnull }
114 5cedca1b 2004-05-15 devnull *olinep++ = i;
115 5cedca1b 2004-05-15 devnull return;
116 5cedca1b 2004-05-15 devnull }
117 5cedca1b 2004-05-15 devnull if (olinep == oline) {
118 5cedca1b 2004-05-15 devnull lead += lss;
119 5cedca1b 2004-05-15 devnull return;
120 5cedca1b 2004-05-15 devnull }
121 5cedca1b 2004-05-15 devnull
122 5cedca1b 2004-05-15 devnull hpos = po; /* ??? */
123 5cedca1b 2004-05-15 devnull esc = 0; /* ??? */
124 5cedca1b 2004-05-15 devnull ptesc(); /* the problem is to get back to the left end of the line */
125 5cedca1b 2004-05-15 devnull dv = 0;
126 5cedca1b 2004-05-15 devnull for (k = oline; k < olinep; k++) {
127 5cedca1b 2004-05-15 devnull if (ismot(*k) && isvmot(*k)) {
128 5cedca1b 2004-05-15 devnull temp = absmot(*k);
129 5cedca1b 2004-05-15 devnull if (isnmot(*k))
130 5cedca1b 2004-05-15 devnull temp = -temp;
131 5cedca1b 2004-05-15 devnull dv += temp;
132 5cedca1b 2004-05-15 devnull }
133 5cedca1b 2004-05-15 devnull }
134 5cedca1b 2004-05-15 devnull if (dv) {
135 5cedca1b 2004-05-15 devnull vflag++;
136 5cedca1b 2004-05-15 devnull *olinep++ = makem(-dv);
137 5cedca1b 2004-05-15 devnull vflag = 0;
138 5cedca1b 2004-05-15 devnull }
139 5cedca1b 2004-05-15 devnull
140 5cedca1b 2004-05-15 devnull b = dip->blss + lss;
141 5cedca1b 2004-05-15 devnull lead += dip->blss + lss;
142 5cedca1b 2004-05-15 devnull dip->blss = 0;
143 5cedca1b 2004-05-15 devnull for (k = oline; k < olinep; )
144 5cedca1b 2004-05-15 devnull k += ptout0(k); /* now passing a pointer! */
145 5cedca1b 2004-05-15 devnull olinep = oline;
146 5cedca1b 2004-05-15 devnull lead += dip->alss;
147 5cedca1b 2004-05-15 devnull a = dip->alss;
148 5cedca1b 2004-05-15 devnull dip->alss = 0;
149 5cedca1b 2004-05-15 devnull /*
150 5cedca1b 2004-05-15 devnull OUT "x xxx end of line: hpos=%d, vpos=%d\n", hpos, vpos PUT;
151 5cedca1b 2004-05-15 devnull */
152 5cedca1b 2004-05-15 devnull OUT "n%d %d\n", b, a PUT; /* be nice to chuck */
153 5cedca1b 2004-05-15 devnull }
154 5cedca1b 2004-05-15 devnull
155 5cedca1b 2004-05-15 devnull int ptout0(Tchar *pi)
156 5cedca1b 2004-05-15 devnull {
157 5cedca1b 2004-05-15 devnull int j, k, w;
158 5cedca1b 2004-05-15 devnull int z, dx, dy, dx2, dy2, n;
159 5cedca1b 2004-05-15 devnull Tchar i;
160 5cedca1b 2004-05-15 devnull int outsize; /* size of object being printed */
161 5cedca1b 2004-05-15 devnull
162 c5561c23 2004-05-16 devnull w = 0;
163 5cedca1b 2004-05-15 devnull outsize = 1; /* default */
164 5cedca1b 2004-05-15 devnull i = *pi;
165 5cedca1b 2004-05-15 devnull k = cbits(i);
166 5cedca1b 2004-05-15 devnull if (ismot(i)) {
167 5cedca1b 2004-05-15 devnull j = absmot(i);
168 5cedca1b 2004-05-15 devnull if (isnmot(i))
169 5cedca1b 2004-05-15 devnull j = -j;
170 5cedca1b 2004-05-15 devnull if (isvmot(i))
171 5cedca1b 2004-05-15 devnull lead += j;
172 fa325e9b 2020-01-10 cross else
173 5cedca1b 2004-05-15 devnull esc += j;
174 5cedca1b 2004-05-15 devnull return(outsize);
175 5cedca1b 2004-05-15 devnull }
176 5cedca1b 2004-05-15 devnull if (k == CHARHT) {
177 5cedca1b 2004-05-15 devnull xpts = fbits(i); /* sneaky, font bits as size bits */
178 5cedca1b 2004-05-15 devnull if (xpts != mpts)
179 5cedca1b 2004-05-15 devnull ptps();
180 c5561c23 2004-05-16 devnull OUT "x H %ld\n", sbits(i) PUT;
181 5cedca1b 2004-05-15 devnull return(outsize);
182 5cedca1b 2004-05-15 devnull }
183 5cedca1b 2004-05-15 devnull if (k == SLANT) {
184 c5561c23 2004-05-16 devnull OUT "x S %ld\n", sfbits(i)-180 PUT;
185 5cedca1b 2004-05-15 devnull return(outsize);
186 5cedca1b 2004-05-15 devnull }
187 5cedca1b 2004-05-15 devnull if (k == WORDSP) {
188 5cedca1b 2004-05-15 devnull oput('w');
189 5cedca1b 2004-05-15 devnull return(outsize);
190 5cedca1b 2004-05-15 devnull }
191 5cedca1b 2004-05-15 devnull if (sfbits(i) == oldbits) {
192 5cedca1b 2004-05-15 devnull xfont = pfont;
193 5cedca1b 2004-05-15 devnull xpts = ppts;
194 fa325e9b 2020-01-10 cross } else
195 5cedca1b 2004-05-15 devnull xbits(i, 2);
196 5cedca1b 2004-05-15 devnull if (k == XON) {
197 5cedca1b 2004-05-15 devnull extern int xon;
198 5cedca1b 2004-05-15 devnull ptflush(); /* guarantee that everything is out */
199 5cedca1b 2004-05-15 devnull if (esc)
200 5cedca1b 2004-05-15 devnull ptesc();
201 5cedca1b 2004-05-15 devnull if (xfont != mfont)
202 5cedca1b 2004-05-15 devnull ptfont();
203 5cedca1b 2004-05-15 devnull if (xpts != mpts)
204 5cedca1b 2004-05-15 devnull ptps();
205 5cedca1b 2004-05-15 devnull if (lead)
206 5cedca1b 2004-05-15 devnull ptlead();
207 5cedca1b 2004-05-15 devnull OUT "x X " PUT;
208 5cedca1b 2004-05-15 devnull xon++;
209 5cedca1b 2004-05-15 devnull for (j = 1; cbits(pi[j]) != XOFF; j++)
210 5cedca1b 2004-05-15 devnull outascii(pi[j]);
211 5cedca1b 2004-05-15 devnull oput('\n');
212 5cedca1b 2004-05-15 devnull xon--;
213 5cedca1b 2004-05-15 devnull return j+1;
214 5cedca1b 2004-05-15 devnull }
215 5cedca1b 2004-05-15 devnull if (k < 040 && k != DRAWFCN)
216 5cedca1b 2004-05-15 devnull return(outsize);
217 5cedca1b 2004-05-15 devnull j = z = 0;
218 5cedca1b 2004-05-15 devnull if (k != DRAWFCN) {
219 5cedca1b 2004-05-15 devnull if (widcache[k].fontpts == (xfont<<8) + xpts && !setwdf) {
220 5cedca1b 2004-05-15 devnull w = widcache[k].width;
221 5cedca1b 2004-05-15 devnull bd = 0;
222 5cedca1b 2004-05-15 devnull cs = 0;
223 5cedca1b 2004-05-15 devnull } else
224 5cedca1b 2004-05-15 devnull w = getcw(k);
225 5cedca1b 2004-05-15 devnull if (cs) {
226 5cedca1b 2004-05-15 devnull if (bd)
227 5cedca1b 2004-05-15 devnull w += (bd - 1) * HOR;
228 5cedca1b 2004-05-15 devnull j = (cs - w) / 2;
229 5cedca1b 2004-05-15 devnull w = cs - j;
230 5cedca1b 2004-05-15 devnull if (bd)
231 5cedca1b 2004-05-15 devnull w -= (bd - 1) * HOR;
232 5cedca1b 2004-05-15 devnull }
233 5cedca1b 2004-05-15 devnull if (iszbit(i)) {
234 5cedca1b 2004-05-15 devnull if (cs)
235 fa325e9b 2020-01-10 cross w = -j;
236 fa325e9b 2020-01-10 cross else
237 5cedca1b 2004-05-15 devnull w = 0;
238 5cedca1b 2004-05-15 devnull z = 1;
239 5cedca1b 2004-05-15 devnull }
240 5cedca1b 2004-05-15 devnull }
241 5cedca1b 2004-05-15 devnull esc += j;
242 5cedca1b 2004-05-15 devnull if (xfont != mfont)
243 5cedca1b 2004-05-15 devnull ptfont();
244 5cedca1b 2004-05-15 devnull if (xpts != mpts)
245 5cedca1b 2004-05-15 devnull ptps();
246 5cedca1b 2004-05-15 devnull if (lead)
247 5cedca1b 2004-05-15 devnull ptlead();
248 5cedca1b 2004-05-15 devnull /* put out the real character here */
249 5cedca1b 2004-05-15 devnull if (k == DRAWFCN) {
250 5cedca1b 2004-05-15 devnull if (esc)
251 5cedca1b 2004-05-15 devnull ptesc();
252 5cedca1b 2004-05-15 devnull w = 0;
253 5cedca1b 2004-05-15 devnull dx = absmot(pi[3]);
254 5cedca1b 2004-05-15 devnull if (isnmot(pi[3]))
255 5cedca1b 2004-05-15 devnull dx = -dx;
256 5cedca1b 2004-05-15 devnull dy = absmot(pi[4]);
257 5cedca1b 2004-05-15 devnull if (isnmot(pi[4]))
258 5cedca1b 2004-05-15 devnull dy = -dy;
259 5cedca1b 2004-05-15 devnull switch (cbits(pi[1])) {
260 5cedca1b 2004-05-15 devnull case DRAWCIRCLE: /* circle */
261 5cedca1b 2004-05-15 devnull OUT "D%c %d\n", DRAWCIRCLE, dx PUT; /* dx is diameter */
262 5cedca1b 2004-05-15 devnull hpos += dx;
263 5cedca1b 2004-05-15 devnull break;
264 5cedca1b 2004-05-15 devnull case DRAWELLIPSE:
265 5cedca1b 2004-05-15 devnull OUT "D%c %d %d\n", DRAWELLIPSE, dx, dy PUT;
266 5cedca1b 2004-05-15 devnull hpos += dx;
267 5cedca1b 2004-05-15 devnull break;
268 5cedca1b 2004-05-15 devnull case DRAWBUILD:
269 5cedca1b 2004-05-15 devnull k = cbits(pi[2]);
270 5cedca1b 2004-05-15 devnull OUT "D%c %d ", DRAWBUILD, dx PUT;
271 5cedca1b 2004-05-15 devnull if (k < ALPHABET)
272 5cedca1b 2004-05-15 devnull OUT "%c\n", k PUT;
273 5cedca1b 2004-05-15 devnull else
274 5cedca1b 2004-05-15 devnull ptchname(k);
275 5cedca1b 2004-05-15 devnull hpos += dx;
276 5cedca1b 2004-05-15 devnull break;
277 5cedca1b 2004-05-15 devnull case DRAWLINE: /* line */
278 5cedca1b 2004-05-15 devnull k = cbits(pi[2]);
279 5cedca1b 2004-05-15 devnull OUT "D%c %d %d ", DRAWLINE, dx, dy PUT;
280 5cedca1b 2004-05-15 devnull if (k < ALPHABET)
281 5cedca1b 2004-05-15 devnull OUT "%c\n", k PUT;
282 5cedca1b 2004-05-15 devnull else
283 5cedca1b 2004-05-15 devnull ptchname(k);
284 5cedca1b 2004-05-15 devnull hpos += dx;
285 5cedca1b 2004-05-15 devnull vpos += dy;
286 5cedca1b 2004-05-15 devnull break;
287 5cedca1b 2004-05-15 devnull case DRAWARC: /* arc */
288 5cedca1b 2004-05-15 devnull dx2 = absmot(pi[5]);
289 5cedca1b 2004-05-15 devnull if (isnmot(pi[5]))
290 5cedca1b 2004-05-15 devnull dx2 = -dx2;
291 5cedca1b 2004-05-15 devnull dy2 = absmot(pi[6]);
292 5cedca1b 2004-05-15 devnull if (isnmot(pi[6]))
293 5cedca1b 2004-05-15 devnull dy2 = -dy2;
294 5cedca1b 2004-05-15 devnull OUT "D%c %d %d %d %d\n", DRAWARC,
295 5cedca1b 2004-05-15 devnull dx, dy, dx2, dy2 PUT;
296 5cedca1b 2004-05-15 devnull hpos += dx + dx2;
297 5cedca1b 2004-05-15 devnull vpos += dy + dy2;
298 5cedca1b 2004-05-15 devnull break;
299 5cedca1b 2004-05-15 devnull
300 5cedca1b 2004-05-15 devnull case 's': /* using 's' internally to avoid .tr ~ */
301 5cedca1b 2004-05-15 devnull pi[1] = '~';
302 5cedca1b 2004-05-15 devnull case DRAWSPLINE: /* spline */
303 5cedca1b 2004-05-15 devnull default: /* something else; copy it like spline */
304 77dcf884 2004-11-03 devnull OUT "D%c %d %d", (char)cbits(pi[1]), dx, dy PUT;
305 5cedca1b 2004-05-15 devnull hpos += dx;
306 5cedca1b 2004-05-15 devnull vpos += dy;
307 5cedca1b 2004-05-15 devnull if (cbits(pi[3]) == DRAWFCN || cbits(pi[4]) == DRAWFCN) {
308 5cedca1b 2004-05-15 devnull /* it was somehow defective */
309 5cedca1b 2004-05-15 devnull OUT "\n" PUT;
310 5cedca1b 2004-05-15 devnull break;
311 5cedca1b 2004-05-15 devnull }
312 5cedca1b 2004-05-15 devnull for (n = 5; cbits(pi[n]) != DRAWFCN; n += 2) {
313 5cedca1b 2004-05-15 devnull dx = absmot(pi[n]);
314 5cedca1b 2004-05-15 devnull if (isnmot(pi[n]))
315 5cedca1b 2004-05-15 devnull dx = -dx;
316 5cedca1b 2004-05-15 devnull dy = absmot(pi[n+1]);
317 5cedca1b 2004-05-15 devnull if (isnmot(pi[n+1]))
318 5cedca1b 2004-05-15 devnull dy = -dy;
319 5cedca1b 2004-05-15 devnull OUT " %d %d", dx, dy PUT;
320 5cedca1b 2004-05-15 devnull hpos += dx;
321 5cedca1b 2004-05-15 devnull vpos += dy;
322 5cedca1b 2004-05-15 devnull }
323 5cedca1b 2004-05-15 devnull OUT "\n" PUT;
324 5cedca1b 2004-05-15 devnull break;
325 5cedca1b 2004-05-15 devnull }
326 5cedca1b 2004-05-15 devnull for (n = 3; cbits(pi[n]) != DRAWFCN; n++)
327 5cedca1b 2004-05-15 devnull ;
328 5cedca1b 2004-05-15 devnull outsize = n + 1;
329 5cedca1b 2004-05-15 devnull } else if (k < ALPHABET) {
330 5cedca1b 2004-05-15 devnull /* try to go faster and compress output */
331 5cedca1b 2004-05-15 devnull /* by printing nnc for small positive motion followed by c */
332 5cedca1b 2004-05-15 devnull /* kludgery; have to make sure set all the vars too */
333 5cedca1b 2004-05-15 devnull if (esc > 0 && esc < 100) {
334 5cedca1b 2004-05-15 devnull oput(esc / 10 + '0');
335 5cedca1b 2004-05-15 devnull oput(esc % 10 + '0');
336 5cedca1b 2004-05-15 devnull oput(k);
337 5cedca1b 2004-05-15 devnull hpos += esc;
338 5cedca1b 2004-05-15 devnull esc = 0;
339 5cedca1b 2004-05-15 devnull } else {
340 5cedca1b 2004-05-15 devnull if (esc)
341 5cedca1b 2004-05-15 devnull ptesc();
342 5cedca1b 2004-05-15 devnull oput('c');
343 5cedca1b 2004-05-15 devnull oput(k);
344 5cedca1b 2004-05-15 devnull oput('\n');
345 5cedca1b 2004-05-15 devnull }
346 5cedca1b 2004-05-15 devnull } else {
347 5cedca1b 2004-05-15 devnull if (esc)
348 5cedca1b 2004-05-15 devnull ptesc();
349 5cedca1b 2004-05-15 devnull ptchname(k);
350 5cedca1b 2004-05-15 devnull }
351 5cedca1b 2004-05-15 devnull if (bd) {
352 5cedca1b 2004-05-15 devnull bd -= HOR;
353 5cedca1b 2004-05-15 devnull if (esc += bd)
354 5cedca1b 2004-05-15 devnull ptesc();
355 5cedca1b 2004-05-15 devnull if (k < ALPHABET)
356 5cedca1b 2004-05-15 devnull OUT "c%c\n", k PUT;
357 5cedca1b 2004-05-15 devnull else
358 5cedca1b 2004-05-15 devnull ptchname(k);
359 5cedca1b 2004-05-15 devnull if (z)
360 5cedca1b 2004-05-15 devnull esc -= bd;
361 5cedca1b 2004-05-15 devnull }
362 5cedca1b 2004-05-15 devnull esc += w;
363 5cedca1b 2004-05-15 devnull return(outsize);
364 5cedca1b 2004-05-15 devnull }
365 5cedca1b 2004-05-15 devnull
366 5cedca1b 2004-05-15 devnull void ptchname(int k)
367 5cedca1b 2004-05-15 devnull {
368 5cedca1b 2004-05-15 devnull char *chn = chname(k);
369 5cedca1b 2004-05-15 devnull
370 5cedca1b 2004-05-15 devnull switch (chn[0]) {
371 5cedca1b 2004-05-15 devnull case MBchar:
372 5cedca1b 2004-05-15 devnull OUT "c%s\n", chn+1 PUT; /* \n not needed? */
373 5cedca1b 2004-05-15 devnull break;
374 5cedca1b 2004-05-15 devnull case Number:
375 5cedca1b 2004-05-15 devnull OUT "N%s\n", chn+1 PUT;
376 5cedca1b 2004-05-15 devnull break;
377 5cedca1b 2004-05-15 devnull case Troffchar:
378 5cedca1b 2004-05-15 devnull OUT "C%s\n", chn+1 PUT;
379 5cedca1b 2004-05-15 devnull break;
380 5cedca1b 2004-05-15 devnull default:
381 5cedca1b 2004-05-15 devnull ERROR "illegal char type %s", chn WARN;
382 5cedca1b 2004-05-15 devnull break;
383 5cedca1b 2004-05-15 devnull }
384 5cedca1b 2004-05-15 devnull }
385 5cedca1b 2004-05-15 devnull
386 5cedca1b 2004-05-15 devnull void ptflush(void) /* get us to a clean output state */
387 5cedca1b 2004-05-15 devnull {
388 5cedca1b 2004-05-15 devnull if (TROFF) {
389 5cedca1b 2004-05-15 devnull /* ptesc(); but always H, no h */
390 5cedca1b 2004-05-15 devnull hpos += esc;
391 5cedca1b 2004-05-15 devnull OUT "\nH%d\n", hpos PUT;
392 5cedca1b 2004-05-15 devnull esc = 0;
393 5cedca1b 2004-05-15 devnull ptps();
394 5cedca1b 2004-05-15 devnull ptfont();
395 5cedca1b 2004-05-15 devnull ptlead();
396 5cedca1b 2004-05-15 devnull }
397 5cedca1b 2004-05-15 devnull }
398 5cedca1b 2004-05-15 devnull
399 5cedca1b 2004-05-15 devnull void ptps(void)
400 5cedca1b 2004-05-15 devnull {
401 5cedca1b 2004-05-15 devnull int i, j, k;
402 5cedca1b 2004-05-15 devnull
403 5cedca1b 2004-05-15 devnull i = xpts;
404 5cedca1b 2004-05-15 devnull for (j = 0; i > (k = pstab[j]); j++)
405 5cedca1b 2004-05-15 devnull if (!k) {
406 5cedca1b 2004-05-15 devnull k = pstab[--j];
407 5cedca1b 2004-05-15 devnull break;
408 5cedca1b 2004-05-15 devnull }
409 5cedca1b 2004-05-15 devnull if (!ascii)
410 5cedca1b 2004-05-15 devnull OUT "s%d\n", k PUT; /* really should put out string rep of size */
411 5cedca1b 2004-05-15 devnull mpts = i;
412 5cedca1b 2004-05-15 devnull }
413 5cedca1b 2004-05-15 devnull
414 5cedca1b 2004-05-15 devnull void ptfont(void)
415 5cedca1b 2004-05-15 devnull {
416 5cedca1b 2004-05-15 devnull mfont = xfont;
417 5cedca1b 2004-05-15 devnull if (ascii)
418 5cedca1b 2004-05-15 devnull return;
419 5cedca1b 2004-05-15 devnull if (xfont > nfonts) {
420 5cedca1b 2004-05-15 devnull ptfpcmd(0, fonts[xfont].longname, 0); /* Put the desired font in the
421 5cedca1b 2004-05-15 devnull * fontcache of the filter */
422 5cedca1b 2004-05-15 devnull OUT "f0\n" PUT; /* make sure that it gets noticed */
423 5cedca1b 2004-05-15 devnull } else
424 5cedca1b 2004-05-15 devnull OUT "f%d\n", xfont PUT;
425 5cedca1b 2004-05-15 devnull }
426 5cedca1b 2004-05-15 devnull
427 5cedca1b 2004-05-15 devnull void ptfpcmd(int f, char *s, char *longname)
428 5cedca1b 2004-05-15 devnull {
429 5cedca1b 2004-05-15 devnull if (f > nfonts) /* a bit risky? */
430 5cedca1b 2004-05-15 devnull f = 0;
431 5cedca1b 2004-05-15 devnull if (longname) {
432 5cedca1b 2004-05-15 devnull OUT "x font %d %s %s\n", f, s, longname PUT;
433 5cedca1b 2004-05-15 devnull } else {
434 5cedca1b 2004-05-15 devnull OUT "x font %d %s\n", f, s PUT;
435 5cedca1b 2004-05-15 devnull }
436 5cedca1b 2004-05-15 devnull /* OUT "f%d\n", xfont PUT; /* need this for buggy version of adobe transcript */
437 5cedca1b 2004-05-15 devnull /* which apparently believes that x font means */
438 5cedca1b 2004-05-15 devnull /* to set the font, not just the position. */
439 5cedca1b 2004-05-15 devnull }
440 5cedca1b 2004-05-15 devnull
441 5cedca1b 2004-05-15 devnull void t_ptlead(void)
442 5cedca1b 2004-05-15 devnull {
443 5cedca1b 2004-05-15 devnull vpos += lead;
444 5cedca1b 2004-05-15 devnull if (!ascii)
445 5cedca1b 2004-05-15 devnull OUT "V%d\n", vpos PUT;
446 5cedca1b 2004-05-15 devnull lead = 0;
447 5cedca1b 2004-05-15 devnull }
448 5cedca1b 2004-05-15 devnull
449 5cedca1b 2004-05-15 devnull void ptesc(void)
450 5cedca1b 2004-05-15 devnull {
451 5cedca1b 2004-05-15 devnull hpos += esc;
452 5cedca1b 2004-05-15 devnull if (!ascii)
453 5cedca1b 2004-05-15 devnull if (esc > 0) {
454 5cedca1b 2004-05-15 devnull oput('h');
455 5cedca1b 2004-05-15 devnull if (esc>=10 && esc<100) {
456 5cedca1b 2004-05-15 devnull oput(esc/10 + '0');
457 5cedca1b 2004-05-15 devnull oput(esc%10 + '0');
458 5cedca1b 2004-05-15 devnull } else
459 5cedca1b 2004-05-15 devnull OUT "%d", esc PUT;
460 5cedca1b 2004-05-15 devnull } else
461 5cedca1b 2004-05-15 devnull OUT "H%d\n", hpos PUT;
462 5cedca1b 2004-05-15 devnull esc = 0;
463 5cedca1b 2004-05-15 devnull }
464 5cedca1b 2004-05-15 devnull
465 5cedca1b 2004-05-15 devnull void ptpage(int n) /* called at end of each output page, we hope */
466 5cedca1b 2004-05-15 devnull {
467 5cedca1b 2004-05-15 devnull int i;
468 5cedca1b 2004-05-15 devnull
469 5cedca1b 2004-05-15 devnull if (NROFF)
470 5cedca1b 2004-05-15 devnull return;
471 5cedca1b 2004-05-15 devnull ptlead();
472 5cedca1b 2004-05-15 devnull vpos = 0;
473 5cedca1b 2004-05-15 devnull if (ascii)
474 5cedca1b 2004-05-15 devnull return;
475 5cedca1b 2004-05-15 devnull OUT "p%d\n", n PUT; /* new page */
476 5cedca1b 2004-05-15 devnull for (i = 0; i <= nfonts; i++)
477 5cedca1b 2004-05-15 devnull if (fontlab[i]) {
478 5cedca1b 2004-05-15 devnull if (fonts[i].truename)
479 5cedca1b 2004-05-15 devnull OUT "x font %d %s %s\n", i, fonts[i].longname, fonts[i].truename PUT;
480 5cedca1b 2004-05-15 devnull else
481 5cedca1b 2004-05-15 devnull OUT "x font %d %s\n", i, fonts[i].longname PUT;
482 5cedca1b 2004-05-15 devnull }
483 5cedca1b 2004-05-15 devnull ptps();
484 5cedca1b 2004-05-15 devnull ptfont();
485 5cedca1b 2004-05-15 devnull }
486 5cedca1b 2004-05-15 devnull
487 5cedca1b 2004-05-15 devnull void pttrailer(void)
488 5cedca1b 2004-05-15 devnull {
489 5cedca1b 2004-05-15 devnull if (TROFF)
490 5cedca1b 2004-05-15 devnull OUT "x trailer\n" PUT;
491 5cedca1b 2004-05-15 devnull }
492 5cedca1b 2004-05-15 devnull
493 5cedca1b 2004-05-15 devnull void ptstop(void)
494 5cedca1b 2004-05-15 devnull {
495 5cedca1b 2004-05-15 devnull if (TROFF)
496 5cedca1b 2004-05-15 devnull OUT "x stop\n" PUT;
497 5cedca1b 2004-05-15 devnull }
498 5cedca1b 2004-05-15 devnull
499 5cedca1b 2004-05-15 devnull void t_ptpause(void)
500 5cedca1b 2004-05-15 devnull {
501 5cedca1b 2004-05-15 devnull if (ascii)
502 5cedca1b 2004-05-15 devnull return;
503 5cedca1b 2004-05-15 devnull ptlead();
504 5cedca1b 2004-05-15 devnull vpos = 0;
505 5cedca1b 2004-05-15 devnull pttrailer();
506 5cedca1b 2004-05-15 devnull ptlead();
507 5cedca1b 2004-05-15 devnull OUT "x pause\n" PUT;
508 5cedca1b 2004-05-15 devnull flusho();
509 5cedca1b 2004-05-15 devnull mpts = mfont = 0;
510 5cedca1b 2004-05-15 devnull ptesc();
511 5cedca1b 2004-05-15 devnull esc = po;
512 5cedca1b 2004-05-15 devnull hpos = vpos = 0; /* probably in wrong place */
513 5cedca1b 2004-05-15 devnull }