diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /graphics/hpgl2ps/hpglcom.c |
Initial commit
Diffstat (limited to 'graphics/hpgl2ps/hpglcom.c')
-rw-r--r-- | graphics/hpgl2ps/hpglcom.c | 577 |
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; + } +} |