date and time created 85/03/01 17:03:18 by jaap
authorJaap Akkerhuis <jaap@ucbvax.Berkeley.EDU>
Sat, 2 Mar 1985 09:03:18 +0000 (01:03 -0800)
committerJaap Akkerhuis <jaap@ucbvax.Berkeley.EDU>
Sat, 2 Mar 1985 09:03:18 +0000 (01:03 -0800)
SCCS-vsn: local/ditroff/ditroff.okeeffe/ideal/idfilt/idfilt.c 1.1

usr/src/local/ditroff/ditroff.okeeffe/ideal/idfilt/idfilt.c [new file with mode: 0644]

diff --git a/usr/src/local/ditroff/ditroff.okeeffe/ideal/idfilt/idfilt.c b/usr/src/local/ditroff/ditroff.okeeffe/ideal/idfilt/idfilt.c
new file mode 100644 (file)
index 0000000..d5eb47e
--- /dev/null
@@ -0,0 +1,257 @@
+#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;
+       }
+}