1*e043683cSjaap #ifndef lint
2*e043683cSjaap static char *sccsid = "idfilt.c (CWI) 1.1 85/03/01";
3*e043683cSjaap #endif
4*e043683cSjaap #include "idfilt.h"
5*e043683cSjaap
6*e043683cSjaap FILE *infile;
7*e043683cSjaap char *filename;
8*e043683cSjaap int lineno = 0;
9*e043683cSjaap
10*e043683cSjaap float maxx, maxy;
11*e043683cSjaap float minx, miny;
12*e043683cSjaap float width = 4.0;
13*e043683cSjaap float colwid = 6.0;
14*e043683cSjaap
15*e043683cSjaap boolean maxxset, maxyset;
16*e043683cSjaap boolean minxset, minyset;
17*e043683cSjaap boolean widset, colset;
18*e043683cSjaap boolean boundset;
19*e043683cSjaap
20*e043683cSjaap boolean veryfirst = TRUE;
21*e043683cSjaap
22*e043683cSjaap boolean wantquality = FALSE;
23*e043683cSjaap
main(argc,argv)24*e043683cSjaap main (argc, argv)
25*e043683cSjaap int argc;
26*e043683cSjaap char *argv[];
27*e043683cSjaap {
28*e043683cSjaap while (argc > 1 && argv[1][0] == '-') {
29*e043683cSjaap switch (argv[1][1]) {
30*e043683cSjaap case 'q':
31*e043683cSjaap wantquality = TRUE;
32*e043683cSjaap break;
33*e043683cSjaap default:
34*e043683cSjaap fprintf (stderr, "ideal filter: unknown flag %c\n", argv[1][1]);
35*e043683cSjaap break;
36*e043683cSjaap }
37*e043683cSjaap argc--;
38*e043683cSjaap argv++;
39*e043683cSjaap }
40*e043683cSjaap if (argc < 2) {
41*e043683cSjaap infile = stdin;
42*e043683cSjaap lineno = 0;
43*e043683cSjaap interpret (infile);
44*e043683cSjaap } else {
45*e043683cSjaap while (argc-- > 1) {
46*e043683cSjaap if (!(infile = fopen (*++argv, "r"))) {
47*e043683cSjaap fprintf (stderr, "ideal filter: can't open %s\n", *argv);
48*e043683cSjaap exit (1);
49*e043683cSjaap }
50*e043683cSjaap filename = *argv;
51*e043683cSjaap lineno = 0;
52*e043683cSjaap interpret (infile);
53*e043683cSjaap fclose (infile);
54*e043683cSjaap }
55*e043683cSjaap }
56*e043683cSjaap exit (0);
57*e043683cSjaap }
58*e043683cSjaap
interpret(infile)59*e043683cSjaap interpret (infile)
60*e043683cSjaap register FILE *infile;
61*e043683cSjaap {
62*e043683cSjaap char buf[250];
63*e043683cSjaap
64*e043683cSjaap int numitems;
65*e043683cSjaap char cmd[10];
66*e043683cSjaap int i[10];
67*e043683cSjaap float f[30];
68*e043683cSjaap char *string;
69*e043683cSjaap
70*e043683cSjaap
71*e043683cSjaap while (fgets (buf, sizeof buf, infile)) {
72*e043683cSjaap lineno++;
73*e043683cSjaap idjusttext (buf);
74*e043683cSjaap if (buf[0] == '.') {
75*e043683cSjaap if (buf[1] == 'I') {
76*e043683cSjaap switch (buf[2]) {
77*e043683cSjaap case 'S':
78*e043683cSjaap numitems = sscanf (buf, "%s %d %d %d %d %d %d",
79*e043683cSjaap cmd, &i[0], &i[1], &i[2], &i[3], &i[4], &i[5]
80*e043683cSjaap );
81*e043683cSjaap idstart (numitems, i);
82*e043683cSjaap maxxset = minxset = FALSE;
83*e043683cSjaap maxyset = minyset = FALSE;
84*e043683cSjaap colset = boundset = widset = FALSE;
85*e043683cSjaap break;
86*e043683cSjaap case 'E':
87*e043683cSjaap idendE ();
88*e043683cSjaap break;
89*e043683cSjaap case 'F':
90*e043683cSjaap idendF ();
91*e043683cSjaap break;
92*e043683cSjaap default:
93*e043683cSjaap break;
94*e043683cSjaap }
95*e043683cSjaap } else if (buf[1] == '.' && buf[2] == '.') {
96*e043683cSjaap sscanf (buf, "%s", cmd);
97*e043683cSjaap if (!boundset) {
98*e043683cSjaap if (strcmp (cmd, "...maxx") == 0) {
99*e043683cSjaap sscanf (buf, "%s %f",
100*e043683cSjaap cmd, &f[0]
101*e043683cSjaap );
102*e043683cSjaap idmaxx (f[0]);
103*e043683cSjaap } else if (strcmp (cmd, "...maxy") == 0) {
104*e043683cSjaap sscanf (buf, "%s %f",
105*e043683cSjaap cmd, &f[0]
106*e043683cSjaap );
107*e043683cSjaap idmaxy (f[0]);
108*e043683cSjaap } else if (strcmp (cmd, "...minx") == 0) {
109*e043683cSjaap sscanf (buf, "%s %f",
110*e043683cSjaap cmd, &f[0]
111*e043683cSjaap );
112*e043683cSjaap idminx (f[0]);
113*e043683cSjaap } else if (strcmp (cmd, "...miny") == 0) {
114*e043683cSjaap sscanf (buf, "%s %f",
115*e043683cSjaap cmd, &f[0]
116*e043683cSjaap );
117*e043683cSjaap idminy (f[0]);
118*e043683cSjaap } else if (strcmp (cmd, "...width") == 0) {
119*e043683cSjaap sscanf (buf, "%s %f",
120*e043683cSjaap cmd, &f[0]
121*e043683cSjaap );
122*e043683cSjaap idwidth (f[0]);
123*e043683cSjaap } else if (strcmp (cmd, "...colwid") == 0) {
124*e043683cSjaap sscanf (buf, "%s %f",
125*e043683cSjaap cmd, &f[0]
126*e043683cSjaap );
127*e043683cSjaap idcolwid (f[0]);
128*e043683cSjaap } else if (strcmp (cmd, "...obbox") == 0) {
129*e043683cSjaap if (!veryfirst) {
130*e043683cSjaap maxxset = maxyset = TRUE;
131*e043683cSjaap minxset = minyset = TRUE;
132*e043683cSjaap boundset = TRUE;
133*e043683cSjaap }
134*e043683cSjaap } else if (strcmp (cmd, "...noerase") == 0) {
135*e043683cSjaap idnoerase ();
136*e043683cSjaap } else if (strcmp (cmd, "...yeserase") == 0) {
137*e043683cSjaap idyeserase ();
138*e043683cSjaap } else {
139*e043683cSjaap idendbound ();
140*e043683cSjaap veryfirst = FALSE;
141*e043683cSjaap }
142*e043683cSjaap }
143*e043683cSjaap if (boundset) {
144*e043683cSjaap if (strcmp (cmd, "...line") == 0) {
145*e043683cSjaap sscanf (buf, "%s %f %f %f %f",
146*e043683cSjaap cmd, &f[0], &f[1], &f[2], &f[3]
147*e043683cSjaap );
148*e043683cSjaap idline (f[0], f[1], f[2], f[3]);
149*e043683cSjaap } else if (strcmp (cmd, "...circle") == 0) {
150*e043683cSjaap sscanf (buf, "%s %f %f %f",
151*e043683cSjaap cmd, &f[0], &f[1], &f[2]
152*e043683cSjaap );
153*e043683cSjaap idcircle (f[0], f[1], f[2]);
154*e043683cSjaap } else if (strcmp (cmd, "...arc") == 0) {
155*e043683cSjaap sscanf (buf, "%s %f %f %f %f %f %f %f %f %f",
156*e043683cSjaap cmd, &f[0], &f[1], &f[2], &f[3], &f[4], &f[5], &f[6], &f[7], &f[8]
157*e043683cSjaap );
158*e043683cSjaap idarc (f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7], f[8]);
159*e043683cSjaap } else if (strcmp (cmd, "...left") == 0) {
160*e043683cSjaap sscanf (buf, "%s %f %f",
161*e043683cSjaap cmd, &f[0], &f[1]
162*e043683cSjaap );
163*e043683cSjaap buf[strlen(buf)-1] = '\0';
164*e043683cSjaap string = buf;
165*e043683cSjaap while (*string != '\'')
166*e043683cSjaap string ++;
167*e043683cSjaap idleft (f[0], f[1], string);
168*e043683cSjaap } else if (strcmp (cmd, "...center") == 0) {
169*e043683cSjaap sscanf (buf, "%s %f %f",
170*e043683cSjaap cmd, &f[0], &f[1]
171*e043683cSjaap );
172*e043683cSjaap buf[strlen(buf)-1] = '\0';
173*e043683cSjaap string = buf;
174*e043683cSjaap while (*string != '\'')
175*e043683cSjaap string ++;
176*e043683cSjaap idcenter (f[0], f[1], string);
177*e043683cSjaap } else if (strcmp (cmd, "...right") == 0) {
178*e043683cSjaap sscanf (buf, "%s %f %f",
179*e043683cSjaap cmd, &f[0], &f[1]
180*e043683cSjaap );
181*e043683cSjaap buf[strlen(buf)-1] = '\0';
182*e043683cSjaap string = buf;
183*e043683cSjaap while (*string != '\'')
184*e043683cSjaap string ++;
185*e043683cSjaap idright (f[0], f[1], string);
186*e043683cSjaap } else if (strcmp (cmd, "...spline") == 0) {
187*e043683cSjaap sscanf (buf, "%s %f %f",
188*e043683cSjaap cmd, &f[0], &f[1]
189*e043683cSjaap );
190*e043683cSjaap idspline (f[0], f[1]);
191*e043683cSjaap } else if (strcmp (cmd, "...knot") == 0) {
192*e043683cSjaap sscanf (buf, "%s %f %f",
193*e043683cSjaap cmd, &f[0], &f[1]
194*e043683cSjaap );
195*e043683cSjaap idknot (f[0], f[1]);
196*e043683cSjaap } else if (strcmp (cmd, "...endspline") == 0) {
197*e043683cSjaap idendspline ();
198*e043683cSjaap }
199*e043683cSjaap }
200*e043683cSjaap }
201*e043683cSjaap }
202*e043683cSjaap }
203*e043683cSjaap }
204*e043683cSjaap
idmaxx(x)205*e043683cSjaap void idmaxx (x)
206*e043683cSjaap float x;
207*e043683cSjaap {
208*e043683cSjaap if (!maxxset) {
209*e043683cSjaap maxx = x;
210*e043683cSjaap maxxset = TRUE;
211*e043683cSjaap }
212*e043683cSjaap }
213*e043683cSjaap
idmaxy(y)214*e043683cSjaap void idmaxy (y)
215*e043683cSjaap float y;
216*e043683cSjaap {
217*e043683cSjaap if (!maxyset) {
218*e043683cSjaap maxy = y;
219*e043683cSjaap maxyset = TRUE;
220*e043683cSjaap }
221*e043683cSjaap }
222*e043683cSjaap
idminx(x)223*e043683cSjaap void idminx (x)
224*e043683cSjaap float x;
225*e043683cSjaap {
226*e043683cSjaap if (!minxset) {
227*e043683cSjaap minx = x;
228*e043683cSjaap minxset = TRUE;
229*e043683cSjaap }
230*e043683cSjaap }
231*e043683cSjaap
idminy(y)232*e043683cSjaap void idminy (y)
233*e043683cSjaap float y;
234*e043683cSjaap {
235*e043683cSjaap if (!minyset) {
236*e043683cSjaap miny = y;
237*e043683cSjaap minyset = TRUE;
238*e043683cSjaap }
239*e043683cSjaap }
240*e043683cSjaap
idwidth(wid)241*e043683cSjaap void idwidth (wid)
242*e043683cSjaap float wid;
243*e043683cSjaap {
244*e043683cSjaap if (!widset) {
245*e043683cSjaap width = wid;
246*e043683cSjaap widset = TRUE;
247*e043683cSjaap }
248*e043683cSjaap }
249*e043683cSjaap
idcolwid(wid)250*e043683cSjaap void idcolwid (wid)
251*e043683cSjaap float wid;
252*e043683cSjaap {
253*e043683cSjaap if (!colset) {
254*e043683cSjaap colwid = wid;
255*e043683cSjaap colset = TRUE;
256*e043683cSjaap }
257*e043683cSjaap }
258