Blame


1 5cedca1b 2004-05-15 devnull #include <stdio.h>
2 5cedca1b 2004-05-15 devnull #include <math.h>
3 5cedca1b 2004-05-15 devnull #include <string.h>
4 5cedca1b 2004-05-15 devnull #include "pic.h"
5 5cedca1b 2004-05-15 devnull extern int dbg;
6 5cedca1b 2004-05-15 devnull
7 5cedca1b 2004-05-15 devnull #define abs(n) (n >= 0 ? n : -(n))
8 5cedca1b 2004-05-15 devnull #define max(x,y) ((x)>(y) ? (x) : (y))
9 5cedca1b 2004-05-15 devnull
10 5cedca1b 2004-05-15 devnull char *textshift = "\\v'.2m'"; /* move text this far down */
11 5cedca1b 2004-05-15 devnull
12 5cedca1b 2004-05-15 devnull /* scaling stuff defined by s command as X0,Y0 to X1,Y1 */
13 5cedca1b 2004-05-15 devnull /* output dimensions set by -l,-w options to 0,0 to hmax, vmax */
14 5cedca1b 2004-05-15 devnull /* default output is 6x6 inches */
15 5cedca1b 2004-05-15 devnull
16 5cedca1b 2004-05-15 devnull
17 5cedca1b 2004-05-15 devnull double xscale;
18 5cedca1b 2004-05-15 devnull double yscale;
19 5cedca1b 2004-05-15 devnull
20 5cedca1b 2004-05-15 devnull double hpos = 0; /* current horizontal position in output coordinate system */
21 5cedca1b 2004-05-15 devnull double vpos = 0; /* current vertical position; 0 is top of page */
22 5cedca1b 2004-05-15 devnull
23 5cedca1b 2004-05-15 devnull double htrue = 0; /* where we really are */
24 5cedca1b 2004-05-15 devnull double vtrue = 0;
25 5cedca1b 2004-05-15 devnull
26 5cedca1b 2004-05-15 devnull double X0, Y0; /* left bottom of input */
27 5cedca1b 2004-05-15 devnull double X1, Y1; /* right top of input */
28 5cedca1b 2004-05-15 devnull
29 5cedca1b 2004-05-15 devnull double hmax; /* right end of output */
30 5cedca1b 2004-05-15 devnull double vmax; /* top of output (down is positive) */
31 5cedca1b 2004-05-15 devnull
32 5cedca1b 2004-05-15 devnull extern double deltx;
33 5cedca1b 2004-05-15 devnull extern double delty;
34 5cedca1b 2004-05-15 devnull extern double xmin, ymin, xmax, ymax;
35 5cedca1b 2004-05-15 devnull
36 5cedca1b 2004-05-15 devnull double xconv(double), yconv(double), xsc(double), ysc(double);
37 5cedca1b 2004-05-15 devnull void space(double, double, double, double);
38 5cedca1b 2004-05-15 devnull void hgoto(double), vgoto(double), hmot(double), vmot(double);
39 5cedca1b 2004-05-15 devnull void move(double, double), movehv(double, double);
40 5cedca1b 2004-05-15 devnull void cont(double, double);
41 5cedca1b 2004-05-15 devnull
42 5cedca1b 2004-05-15 devnull void openpl(char *s) /* initialize device; s is residue of .PS invocation line */
43 5cedca1b 2004-05-15 devnull {
44 5cedca1b 2004-05-15 devnull double maxw, maxh, ratio = 1;
45 5cedca1b 2004-05-15 devnull double odeltx = deltx, odelty = delty;
46 5cedca1b 2004-05-15 devnull
47 5cedca1b 2004-05-15 devnull hpos = vpos = 0;
48 5cedca1b 2004-05-15 devnull maxw = getfval("maxpswid");
49 5cedca1b 2004-05-15 devnull maxh = getfval("maxpsht");
50 5cedca1b 2004-05-15 devnull if (deltx > maxw) { /* shrink horizontal */
51 5cedca1b 2004-05-15 devnull ratio = maxw / deltx;
52 5cedca1b 2004-05-15 devnull deltx *= ratio;
53 5cedca1b 2004-05-15 devnull delty *= ratio;
54 5cedca1b 2004-05-15 devnull }
55 5cedca1b 2004-05-15 devnull if (delty > maxh) { /* shrink vertical */
56 5cedca1b 2004-05-15 devnull ratio = maxh / delty;
57 5cedca1b 2004-05-15 devnull deltx *= ratio;
58 5cedca1b 2004-05-15 devnull delty *= ratio;
59 5cedca1b 2004-05-15 devnull }
60 5cedca1b 2004-05-15 devnull if (ratio != 1) {
61 5cedca1b 2004-05-15 devnull fprintf(stderr, "pic: %g X %g picture shrunk to", odeltx, odelty);
62 5cedca1b 2004-05-15 devnull fprintf(stderr, " %g X %g\n", deltx, delty);
63 5cedca1b 2004-05-15 devnull }
64 5cedca1b 2004-05-15 devnull space(xmin, ymin, xmax, ymax);
65 5cedca1b 2004-05-15 devnull printf("... %g %g %g %g\n", xmin, ymin, xmax, ymax);
66 5cedca1b 2004-05-15 devnull printf("... %.3fi %.3fi %.3fi %.3fi\n",
67 5cedca1b 2004-05-15 devnull xconv(xmin), yconv(ymin), xconv(xmax), yconv(ymax));
68 5cedca1b 2004-05-15 devnull printf(".nr 00 \\n(.u\n");
69 5cedca1b 2004-05-15 devnull printf(".nf\n");
70 5cedca1b 2004-05-15 devnull printf(".PS %.3fi %.3fi %s", yconv(ymin), xconv(xmax), s);
71 5cedca1b 2004-05-15 devnull /* assumes \n comes as part of s */
72 5cedca1b 2004-05-15 devnull }
73 5cedca1b 2004-05-15 devnull
74 5cedca1b 2004-05-15 devnull void space(double x0, double y0, double x1, double y1) /* set limits of page */
75 5cedca1b 2004-05-15 devnull {
76 5cedca1b 2004-05-15 devnull X0 = x0;
77 5cedca1b 2004-05-15 devnull Y0 = y0;
78 5cedca1b 2004-05-15 devnull X1 = x1;
79 5cedca1b 2004-05-15 devnull Y1 = y1;
80 5cedca1b 2004-05-15 devnull xscale = deltx == 0.0 ? 1.0 : deltx / (X1-X0);
81 5cedca1b 2004-05-15 devnull yscale = delty == 0.0 ? 1.0 : delty / (Y1-Y0);
82 5cedca1b 2004-05-15 devnull }
83 5cedca1b 2004-05-15 devnull
84 5cedca1b 2004-05-15 devnull double xconv(double x) /* convert x from external to internal form */
85 5cedca1b 2004-05-15 devnull {
86 5cedca1b 2004-05-15 devnull return (x-X0) * xscale;
87 5cedca1b 2004-05-15 devnull }
88 5cedca1b 2004-05-15 devnull
89 5cedca1b 2004-05-15 devnull double xsc(double x) /* convert x from external to internal form, scaling only */
90 5cedca1b 2004-05-15 devnull {
91 5cedca1b 2004-05-15 devnull
92 5cedca1b 2004-05-15 devnull return (x) * xscale;
93 5cedca1b 2004-05-15 devnull }
94 5cedca1b 2004-05-15 devnull
95 5cedca1b 2004-05-15 devnull double yconv(double y) /* convert y from external to internal form */
96 5cedca1b 2004-05-15 devnull {
97 5cedca1b 2004-05-15 devnull return (Y1-y) * yscale;
98 5cedca1b 2004-05-15 devnull }
99 5cedca1b 2004-05-15 devnull
100 5cedca1b 2004-05-15 devnull double ysc(double y) /* convert y from external to internal form, scaling only */
101 5cedca1b 2004-05-15 devnull {
102 5cedca1b 2004-05-15 devnull return (y) * yscale;
103 5cedca1b 2004-05-15 devnull }
104 5cedca1b 2004-05-15 devnull
105 5cedca1b 2004-05-15 devnull void closepl(char *PEline) /* clean up after finished */
106 5cedca1b 2004-05-15 devnull {
107 5cedca1b 2004-05-15 devnull movehv(0.0, 0.0); /* get back to where we started */
108 5cedca1b 2004-05-15 devnull if (strchr(PEline, 'F') == NULL) {
109 5cedca1b 2004-05-15 devnull printf(".sp 1+%.3fi\n", yconv(ymin));
110 5cedca1b 2004-05-15 devnull }
111 5cedca1b 2004-05-15 devnull printf("%s\n", PEline);
112 5cedca1b 2004-05-15 devnull printf(".if \\n(00 .fi\n");
113 5cedca1b 2004-05-15 devnull }
114 5cedca1b 2004-05-15 devnull
115 5cedca1b 2004-05-15 devnull void move(double x, double y) /* go to position x, y in external coords */
116 5cedca1b 2004-05-15 devnull {
117 5cedca1b 2004-05-15 devnull hgoto(xconv(x));
118 5cedca1b 2004-05-15 devnull vgoto(yconv(y));
119 5cedca1b 2004-05-15 devnull }
120 5cedca1b 2004-05-15 devnull
121 5cedca1b 2004-05-15 devnull void movehv(double h, double v) /* go to internal position h, v */
122 5cedca1b 2004-05-15 devnull {
123 5cedca1b 2004-05-15 devnull hgoto(h);
124 5cedca1b 2004-05-15 devnull vgoto(v);
125 5cedca1b 2004-05-15 devnull }
126 5cedca1b 2004-05-15 devnull
127 5cedca1b 2004-05-15 devnull void hmot(double n) /* generate n units of horizontal motion */
128 5cedca1b 2004-05-15 devnull {
129 5cedca1b 2004-05-15 devnull hpos += n;
130 5cedca1b 2004-05-15 devnull }
131 5cedca1b 2004-05-15 devnull
132 5cedca1b 2004-05-15 devnull void vmot(double n) /* generate n units of vertical motion */
133 5cedca1b 2004-05-15 devnull {
134 5cedca1b 2004-05-15 devnull vpos += n;
135 5cedca1b 2004-05-15 devnull }
136 5cedca1b 2004-05-15 devnull
137 5cedca1b 2004-05-15 devnull void hgoto(double n)
138 5cedca1b 2004-05-15 devnull {
139 5cedca1b 2004-05-15 devnull hpos = n;
140 5cedca1b 2004-05-15 devnull }
141 5cedca1b 2004-05-15 devnull
142 5cedca1b 2004-05-15 devnull void vgoto(double n)
143 5cedca1b 2004-05-15 devnull {
144 5cedca1b 2004-05-15 devnull vpos = n;
145 5cedca1b 2004-05-15 devnull }
146 5cedca1b 2004-05-15 devnull
147 5cedca1b 2004-05-15 devnull void hvflush(void) /* get to proper point for output */
148 5cedca1b 2004-05-15 devnull {
149 5cedca1b 2004-05-15 devnull if (fabs(hpos-htrue) >= 0.0005) {
150 5cedca1b 2004-05-15 devnull printf("\\h'%.3fi'", hpos - htrue);
151 5cedca1b 2004-05-15 devnull htrue = hpos;
152 5cedca1b 2004-05-15 devnull }
153 5cedca1b 2004-05-15 devnull if (fabs(vpos-vtrue) >= 0.0005) {
154 5cedca1b 2004-05-15 devnull printf("\\v'%.3fi'", vpos - vtrue);
155 5cedca1b 2004-05-15 devnull vtrue = vpos;
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 flyback(void) /* return to upper left corner (entry point) */
160 5cedca1b 2004-05-15 devnull {
161 5cedca1b 2004-05-15 devnull printf(".sp -1\n");
162 5cedca1b 2004-05-15 devnull htrue = vtrue = 0;
163 5cedca1b 2004-05-15 devnull }
164 5cedca1b 2004-05-15 devnull
165 5cedca1b 2004-05-15 devnull void printlf(int n, char *f)
166 5cedca1b 2004-05-15 devnull {
167 5cedca1b 2004-05-15 devnull if (f)
168 5cedca1b 2004-05-15 devnull printf(".lf %d %s\n", n, f);
169 5cedca1b 2004-05-15 devnull else
170 5cedca1b 2004-05-15 devnull printf(".lf %d\n", n);
171 5cedca1b 2004-05-15 devnull }
172 5cedca1b 2004-05-15 devnull
173 5cedca1b 2004-05-15 devnull void troff(char *s) /* output troff right here */
174 5cedca1b 2004-05-15 devnull {
175 5cedca1b 2004-05-15 devnull printf("%s\n", s);
176 5cedca1b 2004-05-15 devnull }
177 5cedca1b 2004-05-15 devnull
178 5cedca1b 2004-05-15 devnull void label(char *s, int t, int nh) /* text s of type t nh half-lines up */
179 5cedca1b 2004-05-15 devnull {
180 5cedca1b 2004-05-15 devnull int q;
181 5cedca1b 2004-05-15 devnull char *p;
182 5cedca1b 2004-05-15 devnull
183 5cedca1b 2004-05-15 devnull if (!s)
184 5cedca1b 2004-05-15 devnull return;
185 5cedca1b 2004-05-15 devnull hvflush();
186 5cedca1b 2004-05-15 devnull dprintf("label: %s %o %d\n", s, t, nh);
187 5cedca1b 2004-05-15 devnull printf("%s", textshift); /* shift down and left */
188 5cedca1b 2004-05-15 devnull if (t & ABOVE)
189 5cedca1b 2004-05-15 devnull nh++;
190 5cedca1b 2004-05-15 devnull else if (t & BELOW)
191 5cedca1b 2004-05-15 devnull nh--;
192 5cedca1b 2004-05-15 devnull if (nh)
193 5cedca1b 2004-05-15 devnull printf("\\v'%du*\\n(.vu/2u'", -nh);
194 5cedca1b 2004-05-15 devnull /* just in case the text contains a quote: */
195 5cedca1b 2004-05-15 devnull q = 0;
196 5cedca1b 2004-05-15 devnull for (p = s; *p; p++)
197 5cedca1b 2004-05-15 devnull if (*p == '\'') {
198 5cedca1b 2004-05-15 devnull q = 1;
199 5cedca1b 2004-05-15 devnull break;
200 5cedca1b 2004-05-15 devnull }
201 5cedca1b 2004-05-15 devnull t &= ~(ABOVE|BELOW);
202 5cedca1b 2004-05-15 devnull if (t & LJUST) {
203 5cedca1b 2004-05-15 devnull printf("%s", s);
204 5cedca1b 2004-05-15 devnull } else if (t & RJUST) {
205 5cedca1b 2004-05-15 devnull if (q)
206 5cedca1b 2004-05-15 devnull printf("\\h\\(ts-\\w\\(ts%s\\(tsu\\(ts%s", s, s);
207 5cedca1b 2004-05-15 devnull else
208 5cedca1b 2004-05-15 devnull printf("\\h'-\\w'%s'u'%s", s, s);
209 5cedca1b 2004-05-15 devnull } else { /* CENTER */
210 5cedca1b 2004-05-15 devnull if (q)
211 5cedca1b 2004-05-15 devnull printf("\\h\\(ts-\\w\\(ts%s\\(tsu/2u\\(ts%s", s, s);
212 5cedca1b 2004-05-15 devnull else
213 5cedca1b 2004-05-15 devnull printf("\\h'-\\w'%s'u/2u'%s", s, s);
214 5cedca1b 2004-05-15 devnull }
215 5cedca1b 2004-05-15 devnull printf("\n");
216 5cedca1b 2004-05-15 devnull flyback();
217 5cedca1b 2004-05-15 devnull }
218 5cedca1b 2004-05-15 devnull
219 5cedca1b 2004-05-15 devnull void line(double x0, double y0, double x1, double y1) /* draw line from x0,y0 to x1,y1 */
220 5cedca1b 2004-05-15 devnull {
221 5cedca1b 2004-05-15 devnull move(x0, y0);
222 5cedca1b 2004-05-15 devnull cont(x1, y1);
223 5cedca1b 2004-05-15 devnull }
224 5cedca1b 2004-05-15 devnull
225 5cedca1b 2004-05-15 devnull void arrow(double x0, double y0, double x1, double y1, double w, double h,
226 5cedca1b 2004-05-15 devnull double ang, int nhead) /* draw arrow (without shaft) */
227 5cedca1b 2004-05-15 devnull {
228 5cedca1b 2004-05-15 devnull double alpha, rot, drot, hyp;
229 5cedca1b 2004-05-15 devnull double dx, dy;
230 5cedca1b 2004-05-15 devnull int i;
231 5cedca1b 2004-05-15 devnull
232 5cedca1b 2004-05-15 devnull rot = atan2(w / 2, h);
233 5cedca1b 2004-05-15 devnull hyp = sqrt(w/2 * w/2 + h * h);
234 5cedca1b 2004-05-15 devnull alpha = atan2(y1-y0, x1-x0) + ang;
235 5cedca1b 2004-05-15 devnull if (nhead < 2)
236 5cedca1b 2004-05-15 devnull nhead = 2;
237 5cedca1b 2004-05-15 devnull dprintf("rot=%g, hyp=%g, alpha=%g\n", rot, hyp, alpha);
238 5cedca1b 2004-05-15 devnull for (i = nhead-1; i >= 0; i--) {
239 5cedca1b 2004-05-15 devnull drot = 2 * rot / (double) (nhead-1) * (double) i;
240 5cedca1b 2004-05-15 devnull dx = hyp * cos(alpha + PI - rot + drot);
241 5cedca1b 2004-05-15 devnull dy = hyp * sin(alpha + PI - rot + drot);
242 5cedca1b 2004-05-15 devnull dprintf("dx,dy = %g,%g\n", dx, dy);
243 5cedca1b 2004-05-15 devnull line(x1+dx, y1+dy, x1, y1);
244 5cedca1b 2004-05-15 devnull }
245 5cedca1b 2004-05-15 devnull }
246 5cedca1b 2004-05-15 devnull
247 5cedca1b 2004-05-15 devnull double lastgray = 0;
248 5cedca1b 2004-05-15 devnull
249 5cedca1b 2004-05-15 devnull void fillstart(double v) /* this works only for postscript, obviously. */
250 5cedca1b 2004-05-15 devnull { /* uses drechsler's dpost conventions... */
251 5cedca1b 2004-05-15 devnull hvflush();
252 5cedca1b 2004-05-15 devnull printf("\\X'BeginObject %g setgray'\n", v);
253 5cedca1b 2004-05-15 devnull lastgray = v;
254 5cedca1b 2004-05-15 devnull flyback();
255 5cedca1b 2004-05-15 devnull }
256 5cedca1b 2004-05-15 devnull
257 5cedca1b 2004-05-15 devnull void fillend(int vis, int fill)
258 5cedca1b 2004-05-15 devnull {
259 5cedca1b 2004-05-15 devnull hvflush();
260 5cedca1b 2004-05-15 devnull printf("\\X'EndObject gsave eofill grestore %g setgray %s'\n",
261 5cedca1b 2004-05-15 devnull !vis ? lastgray : 0.0,
262 5cedca1b 2004-05-15 devnull vis ? "stroke" : "");
263 5cedca1b 2004-05-15 devnull /* for dashed: [50] 0 setdash just before stroke. */
264 5cedca1b 2004-05-15 devnull lastgray = 0;
265 5cedca1b 2004-05-15 devnull flyback();
266 5cedca1b 2004-05-15 devnull }
267 5cedca1b 2004-05-15 devnull
268 5cedca1b 2004-05-15 devnull void box(double x0, double y0, double x1, double y1)
269 5cedca1b 2004-05-15 devnull {
270 5cedca1b 2004-05-15 devnull move(x0, y0);
271 5cedca1b 2004-05-15 devnull cont(x0, y1);
272 5cedca1b 2004-05-15 devnull cont(x1, y1);
273 5cedca1b 2004-05-15 devnull cont(x1, y0);
274 5cedca1b 2004-05-15 devnull cont(x0, y0);
275 5cedca1b 2004-05-15 devnull }
276 5cedca1b 2004-05-15 devnull
277 5cedca1b 2004-05-15 devnull void cont(double x, double y) /* continue line from here to x,y */
278 5cedca1b 2004-05-15 devnull {
279 5cedca1b 2004-05-15 devnull double h1, v1;
280 5cedca1b 2004-05-15 devnull double dh, dv;
281 5cedca1b 2004-05-15 devnull
282 5cedca1b 2004-05-15 devnull h1 = xconv(x);
283 5cedca1b 2004-05-15 devnull v1 = yconv(y);
284 5cedca1b 2004-05-15 devnull dh = h1 - hpos;
285 5cedca1b 2004-05-15 devnull dv = v1 - vpos;
286 5cedca1b 2004-05-15 devnull hvflush();
287 5cedca1b 2004-05-15 devnull printf("\\D'l%.3fi %.3fi'\n", dh, dv);
288 5cedca1b 2004-05-15 devnull flyback(); /* expensive */
289 5cedca1b 2004-05-15 devnull hpos = h1;
290 5cedca1b 2004-05-15 devnull vpos = v1;
291 5cedca1b 2004-05-15 devnull }
292 5cedca1b 2004-05-15 devnull
293 5cedca1b 2004-05-15 devnull void circle(double x, double y, double r)
294 5cedca1b 2004-05-15 devnull {
295 5cedca1b 2004-05-15 devnull move(x-r, y);
296 5cedca1b 2004-05-15 devnull hvflush();
297 5cedca1b 2004-05-15 devnull printf("\\D'c%.3fi'\n", xsc(2 * r));
298 5cedca1b 2004-05-15 devnull flyback();
299 5cedca1b 2004-05-15 devnull }
300 5cedca1b 2004-05-15 devnull
301 5cedca1b 2004-05-15 devnull void spline(double x, double y, double n, ofloat *p, int dashed, double ddval)
302 5cedca1b 2004-05-15 devnull {
303 5cedca1b 2004-05-15 devnull int i;
304 5cedca1b 2004-05-15 devnull double dx, dy;
305 5cedca1b 2004-05-15 devnull double xerr, yerr;
306 5cedca1b 2004-05-15 devnull
307 5cedca1b 2004-05-15 devnull move(x, y);
308 5cedca1b 2004-05-15 devnull hvflush();
309 5cedca1b 2004-05-15 devnull xerr = yerr = 0.0;
310 5cedca1b 2004-05-15 devnull printf("\\D'~");
311 5cedca1b 2004-05-15 devnull for (i = 0; i < 2 * n; i += 2) {
312 5cedca1b 2004-05-15 devnull dx = xsc(xerr += p[i]);
313 5cedca1b 2004-05-15 devnull xerr -= dx/xscale;
314 5cedca1b 2004-05-15 devnull dy = ysc(yerr += p[i+1]);
315 5cedca1b 2004-05-15 devnull yerr -= dy/yscale;
316 5cedca1b 2004-05-15 devnull printf(" %.3fi %.3fi", dx, -dy); /* WATCH SIGN */
317 5cedca1b 2004-05-15 devnull }
318 5cedca1b 2004-05-15 devnull printf("'\n");
319 5cedca1b 2004-05-15 devnull flyback();
320 5cedca1b 2004-05-15 devnull }
321 5cedca1b 2004-05-15 devnull
322 5cedca1b 2004-05-15 devnull void ellipse(double x, double y, double r1, double r2)
323 5cedca1b 2004-05-15 devnull {
324 5cedca1b 2004-05-15 devnull double ir1, ir2;
325 5cedca1b 2004-05-15 devnull
326 5cedca1b 2004-05-15 devnull move(x-r1, y);
327 5cedca1b 2004-05-15 devnull hvflush();
328 5cedca1b 2004-05-15 devnull ir1 = xsc(r1);
329 5cedca1b 2004-05-15 devnull ir2 = ysc(r2);
330 5cedca1b 2004-05-15 devnull printf("\\D'e%.3fi %.3fi'\n", 2 * ir1, 2 * abs(ir2));
331 5cedca1b 2004-05-15 devnull flyback();
332 5cedca1b 2004-05-15 devnull }
333 5cedca1b 2004-05-15 devnull
334 5cedca1b 2004-05-15 devnull void arc(double x, double y, double x0, double y0, double x1, double y1) /* draw arc with center x,y */
335 5cedca1b 2004-05-15 devnull {
336 5cedca1b 2004-05-15 devnull
337 5cedca1b 2004-05-15 devnull move(x0, y0);
338 5cedca1b 2004-05-15 devnull hvflush();
339 5cedca1b 2004-05-15 devnull printf("\\D'a%.3fi %.3fi %.3fi %.3fi'\n",
340 5cedca1b 2004-05-15 devnull xsc(x-x0), -ysc(y-y0), xsc(x1-x), -ysc(y1-y)); /* WATCH SIGNS */
341 5cedca1b 2004-05-15 devnull flyback();
342 5cedca1b 2004-05-15 devnull }
343 5cedca1b 2004-05-15 devnull
344 5cedca1b 2004-05-15 devnull void dot(void) {
345 5cedca1b 2004-05-15 devnull hvflush();
346 5cedca1b 2004-05-15 devnull /* what character to draw here depends on what's available. */
347 5cedca1b 2004-05-15 devnull /* on the 202, l. is good but small. */
348 5cedca1b 2004-05-15 devnull /* in general, use a smaller, shifted period and hope */
349 5cedca1b 2004-05-15 devnull
350 5cedca1b 2004-05-15 devnull printf("\\&\\f1\\h'-.1m'\\v'.03m'\\s-3.\\s+3\\fP\n");
351 5cedca1b 2004-05-15 devnull flyback();
352 5cedca1b 2004-05-15 devnull }