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