summaryrefslogtreecommitdiff
path: root/graphics/hpgl2ps/hpglcom.c
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /graphics/hpgl2ps/hpglcom.c
Initial commit
Diffstat (limited to 'graphics/hpgl2ps/hpglcom.c')
-rw-r--r--graphics/hpgl2ps/hpglcom.c577
1 files changed, 577 insertions, 0 deletions
diff --git a/graphics/hpgl2ps/hpglcom.c b/graphics/hpgl2ps/hpglcom.c
new file mode 100644
index 0000000000..1e58f366b0
--- /dev/null
+++ b/graphics/hpgl2ps/hpglcom.c
@@ -0,0 +1,577 @@
+/*
+ * This procedure translates RD-GL (Roland DG Graphic Language) into the
+ * equivalent PostScript language.
+ *
+ * The RD-GL is a superset equivalent to HP-GL
+ *
+ * Don McCormick
+ */
+
+#include "defn.h"
+
+/* The folowing defaults should be 0.5% and 1.0% for the respective character
+ * width and height, however this is too small when scaled to Postcript
+ * charcter sizes.
+ */
+float DEFWIDTH = 0.0075; /* 0.75 % of P2x - P1x for default char width */
+float DEFHEIGHT = 0.015; /* 1.5 % of P2y - P1y for default char height */
+
+hpglcom(op1)
+char op1;
+{
+ char op2;
+ int no_op; /* No operation value */
+
+ switch (op1)
+ {
+ case 'A':
+ case 'a':
+ op2 = getc(stream);
+ switch (op2)
+ {
+ case 'A': /* Arc Absolute (not HP-GL) */
+ case 'a':
+ break;
+
+ case 'P': /* Automatic Pen Lift (HP-GL only) */
+ case 'p':
+ while (((ch = getc(stream)) != EOF) && ch != ';');
+ break;
+
+ case 'R': /* Arc Relative (not HP-GL) */
+ case 'r':
+ break;
+
+ default:
+ fprintf(stderr, "Warning: %c%c Unknown HP-GL Command\n\n", op1, op2);
+ }
+ break;
+
+ case 'C':
+ case 'c':
+ op2 = getc(stream);
+ switch (op2)
+ {
+ case 'A': /* Alternate Character Set (Not Used) */
+ case 'a':
+ while (((ch = getc(stream)) != EOF) && ch != ';');
+ fprintf(stderr, "Warning: Alt character set not implemented yet\n");
+ break;
+
+ case 'I': /* Circle */
+ case 'i':
+ circle(RDGLCIRCLE);
+ break;
+
+ case 'P': /* Character Plot */
+ case 'p':
+ {
+ float xspace, yspace;
+
+ xspace = getval() * XSCALE * SCALE * (char_width + char_space);
+ yspace = getval() * YSCALE * SCALE * (char_width + char_space);
+ end_draw();
+ printf(" %g mm %g mm %s\n", xspace, yspace, RMOVE);
+ }
+ break;
+
+ case 'S': /* Standard Character Set */
+ case 's':
+ while (((ch = getc(stream)) != EOF) && ch != ';');
+ break;
+
+ default:
+ fprintf(stderr, "Warning: %c%c Unknown HP-GL Command\n", op1, op2);
+ }
+ break;
+
+ case 'D':
+ case 'd':
+ op2 = getc(stream);
+ switch (op2)
+ {
+ case 'C': /* Digitize Clear (Not Used) */
+ case 'c':
+ break;
+
+ case 'F': /* Default */
+ case 'f':
+ SETDOT = 0;
+ SYMBOL = 0;
+ PENDOWN = 0;
+ EOL = '\003';
+ char_angle = 0;
+ char_slant = 0;
+ char_width = DEFWIDTH * (xmax - xmin) * XSCALE * SCALE;
+ char_height = DEFHEIGHT * (ymax - ymin) * YSCALE * SCALE;
+ char_space = char_width * (1/.67 - 1);
+ printf("/%s %g %g %g DefFont\n",
+ font, char_width, char_height, char_slant);
+ break;
+
+ case 'I': /* Absolute Direction */
+ case 'i':
+ {
+ float run, rise;
+
+ if (SIGNED_NUMERIC)
+ {
+ run = getval() * XSCALE;
+ rise = getval() * YSCALE;
+ char_angle = atan2(rise, run) / deg_rad;
+ }
+ else
+ char_angle = 0;
+ }
+ break;
+
+ case 'P': /* Digitize Point (Not Used) */
+ case 'p':
+ break;
+
+ case 'R': /* Relative Direction */
+ case 'r':
+ {
+ float run, rise;
+
+ if (SIGNED_NUMERIC)
+ {
+ run = getval() * XSCALE;
+ rise = getval() * YSCALE;
+ char_angle += atan2(rise, run) / deg_rad;
+ }
+ else
+ char_angle = 0;
+ }
+ break;
+
+ case 'T': /* Define Terminator */
+ case 't':
+ if ((ch = getc(stream)) != EOF)
+ EOL = ch; /* End of label terminator */
+ break;
+
+ default:
+ fprintf(stderr, "Warning: %c%c Unknown HP-GL Command\n", op1, op2);
+ }
+ break;
+
+ case 'E': /* NOT HP-GL */
+ case 'e':
+ op2 = getc(stream);
+ switch (op2)
+ {
+ case 'A': /* Edge Rectangle Absolute */
+ case 'a':
+ break;
+
+ case 'R': /* Edge Rectangle Relative */
+ case 'r':
+ break;
+
+ case 'W': /* Edge Wedge */
+ case 'w':
+ break;
+
+ default:
+ fprintf(stderr, "Warning: %c%c Unknown RD-GL Command\n", op1, op2);
+ }
+ break;
+
+ case 'F': /* NOT HP-GL */
+ case 'f':
+ op2 = getc(stream);
+ switch (op2)
+ {
+ case 'T': /* Fill Type */
+ case 't':
+ break;
+
+ default:
+ fprintf(stderr, "Warning: %c%c Unknown HP-GL Command\n", op1, op2);
+ }
+ break;
+
+ case 'I':
+ case 'i':
+ op2 = getc(stream);
+ switch (op2)
+ {
+ case 'M': /* Input Mask (Not Used) */
+ case 'm':
+ break;
+
+ case 'N': /* Initialize */
+ case 'n':
+ plotcoords();
+ SETDOT = 0;
+ SYMBOL = 0;
+ PENDOWN = 0;
+ EOL = '\003';
+ char_angle = 0;
+ char_slant = 0;
+ char_width = DEFWIDTH * (xmax - xmin) * XSCALE * SCALE;
+ char_height = DEFHEIGHT * (ymax - ymin) * YSCALE * SCALE;
+ char_space = char_width * (1/0.67 - 1);
+ printf("/%s %g %g %g DefFont\n",
+ font, char_width, char_height, char_slant);
+ break;
+
+ case 'P': /* Input P1 and P2 (Not Used) */
+ case 'p':
+ while (((ch = getc(stream)) != EOF) && ch != ';');
+ fprintf(stderr,"Warning: IP command not implemented\n");
+ break;
+
+ case 'W': /* Input Window */
+ case 'w':
+ while (((ch = getc(stream)) != EOF) && ch != ';');
+ fprintf(stderr,"Warning: IW command not implemented\n");
+ break;
+
+ default:
+ fprintf(stderr, "Warning: %c%c Unknown HP-GL Command\n", op1, op2);
+ }
+ break;
+
+ case 'L':
+ case 'l':
+ op2 = getc(stream);
+ switch (op2)
+ {
+ case 'B': /* Label */
+ case 'b':
+ textps(TEXT);
+ break;
+
+ case 'T': /* Line Type */
+ case 't':
+ linetype(LINE_TYPE_SCALE);
+ break;
+
+ default:
+ fprintf(stderr, "Warning: %c%c Unknown HP-GL Command\n", op1, op2);
+ }
+ break;
+
+ case 'O': /* NOT USED */
+ case 'o':
+ op2 = getc(stream);
+ switch (op2)
+ {
+ case 'A': /* Output Actual Position (Not HP-GL) */
+ case 'a':
+ break;
+
+ case 'C': /* Output Commanded Position */
+ case 'c':
+ break;
+
+ case 'D': /* Output Digitise */
+ case 'd':
+ break;
+
+ case 'E': /* Output Error */
+ case 'e':
+ break;
+
+ case 'P': /* Output P1 and P2 */
+ case 'p':
+ break;
+
+ case 'S': /* Output Status */
+ case 's':
+ break;
+
+ case 'W': /* Output Window (Not HP-GL) */
+ case 'w':
+ break;
+
+ default:
+ fprintf(stderr, "Warning: %c%c Unknown HP-GL Command\n", op1, op2);
+ }
+ break;
+
+ case 'P':
+ case 'p':
+ op2 = getc(stream);
+ switch (op2)
+ {
+ case 'A': /* Plot Absolute */
+ case 'a':
+ PLOTABS = 1;
+ if (SIGNED_NUMERIC)
+ if (SETDOT || SYMBOL)
+ plotdot(MOVE);
+ else if (PENDOWN)
+ plotps(DRAW);
+ else
+ plotps(MOVE);
+ break;
+
+ case 'D': /* Pen Down */
+ case 'd':
+ PENDOWN = 1;
+ if (SIGNED_NUMERIC)
+ if (SETDOT)
+ plotdot(MOVE);
+ else if (PLOTABS)
+ plotps(DRAW);
+ else
+ plotps(RDRAW);
+ break;
+
+ case 'R': /* Plot Relative */
+ case 'r':
+ PLOTABS = 0;
+ if (SIGNED_NUMERIC)
+ if (SETDOT || SYMBOL)
+ plotdot(RMOVE);
+ else if (PENDOWN)
+ plotps(RDRAW);
+ else
+ plotps(RMOVE);
+ break;
+
+ case 'T': /* Pen Thickness (Not HP-GL) */
+ case 't':
+ {
+ float linewidth;
+
+ linewidth = getval() * SCALE; /* In mm */
+ printf("%g mm setlinewidth\n", linewidth);
+ }
+ break;
+
+ case 'U': /* Pen Up */
+ case 'u':
+ PENDOWN = 0;
+ if (SIGNED_NUMERIC)
+ if (SETDOT)
+ plotdot(MOVE);
+ else if (PLOTABS)
+ plotps(MOVE);
+ else
+ plotps(RMOVE);
+ break;
+
+ default:
+ fprintf(stderr, "Warning: %c%c Unknown HP-GL Command\n", op1, op2);
+ }
+ break;
+
+ case 'R': /* Not HP-GL */
+ case 'r':
+ op2 = getc(stream);
+ switch (op2)
+ {
+ case 'A': /* Shade Rectange Absolute */
+ case 'a':
+ break;
+
+ case 'R': /* Shade Rectangle Relative */
+ case 'r':
+ break;
+
+ default:
+ fprintf(stderr, "Warning: %c%c Unknown RD-GL Command\n", op1, op2);
+ }
+ break;
+
+ case 'S':
+ case 's':
+ op2 = getc(stream);
+ switch (op2)
+ {
+ case 'A': /* Select Alternate Set (Not Used) */
+ case 'a':
+ break;
+
+ case 'C': /* Scale */
+ case 'c':
+ if (SIGNED_NUMERIC)
+ xmin = getval();
+ else
+ break;
+
+ if (SIGNED_NUMERIC)
+ xmax = getval();
+ if (SIGNED_NUMERIC)
+ ymin = getval();
+ if (SIGNED_NUMERIC)
+ ymax = getval();
+ fprintf(stderr, "Warning: Scaling not implemented yet\n");
+ break;
+
+ case 'I': /* Absolute Character Size */
+ case 'i':
+ if (SIGNED_NUMERIC)
+ {
+ char_width = getval() * 10 * SCALE; /* In mm */
+ char_height = getval() * 10 * SCALE; /* In mm */
+ } else
+ {
+ if ((ch = getc(stream)) == ';')
+ {
+ char_width = 2.7 * SCALE;
+ char_height = 1.9 * SCALE;
+ }
+ }
+ char_space = char_width * (1/.67 - 1);
+ printf("/%s %g %g %g DefFont\n",
+ font, char_width, char_height, char_slant);
+ break;
+
+ case 'L': /* Character Slant */
+ case 'l':
+ if (SIGNED_NUMERIC)
+ char_slant = char_height * getval();
+ else
+ char_slant = 0;
+
+ char_space = char_width * (1/.67 - 1);
+ printf("/%s %g %g %g DefFont\n",
+ font, char_width, char_height, char_slant);
+ break;
+
+ case 'M': /* Symbol Mode */
+ case 'm':
+ if ((ch = getc(stream)) != EOF && ch != ';' && isgraph(ch) > 0)
+ {
+ symbol = ch;
+ SYMBOL = 1;
+ }
+ else
+ SYMBOL = 0;
+ break;
+
+ case 'P': /* Pen Select */
+ case 'p':
+ linesize();
+ break;
+
+ case 'R': /* Relative Character Size */
+ case 'r':
+ {
+ float pwidth, pheight;
+
+ if (SIGNED_NUMERIC)
+ {
+ pwidth = getval() * SCALE; /* Percent */
+ pheight = getval() * SCALE; /* Percent */
+ } else
+ {
+ pwidth = DEFWIDTH * 100 * SCALE;
+ pheight = DEFHEIGHT * 100 * SCALE;
+ }
+ char_width = (xmax - xmin) * XSCALE * pwidth / 100.0;
+ char_height = (ymax - ymin) * YSCALE * pheight / 100.0;
+ char_space = char_width * (1/.67 - 1);
+ }
+ printf("/%s %g %g %g DefFont\n",
+ font, char_width, char_height, char_slant);
+ break;
+
+ default:
+ fprintf(stderr, "Warning: %c%c Unknown HP-GL Command\n", op1, op2);
+ }
+ break;
+
+ case 'T':
+ case 't':
+ op2 = getc(stream);
+ switch (op2)
+ {
+ case 'L': /* Tick Length */
+ case 'l':
+ while (((ch = getc(stream)) != EOF) && ch != ';');
+ fprintf(stderr, "Warning: Tick length not implemented yet\n");
+ break;
+
+ default:
+ fprintf(stderr, "Warning: %c%c Unknown HP-GL Command\n", op1, op2);
+ }
+ break;
+
+ case 'U':
+ case 'u':
+ op2 = getc(stream);
+ switch (op2)
+ {
+ case 'C': /* User Defined Character */
+ case 'c':
+ while (((ch = getc(stream)) != EOF) && ch != ';');
+ fprintf(stderr, "Warning: User defined character not implemented yet\n");
+ break;
+
+ default:
+ fprintf(stderr, "Warning: %c%c Unknown HP-GL Command\n", op1, op2);
+ }
+ break;
+
+ case 'V':
+ case 'v':
+ op2 = getc(stream);
+ switch (op2)
+ {
+ case 'S': /* Velocity Select */
+ case 's':
+ while (((ch = getc(stream)) != EOF) && ch != ';');
+ break;
+
+ default:
+ fprintf(stderr, "Warning: %c%c Unknown HP-GL Command\n", op1, op2);
+ }
+ break;
+
+ case 'W': /* Not HP-GL */
+ case 'w':
+ op2 = getc(stream);
+ switch (op2)
+ {
+ case 'G': /* Shade Wedge */
+ case 'g':
+ break;
+
+ default:
+ fprintf(stderr, "Warning: %c%c Unknown RD-GL Command\n", op1, op2);
+ }
+ break;
+
+ case 'X':
+ case 'x':
+ op2 = getc(stream);
+ switch (op2)
+ {
+ case 'T': /* X Tick */
+ case 't':
+ while (((ch = getc(stream)) != EOF) && ch != ';');
+ fprintf(stderr, "Warning: X tick not implemented yet\n");
+ break;
+
+ default:
+ fprintf(stderr, "Warning: %c%c Unknown HP-GL Command\n", op1, op2);
+ }
+ break;
+
+ case 'Y':
+ case 'y':
+ op2 = getc(stream);
+ switch (op2)
+ {
+ case 'T': /* Y Tick */
+ case 't':
+ while (((ch = getc(stream)) != EOF) && ch != ';');
+ fprintf(stderr, "Warning: Y tick not implemented yet\n");
+ break;
+
+ default:
+ fprintf(stderr, "Warning: %c%c Unknown HP-GL Command\n", op1, op2);
+ }
+ break;
+
+ default:
+ fprintf(stderr, "Warning: %c Unknown HP-GL First Op Command\n", op1);
+ break;
+ }
+}