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