Blame


1 5cedca1b 2004-05-15 devnull #include "tdef.h"
2 5cedca1b 2004-05-15 devnull #include "ext.h"
3 5cedca1b 2004-05-15 devnull #include "fns.h"
4 5cedca1b 2004-05-15 devnull #include <ctype.h>
5 5cedca1b 2004-05-15 devnull
6 5cedca1b 2004-05-15 devnull /*
7 5cedca1b 2004-05-15 devnull * n6.c -- width functions, sizes and fonts
8 5cedca1b 2004-05-15 devnull */
9 5cedca1b 2004-05-15 devnull
10 c5561c23 2004-05-16 devnull int
11 5cedca1b 2004-05-15 devnull n_width(Tchar j)
12 5cedca1b 2004-05-15 devnull {
13 5cedca1b 2004-05-15 devnull int i, k;
14 5cedca1b 2004-05-15 devnull
15 5cedca1b 2004-05-15 devnull if (iszbit(j))
16 5cedca1b 2004-05-15 devnull return 0;
17 5cedca1b 2004-05-15 devnull if (ismot(j)) {
18 5cedca1b 2004-05-15 devnull if (isvmot(j))
19 5cedca1b 2004-05-15 devnull return(0);
20 5cedca1b 2004-05-15 devnull k = absmot(j);
21 5cedca1b 2004-05-15 devnull if (isnmot(j))
22 5cedca1b 2004-05-15 devnull k = -k;
23 5cedca1b 2004-05-15 devnull return(k);
24 5cedca1b 2004-05-15 devnull }
25 5cedca1b 2004-05-15 devnull i = cbits(j);
26 5cedca1b 2004-05-15 devnull if (i < ' ') {
27 5cedca1b 2004-05-15 devnull if (i == '\b')
28 5cedca1b 2004-05-15 devnull return(-widthp);
29 5cedca1b 2004-05-15 devnull if (i == PRESC)
30 5cedca1b 2004-05-15 devnull i = eschar;
31 5cedca1b 2004-05-15 devnull else if (i == HX)
32 5cedca1b 2004-05-15 devnull return(0);
33 5cedca1b 2004-05-15 devnull }
34 5cedca1b 2004-05-15 devnull if (i == ohc)
35 5cedca1b 2004-05-15 devnull return(0);
36 5cedca1b 2004-05-15 devnull i = trtab[i];
37 5cedca1b 2004-05-15 devnull if (i < ' ')
38 5cedca1b 2004-05-15 devnull return(0);
39 5cedca1b 2004-05-15 devnull if (i >= t.tfont.nchars) /* not on the font */
40 5cedca1b 2004-05-15 devnull k = t.Char; /* really ought to check properly */
41 5cedca1b 2004-05-15 devnull else
42 5cedca1b 2004-05-15 devnull k = t.tfont.wp[i].wid * t.Char;
43 5cedca1b 2004-05-15 devnull widthp = k;
44 5cedca1b 2004-05-15 devnull return(k);
45 5cedca1b 2004-05-15 devnull }
46 5cedca1b 2004-05-15 devnull
47 5cedca1b 2004-05-15 devnull
48 5cedca1b 2004-05-15 devnull Tchar n_setch(int c)
49 5cedca1b 2004-05-15 devnull {
50 5cedca1b 2004-05-15 devnull return t_setch(c);
51 5cedca1b 2004-05-15 devnull }
52 5cedca1b 2004-05-15 devnull
53 5cedca1b 2004-05-15 devnull Tchar n_setabs(void) /* set absolute char from \N'...' */
54 5cedca1b 2004-05-15 devnull { /* for now, a no-op */
55 5cedca1b 2004-05-15 devnull return t_setabs();
56 5cedca1b 2004-05-15 devnull }
57 5cedca1b 2004-05-15 devnull
58 5cedca1b 2004-05-15 devnull int n_findft(int i)
59 5cedca1b 2004-05-15 devnull {
60 5cedca1b 2004-05-15 devnull int k;
61 5cedca1b 2004-05-15 devnull
62 5cedca1b 2004-05-15 devnull if ((k = i - '0') >= 0 && k <= nfonts && k < smnt)
63 5cedca1b 2004-05-15 devnull return(k);
64 5cedca1b 2004-05-15 devnull for (k = 0; fontlab[k] != i; k++)
65 5cedca1b 2004-05-15 devnull if (k > nfonts)
66 5cedca1b 2004-05-15 devnull return(-1);
67 5cedca1b 2004-05-15 devnull return(k);
68 5cedca1b 2004-05-15 devnull }
69 5cedca1b 2004-05-15 devnull
70 5cedca1b 2004-05-15 devnull
71 5cedca1b 2004-05-15 devnull
72 5cedca1b 2004-05-15 devnull void n_mchbits(void)
73 5cedca1b 2004-05-15 devnull {
74 5cedca1b 2004-05-15 devnull chbits = 0;
75 5cedca1b 2004-05-15 devnull setfbits(chbits, font);
76 5cedca1b 2004-05-15 devnull sps = width(' ' | chbits);
77 5cedca1b 2004-05-15 devnull }
78 5cedca1b 2004-05-15 devnull
79 5cedca1b 2004-05-15 devnull
80 5cedca1b 2004-05-15 devnull void n_setps(void )
81 5cedca1b 2004-05-15 devnull {
82 5cedca1b 2004-05-15 devnull int i, j;
83 5cedca1b 2004-05-15 devnull
84 5cedca1b 2004-05-15 devnull i = cbits(getch());
85 5cedca1b 2004-05-15 devnull if (isdigit(i)) { /* \sd or \sdd */
86 5cedca1b 2004-05-15 devnull i -= '0';
87 5cedca1b 2004-05-15 devnull if (i == 0) /* \s0 */
88 5cedca1b 2004-05-15 devnull ;
89 5cedca1b 2004-05-15 devnull else if (i <= 3 && (ch=getch()) && isdigit(cbits(ch))) { /* \sdd */
90 5cedca1b 2004-05-15 devnull ch = 0;
91 5cedca1b 2004-05-15 devnull }
92 5cedca1b 2004-05-15 devnull } else if (i == '(') { /* \s(dd */
93 5cedca1b 2004-05-15 devnull getch();
94 5cedca1b 2004-05-15 devnull getch();
95 5cedca1b 2004-05-15 devnull } else if (i == '+' || i == '-') { /* \s+, \s- */
96 5cedca1b 2004-05-15 devnull j = cbits(getch());
97 5cedca1b 2004-05-15 devnull if (isdigit(j)) { /* \s+d, \s-d */
98 5cedca1b 2004-05-15 devnull ;
99 5cedca1b 2004-05-15 devnull } else if (j == '(') { /* \s+(dd, \s-(dd */
100 5cedca1b 2004-05-15 devnull getch();
101 5cedca1b 2004-05-15 devnull getch();
102 5cedca1b 2004-05-15 devnull }
103 5cedca1b 2004-05-15 devnull }
104 5cedca1b 2004-05-15 devnull }
105 5cedca1b 2004-05-15 devnull
106 5cedca1b 2004-05-15 devnull
107 5cedca1b 2004-05-15 devnull Tchar n_setht(void) /* set character height from \H'...' */
108 5cedca1b 2004-05-15 devnull {
109 5cedca1b 2004-05-15 devnull
110 5cedca1b 2004-05-15 devnull getch();
111 5cedca1b 2004-05-15 devnull inumb(&apts);
112 5cedca1b 2004-05-15 devnull getch();
113 5cedca1b 2004-05-15 devnull return(0);
114 5cedca1b 2004-05-15 devnull }
115 5cedca1b 2004-05-15 devnull
116 5cedca1b 2004-05-15 devnull
117 5cedca1b 2004-05-15 devnull Tchar n_setslant(void) /* set slant from \S'...' */
118 5cedca1b 2004-05-15 devnull {
119 5cedca1b 2004-05-15 devnull int n;
120 5cedca1b 2004-05-15 devnull
121 5cedca1b 2004-05-15 devnull getch();
122 5cedca1b 2004-05-15 devnull n = 0;
123 5cedca1b 2004-05-15 devnull n = inumb(&n);
124 5cedca1b 2004-05-15 devnull getch();
125 5cedca1b 2004-05-15 devnull return(0);
126 5cedca1b 2004-05-15 devnull }
127 5cedca1b 2004-05-15 devnull
128 5cedca1b 2004-05-15 devnull
129 5cedca1b 2004-05-15 devnull void n_caseft(void)
130 5cedca1b 2004-05-15 devnull {
131 5cedca1b 2004-05-15 devnull skip();
132 5cedca1b 2004-05-15 devnull setfont(1);
133 5cedca1b 2004-05-15 devnull }
134 5cedca1b 2004-05-15 devnull
135 5cedca1b 2004-05-15 devnull
136 5cedca1b 2004-05-15 devnull void n_setfont(int a)
137 5cedca1b 2004-05-15 devnull {
138 5cedca1b 2004-05-15 devnull int i, j;
139 5cedca1b 2004-05-15 devnull
140 5cedca1b 2004-05-15 devnull if (a)
141 5cedca1b 2004-05-15 devnull i = getrq();
142 5cedca1b 2004-05-15 devnull else
143 5cedca1b 2004-05-15 devnull i = getsn();
144 5cedca1b 2004-05-15 devnull if (!i || i == 'P') {
145 5cedca1b 2004-05-15 devnull j = font1;
146 5cedca1b 2004-05-15 devnull goto s0;
147 5cedca1b 2004-05-15 devnull }
148 5cedca1b 2004-05-15 devnull if (i == 'S' || i == '0')
149 5cedca1b 2004-05-15 devnull return;
150 5cedca1b 2004-05-15 devnull if ((j = findft(i)) == -1)
151 5cedca1b 2004-05-15 devnull return;
152 5cedca1b 2004-05-15 devnull s0:
153 5cedca1b 2004-05-15 devnull font1 = font;
154 5cedca1b 2004-05-15 devnull font = j;
155 5cedca1b 2004-05-15 devnull mchbits();
156 5cedca1b 2004-05-15 devnull }
157 5cedca1b 2004-05-15 devnull
158 5cedca1b 2004-05-15 devnull
159 5cedca1b 2004-05-15 devnull void n_setwd(void)
160 5cedca1b 2004-05-15 devnull {
161 5cedca1b 2004-05-15 devnull int base, wid;
162 5cedca1b 2004-05-15 devnull Tchar i;
163 5cedca1b 2004-05-15 devnull int delim, emsz, k;
164 5cedca1b 2004-05-15 devnull int savhp, savapts, savapts1, savfont, savfont1, savpts, savpts1;
165 5cedca1b 2004-05-15 devnull
166 5cedca1b 2004-05-15 devnull base = numtabp[ST].val = numtabp[ST].val = wid = numtabp[CT].val = 0;
167 5cedca1b 2004-05-15 devnull if (ismot(i = getch()))
168 5cedca1b 2004-05-15 devnull return;
169 5cedca1b 2004-05-15 devnull delim = cbits(i);
170 5cedca1b 2004-05-15 devnull savhp = numtabp[HP].val;
171 5cedca1b 2004-05-15 devnull numtabp[HP].val = 0;
172 5cedca1b 2004-05-15 devnull savapts = apts;
173 5cedca1b 2004-05-15 devnull savapts1 = apts1;
174 5cedca1b 2004-05-15 devnull savfont = font;
175 5cedca1b 2004-05-15 devnull savfont1 = font1;
176 5cedca1b 2004-05-15 devnull savpts = pts;
177 5cedca1b 2004-05-15 devnull savpts1 = pts1;
178 5cedca1b 2004-05-15 devnull setwdf++;
179 5cedca1b 2004-05-15 devnull while (cbits(i = getch()) != delim && !nlflg) {
180 5cedca1b 2004-05-15 devnull k = width(i);
181 5cedca1b 2004-05-15 devnull wid += k;
182 5cedca1b 2004-05-15 devnull numtabp[HP].val += k;
183 5cedca1b 2004-05-15 devnull if (!ismot(i)) {
184 5cedca1b 2004-05-15 devnull emsz = (INCH * pts + 36) / 72;
185 5cedca1b 2004-05-15 devnull } else if (isvmot(i)) {
186 5cedca1b 2004-05-15 devnull k = absmot(i);
187 5cedca1b 2004-05-15 devnull if (isnmot(i))
188 5cedca1b 2004-05-15 devnull k = -k;
189 5cedca1b 2004-05-15 devnull base -= k;
190 5cedca1b 2004-05-15 devnull emsz = 0;
191 5cedca1b 2004-05-15 devnull } else
192 5cedca1b 2004-05-15 devnull continue;
193 5cedca1b 2004-05-15 devnull if (base < numtabp[SB].val)
194 5cedca1b 2004-05-15 devnull numtabp[SB].val = base;
195 5cedca1b 2004-05-15 devnull if ((k = base + emsz) > numtabp[ST].val)
196 5cedca1b 2004-05-15 devnull numtabp[ST].val = k;
197 5cedca1b 2004-05-15 devnull }
198 5cedca1b 2004-05-15 devnull setn1(wid, 0, (Tchar) 0);
199 5cedca1b 2004-05-15 devnull numtabp[HP].val = savhp;
200 5cedca1b 2004-05-15 devnull apts = savapts;
201 5cedca1b 2004-05-15 devnull apts1 = savapts1;
202 5cedca1b 2004-05-15 devnull font = savfont;
203 5cedca1b 2004-05-15 devnull font1 = savfont1;
204 5cedca1b 2004-05-15 devnull pts = savpts;
205 5cedca1b 2004-05-15 devnull pts1 = savpts1;
206 5cedca1b 2004-05-15 devnull mchbits();
207 5cedca1b 2004-05-15 devnull setwdf = 0;
208 5cedca1b 2004-05-15 devnull }
209 5cedca1b 2004-05-15 devnull
210 5cedca1b 2004-05-15 devnull
211 5cedca1b 2004-05-15 devnull Tchar n_vmot(void)
212 5cedca1b 2004-05-15 devnull {
213 5cedca1b 2004-05-15 devnull dfact = lss;
214 5cedca1b 2004-05-15 devnull vflag++;
215 5cedca1b 2004-05-15 devnull return n_mot();
216 5cedca1b 2004-05-15 devnull }
217 5cedca1b 2004-05-15 devnull
218 5cedca1b 2004-05-15 devnull
219 5cedca1b 2004-05-15 devnull Tchar n_hmot(void)
220 5cedca1b 2004-05-15 devnull {
221 5cedca1b 2004-05-15 devnull dfact = EM;
222 5cedca1b 2004-05-15 devnull return n_mot();
223 5cedca1b 2004-05-15 devnull }
224 5cedca1b 2004-05-15 devnull
225 5cedca1b 2004-05-15 devnull
226 5cedca1b 2004-05-15 devnull Tchar n_mot(void)
227 5cedca1b 2004-05-15 devnull {
228 5cedca1b 2004-05-15 devnull int j, n;
229 5cedca1b 2004-05-15 devnull Tchar i;
230 5cedca1b 2004-05-15 devnull
231 5cedca1b 2004-05-15 devnull j = HOR;
232 5cedca1b 2004-05-15 devnull getch(); /*eat delim*/
233 5cedca1b 2004-05-15 devnull if (n = atoi0()) {
234 5cedca1b 2004-05-15 devnull if (vflag)
235 5cedca1b 2004-05-15 devnull j = VERT;
236 5cedca1b 2004-05-15 devnull i = makem(quant(n, j));
237 5cedca1b 2004-05-15 devnull } else
238 5cedca1b 2004-05-15 devnull i = 0;
239 5cedca1b 2004-05-15 devnull getch();
240 5cedca1b 2004-05-15 devnull vflag = 0;
241 5cedca1b 2004-05-15 devnull dfact = 1;
242 5cedca1b 2004-05-15 devnull return(i);
243 5cedca1b 2004-05-15 devnull }
244 5cedca1b 2004-05-15 devnull
245 5cedca1b 2004-05-15 devnull
246 5cedca1b 2004-05-15 devnull Tchar n_sethl(int k)
247 5cedca1b 2004-05-15 devnull {
248 5cedca1b 2004-05-15 devnull int j;
249 5cedca1b 2004-05-15 devnull Tchar i;
250 5cedca1b 2004-05-15 devnull
251 5cedca1b 2004-05-15 devnull j = t.Halfline;
252 5cedca1b 2004-05-15 devnull if (k == 'u')
253 5cedca1b 2004-05-15 devnull j = -j;
254 5cedca1b 2004-05-15 devnull else if (k == 'r')
255 5cedca1b 2004-05-15 devnull j = -2 * j;
256 5cedca1b 2004-05-15 devnull vflag++;
257 5cedca1b 2004-05-15 devnull i = makem(j);
258 5cedca1b 2004-05-15 devnull vflag = 0;
259 5cedca1b 2004-05-15 devnull return(i);
260 5cedca1b 2004-05-15 devnull }
261 5cedca1b 2004-05-15 devnull
262 5cedca1b 2004-05-15 devnull
263 5cedca1b 2004-05-15 devnull Tchar n_makem(int i)
264 5cedca1b 2004-05-15 devnull {
265 5cedca1b 2004-05-15 devnull Tchar j;
266 5cedca1b 2004-05-15 devnull
267 5cedca1b 2004-05-15 devnull if (i >= 0)
268 5cedca1b 2004-05-15 devnull j = i;
269 5cedca1b 2004-05-15 devnull else
270 5cedca1b 2004-05-15 devnull j = -i;
271 5cedca1b 2004-05-15 devnull j |= MOT;
272 5cedca1b 2004-05-15 devnull if (i < 0)
273 5cedca1b 2004-05-15 devnull j |= NMOT;
274 5cedca1b 2004-05-15 devnull if (vflag)
275 5cedca1b 2004-05-15 devnull j |= VMOT;
276 5cedca1b 2004-05-15 devnull return(j);
277 5cedca1b 2004-05-15 devnull }
278 5cedca1b 2004-05-15 devnull
279 5cedca1b 2004-05-15 devnull
280 5cedca1b 2004-05-15 devnull void n_casefp(void)
281 5cedca1b 2004-05-15 devnull {
282 5cedca1b 2004-05-15 devnull int i, j;
283 5cedca1b 2004-05-15 devnull
284 5cedca1b 2004-05-15 devnull skip();
285 5cedca1b 2004-05-15 devnull if ((i = cbits(getch()) - '0') < 0 || i > nfonts)
286 5cedca1b 2004-05-15 devnull return;
287 5cedca1b 2004-05-15 devnull if (skip() || !(j = getrq()))
288 5cedca1b 2004-05-15 devnull return;
289 5cedca1b 2004-05-15 devnull fontlab[i] = j;
290 5cedca1b 2004-05-15 devnull }
291 5cedca1b 2004-05-15 devnull
292 5cedca1b 2004-05-15 devnull
293 5cedca1b 2004-05-15 devnull
294 5cedca1b 2004-05-15 devnull void n_casebd(void)
295 5cedca1b 2004-05-15 devnull {
296 5cedca1b 2004-05-15 devnull int i, j, k;
297 5cedca1b 2004-05-15 devnull
298 c5561c23 2004-05-16 devnull j = k = 0;
299 5cedca1b 2004-05-15 devnull bd0:
300 5cedca1b 2004-05-15 devnull if (skip() || !(i = getrq()) || (j = findft(i)) == -1) {
301 5cedca1b 2004-05-15 devnull if (k)
302 5cedca1b 2004-05-15 devnull goto bd1;
303 5cedca1b 2004-05-15 devnull else
304 5cedca1b 2004-05-15 devnull return;
305 5cedca1b 2004-05-15 devnull }
306 5cedca1b 2004-05-15 devnull if (j == smnt) {
307 5cedca1b 2004-05-15 devnull k = smnt;
308 5cedca1b 2004-05-15 devnull goto bd0;
309 5cedca1b 2004-05-15 devnull }
310 5cedca1b 2004-05-15 devnull if (k) {
311 5cedca1b 2004-05-15 devnull sbold = j;
312 5cedca1b 2004-05-15 devnull j = k;
313 5cedca1b 2004-05-15 devnull }
314 5cedca1b 2004-05-15 devnull bd1:
315 5cedca1b 2004-05-15 devnull skip();
316 5cedca1b 2004-05-15 devnull noscale++;
317 5cedca1b 2004-05-15 devnull bdtab[j] = atoi0();
318 5cedca1b 2004-05-15 devnull noscale = 0;
319 5cedca1b 2004-05-15 devnull }
320 5cedca1b 2004-05-15 devnull
321 5cedca1b 2004-05-15 devnull
322 5cedca1b 2004-05-15 devnull void n_casevs(void)
323 5cedca1b 2004-05-15 devnull {
324 5cedca1b 2004-05-15 devnull int i;
325 5cedca1b 2004-05-15 devnull
326 5cedca1b 2004-05-15 devnull skip();
327 5cedca1b 2004-05-15 devnull vflag++;
328 5cedca1b 2004-05-15 devnull dfact = INCH; /*default scaling is points!*/
329 5cedca1b 2004-05-15 devnull dfactd = 72;
330 5cedca1b 2004-05-15 devnull res = VERT;
331 5cedca1b 2004-05-15 devnull i = inumb(&lss);
332 5cedca1b 2004-05-15 devnull if (nonumb)
333 5cedca1b 2004-05-15 devnull i = lss1;
334 5cedca1b 2004-05-15 devnull if (i < VERT)
335 5cedca1b 2004-05-15 devnull i = VERT; /* was VERT */
336 5cedca1b 2004-05-15 devnull lss1 = lss;
337 5cedca1b 2004-05-15 devnull lss = i;
338 5cedca1b 2004-05-15 devnull }
339 5cedca1b 2004-05-15 devnull
340 5cedca1b 2004-05-15 devnull
341 5cedca1b 2004-05-15 devnull
342 5cedca1b 2004-05-15 devnull
343 5cedca1b 2004-05-15 devnull Tchar n_xlss(void)
344 5cedca1b 2004-05-15 devnull {
345 5cedca1b 2004-05-15 devnull /* stores \x'...' into
346 5cedca1b 2004-05-15 devnull /* two successive Tchars.
347 5cedca1b 2004-05-15 devnull /* the first contains HX, the second the value,
348 5cedca1b 2004-05-15 devnull /* encoded as a vertical motion.
349 5cedca1b 2004-05-15 devnull /* decoding is done in n2.c by pchar().
350 5cedca1b 2004-05-15 devnull */
351 5cedca1b 2004-05-15 devnull int i;
352 5cedca1b 2004-05-15 devnull
353 5cedca1b 2004-05-15 devnull getch();
354 5cedca1b 2004-05-15 devnull dfact = lss;
355 5cedca1b 2004-05-15 devnull i = quant(atoi0(), VERT);
356 5cedca1b 2004-05-15 devnull dfact = 1;
357 5cedca1b 2004-05-15 devnull getch();
358 5cedca1b 2004-05-15 devnull if (i >= 0)
359 5cedca1b 2004-05-15 devnull *pbp++ = MOT | VMOT | i;
360 5cedca1b 2004-05-15 devnull else
361 5cedca1b 2004-05-15 devnull *pbp++ = MOT | VMOT | NMOT | -i;
362 5cedca1b 2004-05-15 devnull return(HX);
363 5cedca1b 2004-05-15 devnull }