#ifndef lint static char *sccsid = "idfilt.c (CWI) 1.1 85/03/01"; #endif #include "idfilt.h" FILE *infile; char *filename; int lineno = 0; float maxx, maxy; float minx, miny; float width = 4.0; float colwid = 6.0; boolean maxxset, maxyset; boolean minxset, minyset; boolean widset, colset; boolean boundset; boolean veryfirst = TRUE; boolean wantquality = FALSE; main (argc, argv) int argc; char *argv[]; { while (argc > 1 && argv[1][0] == '-') { switch (argv[1][1]) { case 'q': wantquality = TRUE; break; default: fprintf (stderr, "ideal filter: unknown flag %c\n", argv[1][1]); break; } argc--; argv++; } if (argc < 2) { infile = stdin; lineno = 0; interpret (infile); } else { while (argc-- > 1) { if (!(infile = fopen (*++argv, "r"))) { fprintf (stderr, "ideal filter: can't open %s\n", *argv); exit (1); } filename = *argv; lineno = 0; interpret (infile); fclose (infile); } } exit (0); } interpret (infile) register FILE *infile; { char buf[250]; int numitems; char cmd[10]; int i[10]; float f[30]; char *string; while (fgets (buf, sizeof buf, infile)) { lineno++; idjusttext (buf); if (buf[0] == '.') { if (buf[1] == 'I') { switch (buf[2]) { case 'S': numitems = sscanf (buf, "%s %d %d %d %d %d %d", cmd, &i[0], &i[1], &i[2], &i[3], &i[4], &i[5] ); idstart (numitems, i); maxxset = minxset = FALSE; maxyset = minyset = FALSE; colset = boundset = widset = FALSE; break; case 'E': idendE (); break; case 'F': idendF (); break; default: break; } } else if (buf[1] == '.' && buf[2] == '.') { sscanf (buf, "%s", cmd); if (!boundset) { if (strcmp (cmd, "...maxx") == 0) { sscanf (buf, "%s %f", cmd, &f[0] ); idmaxx (f[0]); } else if (strcmp (cmd, "...maxy") == 0) { sscanf (buf, "%s %f", cmd, &f[0] ); idmaxy (f[0]); } else if (strcmp (cmd, "...minx") == 0) { sscanf (buf, "%s %f", cmd, &f[0] ); idminx (f[0]); } else if (strcmp (cmd, "...miny") == 0) { sscanf (buf, "%s %f", cmd, &f[0] ); idminy (f[0]); } else if (strcmp (cmd, "...width") == 0) { sscanf (buf, "%s %f", cmd, &f[0] ); idwidth (f[0]); } else if (strcmp (cmd, "...colwid") == 0) { sscanf (buf, "%s %f", cmd, &f[0] ); idcolwid (f[0]); } else if (strcmp (cmd, "...obbox") == 0) { if (!veryfirst) { maxxset = maxyset = TRUE; minxset = minyset = TRUE; boundset = TRUE; } } else if (strcmp (cmd, "...noerase") == 0) { idnoerase (); } else if (strcmp (cmd, "...yeserase") == 0) { idyeserase (); } else { idendbound (); veryfirst = FALSE; } } if (boundset) { if (strcmp (cmd, "...line") == 0) { sscanf (buf, "%s %f %f %f %f", cmd, &f[0], &f[1], &f[2], &f[3] ); idline (f[0], f[1], f[2], f[3]); } else if (strcmp (cmd, "...circle") == 0) { sscanf (buf, "%s %f %f %f", cmd, &f[0], &f[1], &f[2] ); idcircle (f[0], f[1], f[2]); } else if (strcmp (cmd, "...arc") == 0) { sscanf (buf, "%s %f %f %f %f %f %f %f %f %f", cmd, &f[0], &f[1], &f[2], &f[3], &f[4], &f[5], &f[6], &f[7], &f[8] ); idarc (f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7], f[8]); } else if (strcmp (cmd, "...left") == 0) { sscanf (buf, "%s %f %f", cmd, &f[0], &f[1] ); buf[strlen(buf)-1] = '\0'; string = buf; while (*string != '\'') string ++; idleft (f[0], f[1], string); } else if (strcmp (cmd, "...center") == 0) { sscanf (buf, "%s %f %f", cmd, &f[0], &f[1] ); buf[strlen(buf)-1] = '\0'; string = buf; while (*string != '\'') string ++; idcenter (f[0], f[1], string); } else if (strcmp (cmd, "...right") == 0) { sscanf (buf, "%s %f %f", cmd, &f[0], &f[1] ); buf[strlen(buf)-1] = '\0'; string = buf; while (*string != '\'') string ++; idright (f[0], f[1], string); } else if (strcmp (cmd, "...spline") == 0) { sscanf (buf, "%s %f %f", cmd, &f[0], &f[1] ); idspline (f[0], f[1]); } else if (strcmp (cmd, "...knot") == 0) { sscanf (buf, "%s %f %f", cmd, &f[0], &f[1] ); idknot (f[0], f[1]); } else if (strcmp (cmd, "...endspline") == 0) { idendspline (); } } } } } } void idmaxx (x) float x; { if (!maxxset) { maxx = x; maxxset = TRUE; } } void idmaxy (y) float y; { if (!maxyset) { maxy = y; maxyset = TRUE; } } void idminx (x) float x; { if (!minxset) { minx = x; minxset = TRUE; } } void idminy (y) float y; { if (!minyset) { miny = y; minyset = TRUE; } } void idwidth (wid) float wid; { if (!widset) { width = wid; widset = TRUE; } } void idcolwid (wid) float wid; { if (!colset) { colwid = wid; colset = TRUE; } }