|
|
1.1 root 1: #include "idfilt.h"
2:
3: #define RESOLUTION 720.0
4:
5: float xscale, yscale;
6:
7: void idjusttext (str)
8: char *str;
9: {
10: if (
11: strncmp (str, ".IE", 3) &&
12: strncmp (str, "...knot", 7) &&
13: strncmp (str, "...endspline", 12) &&
14: strncmp (str, "...left", 7) &&
15: strncmp (str, "...center", 9) &&
16: strncmp (str, "...right", 8)
17: )
18: fputs (str, stdout);
19: }
20:
21: void idstart ()
22: {
23: }
24:
25: void idendbound ()
26: {
27: if (boundset)
28: return;
29: idminx (-6.0);
30: idmaxy (6.0);
31: idmaxx (6.0);
32: idminy (-6.0);
33: if (!banzai && maxx - minx < 0.2) {
34: maxx += 1;
35: minx -= 1;
36: }
37: if (!banzai && maxy - miny < 0.2) {
38: maxy += 1;
39: miny -= 1;
40: }
41: xscale = width*RESOLUTION/(maxx - minx);
42: yscale = - xscale;
43: minx -= 0.5*(colwid - width)*RESOLUTION/xscale;
44: maxx += 0.5*(colwid - width)*RESOLUTION/xscale;
45: boundset = TRUE;
46: printf (".ne %4.2fi\n", yscale*(miny - maxy)/RESOLUTION);
47: }
48:
49: void idline (x1, y1, x2, y2)
50: float x1;
51: float y1;
52: float x2;
53: float y2;
54: {
55: long int X1, Y1, X2, Y2;
56: boolean shortvert, shorthoriz, nonrectilinear;
57: X1 = round(xscale*x1);
58: Y1 = round(yscale*y1);
59: X2 = round(xscale*x2);
60: Y2 = round(yscale*y2);
61: shortvert = X1 == X2 && abs(Y1-Y2) < RESOLUTION/2;
62: shorthoriz = Y1 == Y2 && abs(X1-X2) < RESOLUTION/2;
63: nonrectilinear = X1 != X2 && Y1 != Y2;
64: if (wantquality || shortvert || shorthoriz || nonrectilinear)
65: printf ("\\h'%du'\\v'%du'\\D'l %du %du'\\h'%du'\\v'%du'\n.sp -1\n",
66: round(xscale*(x1-minx)),
67: round(yscale*(y1-maxy)),
68: round(xscale*(x2-x1)),
69: round(yscale*(y2-y1)),
70: round(-xscale*(x2-minx)),
71: round(-yscale*(y2-maxy))
72: );
73: else {
74: if (Y1 == Y2)
75: printf ("\\h'%du'\\v'%du'\\l'%du'\\h'%du'\\v'%du'\n.sp -1\n",
76: round(xscale*(x1-minx)),
77: round(yscale*(y1-maxy)),
78: round(xscale*(x2-x1)),
79: round(-xscale*(x2-minx)),
80: round(-yscale*(y2-maxy))
81: );
82: if (X1 == X2)
83: printf ("\\h'%du'\\v'%du'\\L'%du'\\h'%du'\\v'%du'\n.sp -1\n",
84: round(xscale*(x1-minx)),
85: round(yscale*(y1-maxy)),
86: round(yscale*(y2-y1)),
87: round(-xscale*(x2-minx)),
88: round(-yscale*(y2-maxy))
89: );
90: }
91: }
92:
93: void idcircle (x0, y0, r)
94: float x0;
95: float y0;
96: float r;
97: {
98: printf ("\\h'%du'\\v'%du'\\D'c %du'\\h'%du'\\v'%du'\n.sp -1\n",
99: round(xscale*(x0-r-minx)),
100: round(yscale*(y0-maxy)),
101: round(2*xscale*r),
102: round(-xscale*(x0+r-minx)),
103: round(-yscale*(y0-maxy))
104: );
105: }
106:
107: void idarc (x0, y0, x1, y1, x2, y2, t1, t2, r)
108: float x0;
109: float y0;
110: float x1;
111: float y1;
112: float x2;
113: float y2;
114: float t1;
115: float t2;
116: float r;
117: {
118: if (xscale*r > 30000.0)
119: idline (x1, y1, x2, y2);
120: else {
121: printf ("\\h'%du'\\v'%du'\\D'a %du %du %du %du'\\h'%du'\\v'%du'\n.sp -1\n",
122: round(xscale*(x1-minx)),
123: round(yscale*(y1-maxy)),
124: round(xscale*(x0-x1)),
125: round(yscale*(y0-y1)),
126: round(xscale*(x2-x0)),
127: round(yscale*(y2-y0)),
128: round(-xscale*(x2-minx)),
129: round(-yscale*(y2-maxy))
130: );
131: }
132: }
133:
134: void idleft (x, y, str)
135: float x;
136: float y;
137: char *str;
138: {
139: str == ++str;
140: printf ("\\h'%du'\\v'%du'%s\\h'-\\w\\(ts%s\\(tsu'\n.sp -1\n",
141: round(xscale*(x-minx)),
142: round(yscale*(y-maxy)),
143: str,
144: str
145: );
146: }
147:
148: void idcenter (x, y, str)
149: float x;
150: float y;
151: char *str;
152: {
153: str = ++str;
154: printf ("\\h'%du'\\v'%du'\\h'-\\w\\(ts%s\\(tsu/2u'%s\\h'-\\w\\(ts%s\\(tsu/2u'\n.sp -1\n",
155: round(xscale*(x-minx)),
156: round(yscale*(y-maxy)),
157: str,
158: str,
159: str
160: );
161: }
162:
163: void idright (x, y, str)
164: float x;
165: float y;
166: char *str;
167: {
168: str = ++str;
169: printf ("\\h'%du'\\v'%du'\\h'-\\w\\(ts%s\\(tsu'%s\\h'-\\w\\(ts%s\\(tsu'\n.sp -1\n",
170: round(xscale*(x-minx)),
171: round(yscale*(y-maxy)),
172: str,
173: str,
174: str
175: );
176: }
177:
178: void idendE ()
179: {
180: if (boundset)
181: printf (".sp %du\n.sp 1\n.sp 1\n",
182: round(yscale*(miny-maxy))
183: );
184: printf (".IE\n");
185: }
186:
187: void idendF ()
188: {
189: }
190:
191: float osplx, osply;
192:
193: void idspline (sx, sy)
194: float sx, sy;
195: {
196: osplx = sx;
197: osply = sy;
198: printf ("\\h'%du'\\v'%du'\\D'~",
199: round(xscale*(osplx-minx)),
200: round(yscale*(osply-maxy))
201: );
202: }
203:
204: void idknot (sx, sy)
205: float sx, sy;
206: {
207: printf (" %du %du",
208: round(xscale*(sx-osplx)),
209: round(yscale*(sy-osply))
210: );
211: osplx = sx;
212: osply = sy;
213: }
214:
215: void idendspline ()
216: {
217: printf ("'\\h'%du'\\v'%du'\n.sp -1\n",
218: round(xscale*(minx-osplx)),
219: round(yscale*(maxy-osply))
220: );
221: }
222:
223: void idnoerase ()
224: {
225: }
226:
227:
228: void idyeserase ()
229: {
230: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.