diff options
author | Steve Price <steve@FreeBSD.org> | 2000-01-24 06:19:03 +0000 |
---|---|---|
committer | Steve Price <steve@FreeBSD.org> | 2000-01-24 06:19:03 +0000 |
commit | d80572ef7327df981c91c314d7a450e3a9684ea1 (patch) | |
tree | 5a4b19e15869f9899f7841f156c0e8f758d462d8 /math/gnuplot+ | |
parent | 0d2056a4f130c73bc5549a1c1d720d85b2839c19 (diff) | |
download | ports-d80572ef7327df981c91c314d7a450e3a9684ea1.tar.gz ports-d80572ef7327df981c91c314d7a450e3a9684ea1.zip |
Notes
Diffstat (limited to 'math/gnuplot+')
-rw-r--r-- | math/gnuplot+/Makefile | 2 | ||||
-rw-r--r-- | math/gnuplot+/files/patch-xb | 22 | ||||
-rw-r--r-- | math/gnuplot+/files/patch-xc | 26 | ||||
-rw-r--r-- | math/gnuplot+/files/patch-xd | 103 | ||||
-rw-r--r-- | math/gnuplot+/files/patch-xe | 80 | ||||
-rw-r--r-- | math/gnuplot+/files/patch-xf | 15 | ||||
-rw-r--r-- | math/gnuplot+/files/patch-xg | 236 | ||||
-rw-r--r-- | math/gnuplot+/files/patch-xh | 460 | ||||
-rw-r--r-- | math/gnuplot+/files/patch-xi | 2118 | ||||
-rw-r--r-- | math/gnuplot+/files/patch-xj | 13 | ||||
-rw-r--r-- | math/gnuplot+/files/patch-xk | 283 | ||||
-rw-r--r-- | math/gnuplot+/files/patch-xl | 64 | ||||
-rw-r--r-- | math/gnuplot+/files/patch-za | 74 |
13 files changed, 3495 insertions, 1 deletions
diff --git a/math/gnuplot+/Makefile b/math/gnuplot+/Makefile index de572bd0fedf..a6aa981fcf49 100644 --- a/math/gnuplot+/Makefile +++ b/math/gnuplot+/Makefile @@ -39,7 +39,7 @@ CONFIGURE_ARGS= --exec-prefix=${PREFIX} \ --libdir=${LOCALBASE}/lib \ --with-x --without-linux-vga \ --with-gd=${LOCALBASE}/lib \ - --with-gnu-readline --with-lasergnu --with-png \ + --with-readline=gnu --with-lasergnu --with-png \ --with-vflib=${LOCALBASE}/lib MAN1= gnuplot.1 lasergnu.1 diff --git a/math/gnuplot+/files/patch-xb b/math/gnuplot+/files/patch-xb new file mode 100644 index 000000000000..4b6b5e6fe5bc --- /dev/null +++ b/math/gnuplot+/files/patch-xb @@ -0,0 +1,22 @@ +# key-below-clipping +--- graphics.c.ORIG Wed Sep 15 16:30:29 1999 ++++ graphics.c Wed Nov 17 17:22:24 1999 +@@ -1763,7 +1763,9 @@ + #else + int x = xl + key_text_right - (t->h_char) * strlen(s); + #endif +- if (key_hpos == TOUT || inrange(x, xleft, xright)) ++ if (key_hpos == TOUT || ++ key_vpos == TUNDER || /* HBB 990327 */ ++ inrange(x, xleft, xright)) + (*t->put_text) (x, yl, s); + } + } +@@ -1820,6 +1822,7 @@ + int x = xl + key_text_right - (t->h_char) * strlen(this_plot->title); + #endif + if (key_hpos == TOUT || ++ key_vpos == TUNDER || /* HBB 990327 */ + i_inrange(x, xleft, xright)) + (*t->put_text) (x, yl, this_plot->title); + } diff --git a/math/gnuplot+/files/patch-xc b/math/gnuplot+/files/patch-xc new file mode 100644 index 000000000000..43b861cb924a --- /dev/null +++ b/math/gnuplot+/files/patch-xc @@ -0,0 +1,26 @@ +# hidden3d-endlessloop +--- hidden3d.c.ORIG Thu Aug 19 15:39:28 1999 ++++ hidden3d.c Wed Nov 17 17:42:00 1999 +@@ -2140,14 +2140,20 @@ + test->tested = is_moved_or_split; + SPLIT_TEST_BY_P; + } else { +- if (loop && (p->tested == is_tested)) { +- /* Ouch, seems like we're in trouble, really */ ++ if (loop && (p->tested == is_in_loop)) { ++ /* Ouch, seems like we're in trouble, really: no way to ++ * split one of them, and we're in a loop, so we can't ++ * move p to the front of the list, without risking an ++ * endless loop. Well, let's just output the darn thing, ++ * then, no matter what. :-( */ ++#if DEBUG /* normally off */ + fprintf(stderr, "\ + #Failed: In loop, without intersections.\n\ + #Relations are %d, %d\n", + p_rel_tplane, t_rel_pplane); + print_polygon(test, "test"); + print_polygon(p, "p"); ++#endif + continue; /* Keep quiet, maybe no-one will notice (;-) */ + } else { + PUT_P_IN_FRONT_TEST(is_in_loop); diff --git a/math/gnuplot+/files/patch-xd b/math/gnuplot+/files/patch-xd new file mode 100644 index 000000000000..66e3bd279783 --- /dev/null +++ b/math/gnuplot+/files/patch-xd @@ -0,0 +1,103 @@ +# table-format.2 +--- plot2d.c.ORIG Mon Oct 11 13:18:56 1999 ++++ plot2d.c Thu Nov 18 19:13:48 1999 +@@ -718,12 +718,22 @@ + int plot_num; + { + int i, curve; ++ char *table_format = NULL; ++ ++ /* The data format is determined by the format of the axis labels. ++ * See 'set format'. Patch by Don Taber ++ */ ++ table_format = gp_alloc(strlen(xformat)+strlen(yformat)+5, "table format"); ++ strcpy(table_format, xformat); ++ strcat(table_format, " "); ++ strcat(table_format, yformat); ++ strcat(table_format, " %c\n"); + + for (curve = 0; curve < plot_num; + curve++, this_plot = this_plot->next_cp) { + fprintf(gpoutfile, "#Curve %d, %d points\n#x y type\n", curve, this_plot->p_count); + for (i = 0; i < this_plot->p_count; i++) { +- fprintf(gpoutfile, "%g %g %c\n", ++ fprintf(gpoutfile, table_format, + this_plot->points[i].x, + this_plot->points[i].y, + this_plot->points[i].type == INRANGE ? 'i' +@@ -732,9 +742,12 @@ + } + fputc('\n', gpoutfile); + } +-/* two blank lines between plots in table output */ ++ ++ /* two blank lines between plots in table output */ + fputc('\n', gpoutfile); + fflush(gpoutfile); ++ ++ free(table_format); + } + + /* +--- plot3d.c.ORIG Thu Dec 10 18:30:52 1998 ++++ plot3d.c Thu Nov 18 19:12:01 1999 +@@ -694,6 +694,17 @@ + int i, curve, surface; + struct iso_curve *icrvs; + struct coordinate GPHUGE *points; ++ char *table_format = NULL; ++ char *pcat; ++ ++ table_format = gp_alloc(strlen(xformat)+strlen(yformat)+strlen(zformat)+6, ++ "table format"); ++ strcpy(table_format, xformat); ++ strcat(table_format, " "); ++ strcat(table_format, yformat); ++ strcat(table_format, " "); ++ strcat(table_format, zformat); ++ pcat = &table_format[strlen(table_format)]; + + for (surface = 0, this_plot = first_3dplot; surface < pcount; + this_plot = this_plot->next_sp, surface++) { +@@ -702,12 +713,13 @@ + curve = 0; + + if (draw_surface) { ++ strcpy(pcat," %c\n"); + /* only the curves in one direction */ + while (icrvs && curve < this_plot->num_iso_read) { + fprintf(gpoutfile, "\n#IsoCurve %d, %d points\n#x y z type\n", + curve, icrvs->p_count); + for (i = 0, points = icrvs->points; i < icrvs->p_count; i++) { +- fprintf(gpoutfile, "%g %g %g %c\n", ++ fprintf(gpoutfile, table_format, + points[i].x, + points[i].y, + points[i].z, +@@ -723,6 +735,7 @@ + if (draw_contour) { + int number = 0; + struct gnuplot_contours *c = this_plot->contours; ++ strcpy(pcat,"\n"); + while (c) { + int count = c->num_pts; + struct coordinate GPHUGE *p = c->coords; +@@ -732,7 +745,8 @@ + /* double blank line to allow plot ... index ... */ + fprintf(gpoutfile, "\n# Contour %d, label: %s\n", number++, c->label); + for (; --count >= 0; ++p) +- fprintf(gpoutfile, "%g %g %g\n", p->x, p->y, p->z); ++ fprintf(gpoutfile, table_format, p->x, p->y, p->z); ++ + /* blank line between segments of same contour */ + putc('\n', gpoutfile); + c = c->next; +@@ -740,6 +754,8 @@ + } + } + fflush(gpoutfile); ++ ++ free(table_format); + } + + diff --git a/math/gnuplot+/files/patch-xe b/math/gnuplot+/files/patch-xe new file mode 100644 index 000000000000..cc9cb87da290 --- /dev/null +++ b/math/gnuplot+/files/patch-xe @@ -0,0 +1,80 @@ +# contour.c.fix.991130 +--- contour.c.ORIG Thu Dec 3 22:23:46 1998 ++++ contour.c Wed Dec 1 21:07:24 1999 +@@ -536,8 +536,8 @@ + struct edge_struct **p_edges; /* list of edges output */ + { + int i, j, grid_x_max = iso_lines->p_count; +- struct edge_struct *p_edge1, *p_edge2, *edge0, *edge1, *edge2, *pe_tail, +- *pe_tail1, *pe_tail2, *pe_temp; ++ struct edge_struct *p_edge1, *p_edge2, *edge0, *edge1, *edge2, ++ *pe_tail, *pe_tail2, *pe_temp; + struct poly_struct *pp_tail, *lower_tri, *upper_tri; + struct coordinate GPHUGE *p_vrtx1, GPHUGE * p_vrtx2; /* HBB 980308: need to tag *each* of them as GPHUGE! */ + +@@ -545,14 +545,14 @@ + (*p_edges) = pe_tail = NULL; + + p_vrtx1 = iso_lines->points; /* first row of vertices */ +- p_edge1 = pe_tail1 = NULL; /* clear list of edges */ ++ p_edge1 = pe_tail = NULL; /* clear list of edges */ + + /* Generate edges of first row */ ++ /* HBB 19991130: removed effectively unused variable 'pe_tail1' */ + for (j = 0; j < grid_x_max - 1; j++) +- add_edge(p_vrtx1 + j, p_vrtx1 + j + 1, &p_edge1, &pe_tail1); ++ add_edge(p_vrtx1 + j, p_vrtx1 + j + 1, &p_edge1, &pe_tail); + + (*p_edges) = p_edge1; /* update main list */ +- pe_tail = pe_tail1; + + + /* +@@ -562,10 +562,16 @@ + * (pe_tail points on last edge). + * + * Temporary pointers: +- * 1. p_edge2: Top horizontal edge list: ----------------------- 2 +- * 2. pe_tail: middle edge list: |\ |\ |\ |\ |\ |\ | ++ * 1. p_edge2: Top horizontal edge list: +-----------------------+ 2 ++ * 2. p_tail : end of middle edge list: |\ |\ |\ |\ |\ |\ | + * | \| \| \| \| \| \| +- * 3. p_edge1: Bottom horizontal edge list: ----------------------- 1 ++ * 3. p_edge1: Bottom horizontal edge list: +-----------------------+ 1 ++ * ++ * pe_tail2 : end of list beginning at p_edge2 ++ * pe_temp : position inside list beginning at p_edge1 ++ * p_edges : head of the master edge list (part of our output) ++ * p_vrtx1 : start of lower row of input vertices ++ * p_vrtx2 : start of higher row of input vertices + * + * The routine generates two triangle Lower Upper 1 + * upper one and lower one: | \ ---- +@@ -633,14 +639,21 @@ + upper_tri = add_poly(edge0, edge1, edge2, p_polys, &pp_tail); + } + +- if ((*p_edges)) { /* Chain new edges to main list. */ +- pe_tail->next = p_edge2; +- pe_tail = pe_tail2; +- } else { +- (*p_edges) = p_edge2; +- pe_tail = pe_tail2; ++ if (p_edge2) { ++ /* HBB 19991130 bugfix: if p_edge2 list is empty, ++ * don't change p_edges list! Crashes by access ++ * to NULL pointer pe_tail, the second time through, ++ * otherwise */ ++ if ((*p_edges)) { /* Chain new edges to main list. */ ++ pe_tail->next = p_edge2; ++ pe_tail = pe_tail2; ++ } else { ++ (*p_edges) = p_edge2; ++ pe_tail = pe_tail2; ++ } + } + ++ /* this row finished, move list heads up one row: */ + p_edge1 = p_edge2; + p_vrtx1 = p_vrtx2; + } diff --git a/math/gnuplot+/files/patch-xf b/math/gnuplot+/files/patch-xf new file mode 100644 index 000000000000..23d6991e880d --- /dev/null +++ b/math/gnuplot+/files/patch-xf @@ -0,0 +1,15 @@ +# contour-clipping.991202 +--- contour.c.ORIG Thu Dec 2 15:15:03 1999 ++++ contour.c Thu Dec 2 15:13:53 1999 +@@ -727,7 +727,11 @@ + { + struct edge_struct *pe_temp = NULL; + ++#if 1 ++ if (point0->type == INRANGE && point1->type == INRANGE) { ++#else + if (point0->type != UNDEFINED && point1->type != UNDEFINED) { ++#endif + + pe_temp = (struct edge_struct *) + gp_alloc((unsigned long) sizeof(struct edge_struct), "contour edge"); diff --git a/math/gnuplot+/files/patch-xg b/math/gnuplot+/files/patch-xg new file mode 100644 index 000000000000..c1a0c959952d --- /dev/null +++ b/math/gnuplot+/files/patch-xg @@ -0,0 +1,236 @@ +# vector-clip +--- graphics.c.ORIG Wed Sep 15 16:30:29 1999 ++++ graphics.c Thu Dec 2 13:16:57 1999 +@@ -1369,7 +1369,6 @@ + + /* label first y axis tics */ + if (ytics) { +- int axis = map_x(ZERO); + /* set the globals ytick2d_callback() needs */ + + if (rotate_ytics && (*t->text_angle) (1)) { +@@ -1388,8 +1387,8 @@ + else + tic_mirror = -1; /* no thank you */ + +- if ((ytics & TICS_ON_AXIS) && !log_array[FIRST_X_AXIS] && inrange(axis, xleft, xright)) { +- tic_start = axis; ++ if ((ytics & TICS_ON_AXIS) && !log_array[FIRST_X_AXIS] && inrange(0.0, x_min, x_max)) { ++ tic_start = map_x(0.0); + tic_direction = -1; + if (ytics & TICS_MIRROR) + tic_mirror = tic_start; +@@ -1409,7 +1408,6 @@ + } + /* label first x axis tics */ + if (xtics) { +- int axis = map_y(ZERO); + /* set the globals xtick2d_callback() needs */ + + if (rotate_xtics && (*t->text_angle) (1)) { +@@ -1426,8 +1424,8 @@ + tic_mirror = ytop; + else + tic_mirror = -1; /* no thank you */ +- if ((xtics & TICS_ON_AXIS) && !log_array[FIRST_Y_AXIS] && inrange(axis, ybot, ytop)) { +- tic_start = axis; ++ if ((xtics & TICS_ON_AXIS) && !log_array[FIRST_Y_AXIS] && inrange(0.0, y_min, y_max)) { ++ tic_start = map_y(0.0); + tic_direction = -1; + if (xtics & TICS_MIRROR) + tic_mirror = tic_start; +@@ -1454,7 +1452,6 @@ + /* label second y axis tics */ + if (y2tics) { + /* set the globalss ytick2d_callback() needs */ +- int axis = map_x(ZERO); + + if (rotate_y2tics && (*t->text_angle) (1)) { + tic_hjust = CENTRE; +@@ -1470,8 +1467,8 @@ + tic_mirror = xleft; + else + tic_mirror = -1; /* no thank you */ +- if ((y2tics & TICS_ON_AXIS) && !log_array[FIRST_X_AXIS] && inrange(axis, xleft, xright)) { +- tic_start = axis; ++ if ((y2tics & TICS_ON_AXIS) && !log_array[FIRST_X_AXIS] && inrange(0.0, x_min, x_max)) { ++ tic_start = map_x(0.0); + tic_direction = 1; + if (y2tics & TICS_MIRROR) + tic_mirror = tic_start; +@@ -1490,7 +1487,6 @@ + } + /* label second x axis tics */ + if (x2tics) { +- int axis = map_y(ZERO); + /* set the globals xtick2d_callback() needs */ + + if (rotate_x2tics && (*t->text_angle) (1)) { +@@ -1507,8 +1503,8 @@ + tic_mirror = ybot; + else + tic_mirror = -1; /* no thank you */ +- if ((x2tics & TICS_ON_AXIS) && !log_array[SECOND_Y_AXIS] && inrange(axis, ybot, ytop)) { +- tic_start = axis; ++ if ((x2tics & TICS_ON_AXIS) && !log_array[SECOND_Y_AXIS] && inrange(0.0, y_min, y_max)) { ++ tic_start = map_y(0.0); + tic_direction = 1; + if (x2tics & TICS_MIRROR) + tic_mirror = tic_start; +@@ -1560,45 +1556,58 @@ + + x_axis = FIRST_X_AXIS; + y_axis = FIRST_Y_AXIS; /* chose scaling */ +- axis_zero[FIRST_Y_AXIS] = map_y(0.0); +- axis_zero[FIRST_X_AXIS] = map_x(0.0); + +- if (axis_zero[FIRST_Y_AXIS] < ybot || is_log_y) ++ if (y_min >= 0.0 && y_max >= 0.0 || is_log_y) + axis_zero[FIRST_Y_AXIS] = ybot; /* save for impulse plotting */ +- else if (axis_zero[FIRST_Y_AXIS] >= ytop) ++ else if (y_min <= 0.0 && y_max <= 0.0) + axis_zero[FIRST_Y_AXIS] = ytop; +- else if (xzeroaxis.l_type > -3) { +- term_apply_lp_properties(&xzeroaxis); +- (*t->move) (xleft, axis_zero[FIRST_Y_AXIS]); +- (*t->vector) (xright, axis_zero[FIRST_Y_AXIS]); +- } +- if ((yzeroaxis.l_type > -3) && !is_log_x +- && axis_zero[FIRST_X_AXIS] >= xleft +- && axis_zero[FIRST_X_AXIS] < xright) { +- term_apply_lp_properties(&yzeroaxis); +- (*t->move) (axis_zero[FIRST_X_AXIS], ybot); +- (*t->vector) (axis_zero[FIRST_X_AXIS], ytop); ++ else { ++ axis_zero[FIRST_X_AXIS] = map_y(0.0); ++ if (xzeroaxis.l_type > -3) { ++ term_apply_lp_properties(&xzeroaxis); ++ (*t->move) (xleft, axis_zero[FIRST_Y_AXIS]); ++ (*t->vector) (xright, axis_zero[FIRST_Y_AXIS]); ++ } ++ } ++ if (x_min >= 0.0 && x_max >= 0.0) ++ axis_zero[FIRST_Y_AXIS] = xleft; ++ else if (x_min <= 0.0 && x_max <= 0.0) ++ axis_zero[FIRST_Y_AXIS] = xright; ++ else { ++ axis_zero[FIRST_Y_AXIS] = map_x(0.0); ++ if ((yzeroaxis.l_type > -3) && !is_log_x) { ++ term_apply_lp_properties(&yzeroaxis); ++ (*t->move) (axis_zero[FIRST_X_AXIS], ybot); ++ (*t->vector) (axis_zero[FIRST_X_AXIS], ytop); ++ } + } ++ + x_axis = SECOND_X_AXIS; + y_axis = SECOND_Y_AXIS; /* chose scaling */ +- axis_zero[SECOND_Y_AXIS] = map_y(0.0); +- axis_zero[SECOND_X_AXIS] = map_x(0.0); + +- if (axis_zero[SECOND_Y_AXIS] < ybot || is_log_y2) ++ if (is_log_y2 || y_min >= 0.0 && y_max >= 0.0) + axis_zero[SECOND_Y_AXIS] = ybot; /* save for impulse plotting */ +- else if (axis_zero[SECOND_Y_AXIS] >= ytop) ++ else if (y_min <= 0.0 && y_max <= 0.0) + axis_zero[SECOND_Y_AXIS] = ytop; +- else if (x2zeroaxis.l_type > -3) { +- term_apply_lp_properties(&x2zeroaxis); +- (*t->move) (xleft, axis_zero[SECOND_Y_AXIS]); +- (*t->vector) (xright, axis_zero[SECOND_Y_AXIS]); +- } +- if ((y2zeroaxis.l_type > -3) && !is_log_x2 && +- axis_zero[SECOND_X_AXIS] >= xleft && +- axis_zero[SECOND_X_AXIS] < xright) { +- term_apply_lp_properties(&y2zeroaxis); +- (*t->move) (axis_zero[SECOND_X_AXIS], ybot); +- (*t->vector) (axis_zero[SECOND_X_AXIS], ytop); ++ else { ++ axis_zero[SECOND_X_AXIS] = map_y(0.0); ++ if (x2zeroaxis.l_type > -3) { ++ term_apply_lp_properties(&x2zeroaxis); ++ (*t->move) (xleft, axis_zero[SECOND_Y_AXIS]); ++ (*t->vector) (xright, axis_zero[SECOND_Y_AXIS]); ++ } ++ } ++ if (y_min >= 0.0 && y_max >= 0.0) ++ axis_zero[SECOND_Y_AXIS] = xleft; ++ else if (x_min <= 0.0 && x_max <= 0.0) ++ axis_zero[SECOND_Y_AXIS] = xright; ++ else { ++ axis_zero[SECOND_Y_AXIS] = map_x(0.0); ++ if ((y2zeroaxis.l_type > -3) && !is_log_x2) { ++ term_apply_lp_properties(&y2zeroaxis); ++ (*t->move) (axis_zero[SECOND_X_AXIS], ybot); ++ (*t->vector) (axis_zero[SECOND_X_AXIS], ytop); ++ } + } + /* DRAW PLOT BORDER */ + if (draw_border) { +@@ -2739,14 +2748,61 @@ + int i; + int x1, y1, x2, y2; + struct termentry *t = term; ++ TBOOLEAN head; ++ struct coordinate GPHUGE points[2]; ++ double ex, ey; ++ double lx[2], ly[2]; + + for (i = 0; i < plot->p_count; i++) { +- if (plot->points[i].type == INRANGE) { +- x1 = map_x(plot->points[i].xlow); +- y1 = map_y(plot->points[i].ylow); +- x2 = map_x(plot->points[i].xhigh); +- y2 = map_y(plot->points[i].yhigh); +- (*t->arrow) (x1, y1, x2, y2, TRUE); ++ points[0] = plot->points[i]; ++ points[1].x = plot->points[i].xhigh; ++ points[1].y = plot->points[i].yhigh; ++ if (inrange(points[1].x, x_min, x_max) && ++ inrange(points[1].y, y_min, y_max)) { ++ /* to inrange */ ++ points[1].type = INRANGE; ++ x2 = map_x(points[1].x); ++ y2 = map_y(points[1].y); ++ head = TRUE; ++ if (points[0].type == INRANGE) { ++ x1 = map_x(points[0].x); ++ y1 = map_y(points[0].y); ++ (*t->arrow) (x1, y1, x2, y2, head); ++ } else if (points[0].type == OUTRANGE) { ++ /* from outrange to inrange */ ++ if (clip_lines1) { ++ edge_intersect(points, 1, &ex, &ey); ++ x1 = map_x(ex); ++ y1 = map_y(ey); ++ (*t->arrow) (x1, y1, x2, y2, head); ++ } ++ } ++ } else { ++ /* to outrange */ ++ points[1].type = OUTRANGE; ++ head = FALSE; ++ if (points[0].type == INRANGE) { ++ /* from inrange to outrange */ ++ if (clip_lines1) { ++ x1 = map_x(points[0].x); ++ y1 = map_y(points[0].y); ++ edge_intersect(points, 1, &ex, &ey); ++ x2 = map_x(ex); ++ y2 = map_y(ey); ++ (*t->arrow) (x1, y1, x2, y2, head); ++ } ++ } else if (points[0].type == OUTRANGE) { ++ /* from outrange to outrange */ ++ if (clip_lines2) { ++ if (two_edge_intersect(points, 1, lx, ly)) { ++ x1 = map_x(lx[0]); ++ y1 = map_y(ly[0]); ++ x2 = map_x(lx[1]); ++ y2 = map_y(ly[1]); ++ (*t->arrow) (x1, y1, x2, y2, head); ++ } ++ } ++ } + } + } + } diff --git a/math/gnuplot+/files/patch-xh b/math/gnuplot+/files/patch-xh new file mode 100644 index 000000000000..19bc589f116d --- /dev/null +++ b/math/gnuplot+/files/patch-xh @@ -0,0 +1,460 @@ +# png-web216.4 +--- bitmap.c.ORIG Mon Oct 11 18:10:54 1999 ++++ bitmap.c Thu Dec 2 20:41:29 1999 +@@ -1,5 +1,5 @@ + #ifndef lint +-static char *RCSid = "$Id: bitmap.c,v 1.2.2.2 1999/10/11 17:10:54 lhecking Exp $"; ++static char *RCSid = "$Id: bitmap.c,v 1.2.2.3 1999/11/30 15:07:49 lhecking Exp $"; + #endif + + /* GNUPLOT - bitmap.c */ +@@ -846,8 +846,6 @@ + } + + +-/* Currently unused */ +-#if 1 /* HBB 991008: used by PNG, now */ + /* + * get pixel (x,y) value + */ +@@ -857,7 +855,7 @@ + { + register unsigned int row; + register unsigned char mask; +- register unsigned char value; ++ register unsigned char value = 0; + int i; + + if (b_rastermode) { +@@ -876,10 +874,10 @@ + row -= b_psize; + value <<= 1; + } +- return(value); +- } +- else +- { ++/* HBB 991123: the missing '>>1' was the 'every second color' problem ++ * with PNG in 3.8a...*/ ++ return(value>>1); ++ } else { + #ifdef BITMAPDEBUG + if (b_rastermode) + fprintf(stderr, "Warning: getpixel(%d,%d) out of bounds\n", +@@ -890,7 +888,6 @@ + return(0); + } + } +-#endif /* 0 */ + + + /* +--- bitmap.h.ORIG Wed Sep 29 14:48:16 1999 ++++ bitmap.h Thu Dec 2 20:41:29 1999 +@@ -1,4 +1,4 @@ +-/* $Id: bitmap.h,v 1.1.1.2.2.1 1999/09/29 13:48:16 lhecking Exp $ */ ++/* $Id: bitmap.h,v 1.1.1.2.2.2 1999/11/30 15:07:49 lhecking Exp $ */ + + /* GNUPLOT - bitmap.h */ + +@@ -101,7 +101,7 @@ + void b_makebitmap __PROTO((unsigned int x, unsigned int y, unsigned int planes)); + void b_freebitmap __PROTO((void)); + void b_setpixel __PROTO((unsigned int x, unsigned int y, unsigned int value)); +-/* unused unsigned int b_getpixel __PROTO((unsigned int x, unsigned int y)); */ ++unsigned int b_getpixel __PROTO((unsigned int x, unsigned int y)); + void b_line __PROTO((unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2)); + void b_setmaskpixel __PROTO((unsigned int x, unsigned int y, unsigned int value)); + /* void b_putc __PROTO((unsigned int x, unsigned int y, char c, unsigned int angle)); */ +--- term/png.trm.ORIG Tue Oct 19 14:31:28 1999 ++++ term/png.trm Thu Dec 2 20:42:20 1999 +@@ -1,5 +1,5 @@ + /* +- * $Id: png.trm,v 1.11.2.5 1999/10/19 13:31:28 lhecking Exp $ ++ * $Id: png.trm,v 1.11.2.8 1999/11/30 15:08:44 lhecking Exp $ + * + */ + +@@ -42,8 +42,11 @@ + * png + * + * AUTHORS +- * Alexander Lehmann original code, +- * derived from pbm.trm by Russell Lang. ++ * Alexander Lehmann ++ * derived from pbm.trm by Russell Lang ++ * ++ * Eric S. Raymond update for pnglib-1.0.3; transparency. ++ * H.-B. Broeker fixes to Eric's changes + * + * send your comments or suggestions to (info-gnuplot@dartmouth.edu). + * +@@ -100,56 +103,97 @@ + + static int png_font = 1; /* small font */ + static int png_mode = 0; /* 0:monochrome 1:gray 2:color */ ++static int png_transparent = 0; /* generate transparent first color */ + + /* 7=black, 0=white */ + static int png_gray[] = { 7, 1, 6, 5, 4, 3, 2, 1, 7 }; /* grays */ +-/* bit3=!intensify, bit2=!red, bit1=!green, bit0=!blue */ +-static int png_color_table[] ={ 15, 8, 3, 5, 6, 4, 2, 1, 11, 13, 14 }; /* colors */ +-static png_color png_palette[16]; ++static png_color png_palette[WEB_N_COLORS]; + + TERM_PUBLIC void + PNG_options() + { +- png_font = 1; /* small */ +- png_mode = 0; ++ unsigned short rgb_color[3]; ++ int n_colors = 0; ++ char *string; ++ int i; ++ ++ rgb_color[0] = 0; ++ rgb_color[1] = 0; ++ rgb_color[2] = 0; ++ ++ png_font = 1; /* small */ ++ png_mode = 2; /* color */ ++ png_transparent = 0; /* use opaque image background */ + + term_options[0] = NUL; + + while (!END_OF_COMMAND) { +- if (almost_equals(c_token, "s$mall")) +- png_font = 1; +- else if (almost_equals(c_token, "me$dium")) +- png_font = 2; +- else if (almost_equals(c_token, "l$arge")) +- png_font = 3; +- else if (almost_equals(c_token, "mo$nochrome")) +- png_mode = 0; +- else if (almost_equals(c_token, "g$ray")) +- png_mode = 1; +- else if (almost_equals(c_token, "c$olor") +- || almost_equals(c_token, "c$olour")) +- png_mode = 2; +- else { +- /* reset to default, since term is already set */ +- png_font = 1; +- png_mode = 0; +- int_error("expecting: {small, medium, large}, or {monochrome, gray, color}", c_token); +- } +- c_token++; ++ if (almost_equals(c_token, "s$mall")) ++ png_font = 1; ++ else if (almost_equals(c_token, "me$dium")) ++ png_font = 2; ++ else if (almost_equals(c_token, "l$arge")) ++ png_font = 3; ++ else if (almost_equals(c_token, "mo$nochrome")) ++ png_mode = 0; ++ else if (almost_equals(c_token, "g$ray")) ++ png_mode = 1; ++ else if (almost_equals(c_token, "c$olor") ++ || almost_equals(c_token, "c$olour")) ++ png_mode = 2; ++ else if (almost_equals(c_token, "t$ransparent")) ++ png_transparent = 1; ++ else if (almost_equals(c_token, "not$ransparent")) ++ png_transparent = 0; ++ else { ++ /* set color */ ++ string = input_line + token[c_token].start_index; ++ ++ if (string[0] == 'x') { ++ /* HBB 991123: read in as *shorts*, not ints! */ ++ if (sscanf(string, "x%2hx%2hx%2hx", &rgb_color[0], &rgb_color[1], &rgb_color[2] ) != 3) { ++ int_error("invalid color spec, must be xRRGGBB", c_token); ++ } ++ } else ++ int_error("expecting: {small, medium, large},[no]transparent, or {monochrome, gray, color, [xRRGGBB] }", c_token); ++ ++ if (n_colors >= WEB_N_COLORS) { ++ int_warn("too many colors, ingoring", c_token); ++ /* Magic number abuse guards against ++ * "> WEB_N_COLORS warning" scroll fests. */ ++ if (!END_OF_COMMAND) { ++ while (!END_OF_COMMAND) ++ ++c_token; --c_token; ++ } ++ } else { ++ web_color_rgbs[n_colors].r = rgb_color[0]; ++ web_color_rgbs[n_colors].g = rgb_color[1]; ++ web_color_rgbs[n_colors].b = rgb_color[2]; ++ n_colors++; ++ } ++ } ++ c_token++; + } + + /* setup options string */ + ++ /* HBB 991008: moved this block to here, so 'transparent' gets ++ * printed out first. Don't print 'notransparent', for now, to ++ * protect older gnuplots. Scripts with 'transparent' in them ++ * won't work as wanted, with older versions, so put it here. */ ++ if (png_transparent) ++ strcat(term_options, "transparent"); ++ + switch (png_font) { + case 3: +- strcat(term_options, "large"); ++ strcat(term_options, " large"); + break; + case 2: +- strcat(term_options, "medium"); ++ strcat(term_options, " medium"); + break; + case 1: + default: +- strcat(term_options, "small"); ++ strcat(term_options, " small"); + break; + } + +@@ -166,6 +210,13 @@ + break; + } + ++ for (i=0; i < n_colors ; i++ ) { ++ sprintf(term_options,"%s x%02x%02x%02x", ++ term_options, ++ web_color_rgbs[i].r, ++ web_color_rgbs[i].g, ++ web_color_rgbs[i].b); ++ } + } + + +@@ -222,7 +273,7 @@ + + switch (png_mode) { + case 2: +- numplanes = 4; ++ numplanes = 8; + break; + case 1: + numplanes = 3; +@@ -248,15 +299,15 @@ + TERM_PUBLIC void + PNG_text() + { +- register int x, j, row; + png_structp png_ptr; + png_infop info_ptr; +- register int i, value; + png_bytep prow; +- int mask, plane1, plane2, plane3, plane4; +- int red, green, blue; + png_text pngtext, *pngtext_copy; ++ png_byte pal_trans[1]; + char text[100]; ++ register int x, i, j; ++/* register int row, value; */ ++/* int mask, plane1, plane2, plane3, plane4; */ + + png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if (!png_ptr) { +@@ -275,6 +326,7 @@ + b_freebitmap(); + return; + } ++ memset(prow,0,sizeof(prow)); + if (setjmp(png_ptr->jmpbuf)) { + png_destroy_write_struct(&png_ptr, &info_ptr); + free(prow); +@@ -283,7 +335,7 @@ + } + + #ifdef __OLD_PNGLIB__ +- /* deprecated and no longer necessary */ ++ /* deprecated and no longer necessary */ + png_info_init(info_ptr); + png_write_init(png_ptr); */ + #endif /* __OLD_PNGLIB__ */ +@@ -293,43 +345,48 @@ + info_ptr->width = b_ysize; + info_ptr->height = b_xsize; + +- info_ptr->bit_depth = png_mode == 0 ? 1 : 4; ++ info_ptr->bit_depth = png_mode == 0 ? 1 : 8; + info_ptr->color_type = png_mode == 2 ? PNG_COLOR_TYPE_PALETTE : + PNG_COLOR_TYPE_GRAY; + if (png_mode == 2) { + info_ptr->valid |= PNG_INFO_PLTE; + info_ptr->palette = png_palette; +- info_ptr->num_palette = 16; ++ info_ptr->num_palette = sizeof(png_palette)/sizeof(png_palette[0]); + } + if (png_mode != 0) { + info_ptr->valid |= PNG_INFO_sBIT; + if (png_mode == 1) { + info_ptr->sig_bit.gray = 3; + png_set_shift(png_ptr, &(info_ptr->sig_bit)); +- } else { +- info_ptr->sig_bit.red = 2; +- info_ptr->sig_bit.green = 2; +- info_ptr->sig_bit.blue = 2; ++ } ++ else { ++ /* HBB 991123: we're now using the full 8 bits per color ++ * component... */ ++ info_ptr->sig_bit.red = 8; ++ info_ptr->sig_bit.green = 8; ++ info_ptr->sig_bit.blue = 8; + } + } ++ + info_ptr->interlace_type = 0; ++ + if (png_mode == 0) + png_set_invert_mono(png_ptr); + +- if (png_mode == 2) +- for (i = 0; i < 16; i++) { +- red = (i & 4) ? 1 : 3; +- green = (i & 2) ? 1 : 3; +- blue = (i & 1) ? 1 : 3; +- if (i & 8) { +- red--; +- green--; +- blue--; +- } +- png_palette[i].red = red * 85; +- png_palette[i].green = green * 85; +- png_palette[i].blue = blue * 85; ++ if (png_mode == 2) { ++ if (png_transparent) { ++ info_ptr->valid |= PNG_INFO_tRNS; ++ info_ptr->num_trans = 1; ++ pal_trans[0] = 0; ++ info_ptr->trans=pal_trans; + } ++ ++ for (i = 0; i < WEB_N_COLORS; i++) { ++ png_palette[i].red = web_color_rgbs[i].r; ++ png_palette[i].green = web_color_rgbs[i].g; ++ png_palette[i].blue = web_color_rgbs[i].b; ++ } ++ } + sprintf(text, "gnuplot %sversion %s patchlevel %s", + OS, version, patchlevel); + +@@ -339,6 +396,13 @@ + pngtext.text_length = strlen(text); + + pngtext_copy = malloc(sizeof(*pngtext_copy)); ++ if (!pngtext_copy) { ++ png_destroy_write_struct(&png_ptr, &info_ptr); ++ free(prow); ++ b_freebitmap(); ++ return; ++ } ++ memset(pngtext_copy,0,sizeof(pngtext_copy)); + *pngtext_copy = pngtext; + info_ptr->num_text = 1; + info_ptr->text = pngtext_copy; +@@ -353,6 +417,7 @@ + + /* dump bitmap in raster mode */ + for (x = b_xsize - 1; x >= 0; x--) { ++#if 0 + row = (b_ysize / 8) - 1; + for (j = row; j >= 0; j--) { + mask = 0x80; +@@ -382,10 +447,14 @@ + if (png_mode == 1) + value = 7 - value; + +- prow[(row - j) * 8 + i] = (png_byte) value; ++ prow[(row - j) * 8 + i] = (png_byte) (value & 0xFF) ; + mask >>= 1; + } + } ++#else ++ for (j=b_ysize - 1; j>= 0; j--) ++ prow[j] = (png_byte)b_getpixel(j, x); ++#endif + png_write_rows(png_ptr, &prow, 1); + } + +@@ -395,16 +464,42 @@ + b_freebitmap(); + } + +- ++/* _linetype(lt) Called to set the line type before text is displayed or ++ * line(s) plotted. This procedure should select a pen color or line ++ * style if the device has these capabilities. ++ * lt is an integer from -2 to 0 or greater. ++ * An lt of -2 is used for the border of the plot. ++ * An lt of -1 is used for the X and Y axes. ++ * lt 0 and upwards are used for plots 0 and upwards. ++ * If _linetype() is called with lt greater than the available line types, ++ * it should map it to one of the available line types. ++ * Most drivers provide 9 different linetypes (lt is 0 to 8). ++ */ + TERM_PUBLIC void + PNG_linetype(linetype) + int linetype; + { + switch (png_mode) { ++ /* HBB 991008: this once made the grid lines and axes (-1) look the ++ * same as the borders (-2). That's ugly, IMHO. GIF uses a ++ * dashed line, for this, but libpng doesn't seem able to do ++ * that. But a look into the palette turns up that color 2 ++ * is grey, and is currently unused... Let's see: */ + case 2: +- if (linetype >= 9) +- linetype %= 9; +- b_setvalue(png_color_table[linetype + 2]); ++ ++ if (linetype == -2) ++ linetype = 1; ++ else if (linetype == -1) ++ linetype = 2; ++ ++ else { ++ /* HBB 991008: moved the += 3 down, so colors 0, 1, 2 are ++ * _not_ used by the regular plots, as it should be */ ++ if (linetype >= (WEB_N_COLORS - 3)) ++ linetype %= (WEB_N_COLORS - 3); ++ linetype += 3; ++ } ++ b_setvalue(linetype); + break; + case 1: + if (linetype >= 7) +@@ -462,13 +557,26 @@ + "?png", + " The `png` terminal driver supports Portable Network Graphics. To compile it,", + " you will need the third-party libraries \"libpng\" and \"zlib\"; both are", +-" available at ftp://ftp.uu.net/graphics/png. `png` has two options.", ++" available at http://www.cdrom.com/pub/png/. `png` has four options.", ++"", ++" By default, the `png` terminal driver uses a shared Web-friendy palette.", + "", + " Syntax:", + " set terminal png {small | medium | large}", ++" {transparent | notransparent}", + " {monochrome | gray | color}", ++" {<color0> <color1> <color2> ...}", ++"", ++" `transparent` instructs the driver to generate transparent PNGs. The first", ++" color will be the transparent one.", ++"", ++" The defaults are small (fontsize) and color. Default size of the output", ++" is 640*480 pixel. ", + "", +-" The defaults are small (fontsize) and monochrome. Default size of the output", +-" is 640*480 pixel." ++" Each color must be of the form 'xrrggbb', where x is the literal character", ++" 'x' and 'rrggbb' are the red, green and blue components in hex. For example,", ++" 'x00ff00' is green. The background color is set first, then the border", ++" colors, then the X & Y axis colors, then the plotting colors. The maximum", ++" number of colors that can be set is currently 99." + END_HELP(png) + #endif /* TERM_HELP */ diff --git a/math/gnuplot+/files/patch-xi b/math/gnuplot+/files/patch-xi new file mode 100644 index 000000000000..d968ad7a165d --- /dev/null +++ b/math/gnuplot+/files/patch-xi @@ -0,0 +1,2118 @@ +# hpgl.diff +--- term/hpgl.trm.ORIG Mon Dec 14 18:39:49 1998 ++++ term/hpgl.trm Fri Dec 3 18:32:34 1999 +@@ -35,7 +35,7 @@ + ]*/ + + /* +- * This file is included by ../term.c. ++ * This file is included by ../term.h. + * + * This terminal driver supports: + * hpgl, hp7550, hp7580b, HP Laserjet III +@@ -57,6 +57,17 @@ + * Modified October 1995 Ian MacPhedran to simplify HPGL terminals + * Modified January 96 by David Denholm and Emmanuel Bigler for cp850 + * and iso international character sets ++ * Modified February 99 by Jeremy Brenes to give PCL5 terminal optional ++ * multi-pen support (6 pen default), a default 34" plotting width for ++ * use with large color plotters such as the HP Designjet 750C, ++ * various alternative plot sizes, and variable fontsizes; ++ * Also decreased the HPGL terminal's fixed fontsize to make it more ++ * reasonable when plots get scaled to 34" ++ * Modified July 99 by Jeremy Brenes to make extended plot area smaller; ++ * added solid/dashed lines option, additional font types, mixed fonts ++ * Modified November 99 by Jeremy Brenes to add a postscript pointtypes ++ * option, special purpose negative pointtypes, and a pointsize function ++ * + */ + #define HPGL + #define PCL +@@ -96,13 +107,19 @@ + /* TERM_PUBLIC void HPGL2_reset __PROTO((void)); */ + TERM_PUBLIC void PCL_reset __PROTO((void)); + TERM_PUBLIC int HPGL2_justify_text __PROTO((enum JUSTIFY just)); ++TERM_PUBLIC int HPGL2_set_font __PROTO((char *font)); ++TERM_PUBLIC void HPGL2_point __PROTO((unsigned int x, unsigned int y, int number)); ++TERM_PUBLIC void HPGL2_neg_point __PROTO((unsigned int x, unsigned int y, int number)); ++TERM_PUBLIC void HPGL2_pointsize __PROTO((double size)); + #define GOT_HPGL_PROTO + #endif /* TERM_PROTO */ + + #ifndef TERM_PROTO_ONLY + #ifdef TERM_BODY + /* +- * The maximum plot size, in plotter units: ++ * The maximum plot size, in plotter units. ++ * Note that the actual size of larger plots may be limited by ++ * available printer memory. + */ + + #define HPGL_PUPI 1016 /* Plotter units per inch */ +@@ -110,14 +127,20 @@ + #define HPGL_XMAX_A 10000 + #define HPGL_YMAX_A 7500 + +-#define HPGL_XMAX_B 15200 +-#define HPGL_YMAX_B 10000 ++#define HPGL_XMAX_B 13000 ++#define HPGL_YMAX_B 7500 ++ ++#define HPGL_XMAX_C 45333 ++#define HPGL_YMAX_C 34000 ++ ++#define HPGL_XMAX_D 52000 ++#define HPGL_YMAX_D 34000 + + #define HPGL_XMAX HPGL_XMAX_A + #define HPGL_YMAX HPGL_YMAX_A + +-#define PCL_XMAX HPGL_XMAX_A +-#define PCL_YMAX (HPGL_YMAX_A-60) ++#define PCL_XMAX HPGL_XMAX_C ++#define PCL_YMAX (HPGL_YMAX_C-60) + + /* + * Tic sizes +@@ -126,27 +149,40 @@ + #define HPGL_VTIC (HPGL_YMAX/70) + #define HPGL_HTIC (HPGL_YMAX/70) + +-#define PCL_VTIC (PCL_YMAX/70) +-#define PCL_HTIC (PCL_YMAX/70) ++#define PCL_VTIC ((HPGL_YMAX_C-60)/320) ++#define PCL_HTIC ((HPGL_YMAX_C-60)/320) + + /* + * Font size for HPGL + */ + +-#define HPGL_VCHAR (HPGL_YMAX/100*32/10) /* 3.2% */ +-#define HPGL_HCHAR (HPGL_XMAX/100*12/10) /* 1.2% */ ++#define HPGL_VCHAR (HPGL_YMAX/100*8/10) /* 0.8% */ ++#define HPGL_HCHAR (HPGL_XMAX/100*3/10) /* 0.3% */ + + /* + * Font size for HPGL/2 + */ + +-#define HPGL2_DEF_POINT 14 /* Height of font */ ++#define HPGL2_DEF_POINT 12 /* Height of font */ + + #define HPGL2_DEF_PITCH (3 * 72 / (HPGL2_DEF_POINT * 2)) + #define HPGL2_VCHAR ((int) HPGL_PUPI * HPGL2_DEF_POINT / 72) + #define HPGL2_HCHAR (HPGL2_VCHAR * 2 / 3) + + /* ++ * Point size for HPGL/2 ++ */ ++ ++static double HPGL2_psize = 1.0; /* Default point size */ ++ ++/* ++ * Number of available pointtypes for HPGL/2 ++ */ ++ ++#define HPGL2_NUM_NOPSPOINTS 6; /* for nopspoints option */ ++#define HPGL2_NUM_PSPOINTS 75; /* for pspoints option */ ++ ++/* + * Control constants + */ + +@@ -196,15 +232,27 @@ + + /* + * The default font goes first. Although it is the ugliest, the +- * stick font is probably supported by the most devices, so it +- * becomes the default. ++ * stick font is probably supported by the most devices. + */ + +-static struct HPGL2_font_str GPFAR HPGL2_font_table[] = +-{ ++static struct HPGL2_font_str GPFAR HPGL2_font_table[] = { + {"u$nivers", "univers", 277, 1, 0.0, HPGL2_DEF_POINT, 0, 0, 4148}, + {"s$tick", "stick", 277, 0, HPGL2_DEF_PITCH, 0.0, 0, 0, 48}, +- {"c$g_times", "cg_times", 277, 1, 0.0, HPGL2_DEF_POINT, 0, 0, 4101} ++ {"cg_t$imes", "cg_times", 277, 1, 0.0, HPGL2_DEF_POINT, 0, 0, 4101}, ++ {"z$apf_dingbats", "zapf_dingbats", 364, 1, 0.0, HPGL2_DEF_POINT, 0, 0, 4141}, ++ {"an$tique_olive", "antique_olive", 277, 1, 0.0, HPGL2_DEF_POINT, 0, 0, 4168}, ++ {"ar$ial", "arial", 277, 1, 0.0, HPGL2_DEF_POINT, 0, 0, 16602}, ++ {"cou$rier", "courier", 277, 1, 0.0, HPGL2_DEF_POINT, 0, 0, 4099}, ++ {"g$aramond_antigua", "garamond_antigua", 277, 1, 0.0, HPGL2_DEF_POINT, 0, 0, 4197}, ++ {"l$etter_gothic", "letter_gothic", 277, 1, 0.0, HPGL2_DEF_POINT, 0, 0, 4102}, ++ {"cg_o$mega", "cg_omega", 277, 1, 0.0, HPGL2_DEF_POINT, 0, 0, 4113}, ++ {"al$bertus", "albertus", 277, 1, 0.0, HPGL2_DEF_POINT, 0, 1, 4362}, ++ {"ti$mes_new_roman", "times_new_roman", 277, 1, 0.0, HPGL2_DEF_POINT, 0, 0, 16901}, ++ {"cl$arendon", "clarendon", 277, 1, 0.0, HPGL2_DEF_POINT, 4, 3, 4140}, ++ {"cor$onet", "coronet", 277, 1, 0.0, HPGL2_DEF_POINT, 1, 0, 4116}, ++ {"m$arigold", "marigold", 277, 1, 0.0, HPGL2_DEF_POINT, 0, 0, 4297}, ++ {"tr$uetype_symbols", "truetype_symbols", 621, 1, 0.0, HPGL2_DEF_POINT, 0, 0, 16686}, ++ {"w$ingdings", "wingdings", 18540, 1, 0.0, HPGL2_DEF_POINT, 1, 0, 31402} + }; + + #define HPGL2_FONTS (sizeof(HPGL2_font_table) / sizeof (struct HPGL2_font_str)) +@@ -215,8 +263,7 @@ + * most compatable with other HPGL devices. + */ + +-static struct PCL_mode_str GPFAR PCL_mode_table[] = +-{ ++static struct PCL_mode_str GPFAR PCL_mode_table[] = { + {"l$andscape", "landscape", "\033&l1O", PCL_XMAX, PCL_YMAX}, + {"p$ortrait", "portrait", "\033&l0O", PCL_YMAX, PCL_XMAX} + }; +@@ -225,19 +272,18 @@ + static struct PCL_mode_str *PCL_mode = &PCL_mode_table[0]; + + /* +- * Various line types and widths to distinguish data sets ++ * Various line types and widths to distinguish data sets in monochrome + */ + +-static char *HPGL2_lt[] = { "", "4,2", "5,2", "6,2", "7,2", "8,2" }, +- *HPGL2_pw[] = { ".15", ".12", ".08" }; ++static char *HPGL2_lt[] = { "", ",2", ",2", ",2", ",2", ",2", ",2", ",2" }, ++ *HPGL2_pw[] = { ".24", ".16", ".08"}; + + #define HPGL2_LINETYPES (sizeof(HPGL2_lt) / sizeof(char *)) + #define HPGL2_PENWIDTHS (sizeof(HPGL2_pw) / sizeof(char *)) + + /* encoding vector for cp850 , characters 128 (0200) -> 255 (0377) */ + +-static char hpgl_cp_850[128][4] = +-{ ++static char hpgl_cp_850[128][4] = { + + /* 0200 */ "\0164\017", + /* 0201 */ "\016O\017", +@@ -398,8 +444,7 @@ + + /* encoding vector for iso-8859-1 , characters 128 (0200) -> 255 (0377) */ + +-static char hpgl_iso_8859_1[128][4] = +-{ ++static char hpgl_iso_8859_1[128][4] = { + + /* 0200 */ "", + /* 0201 */ "", +@@ -551,8 +596,8 @@ + * Static variables to keep track of where we are, etc. + */ + +-static int HPGL_ang = 0, HPGL_x = UNKNOWN, HPGL_y = UNKNOWN, HPGL_penstate = UNKNOWN, HPGL_pentype +-= UNKNOWN, HPGL2_in_pe, HPGL2_lost; ++static int HPGL_ang = 0, HPGL_x = UNKNOWN, HPGL_y = UNKNOWN, HPGL_penstate = UNKNOWN, HPGL_pentype, HPGL2_pentype ++ = UNKNOWN, HPGL2_in_pe, HPGL2_lost; + + /* + * The subroutines, grouped by function for different versions. +@@ -560,7 +605,8 @@ + + static int HPGL_numpen, HPGL_eject; + +-TERM_PUBLIC void HPGL_options() ++TERM_PUBLIC void ++HPGL_options() + { + HPGL_numpen = 6; /* default to six pens */ + HPGL_eject = 0; /* default to no eject */ +@@ -581,67 +627,156 @@ + } + + +- sprintf(term_options, "%d pens %s", HPGL_numpen, +- HPGL_eject ? "eject" : "noeject"); ++ sprintf(term_options, "%d pens %s", ++ HPGL_numpen, HPGL_eject ? "eject" : "noeject"); + } + +-TERM_PUBLIC void HPGL2_options() ++static int HPGL2_color = 1, HPGL2_numpen = 6; /* default to 6 pen color */ ++int HPGL2_dashed = 0; /* current dashed linetype */ ++int HPGL2_solid = 1; /* default to solid lines */ ++int HPGL2_font_num = 0; /* font from options */ ++int HPGL2_font_num_current = 0; /* current font */ ++int pspointset = 0; /* default to standard point types */ ++double HPGL2_point_size = HPGL2_DEF_POINT; /* pointsize from options */ ++double HPGL2_point_size_current = 0; /* current pointsize */ ++ ++TERM_PUBLIC void ++HPGL2_options() + { + struct termentry *t = term; + int i; +- double point_size; +- char tmp_options[MAX_ID_LEN]; +- if (!END_OF_COMMAND) { +- for (i = 0; i < HPGL2_FONTS && +- !almost_equals(c_token, HPGL2_font_table[i].compare); i++); +- if (i < HPGL2_FONTS) { +- HPGL2_font = &HPGL2_font_table[i]; ++ char tmp_options[MAX_ID_LEN+1]; ++ ++ if (!END_OF_COMMAND && almost_equals(c_token, "mono$chrome")) { ++ HPGL2_color = 0; ++ c_token++; ++ } else if (!END_OF_COMMAND && almost_equals(c_token, "col$or")) { ++ HPGL2_color = 1; ++ c_token++; ++ if (!END_OF_COMMAND && isanumber(c_token)) { ++ HPGL2_numpen = (int) real(&token[c_token].l_val); ++ if (HPGL2_numpen <= 0) { ++ HPGL2_numpen = 6; ++ int_error("Number of pens must be a positive", c_token); ++ } ++ c_token++; ++ } ++ } ++ if (!END_OF_COMMAND && almost_equals(c_token, "sol$id")) { ++ HPGL2_solid = 1; ++ c_token++; ++ } else if (!END_OF_COMMAND && almost_equals(c_token, "das$hed")) { ++ HPGL2_solid = 0; ++ c_token++; ++ } ++ if (!END_OF_COMMAND && almost_equals(c_token, "f$ont")) { ++ c_token++; ++ if (!END_OF_COMMAND) { ++ for (i = 0; i < HPGL2_FONTS && !almost_equals(c_token, HPGL2_font_table[i].compare); i++); ++ if (i < HPGL2_FONTS) { ++ HPGL2_font = &HPGL2_font_table[i]; ++ HPGL2_font_num = i; ++ HPGL2_font_num_current = HPGL2_font_num; ++ } else ++ int_error ++ ("expecting font: stick, cg_times, univers, zapf_dingbats, antique_olive,\narial, courier, garamond_antigua, letter_gothic, cg_omega, albertus,\ntimes_new_roman, clarendon, coronet, marigold, truetype_symbols, or wingdings", ++ c_token); ++ c_token++; + } else +- int_error("expecting font: stick, cg_times, or univers", c_token); ++ int_error ++ ("expecting font: stick, cg_times, univers, zapf_dingbats, antique_olive,\narial, courier, garamond_antigua, letter_gothic, cg_omega, albertus,\ntimes_new_roman, clarendon, coronet, marigold, truetype_symbols, or wingdings", ++ c_token); ++ } ++ if (!END_OF_COMMAND && almost_equals(c_token, "s$ize")) { + c_token++; + if (!END_OF_COMMAND) { +- if ((point_size = real(&token[c_token].l_val)) > 0.0) { +- t->v_char = (int) HPGL_PUPI *point_size / 72; ++ if ((HPGL2_point_size = real(&token[c_token].l_val)) > 0.0) { ++ HPGL2_point_size_current = HPGL2_point_size; ++ t->v_char = (int) HPGL_PUPI *HPGL2_point_size / 72; + t->h_char = t->v_char * 2 / 3; + if (HPGL2_font->spacing) +- HPGL2_font->height = point_size; ++ HPGL2_font->height = HPGL2_point_size; + else +- HPGL2_font->pitch = 72 * 3 / (point_size * 2); ++ HPGL2_font->pitch = 72 * 3 / (HPGL2_point_size * 2); + } else +- int_error("expecting font point size: real number", c_token); ++ int_error("expecting point size: real number", c_token); + c_token++; +- } ++ } else ++ int_error("expecting point size: real number", c_token); + } +- sprintf(tmp_options, " %s", HPGL2_font->name); ++ if (!END_OF_COMMAND && almost_equals(c_token, "n$opspoints")) { ++ c_token++; ++ pspointset = 0; ++ } else if (!END_OF_COMMAND && almost_equals(c_token, "p$spoints")) { ++ c_token++; ++ pspointset = 1; ++ } ++ sprintf(tmp_options, "\ndisplay: %s", HPGL2_color ? "color" : "monochrome"); ++ strcat(term_options, tmp_options); ++ if (HPGL2_color == 1) { ++ sprintf(tmp_options, "\npens: %d", HPGL2_numpen); ++ strcat(term_options, tmp_options); ++ } ++ sprintf(tmp_options, "\nlines: %s", HPGL2_solid ? "solid" : "dashed"); ++ strcat(term_options, tmp_options); ++ sprintf(tmp_options, "\nfont: %s", HPGL2_font->name); + strcat(term_options, tmp_options); + if (HPGL2_font->spacing) { +- sprintf(tmp_options, " %f", +- HPGL2_font->height); ++ sprintf(tmp_options, "\nfont height: %f", HPGL2_font->height); + strcat(term_options, tmp_options); + } else { +- sprintf(tmp_options, " %f", +- HPGL2_font->pitch); ++ sprintf(tmp_options, "\nfont pitch: %f\n", HPGL2_font->pitch); + strcat(term_options, tmp_options); + } ++ sprintf(tmp_options, "\npoint types: %s", pspointset ? "pspoints" : "nopspoints"); ++ strcat(term_options, tmp_options); + } + +-TERM_PUBLIC void PCL_options() ++char *PCL_dim = "noextended"; /* default plotting dimensions */ ++ ++TERM_PUBLIC void ++PCL_options() + { + int i; +- if (!END_OF_COMMAND) { +- for (i = 0; i < PCL_MODES && +- !almost_equals(c_token, PCL_mode_table[i].compare); i++); +- if (i < PCL_MODES) +- PCL_mode = &PCL_mode_table[i]; +- else ++ if (!END_OF_COMMAND && almost_equals(c_token, "m$ode")) { ++ c_token++; ++ if (!END_OF_COMMAND) { ++ for (i = 0; i < PCL_MODES && !almost_equals(c_token, PCL_mode_table[i].compare); i++); ++ if (i < PCL_MODES) ++ PCL_mode = &PCL_mode_table[i]; ++ else ++ int_error("expecting mode: portrait or landscape", c_token); ++ c_token++; ++ } else + int_error("expecting mode: portrait or landscape", c_token); ++ } ++ if (!END_OF_COMMAND && almost_equals(c_token, "ext$ended")) { ++ PCL_mode->xmax = (HPGL_XMAX_D); ++ PCL_mode->ymax = (HPGL_YMAX_D - 60); ++ PCL_dim = "extended"; ++ c_token++; ++ } else if (!END_OF_COMMAND && almost_equals(c_token, "noext$ended")) { ++ PCL_mode->xmax = (HPGL_XMAX_C); ++ PCL_mode->ymax = (HPGL_YMAX_C - 60); ++ PCL_dim = "noextended"; ++ c_token++; ++ } else if (!END_OF_COMMAND && almost_equals(c_token, "leg$al")) { ++ PCL_mode->xmax = (HPGL_XMAX_B); ++ PCL_mode->ymax = (HPGL_YMAX_B - 60); ++ PCL_dim = "legal"; ++ c_token++; ++ } else if (!END_OF_COMMAND && almost_equals(c_token, "let$ter")) { ++ PCL_mode->xmax = (HPGL_XMAX_A); ++ PCL_mode->ymax = (HPGL_YMAX_A - 60); ++ PCL_dim = "letter"; + c_token++; + } +- sprintf(term_options, " %s", PCL_mode->name); ++ sprintf(term_options, "\nmode: %s\ndimensions: %s", PCL_mode->name, PCL_dim); + HPGL2_options(); + } + +-TERM_PUBLIC void HPGL_init() ++TERM_PUBLIC void ++HPGL_init() + { + } + +@@ -649,7 +784,8 @@ + { + } */ + +-TERM_PUBLIC void PCL_init() ++TERM_PUBLIC void ++PCL_init() + { + struct termentry *t = term; + /* +@@ -659,9 +795,17 @@ + fprintf(gpoutfile, "\033E\033&l1X%s\n", PCL_mode->command); + t->xmax = PCL_mode->xmax; + t->ymax = PCL_mode->ymax; ++/* ++ * Enter HPGL/2 graphics mode ++ * Necessary here to keep the first DI0,1DI1,0 orientation command from being ++ * printed as literal text on the page for some devices. Hopefully this ++ * workaround has no bad consequences elsewhere; omit this line if it does. ++ */ ++ fputs("\033%0B", gpoutfile); + } + +-TERM_PUBLIC void HPGL_graphics() ++TERM_PUBLIC void ++HPGL_graphics() + { + fputs("\033.Y\n\033.I81;;17:\033.N;19:\033.M500:\n", gpoutfile); + /* 1 +@@ -682,7 +826,8 @@ + HPGL_ang = 0; + } + +-TERM_PUBLIC void HPGL2_graphics() ++TERM_PUBLIC void ++HPGL2_graphics() + { + /* + * IN - Initialize +@@ -695,8 +840,22 @@ + fprintf(gpoutfile, "4,%f,", HPGL2_font->height); + else + fprintf(gpoutfile, "3,%f,", HPGL2_font->pitch); +- fprintf(gpoutfile, "5,%d,6,%d,7,%d\n", HPGL2_font->posture, +- HPGL2_font->stroke_weight, HPGL2_font->typeface); ++ fprintf(gpoutfile, "5,%d,6,%d,7,%d;SS;\n", ++ HPGL2_font->posture, HPGL2_font->stroke_weight, HPGL2_font->typeface); ++/* ++ * Add a set of user-defined dashed linetypes if the dashed option is ++ * selected. Of course, the UL's below can be edited to user preference. ++ */ ++ if (HPGL2_solid == 0) { ++ fprintf(gpoutfile, "UL1,100;\n"); ++ fprintf(gpoutfile, "UL2,8,8,9,8,8,9,8,8,9,8,8,9;\n"); ++ fprintf(gpoutfile, "UL3,6,6,6,7,6,6,6,7,6,6,6,7,6,6,6,7;\n"); ++ fprintf(gpoutfile, "UL4,5,5,5,10,5,5,5,10,5,5,5,10;\n"); ++ fprintf(gpoutfile, "UL5,5,5,5,5,5,8,5,5,5,5,5,8,5,5,5,5,5,9;\n"); ++ fprintf(gpoutfile, "UL6,8,8,0,9,8,8,0,9,8,8,0,9;\n"); ++ fprintf(gpoutfile, "UL7,4,4,4,4,0,4,4,4,4,4,0,4,4,4,4,4,0,4;\n"); ++ fprintf(gpoutfile, "UL8,6,6,6,6,6,6,0,6,6,6,6,6,6,6,0,6;\n"); ++ } + /* + * Control variables + */ +@@ -706,7 +865,8 @@ + HPGL_penstate = UP; /* Pen is up */ + } + +-TERM_PUBLIC void PCL_graphics() ++TERM_PUBLIC void ++PCL_graphics() + { + /* + * Enter HPGL/2 graphics mode +@@ -715,7 +875,8 @@ + HPGL2_graphics(); + } + +-TERM_PUBLIC void HPGL_text() ++TERM_PUBLIC void ++HPGL_text() + { + if (HPGL_eject == 0) { + fputs("PUSP0;\033.Z\n\0", gpoutfile); +@@ -737,7 +898,8 @@ + } + + #if 0 /* not used */ +-void HPGL2_text() ++void ++HPGL2_text() + { + /* + * If in Polyline Encoded command, leave Polyline Encoded command +@@ -750,10 +912,12 @@ + * Pen up, park pen + */ + fputs("PUSP0;", gpoutfile); ++ HPGL_penstate = UP; + } + #endif + +-TERM_PUBLIC void PCL_text() ++TERM_PUBLIC void ++PCL_text() + { + if (HPGL2_in_pe) { + fputs(";\n", gpoutfile); +@@ -765,7 +929,8 @@ + fputs("\033%1A\033&l0H\n\0", gpoutfile); + } + +-TERM_PUBLIC void HPGL_linetype(linetype) ++TERM_PUBLIC void ++HPGL_linetype(linetype) + int linetype; + { + /* allow for set number of pens */ +@@ -778,7 +943,8 @@ + } + } + +-TERM_PUBLIC void HPGL2_linetype(linetype) ++TERM_PUBLIC void ++HPGL2_linetype(linetype) + int linetype; + { + /* +@@ -788,31 +954,57 @@ + fputs(";\n", gpoutfile); + HPGL2_in_pe = 0; + } +-/* +- * Allow for lots of linetypes +- */ +- if (linetype >= 0) +- linetype = linetype % (HPGL2_LINETYPES * HPGL2_PENWIDTHS); +- if (linetype != HPGL_pentype) { ++/* allow for set number of pens for color displays */ ++ if (HPGL2_color == 1) { + if (linetype >= 0) { +- fprintf(gpoutfile, "PW%sLT%s", +- HPGL2_pw[linetype / HPGL2_LINETYPES], +- HPGL2_lt[linetype % HPGL2_LINETYPES]); +- } else if (linetype == -2) +-/* +- * Borders and tics +- */ +- fprintf(gpoutfile, "PW.2LT"); +- else if (linetype == -1) +-/* +- * Axes and grids +- */ +- fprintf(gpoutfile, "PW.1LT1,.25"); +- HPGL_pentype = linetype; ++ if (HPGL2_solid == 0) ++ HPGL2_dashed = linetype % HPGL2_LINETYPES + 1; ++ linetype = (linetype + 2) % HPGL2_numpen + 1; ++ } ++/* only select pen if necessary */ ++ if (linetype != HPGL2_pentype) { ++ if (linetype >= 0) { ++ if (HPGL2_solid == 0) { ++ fprintf(gpoutfile, "PU;\nSP%d;\nLT%d;", linetype, HPGL2_dashed); ++ } else ++ fprintf(gpoutfile, "PU;\nSP%d;\nLT;", linetype); ++/* Borders and Tics */ ++ } else if (linetype == -2) { ++ fprintf(gpoutfile, "PU;\nSP1;\nPW.2LT"); ++/* Axes and Grids */ ++ } else if (linetype == -1) ++ fprintf(gpoutfile, "PU;\nSP1;\nPW.2LT1,.25"); ++ HPGL_penstate = UP; ++ HPGL2_pentype = linetype; ++ } ++/* allow for lots of linetypes for monochrome displays */ ++ } else { ++ if (linetype >= 0) { ++ if (HPGL2_solid == 0) ++ HPGL2_dashed = linetype % HPGL2_LINETYPES + 1; ++ linetype = linetype % (HPGL2_LINETYPES * HPGL2_PENWIDTHS); ++ } ++/* only select pen if necessary */ ++ if (linetype != HPGL2_pentype) { ++ if (linetype >= 0) { ++ if (HPGL2_solid == 0) { ++ fprintf(gpoutfile, "PW%sLT%d%s", HPGL2_pw[linetype / HPGL2_LINETYPES], HPGL2_dashed, ++ HPGL2_lt[linetype % HPGL2_LINETYPES]); ++ } else ++ fprintf(gpoutfile, "PW%sLT", HPGL2_pw[linetype / HPGL2_LINETYPES]); ++/* Borders and Tics */ ++ } else if (linetype == -2) { ++ fprintf(gpoutfile, "PW.2LT"); ++/* Axes and Grids */ ++ } else if (linetype == -1) ++ fprintf(gpoutfile, "PW.1LT1,.25"); ++ HPGL2_pentype = linetype; ++ } + } + } + +-TERM_PUBLIC void HPGL_put_text(x, y, str) ++TERM_PUBLIC void ++HPGL_put_text(x, y, str) + unsigned int x, y; + char *str; + { +@@ -842,7 +1034,8 @@ + fprintf(gpoutfile, "LB%s\003\n", str); + } + +-TERM_PUBLIC void HPGL2_put_text(x, y, str) ++TERM_PUBLIC void ++HPGL2_put_text(x, y, str) + unsigned int x, y; + char *str; + { +@@ -867,12 +1060,14 @@ + fprintf(gpoutfile, "LB%s\003\n", str); + HPGL2_lost = 1; + } ++ + /* + * Some early HPGL plotters (e.g. HP7220C) require the + * Pen Up/Down and Pen (move) Absolute commands to be separate. + */ + +-TERM_PUBLIC void HPGL_move(x, y) ++TERM_PUBLIC void ++HPGL_move(x, y) + unsigned int x, y; + { + if (HPGL_x != x || HPGL_y != y) { /* only move if necessary */ +@@ -883,7 +1078,8 @@ + } + } + +-TERM_PUBLIC void HPGL_vector(x, y) ++TERM_PUBLIC void ++HPGL_vector(x, y) + unsigned int x, y; + { + if (HPGL_penstate != DOWN) { +@@ -895,7 +1091,8 @@ + HPGL_y = y; + } + +-TERM_PUBLIC void HPGL2_move(x, y) ++TERM_PUBLIC void ++HPGL2_move(x, y) + unsigned int x, y; + { + register int dx, dy; +@@ -931,7 +1128,8 @@ + HPGL_y = y; + } + +-TERM_PUBLIC void HPGL2_vector(x, y) ++TERM_PUBLIC void ++HPGL2_vector(x, y) + unsigned int x, y; + { + register int dx, dy; +@@ -977,7 +1175,8 @@ + * Routine to encode position in base 32 or base 64 characters + */ + +-TERM_PUBLIC void HPGL2_encode(d) ++TERM_PUBLIC void ++HPGL2_encode(d) + register int d; + { + register int c; +@@ -993,7 +1192,8 @@ + } while (d > 0); + } + +-TERM_PUBLIC int HPGL_text_angle(ang) ++TERM_PUBLIC int ++HPGL_text_angle(ang) + int ang; + { + HPGL_ang = ang; +@@ -1010,7 +1210,8 @@ + return TRUE; + } + +-TERM_PUBLIC int HPGL2_text_angle(ang) ++TERM_PUBLIC int ++HPGL2_text_angle(ang) + int ang; + { + /* +@@ -1034,7 +1235,8 @@ + return TRUE; + } + +-TERM_PUBLIC void HPGL_reset() ++TERM_PUBLIC void ++HPGL_reset() + { + /* + * do nothing +@@ -1042,7 +1244,8 @@ + } + + #if 0 +-void HPGL2_reset() ++void ++HPGL2_reset() + { + /* + * Park the pen +@@ -1054,7 +1257,8 @@ + + #endif + +-TERM_PUBLIC void PCL_reset() ++TERM_PUBLIC void ++PCL_reset() + { + /* + * Return to PCL mode +@@ -1063,7 +1267,8 @@ + fputs("\033%0A\033E\n", gpoutfile); + } + +-TERM_PUBLIC int HPGL2_justify_text(just) ++TERM_PUBLIC int ++HPGL2_justify_text(just) + enum JUSTIFY just; + { + /* +@@ -1089,6 +1294,1285 @@ + return 1; + } + ++TERM_PUBLIC int ++HPGL2_set_font(font) ++char *font; ++{ ++ struct termentry *t = term; ++ char name[MAX_ID_LEN+1]; ++ int i, sep, int_size, sep2; ++ double size; ++/* ++ * If in Polyline Encoded command, leave Polyline Encoded command ++ */ ++ if (HPGL2_in_pe) { ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ } ++/* determine font, use default from options if invalid */ ++ sep = strcspn(font, ","); ++ strncpy(name, font, sep); ++ name[sep] = NUL; ++ for (i = 0; i < HPGL2_FONTS; i++) { ++ sep2 = strcspn(HPGL2_font_table[i].compare, "$"); ++ if (strncmp(name, HPGL2_font_table[i].compare, sep2) == 0) ++ break; ++ } ++ if (i >= HPGL2_FONTS) ++ i = HPGL2_font_num; ++/* determine font size, use default from options if invalid */ ++ sscanf(&(font[sep + 1]), "%d", &int_size); ++ if (int_size > 0) { ++ size = int_size; ++ } else ++ size = HPGL2_point_size; ++/* apply font changes only if necessary */ ++ if (size == HPGL2_point_size_current && i == HPGL2_font_num_current) ++ return FALSE; ++ HPGL2_font = &HPGL2_font_table[i]; ++ HPGL2_font_num_current = i; ++ HPGL2_point_size_current = size; ++ t->v_char = (int) HPGL_PUPI *HPGL2_point_size_current / 72; ++ t->h_char = t->v_char * 2 / 3; ++ fprintf(gpoutfile, "SD1,%d,2,%d,", ++ HPGL2_font->symbol_set, HPGL2_font->spacing); ++ if (HPGL2_font->spacing) { ++ HPGL2_font->height = HPGL2_point_size_current; ++ fprintf(gpoutfile, "4,%f,", HPGL2_font->height); ++ } else { ++ HPGL2_font->pitch = 72 * 3 / (HPGL2_point_size_current * 2); ++ fprintf(gpoutfile, "3,%f,", HPGL2_font->pitch); ++ } ++ fprintf(gpoutfile, "5,%d,6,%d,7,%d;SS;\n", ++ HPGL2_font->posture, ++ HPGL2_font->stroke_weight, HPGL2_font->typeface); ++ return TRUE; ++} ++ ++TERM_PUBLIC void ++HPGL2_point(x, y, number) ++unsigned int x, y; ++int number; ++{ ++ int htic, vtic; ++ if (pspointset) { /* postscript style points */ ++ if (number < 0) { ++ HPGL2_neg_point(x, y, number); ++ } else { ++ htic = (int) (HPGL2_psize * PCL_HTIC / 2); ++ vtic = (int) (HPGL2_psize * PCL_VTIC / 2); ++ number %= HPGL2_NUM_PSPOINTS; ++ switch (number) { ++ case 0: /* plus */ ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x - htic, y); ++ HPGL2_vector(x + htic, y); ++ HPGL2_move(x, y - vtic); ++ HPGL2_vector(x, y - vtic); ++ HPGL2_vector(x, y + vtic); ++ break; ++ case 1: /* X */ ++ HPGL2_move(x - htic, y - vtic); ++ HPGL2_vector(x - htic, y - vtic); ++ HPGL2_vector(x + htic, y + vtic); ++ HPGL2_move(x - htic, y + vtic); ++ HPGL2_vector(x - htic, y + vtic); ++ HPGL2_vector(x + htic, y - vtic); ++ break; ++ case 2: /* star */ ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x - htic, y); ++ HPGL2_vector(x + htic, y); ++ HPGL2_move(x, y - vtic); ++ HPGL2_vector(x, y - vtic); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_move(x - htic, y - vtic); ++ HPGL2_vector(x - htic, y - vtic); ++ HPGL2_vector(x + htic, y + vtic); ++ HPGL2_move(x - htic, y + vtic); ++ HPGL2_vector(x - htic, y + vtic); ++ HPGL2_vector(x + htic, y - vtic); ++ break; ++ case 3: /* hollow square 1 */ ++ HPGL2_move(x - (3 * htic / 4), y - (3 * vtic / 4)); ++ HPGL2_vector(x + (3 * htic / 4), y - (3 * vtic / 4)); ++ HPGL2_vector(x + (3 * htic / 4), y + (3 * vtic / 4)); ++ HPGL2_vector(x - (3 * htic / 4), y + (3 * vtic / 4)); ++ HPGL2_vector(x - (3 * htic / 4), y - (3 * vtic / 4)); ++ HPGL2_move(x, y); ++ HPGL2_vector(x, y); ++ break; ++ case 4: /* solid square 1 */ ++ HPGL2_move(x - (3 * htic / 4), y - (3 * vtic / 4)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "RA%.2f,%.2f;EP;\n", ((double) x + (3 * htic / 4)), ((double) y + (3 * vtic / 4))); ++ break; ++ case 5: /* hollow circle 1 */ ++ HPGL2_move(x, y); ++ HPGL2_vector(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "CI%.2f;\n", ((double) 3 * (htic) / 4)); ++ break; ++ case 6: /* solid circle 1 */ ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "WG%.2f,0,360;EP;\n", ((double) 3 * (htic) / 4)); ++ break; ++ case 7: /* hollow triangle 1 */ ++ HPGL2_move(x, y + (3 * vtic / 4)); ++ HPGL2_vector(x - (3 * sqrt(3) * htic / 8), y - (3 * vtic / 8)); ++ HPGL2_vector(x + (3 * sqrt(3) * htic / 8), y - (3 * vtic / 8)); ++ HPGL2_vector(x, y + (3 * vtic / 4)); ++ HPGL2_move(x, y); ++ HPGL2_vector(x, y); ++ break; ++ case 8: /* solid triangle 1 */ ++ HPGL2_move(x, y + (3 * vtic / 4)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x - (3 * sqrt(3) * htic / 8), y - (3 * vtic / 8)); ++ HPGL2_vector(x + (3 * sqrt(3) * htic / 8), y - (3 * vtic / 8)); ++ HPGL2_vector(x, y + (3 * vtic / 4)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FP;EP;\n"); ++ break; ++ case 9: /* hollow triangle 2 */ ++ HPGL2_move(x, y - (3 * vtic / 4)); ++ HPGL2_vector(x - (3 * sqrt(3) * htic / 8), y + (3 * vtic / 8)); ++ HPGL2_vector(x + (3 * sqrt(3) * htic / 8), y + (3 * vtic / 8)); ++ HPGL2_vector(x, y - (3 * vtic / 4)); ++ HPGL2_move(x, y); ++ HPGL2_vector(x, y); ++ break; ++ case 10: /* solid triangle 2 */ ++ HPGL2_move(x, y - (3 * vtic / 4)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x - (3 * sqrt(3) * htic / 8), y + (3 * vtic / 8)); ++ HPGL2_vector(x + (3 * sqrt(3) * htic / 8), y + (3 * vtic / 8)); ++ HPGL2_vector(x, y - (3 * vtic / 4)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FP;EP;\n"); ++ break; ++ case 11: /* hollow diamond 1 */ ++ HPGL2_move(x - (3 * htic / 4), y); ++ HPGL2_vector(x, y - (3 * vtic / 4)); ++ HPGL2_vector(x + (3 * htic / 4), y); ++ HPGL2_vector(x, y + (3 * vtic / 4)); ++ HPGL2_vector(x - (3 * htic / 4), y); ++ HPGL2_move(x, y); ++ HPGL2_vector(x, y); ++ break; ++ case 12: /* solid diamond 1 */ ++ HPGL2_move(x - (3 * htic / 4), y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x, y - (3 * vtic / 4)); ++ HPGL2_vector(x + (3 * htic / 4), y); ++ HPGL2_vector(x, y + (3 * vtic / 4)); ++ HPGL2_vector(x - (3 * htic / 4), y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FP;EP;\n"); ++ break; ++ case 13: /* hollow pentagon 1 */ ++ HPGL2_move(x, y + (3 * vtic / 4)); ++ HPGL2_vector(x - (cos(.1 * acos(-1)) * 3 * htic / 4), y + (sin(.1 * acos(-1)) * 3 * vtic / 4)); ++ HPGL2_vector(x - (sin(.2 * acos(-1)) * 3 * htic / 4), y - (cos(.2 * acos(-1)) * 3 * vtic / 4)); ++ HPGL2_vector(x + (sin(.2 * acos(-1)) * 3 * htic / 4), y - (cos(.2 * acos(-1)) * 3 * vtic / 4)); ++ HPGL2_vector(x + (cos(.1 * acos(-1)) * 3 * htic / 4), y + (sin(.1 * acos(-1)) * 3 * vtic / 4)); ++ HPGL2_vector(x, y + (3 * vtic / 4)); ++ HPGL2_move(x, y); ++ HPGL2_vector(x, y); ++ break; ++ case 14: /* solid pentagon */ ++ HPGL2_move(x, y + (3 * vtic / 4)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x - (cos(.1 * acos(-1)) * 3 * htic / 4), y + (sin(.1 * acos(-1)) * 3 * vtic / 4)); ++ HPGL2_vector(x - (sin(.2 * acos(-1)) * 3 * htic / 4), y - (cos(.2 * acos(-1)) * 3 * vtic / 4)); ++ HPGL2_vector(x + (sin(.2 * acos(-1)) * 3 * htic / 4), y - (cos(.2 * acos(-1)) * 3 * vtic / 4)); ++ HPGL2_vector(x + (cos(.1 * acos(-1)) * 3 * htic / 4), y + (sin(.1 * acos(-1)) * 3 * vtic / 4)); ++ HPGL2_vector(x, y + (3 * vtic / 4)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FP;EP;\n"); ++ break; ++ case 15: /* hollow circle 2 */ ++ HPGL2_move(x, y + vtic); ++ HPGL2_vector(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "CI%d;\n", htic); ++ break; ++ case 16: /* semisolid circle 1 */ ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "WG%d,0,90;EP;EW%d,90,270;\n", htic, htic); ++ break; ++ case 17: /* semisolid circle 2 */ ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "WG%d,90,90;EP;EW%d,180,270;\n", htic, htic); ++ break; ++ case 18: /* semisolid circle 3 */ ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "WG%d,0,180;EP;EW%d,180,180;\n", htic, htic); ++ break; ++ case 19: /* semisolid circle 4 */ ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "WG%d,180,90;EP;EW%d,270,270;\n", htic, htic); ++ break; ++ case 20: /* semisolid circle 5 */ ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "WG%d,0,90;EP;EW%d,90,90;WG%d,180,90;EP;EW%d,270,90;\n", htic, htic, htic, htic); ++ break; ++ case 21: /* semisolid circle 6 */ ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "WG%d,90,180;EP;EW%d,270,180;\n", htic, htic); ++ break; ++ case 22: /* semisolid circle 7 */ ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "WG%d,0,270;EP;EW%d,270,90;\n", htic, htic); ++ break; ++ case 23: /* semisolid circle 8 */ ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "WG%d,270,90;EP;EW%d,0,270;\n", htic, htic); ++ break; ++ case 24: /* semisolid circle 9 */ ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "WG%d,270,180;EP;EW%d,90,180;\n", htic, htic); ++ break; ++ case 25: /* semisolid circle 10 */ ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "WG%d,90,90;EP;EW%d,180,90;WG%d,270,90;EP;EW%d,0,90;\n", htic, htic, htic, htic); ++ break; ++ case 26: /* semisolid circle 11 */ ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "WG%d,270,270;EP;EW%d,180,90;\n", htic, htic); ++ break; ++ case 27: /* semisolid circle 12 */ ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "WG%d,180,180;EP;EW%d,0,180;\n", htic, htic); ++ break; ++ case 28: /* semisolid circle 13 */ ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "WG%d,180,270;EP;EW%d,90,90;\n", htic, htic); ++ break; ++ case 29: /* semisolid circle 14 */ ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "WG%d,90,270;EP;EW%d,0,90;\n", htic, htic); ++ break; ++ case 30: /* solid circle 2 */ ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "WG%d,0,360;EP;\n", htic); ++ break; ++ case 31: /* hollow square 2 */ ++ HPGL2_move(x - htic, y - vtic); ++ HPGL2_vector(x + htic, y - vtic); ++ HPGL2_vector(x + htic, y + vtic); ++ HPGL2_vector(x - htic, y + vtic); ++ HPGL2_vector(x - htic, y - vtic); ++ HPGL2_move(x, y + vtic); ++ HPGL2_vector(x, y); ++ break; ++ case 32: /* semisolid square 1 */ ++ HPGL2_move(x, y + vtic); ++ HPGL2_vector(x - htic, y + vtic); ++ HPGL2_vector(x - htic, y - vtic); ++ HPGL2_vector(x + htic, y - vtic); ++ HPGL2_vector(x + htic, y); ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "RA%d,%d;EP;\n", x + htic, y + vtic); ++ break; ++ case 33: /* semisolid square 2 */ ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x - htic, y - vtic); ++ HPGL2_vector(x + htic, y - vtic); ++ HPGL2_vector(x + htic, y + vtic); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_move(x - htic, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "RA%d,%d;EP;\n", x, y + vtic); ++ break; ++ case 34: /* semisolid square 3 */ ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x - htic, y - vtic); ++ HPGL2_vector(x + htic, y - vtic); ++ HPGL2_vector(x + htic, y); ++ HPGL2_move(x - htic, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "RA%d,%d;EP;\n", x + htic, y + vtic); ++ break; ++ case 35: /* semisolid square 4 */ ++ HPGL2_move(x, y - vtic); ++ HPGL2_vector(x + htic, y - vtic); ++ HPGL2_vector(x + htic, y + vtic); ++ HPGL2_vector(x - htic, y + vtic); ++ HPGL2_vector(x - htic, y); ++ HPGL2_move(x - htic, y - vtic); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "RA%d,%d;EP;\n", x, y); ++ break; ++ case 36: /* semisolid square 5 */ ++ HPGL2_move(x, y - vtic); ++ HPGL2_vector(x + htic, y - vtic); ++ HPGL2_vector(x + htic, y); ++ HPGL2_move(x, y + vtic); ++ HPGL2_vector(x - htic, y + vtic); ++ HPGL2_vector(x - htic, y); ++ HPGL2_move(x - htic, y - vtic); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "RA%d,%d;EP;\n", x, y); ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "RA%d,%d;EP;\n", x + htic, y + vtic); ++ break; ++ case 37: /* semisolid square 6 */ ++ HPGL2_move(x, y - vtic); ++ HPGL2_vector(x + htic, y - vtic); ++ HPGL2_vector(x + htic, y + vtic); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_move(x - htic, y - vtic); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "RA%d,%d;EP;\n", x, y + vtic); ++ break; ++ case 38: /* semisolid square 7 */ ++ HPGL2_move(x, y - vtic); ++ HPGL2_vector(x + htic, y - vtic); ++ HPGL2_vector(x + htic, y); ++ HPGL2_move(x - htic, y - vtic); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "RA%d,%d;EP;\n", x, y + vtic); ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "RA%d,%d;EP;\n", x + htic, y + vtic); ++ break; ++ case 39: /* semisolid square 8 */ ++ HPGL2_move(x + htic, y); ++ HPGL2_vector(x + htic, y + vtic); ++ HPGL2_vector(x - htic, y + vtic); ++ HPGL2_vector(x - htic, y - vtic); ++ HPGL2_vector(x, y - vtic); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "RA%d,%d;EP;\n", x + htic, y); ++ break; ++ case 40: /* semisolid square 9 */ ++ HPGL2_move(x, y + vtic); ++ HPGL2_vector(x - htic, y + vtic); ++ HPGL2_vector(x - htic, y - vtic); ++ HPGL2_vector(x, y - vtic); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "RA%d,%d;EP;\n", x + htic, y + vtic); ++ break; ++ case 41: /* semisolid square 10 */ ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x - htic, y - vtic); ++ HPGL2_vector(x, y - vtic); ++ HPGL2_move(x + htic, y); ++ HPGL2_vector(x + htic, y + vtic); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_move(x - htic, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "RA%d,%d;EP;\n", x, y + vtic); ++ HPGL2_move(x, y - vtic); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "RA%d,%d;EP;\n", x + htic, y); ++ break; ++ case 42: /* semisolid square 11 */ ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x - htic, y - vtic); ++ HPGL2_vector(x, y - vtic); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "RA%d,%d;EP;\n", x + htic, y + vtic); ++ HPGL2_move(x - htic, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "RA%d,%d;EP;\n", x, y + vtic); ++ break; ++ case 43: /* semisolid square 12 */ ++ HPGL2_move(x + htic, y); ++ HPGL2_vector(x + htic, y + vtic); ++ HPGL2_vector(x - htic, y + vtic); ++ HPGL2_vector(x - htic, y); ++ HPGL2_move(x - htic, y - vtic); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "RA%d,%d;EP;\n", x + htic, y); ++ break; ++ case 44: /* semisolid square 13 */ ++ HPGL2_move(x, y + vtic); ++ HPGL2_vector(x - htic, y + vtic); ++ HPGL2_vector(x - htic, y); ++ HPGL2_move(x - htic, y - vtic); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "RA%d,%d;EP;\n", x + htic, y); ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "RA%d,%d;EP;\n", x + htic, y + vtic); ++ break; ++ case 45: /* semisolid square 14 */ ++ HPGL2_move(x + htic, y); ++ HPGL2_vector(x + htic, y + vtic); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_move(x - htic, y - vtic); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "RA%d,%d;EP;\n", x + htic, y); ++ HPGL2_move(x - htic, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "RA%d,%d;EP;\n", x, y + vtic); ++ break; ++ case 46: /* solid square 2 */ ++ HPGL2_move(x - htic, y - vtic); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "RA%d,%d;EP;\n", x + htic, y + vtic); ++ break; ++ case 47: /* hollow diamond 2 */ ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x, y - vtic); ++ HPGL2_vector(x + htic, y); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_vector(x - htic, y); ++ HPGL2_move(x - (htic / 2), y + (vtic / 2)); ++ HPGL2_vector(x, y); ++ break; ++ case 48: /* semisolid diamond 1 */ ++ HPGL2_move(x - (htic / 2), y + (vtic / 2)); ++ HPGL2_vector(x - htic, y); ++ HPGL2_vector(x, y - vtic); ++ HPGL2_vector(x + htic, y); ++ HPGL2_vector(x + (htic / 2), y + (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_vector(x - (htic / 2), y + (vtic / 2)); ++ HPGL2_vector(x, y); ++ HPGL2_vector(x + (htic / 2), y + (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FP;EP;\n"); ++ break; ++ case 49: /* semisolid diamond 2 */ ++ HPGL2_move(x - (htic / 2), y - (vtic / 2)); ++ HPGL2_vector(x, y - vtic); ++ HPGL2_vector(x + htic, y); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_vector(x - (htic / 2), y + (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x - htic, y); ++ HPGL2_vector(x - (htic / 2), y - (vtic / 2)); ++ HPGL2_vector(x, y); ++ HPGL2_vector(x - (htic / 2), y + (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FP;EP;\n"); ++ break; ++ case 50: /* semisolid diamond 3 */ ++ HPGL2_move(x - (htic / 2), y - (vtic / 2)); ++ HPGL2_vector(x, y - vtic); ++ HPGL2_vector(x + htic, y); ++ HPGL2_vector(x + (htic / 2), y + (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x - (htic / 2), y - (vtic / 2)); ++ HPGL2_vector(x - htic, y); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_vector(x + (htic / 2), y + (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FP;EP;\n"); ++ break; ++ case 51: /* semisolid diamond 4 */ ++ HPGL2_move(x + (htic / 2), y - (vtic / 2)); ++ HPGL2_vector(x + htic, y); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_vector(x - htic, y); ++ HPGL2_vector(x - (htic / 2), y - (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x, y); ++ HPGL2_vector(x + (htic / 2), y - (vtic / 2)); ++ HPGL2_vector(x, y - vtic); ++ HPGL2_vector(x - (htic / 2), y - (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FP;EP;\n"); ++ break; ++ case 52: /* semisolid diamond 5 */ ++ HPGL2_move(x - (htic / 2), y + (vtic / 2)); ++ HPGL2_vector(x - htic, y); ++ HPGL2_vector(x - (htic / 2), y - (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x, y); ++ HPGL2_vector(x + (htic / 2), y - (vtic / 2)); ++ HPGL2_vector(x, y - vtic); ++ HPGL2_vector(x - (htic / 2), y - (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FP;EP;\n"); ++ HPGL2_move(x + (htic / 2), y - (vtic / 2)); ++ HPGL2_vector(x + htic, y); ++ HPGL2_vector(x + (htic / 2), y + (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_vector(x - (htic / 2), y + (vtic / 2)); ++ HPGL2_vector(x, y); ++ HPGL2_vector(x + (htic / 2), y + (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FP;EP;\n"); ++ break; ++ case 53: /* semisolid diamond 6 */ ++ HPGL2_move(x + (htic / 2), y - (vtic / 2)); ++ HPGL2_vector(x + htic, y); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_vector(x - (htic / 2), y + (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x - htic, y); ++ HPGL2_vector(x, y - vtic); ++ HPGL2_vector(x + (htic / 2), y - (vtic / 2)); ++ HPGL2_vector(x - (htic / 2), y + (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FP;EP;\n"); ++ break; ++ case 54: /* semisolid diamond 7 */ ++ HPGL2_move(x + (htic / 2), y - (vtic / 2)); ++ HPGL2_vector(x + htic, y); ++ HPGL2_vector(x + (htic / 2), y + (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_vector(x - htic, y); ++ HPGL2_vector(x, y - vtic); ++ HPGL2_vector(x + (htic / 2), y - (vtic / 2)); ++ HPGL2_vector(x, y); ++ HPGL2_vector(x + (htic / 2), y + (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FP;EP;\n"); ++ break; ++ case 55: /* semisolid diamond 8 */ ++ HPGL2_move(x + (htic / 2), y + (vtic / 2)); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_vector(x - htic, y); ++ HPGL2_vector(x, y - vtic); ++ HPGL2_vector(x + (htic / 2), y - (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x, y); ++ HPGL2_vector(x + (htic / 2), y + (vtic / 2)); ++ HPGL2_vector(x + htic, y); ++ HPGL2_vector(x + (htic / 2), y - (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FP;EP;\n"); ++ break; ++ case 56: /* semisolid diamond 9 */ ++ HPGL2_move(x - (htic / 2), y + (vtic / 2)); ++ HPGL2_vector(x - htic, y); ++ HPGL2_vector(x, y - vtic); ++ HPGL2_vector(x + (htic / 2), y - (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x - (htic / 2), y + (vtic / 2)); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_vector(x + htic, y); ++ HPGL2_vector(x + (htic / 2), y - (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FP;EP;\n"); ++ break; ++ case 57: /* semisolid diamond 10 */ ++ HPGL2_move(x + (htic / 2), y + (vtic / 2)); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_vector(x - (htic / 2), y + (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x, y); ++ HPGL2_vector(x - (htic / 2), y - (vtic / 2)); ++ HPGL2_vector(x - htic, y); ++ HPGL2_vector(x - (htic / 2), y + (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FP;EP;\n"); ++ HPGL2_move(x - (htic / 2), y - (vtic / 2)); ++ HPGL2_vector(x, y - vtic); ++ HPGL2_vector(x + (htic / 2), y - (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x, y); ++ HPGL2_vector(x + (htic / 2), y + (vtic / 2)); ++ HPGL2_vector(x + htic, y); ++ HPGL2_vector(x + (htic / 2), y - (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FP;EP;\n"); ++ break; ++ case 58: /* semisolid diamond 11 */ ++ HPGL2_move(x - (htic / 2), y - (vtic / 2)); ++ HPGL2_vector(x, y - vtic); ++ HPGL2_vector(x + (htic / 2), y - (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x, y); ++ HPGL2_vector(x - (htic / 2), y - (vtic / 2)); ++ HPGL2_vector(x - htic, y); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_vector(x + htic, y); ++ HPGL2_vector(x + (htic / 2), y - (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FP;EP;\n"); ++ break; ++ case 59: /* semisolid diamond 12 */ ++ HPGL2_move(x + (htic / 2), y + (vtic / 2)); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_vector(x - htic, y); ++ HPGL2_vector(x - (htic / 2), y - (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x + (htic / 2), y + (vtic / 2)); ++ HPGL2_vector(x + htic, y); ++ HPGL2_vector(x, y - vtic); ++ HPGL2_vector(x - (htic / 2), y - (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FP;EP;\n"); ++ break; ++ case 60: /* semisolid diamond 13 */ ++ HPGL2_move(x - (htic / 2), y + (vtic / 2)); ++ HPGL2_vector(x - htic, y); ++ HPGL2_vector(x - (htic / 2), y - (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x, y - vtic); ++ HPGL2_vector(x + htic, y); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_vector(x - (htic / 2), y + (vtic / 2)); ++ HPGL2_vector(x, y); ++ HPGL2_vector(x - (htic / 2), y - (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FP;EP;\n"); ++ break; ++ case 61: /* semisolid diamond 14 */ ++ HPGL2_move(x + (htic / 2), y + (vtic / 2)); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_vector(x - (htic / 2), y + (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x - htic, y); ++ HPGL2_vector(x, y - vtic); ++ HPGL2_vector(x + htic, y); ++ HPGL2_vector(x + (htic / 2), y + (vtic / 2)); ++ HPGL2_vector(x, y); ++ HPGL2_vector(x - (htic / 2), y + (vtic / 2)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FP;EP;\n"); ++ break; ++ case 62: /* solid diamond 2 */ ++ HPGL2_move(x - htic, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x, y - vtic); ++ HPGL2_vector(x + htic, y); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_vector(x - htic, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FP;EP;\n"); ++ break; ++ case 63: /* hollow square 3 */ ++ HPGL2_move(x - (3 * htic / 4), y - (3 * vtic / 4)); ++ HPGL2_vector(x + (3 * htic / 4), y - (3 * vtic / 4)); ++ HPGL2_vector(x + (3 * htic / 4), y + (3 * vtic / 4)); ++ HPGL2_vector(x - (3 * htic / 4), y + (3 * vtic / 4)); ++ HPGL2_vector(x - (3 * htic / 4), y - (3 * vtic / 4)); ++ break; ++ case 64: /* hollow circle 3 */ ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "CI%.2f;\n", ((double) 3 * (htic) / 4)); ++ break; ++ case 65: /* hollow triangle 3 */ ++ HPGL2_move(x, y + (3 * vtic / 4)); ++ HPGL2_vector(x - (3 * sqrt(3) * htic / 8), y - (3 * vtic / 8)); ++ HPGL2_vector(x + (3 * sqrt(3) * htic / 8), y - (3 * vtic / 8)); ++ HPGL2_vector(x, y + (3 * vtic / 4)); ++ break; ++ case 66: /* hollow triangle 4 */ ++ HPGL2_move(x, y - (3 * vtic / 4)); ++ HPGL2_vector(x - (3 * sqrt(3) * htic / 8), y + (3 * vtic / 8)); ++ HPGL2_vector(x + (3 * sqrt(3) * htic / 8), y + (3 * vtic / 8)); ++ HPGL2_vector(x, y - (3 * vtic / 4)); ++ break; ++ case 67: /* hollow diamond 3 */ ++ HPGL2_move(x - (3 * htic / 4), y); ++ HPGL2_vector(x, y - (3 * vtic / 4)); ++ HPGL2_vector(x + (3 * htic / 4), y); ++ HPGL2_vector(x, y + (3 * vtic / 4)); ++ HPGL2_vector(x - (3 * htic / 4), y); ++ break; ++ case 68: /* hollow pentagon 2 */ ++ HPGL2_move(x, y + (3 * vtic / 4)); ++ HPGL2_vector(x - (cos(.1 * acos(-1)) * 3 * htic / 4), y + (sin(.1 * acos(-1)) * 3 * vtic / 4)); ++ HPGL2_vector(x - (sin(.2 * acos(-1)) * 3 * htic / 4), y - (cos(.2 * acos(-1)) * 3 * vtic / 4)); ++ HPGL2_vector(x + (sin(.2 * acos(-1)) * 3 * htic / 4), y - (cos(.2 * acos(-1)) * 3 * vtic / 4)); ++ HPGL2_vector(x + (cos(.1 * acos(-1)) * 3 * htic / 4), y + (sin(.1 * acos(-1)) * 3 * vtic / 4)); ++ HPGL2_vector(x, y + (3 * vtic / 4)); ++ break; ++ case 69: /* opaque square */ ++ HPGL2_move(x - htic, y - vtic); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "FT10,30;RA%d,%d;EP;FT;\n", x + (3 * htic / 4), y + (3 * vtic / 4)); ++ break; ++ case 70: /* opaque circle */ ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "FT10,30;WG%.2f,0,360;EP;FT;\n", ((double) 3 * (htic) / 4)); ++ break; ++ case 71: /* opaque triangle 1 */ ++ HPGL2_move(x, y + (3 * vtic / 4)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x - (3 * sqrt(3) * htic / 8), y - (3 * vtic / 8)); ++ HPGL2_vector(x + (3 * sqrt(3) * htic / 8), y - (3 * vtic / 8)); ++ HPGL2_vector(x, y + (3 * vtic / 4)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FT10,30;FP;EP;FT;\n"); ++ break; ++ case 72: /* opaque triangle 2 */ ++ HPGL2_move(x, y - (3 * vtic / 4)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x - (3 * sqrt(3) * htic / 8), y + (3 * vtic / 8)); ++ HPGL2_vector(x + (3 * sqrt(3) * htic / 8), y + (3 * vtic / 8)); ++ HPGL2_vector(x, y - (3 * vtic / 4)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FT10,30;FP;EP;FT;\n"); ++ break; ++ case 73: /* opaque diamond */ ++ HPGL2_move(x - (3 * htic / 4), y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x, y - (3 * vtic / 4)); ++ HPGL2_vector(x + (3 * htic / 4), y); ++ HPGL2_vector(x, y + (3 * vtic / 4)); ++ HPGL2_vector(x - (3 * htic / 4), y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FT10,30;FP;EP;FT;\n"); ++ break; ++ case 74: /* opaque pentagon */ ++ HPGL2_move(x, y + (3 * vtic / 4)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM0;\n"); ++ HPGL2_vector(x - (cos(.1 * acos(-1)) * 3 * htic / 4), y + (sin(.1 * acos(-1)) * 3 * vtic / 4)); ++ HPGL2_vector(x - (sin(.2 * acos(-1)) * 3 * htic / 4), y - (cos(.2 * acos(-1)) * 3 * vtic / 4)); ++ HPGL2_vector(x + (sin(.2 * acos(-1)) * 3 * htic / 4), y - (cos(.2 * acos(-1)) * 3 * vtic / 4)); ++ HPGL2_vector(x + (cos(.1 * acos(-1)) * 3 * htic / 4), y + (sin(.1 * acos(-1)) * 3 * vtic / 4)); ++ HPGL2_vector(x, y + (3 * vtic / 4)); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "PM2;FT10,30;FP;EP;FT;\n"); ++ break; ++ } ++ } ++ } else { /* default style points */ ++ if (number < 0) { ++ HPGL2_neg_point(x, y, number); ++ } else { ++ htic = (int) (HPGL2_psize * PCL_HTIC / 2); ++ vtic = (int) (HPGL2_psize * PCL_VTIC / 2); ++ number %= HPGL2_NUM_NOPSPOINTS; ++ switch (number) { ++ case 0: /* diamond */ ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x, y - vtic); ++ HPGL2_vector(x + htic, y); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_vector(x - htic, y); ++ HPGL2_move(x, y); ++ HPGL2_vector(x, y); ++ break; ++ case 1: /* plus */ ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x - htic, y); ++ HPGL2_vector(x + htic, y); ++ HPGL2_move(x, y - vtic); ++ HPGL2_vector(x, y - vtic); ++ HPGL2_vector(x, y + vtic); ++ break; ++ case 2: /* box */ ++ HPGL2_move(x - htic, y - vtic); ++ HPGL2_vector(x - htic, y - vtic); ++ HPGL2_vector(x + htic, y - vtic); ++ HPGL2_vector(x + htic, y + vtic); ++ HPGL2_vector(x - htic, y + vtic); ++ HPGL2_vector(x - htic, y - vtic); ++ HPGL2_move(x, y); ++ HPGL2_vector(x, y); ++ break; ++ case 3: /* X */ ++ HPGL2_move(x - htic, y - vtic); ++ HPGL2_vector(x - htic, y - vtic); ++ HPGL2_vector(x + htic, y + vtic); ++ HPGL2_move(x - htic, y + vtic); ++ HPGL2_vector(x - htic, y + vtic); ++ HPGL2_vector(x + htic, y - vtic); ++ break; ++ case 4: /* triangle */ ++ HPGL2_move(x, y + (4 * vtic / 3)); ++ HPGL2_vector(x - (4 * htic / 3), y - (2 * vtic / 3)); ++ HPGL2_vector(x + (4 * htic / 3), y - (2 * vtic / 3)); ++ HPGL2_vector(x, y + (4 * vtic / 3)); ++ HPGL2_move(x, y); ++ HPGL2_vector(x, y); ++ break; ++ case 5: /* star */ ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x - htic, y); ++ HPGL2_vector(x + htic, y); ++ HPGL2_move(x, y - vtic); ++ HPGL2_vector(x, y - vtic); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_move(x - htic, y - vtic); ++ HPGL2_vector(x - htic, y - vtic); ++ HPGL2_vector(x + htic, y + vtic); ++ HPGL2_move(x - htic, y + vtic); ++ HPGL2_vector(x - htic, y + vtic); ++ HPGL2_vector(x + htic, y - vtic); ++ break; ++ } ++ } ++ } ++} ++ ++/* ++ * This is for special purpose negative point types. If they are not needed, ++ * they should be safely ignorable, but the special pointypes can be omitted ++ * if necessary, leaving only the dot (which is -1). ++ */ ++ ++TERM_PUBLIC void ++HPGL2_neg_point(x, y, number) ++unsigned int x, y; ++int number; ++{ ++ int htic, vtic; ++ htic = (int) (HPGL2_psize * PCL_HTIC / 2); ++ vtic = (int) (HPGL2_psize * PCL_VTIC / 2); ++ switch (number) { ++ case -20: /* well 18 */ ++ HPGL2_move(x - htic, y - vtic); ++ HPGL2_vector(x + htic, y + vtic); ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "CI%.2f;\n", ((double) 3 * (htic) / 4)); ++ break; ++ case -19: /* well 17 */ ++ HPGL2_move(x, y - vtic); ++ HPGL2_vector(x, y - (vtic / 2)); ++ HPGL2_move(x, y + (vtic / 2)); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_move(x, y - vtic); ++ HPGL2_vector(x - (htic / 4), y - (3 * vtic / 4)); ++ HPGL2_move(x, y - vtic); ++ HPGL2_vector(x + (htic / 4), y - (3 * vtic / 4)); ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "CI%.2f;\n", ((double) (htic) / 2)); ++ break; ++ case -18: /* well 16 */ ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x + htic, y); ++ HPGL2_move(x, y - vtic); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "CI%.2f;\n", ((double) 3 * (htic) / 4)); ++ break; ++ case -17: /* well 15 */ ++ HPGL2_move(x - htic, y - vtic); ++ HPGL2_vector(x - (3 * sqrt(2) * htic / 8), y - (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x + (sqrt(2) * htic / 2), y - (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x + (3 * sqrt(2) * htic / 8), y - (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x + htic, y + vtic); ++ HPGL2_vector(x + (3 * sqrt(2) * htic / 8), y + (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x - (sqrt(2) * htic / 2), y + (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x - (3 * sqrt(2) * htic / 8), y + (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x - (3 * htic / 4), y); ++ HPGL2_move(x + (3 * htic / 4), y); ++ HPGL2_vector(x + htic, y); ++ HPGL2_move(x, y - vtic); ++ HPGL2_vector(x, y - (3 * vtic / 4)); ++ HPGL2_move(x, y + (3 * vtic / 4)); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "EW%.2f,0,180;\n", ((double) 3 * (htic) / 4)); ++ fprintf(gpoutfile, "WG%.2f,180,180;EP;\n", ((double) 3 * (htic) / 4)); ++ break; ++ case -16: /* well 14 */ ++ HPGL2_move(x - htic, y - vtic); ++ HPGL2_vector(x - (3 * sqrt(2) * htic / 8), y - (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x + htic, y + vtic); ++ HPGL2_vector(x + (3 * sqrt(2) * htic / 8), y + (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x - (sqrt(2) * htic / 2), y + (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x - (3 * sqrt(2) * htic / 8), y + (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x - (3 * htic / 4), y); ++ HPGL2_move(x + (3 * htic / 4), y); ++ HPGL2_vector(x + htic, y); ++ HPGL2_move(x, y + (3 * vtic / 4)); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "WG%.2f,0,360;EP;\n", ((double) 3 * (htic) / 4)); ++ break; ++ case -15: /* well 13 */ ++ HPGL2_move(x - htic, y - vtic); ++ HPGL2_vector(x - (3 * sqrt(2) * htic / 8), y - (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x + (sqrt(2) * htic / 2), y - (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x + (3 * sqrt(2) * htic / 8), y - (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x + htic, y + vtic); ++ HPGL2_vector(x + (3 * sqrt(2) * htic / 8), y + (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x - (sqrt(2) * htic / 2), y + (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x - (3 * sqrt(2) * htic / 8), y + (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x - (3 * htic / 4), y); ++ HPGL2_move(x + (3 * htic / 4), y); ++ HPGL2_vector(x + htic, y); ++ HPGL2_move(x, y - vtic); ++ HPGL2_vector(x, y - (3 * vtic / 4)); ++ HPGL2_move(x, y + (3 * vtic / 4)); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "WG%.2f,0,360;EP;\n", ((double) 3 * (htic) / 4)); ++ break; ++ case -14: /* well 12 */ ++ HPGL2_move(x - htic, y - vtic); ++ HPGL2_vector(x - (3 * sqrt(2) * htic / 8), y - (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x + (sqrt(2) * htic / 2), y - (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x + (3 * sqrt(2) * htic / 8), y - (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x + htic, y + vtic); ++ HPGL2_vector(x + (3 * sqrt(2) * htic / 8), y + (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x - (sqrt(2) * htic / 2), y + (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x - (3 * sqrt(2) * htic / 8), y + (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x - (3 * htic / 4), y); ++ HPGL2_move(x + (3 * htic / 4), y); ++ HPGL2_vector(x + htic, y); ++ HPGL2_move(x, y - vtic); ++ HPGL2_vector(x, y - (3 * vtic / 4)); ++ HPGL2_move(x, y + (3 * vtic / 4)); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "CI%.2f;\n", ((double) 3 * (htic) / 4)); ++ break; ++ case -13: /* well 11 */ ++ HPGL2_move(x - htic, y - vtic); ++ HPGL2_vector(x - (3 * sqrt(2) * htic / 8), y - (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x + htic, y + vtic); ++ HPGL2_vector(x + (3 * sqrt(2) * htic / 8), y + (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "WG%.2f,0,360;EP;\n", ((double) 3 * (htic) / 4)); ++ break; ++ case -12: /* well 10 */ ++ HPGL2_move(x + (sqrt(2) * htic / 2), y + (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x + (3 * sqrt(2) * htic / 8), y + (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x - (sqrt(2) * htic / 2), y + (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x - (3 * sqrt(2) * htic / 8), y + (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x - (3 * htic / 4), y); ++ HPGL2_move(x + (3 * htic / 4), y); ++ HPGL2_vector(x + htic, y); ++ HPGL2_move(x, y - vtic); ++ HPGL2_vector(x, y - (3 * vtic / 4)); ++ HPGL2_move(x, y + (3 * vtic / 4)); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "EW%.2f,0,180;\n", ((double) 3 * (htic) / 4)); ++ fprintf(gpoutfile, "WG%.2f,180,180;EP;\n", ((double) 3 * (htic) / 4)); ++ break; ++ case -11: /* well 9 */ ++ HPGL2_move(x + (sqrt(2) * htic / 2), y + (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x + (3 * sqrt(2) * htic / 8), y + (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x - (sqrt(2) * htic / 2), y + (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x - (3 * sqrt(2) * htic / 8), y + (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x - (3 * htic / 4), y); ++ HPGL2_move(x + (3 * htic / 4), y); ++ HPGL2_vector(x + htic, y); ++ HPGL2_move(x, y - vtic); ++ HPGL2_vector(x, y - (3 * vtic / 4)); ++ HPGL2_move(x, y + (3 * vtic / 4)); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "CI%.2f;\n", ((double) 3 * (htic) / 4)); ++ break; ++ case -10: /* well 8 */ ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x - (3 * htic / 4), y); ++ HPGL2_move(x + (3 * htic / 4), y); ++ HPGL2_vector(x + htic, y); ++ HPGL2_move(x, y - vtic); ++ HPGL2_vector(x, y - (3 * vtic / 4)); ++ HPGL2_move(x, y + (3 * vtic / 4)); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "EW%.2f,0,180;\n", ((double) 3 * (htic) / 4)); ++ fprintf(gpoutfile, "WG%.2f,180,180;EP;\n", ((double) 3 * (htic) / 4)); ++ break; ++ case -9: /* well 7 */ ++ HPGL2_move(x - (sqrt(2) * htic / 2), y - (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x - (3 * sqrt(2) * htic / 8), y - (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x + (sqrt(2) * htic / 2), y - (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x + (3 * sqrt(2) * htic / 8), y - (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x + (sqrt(2) * htic / 2), y + (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x + (3 * sqrt(2) * htic / 8), y + (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x - (sqrt(2) * htic / 2), y + (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x - (3 * sqrt(2) * htic / 8), y + (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x - (3 * htic / 4), y); ++ HPGL2_move(x + (3 * htic / 4), y); ++ HPGL2_vector(x + htic, y); ++ HPGL2_move(x, y - vtic); ++ HPGL2_vector(x, y - (3 * vtic / 4)); ++ HPGL2_move(x, y + (3 * vtic / 4)); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "EW%.2f,0,180;\n", ((double) 3 * (htic) / 4)); ++ fprintf(gpoutfile, "WG%.2f,180,180;EP;\n", ((double) 3 * (htic) / 4)); ++ break; ++ case -8: /* well 6 */ ++ HPGL2_move(x + (sqrt(2) * htic / 2), y + (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x + (3 * sqrt(2) * htic / 8), y + (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x - (sqrt(2) * htic / 2), y + (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x - (3 * sqrt(2) * htic / 8), y + (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x - (3 * htic / 4), y); ++ HPGL2_move(x + (3 * htic / 4), y); ++ HPGL2_vector(x + htic, y); ++ HPGL2_move(x, y + (3 * vtic / 4)); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "WG%.2f,0,360;EP;\n", ((double) 3 * (htic) / 4)); ++ break; ++ case -7: /* well 5 */ ++ HPGL2_move(x - (sqrt(2) * htic / 2), y - (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x - (3 * sqrt(2) * htic / 8), y - (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x + (sqrt(2) * htic / 2), y - (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x + (3 * sqrt(2) * htic / 8), y - (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x + (sqrt(2) * htic / 2), y + (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x + (3 * sqrt(2) * htic / 8), y + (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x - (sqrt(2) * htic / 2), y + (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x - (3 * sqrt(2) * htic / 8), y + (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x - (3 * htic / 4), y); ++ HPGL2_move(x + (3 * htic / 4), y); ++ HPGL2_vector(x + htic, y); ++ HPGL2_move(x, y - vtic); ++ HPGL2_vector(x, y - (3 * vtic / 4)); ++ HPGL2_move(x, y + (3 * vtic / 4)); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "WG%.2f,0,360;EP;\n", ((double) 3 * (htic) / 4)); ++ break; ++ case -6: /* well 4 */ ++ HPGL2_move(x - (sqrt(2) * htic / 2), y - (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x - (3 * sqrt(2) * htic / 8), y - (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x + (sqrt(2) * htic / 2), y - (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x + (3 * sqrt(2) * htic / 8), y - (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x + (sqrt(2) * htic / 2), y + (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x + (3 * sqrt(2) * htic / 8), y + (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x - (sqrt(2) * htic / 2), y + (sqrt(2) * vtic / 2)); ++ HPGL2_vector(x - (3 * sqrt(2) * htic / 8), y + (3 * sqrt(2) * vtic / 8)); ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x - (3 * htic / 4), y); ++ HPGL2_move(x + (3 * htic / 4), y); ++ HPGL2_vector(x + htic, y); ++ HPGL2_move(x, y - vtic); ++ HPGL2_vector(x, y - (3 * vtic / 4)); ++ HPGL2_move(x, y + (3 * vtic / 4)); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "CI%.2f;\n", ((double) 3 * (htic) / 4)); ++ break; ++ case -5: /* well 3 */ ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "WG%.2f,0,360;EP;\n", ((double) 3 * (htic) / 4)); ++ break; ++ case -4: /* well 2 */ ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x - (3 * htic / 4), y); ++ HPGL2_move(x + (3 * htic / 4), y); ++ HPGL2_vector(x + htic, y); ++ HPGL2_move(x, y - vtic); ++ HPGL2_vector(x, y - (3 * vtic / 4)); ++ HPGL2_move(x, y + (3 * vtic / 4)); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "CI%.2f;\n", ((double) 3 * (htic) / 4)); ++ break; ++ case -3: /* well 1 */ ++ HPGL2_move(x, y); ++ fputs(";\n", gpoutfile); ++ HPGL2_in_pe = 0; ++ fprintf(gpoutfile, "CI%.2f;\n", ((double) 3 * (htic) / 4)); ++ break; ++ case -2: /* v box */ ++ HPGL2_move(x - htic, y); ++ HPGL2_vector(x - (3 * htic / 4), y); ++ HPGL2_move(x + (3 * htic / 4), y); ++ HPGL2_vector(x + htic, y); ++ HPGL2_move(x, y - vtic); ++ HPGL2_vector(x, y - (3 * vtic / 4)); ++ HPGL2_move(x, y + (3 * vtic / 4)); ++ HPGL2_vector(x, y + vtic); ++ HPGL2_move(x - (3 * htic / 4), y - (3 * vtic / 4)); ++ HPGL2_vector(x + (3 * htic / 4), y - (3 * vtic / 4)); ++ HPGL2_vector(x + (3 * htic / 4), y + (3 * vtic / 4)); ++ HPGL2_vector(x - (3 * htic / 4), y + (3 * vtic / 4)); ++ HPGL2_vector(x - (3 * htic / 4), y - (3 * vtic / 4)); ++ HPGL2_move(x - (htic / 2), y + (vtic / 2)); ++ HPGL2_vector(x, y - (vtic / 2)); ++ HPGL2_vector(x + (htic / 2), y + (vtic / 2)); ++ break; ++ default: /* dot */ ++ HPGL2_move(x, y); ++ HPGL2_vector(x, y); ++ break; ++ return; ++ } ++} ++ ++TERM_PUBLIC void ++HPGL2_pointsize(size) ++double size; ++{ ++ HPGL2_psize = (size >= 0 ? size : 1); ++} ++ + #endif /* TERM_BODY */ + + #ifdef TERM_TABLE +@@ -1100,25 +2584,21 @@ + HPGL_linetype, HPGL_put_text, HPGL_text_angle, + null_justify_text, do_point, do_arrow, set_font_null + TERM_TABLE_END(hpgl_driver) +- + #undef LAST_TERM + #define LAST_TERM hpgl_driver +- + TERM_TABLE_START(pcl5_driver) +- "pcl5", "HP LaserJet III [mode] [font] [point]", ++ "pcl5", "HP Designjet 750C, HP Laserjet III/IV, etc. (many options)", + PCL_XMAX, PCL_YMAX, HPGL2_VCHAR, HPGL2_HCHAR, + PCL_VTIC, PCL_HTIC, PCL_options, PCL_init, PCL_reset, + PCL_text, null_scale, PCL_graphics, HPGL2_move, HPGL2_vector, + HPGL2_linetype, HPGL2_put_text, HPGL2_text_angle, +- HPGL2_justify_text, do_point, do_arrow, set_font_null ++ HPGL2_justify_text, HPGL2_point, do_arrow, HPGL2_set_font, ++ HPGL2_pointsize + TERM_TABLE_END(pcl5_driver) +- + #undef LAST_TERM + #define LAST_TERM pcl5_driver + #endif /* TERM_TABLE */ +- + #endif /* TERM_PROTO_ONLY */ +- + #ifdef TERM_HELP + START_HELP(hpgl) + "1 hpgl", +@@ -1135,9 +2615,9 @@ + "?term pcl5", + "?pcl5", + " The `hpgl` driver produces HPGL output for devices like the HP7475A plotter.", +-" There are two options which can be set---the number of pens and \"eject\", which", +-" tells the plotter to eject a page when done. The default is to use 6 pens", +-" and not to eject the page when done.", ++" There are two options which can be set: the number of pens and `eject`,", ++" which tells the plotter to eject a page when done. The default is to use 6", ++" pens and not to eject the page when done.", + "", + " The international character sets ISO-8859-1 and CP850 are recognized via", + " `set encoding iso_8859_1` or `set encoding cp850` (see `set encoding` for", +@@ -1156,15 +2636,42 @@ + "", + " is equivalent to the previous `hp7580b` terminal.", + "", +-" The `pcl5` driver supports the Hewlett-Packard Laserjet III. It actually uses", +-" HPGL-2, but there is a name conflict among the terminal devices. It has", +-" several options", ++" The `pcl5` driver supports plotters such as the Hewlett-Packard Designjet", ++" 750C, the Hewlett-Packard Laserjet III, and the Hewlett-Packard Laserjet IV.", ++" It actually uses HPGL-2, but there is a name conflict among the terminal", ++" devices. It has several options which must be specified in the order", ++" indicated below:", + "", + " Syntax:", +-" set terminal pcl5 {<mode>} {<font>} {<fontsize>}", ++" set terminal pcl5 {mode <mode>} {<plotsize>}", ++" {{color {<number_of_pens>}} | monochrome} {solid | dashed}", ++" {font <font>} {size <fontsize>} {pspoints | nopspoints}", ++"", ++" <mode> is `landscape` or `portrait`. <plotsize> is the physical", ++" plotting size of the plot, which is one of the following: `letter` for", ++" standard (8 1/2\" X 11\") displays, `legal` for (8 1/2\" X 14\") displays,", ++" `noextended` for (36\" X 48\") displays (a letter size ratio) or,", ++" `extended` for (36\" X 55\") displays (almost a legal size ratio).", ++" `color` is for multi-pen (i.e. color) plots, and <number_of_pens> is", ++" the number of pens (i.e. colors) used in color plots. `monochrome` is for", ++" one (e.g. black) pen plots. 'solid' draws all lines as solid lines, or", ++" 'dashed' will draw lines with different dashed and dotted line patterns.", ++" <font> is `stick`, `univers`, `cg_times`, `zapf_dingbats`, `antique_olive`,", ++" `arial`, `courier`, `garamond_antigua`, `letter_gothic`, `cg_omega`,", ++" `albertus`, `times_new_roman`, `clarendon`, `coronet`, `marigold`,", ++" `truetype_symbols`, or `wingdings`. <fontsize> is the font size in points.", ++" The point type selection can be the standard default set by specifying", ++" nopspoints, or the same set of point types found in the postscript terminal", ++" by specifying pspoints.", ++"", ++" Note that built-in support of some of these options is printer device", ++" dependendent. For instance, all the fonts are supposedly supported by the HP", ++" Laserjet IV, but only a few (e.g. univers, stick) may be supported by the HP", ++" Laserjet III and the Designjet 750C. Also, color obviously won't work on the", ++" the laserjets since they are monochrome devices.", + "", +-" where <mode> is `landscape`, or `portrait`, <font> is `stick`, `univers`, or", +-" `cg_times`, and <fontsize> is the size in points.", ++" Defaults: landscape, noextended, color (6 pens), solid, univers, 12 point,", ++" and nopspoints.", + "", + " With `pcl5` international characters are handled by the printer; you just put", + " the appropriate 8-bit character codes into the text strings. You don't need", diff --git a/math/gnuplot+/files/patch-xj b/math/gnuplot+/files/patch-xj new file mode 100644 index 000000000000..cfa430c4f339 --- /dev/null +++ b/math/gnuplot+/files/patch-xj @@ -0,0 +1,13 @@ +# save-position +--- misc.c.ORIG Wed Sep 29 18:17:27 1999 ++++ misc.c Sun Dec 5 21:46:23 1999 +@@ -1006,8 +1006,7 @@ + FILE *fp; + struct position *pos; + { +- static char *msg[] = +- {"first_axes ", "second axes ", "graph ", "screen "}; ++ static char *msg[] = { "first ", "second ", "graph ", "screen " }; + + assert(first_axes == 0 && second_axes == 1 && graph == 2 && screen == 3); + diff --git a/math/gnuplot+/files/patch-xk b/math/gnuplot+/files/patch-xk new file mode 100644 index 000000000000..f17e69895bc3 --- /dev/null +++ b/math/gnuplot+/files/patch-xk @@ -0,0 +1,283 @@ +# command-substitution +--- command.c.ORIG Thu Aug 19 15:42:21 1999 ++++ command.c Thu Dec 9 17:13:18 1999 +@@ -248,7 +248,7 @@ + (void) fputs("!\n", stderr); /* why do we need this ? */ + return (0); + } +- num_tokens = scanner(input_line); ++ num_tokens = scanner(&input_line, &input_line_len); + c_token = 0; + while (c_token < num_tokens) { + if (command()) +@@ -728,7 +728,7 @@ + plot_token = 0; /* whole line to be saved as replot line */ + + screen_ok = FALSE; +- num_tokens = scanner(input_line); ++ num_tokens = scanner(&input_line, &input_line_len); + c_token = 1; /* skip the 'plot' part */ + if (is_3d_plot) + plot3drequest(); +@@ -1006,7 +1006,7 @@ + else + (void) strcpy(prompt, "Help topic: "); + read_line(prompt); +- num_tokens = scanner(input_line); ++ num_tokens = scanner(&input_line, &input_line_len); + c_token = 0; + more_help = !(END_OF_COMMAND); + if (more_help) +--- docs/gnuplot.doc.ORIG Wed Oct 27 11:10:16 1999 ++++ docs/gnuplot.doc Thu Dec 9 17:13:25 1999 +@@ -1257,7 +1257,7 @@ + blanks. + + Command-line substitution can be used anywhere on the `gnuplot` command +- line. ++ line, except inside strings delimited by single quotes. + + Example: + +@@ -1267,6 +1267,11 @@ + + or, in VMS + f(x) = `run leastsq` ++ ++ These will generate labels with the current time and userid: ++ set label "generated on `date +%Y-%m-%d`by `whoami`" at 1,1 ++ set timestamp "generated on %Y-%m-%d by `whoami`" ++ + 2 Syntax + ?syntax + ?specify +--- protos.h.ORIG Fri Oct 1 11:37:23 1999 ++++ protos.h Thu Dec 9 17:13:18 1999 +@@ -224,7 +224,7 @@ + + /* Prototypes from file "scanner.c" */ + +-int scanner __PROTO((char expression[])); ++int scanner __PROTO((char **expression, int *line_lengthp)); + + + /* Prototypes from "stdfn.c" */ +--- scanner.c.ORIG Wed Nov 4 14:49:57 1998 ++++ scanner.c Thu Dec 9 17:13:18 1999 +@@ -37,7 +37,7 @@ + #include "plot.h" + + static int get_num __PROTO((char str[])); +-static void substitute __PROTO((char *str, int max)); ++static void substitute __PROTO((char **strp, int *str_lenp, int current)); + + #ifdef AMIGA_AC_5 + #define O_RDONLY 0 +@@ -74,9 +74,10 @@ + + /* + * scanner() breaks expression[] into lexical units, storing them in token[]. +- * The total number of tokens found is returned as the function value. +- * Scanning will stop when '\0' is found in expression[], or when token[] +- * is full. ++ * The total number of tokens found is returned as the function ++ * value. Scanning will stop when '\0' is found in expression[], or ++ * when token[] is full. extend_input_line() is called to extend ++ * expression array if needed. + * + * Scanning is performed by following rules: + * +@@ -95,13 +96,19 @@ + * 5. !,<,> current char; also next if next is = + * 6. ", ' all chars up until matching quote + * 7. # this token cuts off scanning of the line (DFK). ++ * 8. ` (command substitution: all characters through the ++ * matching backtic are replaced by the output of ++ * the contained command, then scanning is restarted.) + * + * white space between tokens is ignored + */ +-int scanner(expression) +-char expression[]; ++int ++scanner(expressionp, expressionlenp) ++char **expressionp; ++int *expressionlenp; + { + register int current; /* index of current char in expression[] */ ++ char *expression = *expressionp; + register int quote; + char brace; + +@@ -118,7 +125,8 @@ + token[t_num].is_token = TRUE; /* to start with... */ + + if (expression[current] == '`') { +- substitute(&expression[current], MAX_LINE_LEN - current); ++ substitute(expressionp, expressionlenp, current); ++ expression = *expressionp; /* expression might have moved */ + goto again; + } + /* allow _ to be the first character of an identifier */ +@@ -165,6 +173,10 @@ + && expression[current + 1]) { + current++; + token[t_num].length += 2; ++ } else if (quote == '\"' && expression[current] == '`') { ++ substitute(expressionp, expressionlenp, current); ++ expression = *expressionp; /* it might have moved */ ++ current--; + } else + token[t_num].length++; + } +@@ -267,10 +279,6 @@ + + #if defined(VMS) || defined(PIPES) || (defined(ATARI) || defined(MTOS)) && defined(__PUREC__) + +-/* this really ought to make use of the dynamic-growth of the +- * input line in 3.6. And it definitely should not have +- * static arrays ! +- */ + /* A macro to reduce clutter ... */ + # ifdef AMIGA_AC_5 + # define CLOSE_FILE_OR_PIPE ((void) close(fd)) +@@ -280,42 +288,58 @@ + # define CLOSE_FILE_OR_PIPE ((void) pclose(f)) + # endif + +-static void substitute(str, max) /* substitute output from ` ` */ +-char *str; +-int max; ++/* substitute output from ` ` ++ * *strp points to the input string. (*strp)[current] is expected to ++ * be the initial back tic. Characters through the following back tic ++ * are replaced by the output of the command. extend_input_line() ++* is called to extend *strp array if needed. ++ */ ++static void substitute(strp, str_lenp, current) ++char **strp; ++int *str_lenp; ++int current; + { + register char *last; +- register int i, c; ++ register int c; + register FILE *f; + # ifdef AMIGA_AC_5 + int fd; + # elif (defined(ATARI) || defined(MTOS)) && defined(__PUREC__) + char *atari_tmpfile; +- char *atari_pgm[MAX_LINE_LEN+100]; + # endif /* !AMIGA_AC_5 */ +- static char pgm[MAX_LINE_LEN+1], output[MAX_LINE_LEN+1]; ++ char *str, *pgm, *rest = NULL; ++ int pgm_len, rest_len; + + # ifdef VMS + int chan, one = 1; +- static $DESCRIPTOR(pgmdsc, pgm); ++ struct dsc$descriptor_s pgmdsc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0}; + static $DESCRIPTOR(lognamedsc, MAILBOX); + # endif /* VMS */ + + /* forgive missing closing backquote at end of line */ +- i = 0; ++ str = *strp + current; + last = str; + while (*++last) { +- if (*last == '`') { +- ++last; /* move past it */ ++ if (*last == '`') + break; ++ } ++ pgm_len = last - str; ++ pgm = gp_alloc(pgm_len, "command string"); ++ safe_strncpy(pgm, str + 1, pgm_len); /* omit ` to leave room for NUL */ ++ ++ /* save rest of line, if any */ ++ if (*last) { ++ last++; /* advance past ` */ ++ rest_len = strlen(last) + 1; ++ if (rest_len > 1) { ++ rest = gp_alloc(rest_len, "input line copy"); ++ strcpy(rest, last); + } +- pgm[i++] = *last; + } +- pgm[i] = NUL; /* end with null */ +- max -= strlen(last); /* max is now the max length of output sub. */ + + # ifdef VMS +- pgmdsc.dsc$w_length = i; ++ pgmdsc.dsc$a_pointer = pgm; ++ pgmdsc.dsc$w_length = pgm_len; + if (!((vaxc$errno = sys$crembx(0, &chan, 0, 0, 0, 0, &lognamedsc)) & 1)) + os_error("sys$crembx failed", NO_CARET); + +@@ -327,13 +351,11 @@ + # elif (defined(ATARI) || defined(MTOS)) && defined(__PUREC__) + if (system(NULL) == 0) + os_error("no command shell", NO_CARET); +- if ((strlen(atari_tmpfile) + strlen(pgm) + 5) > MAX_LINE_LEN + 100) +- os_error("sorry, command to long", NO_CARET); + atari_tmpfile = tmpnam(NULL); +- strcpy(atari_pgm, pgm); +- strcat(atari_pgm, " >> "); +- strcat(atari_pgm, atari_tmpfile); +- system(atari_pgm); ++ gp_realloc(pgm, pgm_len + 5 + strlen(atari_tmpfile), "command string"); ++ strcat(pgm, " >> "); ++ strcat(pgm, atari_tmpfile); ++ system(pgm); + if ((f = fopen(atari_tmpfile, "r")) == NULL) + # elif defined(AMIGA_AC_5) + if ((fd = open(pgm, "O_RDONLY")) == -1) +@@ -342,23 +364,36 @@ + os_error("popen failed", NO_CARET); + # endif /* !VMS */ + +- i = 0; +- while ((c = getc(f)) != EOF) { +- output[i++] = ((c == '\n') ? ' ' : c); /* newlines become blanks */ +- if (i == max) { +- CLOSE_FILE_OR_PIPE; +- int_error("substitution overflow", t_num); +- } ++ free(pgm); ++ ++ /* now replace ` ` with output */ ++ while (1) { ++# if defined(AMIGA_AC_5) ++ char ch; ++ if (read(fd, &ch, 1) != 1) ++ break; ++ c = ch; ++# else ++ if ((c = getc(f)) == EOF) ++ break; ++# endif /* !AMIGA_AC_5 */ ++ /* newlines become blanks */ ++ (*strp)[current++] = ((c == '\n') ? ' ' : c); ++ if (current == *str_lenp) ++ extend_input_line(); + } ++ (*strp)[current] = 0; + + CLOSE_FILE_OR_PIPE; + +- if (i + strlen(last) > max) +- int_error("substitution overflowed rest of line", t_num); + /* tack on rest of line to output */ +- safe_strncpy(output + i, last, MAX_LINE_LEN - i); +- /* now replace ` ` with output */ +- safe_strncpy(str, output, max); ++ if (rest) { ++ while (current + rest_len > *str_lenp) ++ extend_input_line(); ++ strcpy(*strp+current, rest); ++ free(rest); ++ } ++ + screen_ok = FALSE; + } + diff --git a/math/gnuplot+/files/patch-xl b/math/gnuplot+/files/patch-xl new file mode 100644 index 000000000000..a7f247c6dc60 --- /dev/null +++ b/math/gnuplot+/files/patch-xl @@ -0,0 +1,64 @@ +# dynamic-contour-levels +--- plot.h.ORIG Tue Oct 19 14:32:17 1999 ++++ plot.h Thu Dec 9 17:57:06 1999 +@@ -131,7 +131,6 @@ + #define LEVELS_AUTO 0 /* How contour levels are set */ + #define LEVELS_INCREMENTAL 1 /* user specified start & incremnet */ + #define LEVELS_DISCRETE 2 /* user specified discrete levels */ +-#define MAX_DISCRETE_LEVELS 30 + + #define ANGLES_RADIANS 0 + #define ANGLES_DEGREES 1 +--- set.c.ORIG Thu Aug 19 15:36:35 1999 ++++ set.c Thu Dec 9 17:57:06 1999 +@@ -44,6 +44,7 @@ + #include "stdfn.h" + #include "setshow.h" + #include "national.h" ++#include "alloc.h" + + #define DEF_FORMAT "%g" /* default format for tic mark labels */ + #define SIGNIF (0.01) /* less than one hundredth of a tic mark */ +@@ -198,7 +199,8 @@ + int contour_levels = 5; + double zero = ZERO; /* zero threshold, not 0! */ + int levels_kind = LEVELS_AUTO; +-double levels_list[MAX_DISCRETE_LEVELS]; /* storage for z levels to draw contours at */ ++double *levels_list; /* storage for z levels to draw contours at */ ++int max_levels = 0; /* contour level capacity, before enlarging */ + + int dgrid3d_row_fineness = 10; + int dgrid3d_col_fineness = 10; +@@ -611,6 +613,10 @@ + else if (almost_equals(c_token, MIN)) { AUTO |= 1; ++c_token; } \ + else if (almost_equals(c_token, MAX)) { AUTO |= 2; ++c_token; } + ++ if (max_levels == 0) ++ levels_list = (double *)gp_alloc((max_levels = 5)*sizeof(double), ++ "contour levels"); ++ + if (almost_equals(c_token, "ar$row")) { + c_token++; + set_arrow(); +@@ -813,6 +819,10 @@ + if (!equals(c_token, ",")) + int_error("expecting comma to separate discrete levels", c_token); + c_token++; ++ if (i == max_levels) ++ levels_list = gp_realloc(levels_list, ++ (max_levels += 10)*sizeof(double), ++ "contour levels"); + levels_list[i++] = real(const_express(&a)); + } + contour_levels = i; +--- setshow.h.ORIG Sat Oct 3 21:17:47 1998 ++++ setshow.h Thu Dec 9 17:57:06 1999 +@@ -169,7 +169,7 @@ + extern int contour_levels; + extern double zero; /* zero threshold, not 0! */ + extern int levels_kind; +-extern double levels_list[MAX_DISCRETE_LEVELS]; ++extern double *levels_list; + + extern int dgrid3d_row_fineness; + extern int dgrid3d_col_fineness; diff --git a/math/gnuplot+/files/patch-za b/math/gnuplot+/files/patch-za new file mode 100644 index 000000000000..730323f0842e --- /dev/null +++ b/math/gnuplot+/files/patch-za @@ -0,0 +1,74 @@ +--- gplt_x11.c.ORIG Thu Dec 2 17:02:05 1999 ++++ gplt_x11.c Thu Dec 2 17:02:54 1999 +@@ -169,6 +169,10 @@ + # define EINTR E_ILLFNC + #endif + ++#ifdef __FreeBSD__ ++# include <floatingpoint.h> ++#endif ++ + /* information about one window/plot */ + + typedef struct plot_struct { +@@ -301,6 +305,10 @@ + int argc; + char *argv[]; + { ++#ifdef __FreeBSD__ ++ /* allow divide by zero -- Inf */ ++ fpsetmask(fpgetmask() & ~(FP_X_DZ | FP_X_INV)); ++#endif + + #ifndef X11ORG + setlocale(LC_ALL, ""); +@@ -335,6 +343,12 @@ + } + } + XCloseDisplay(dpy); ++ ++#ifdef __FreeBSD__ ++ fpresetsticky(FP_X_DZ | FP_X_INV); ++ fpsetmask(fpgetmask() | (FP_X_DZ | FP_X_INV)); ++#endif ++ + + FPRINTF((stderr, "exiting\n")); + +--- plot.c.ORIG Thu Dec 2 17:02:05 1999 ++++ plot.c Thu Dec 2 17:02:54 1999 +@@ -73,6 +73,10 @@ + # endif + #endif /* _Windows */ + ++#ifdef __FreeBSD__ ++# include <floatingpoint.h> ++#endif ++ + extern FILE *gpoutfile; + + TBOOLEAN interactive = TRUE; /* FALSE if stdin not a terminal */ +@@ -347,6 +351,11 @@ + _control87(MCW_EM, MCW_EM); + #endif + ++#ifdef __FreeBSD__ ++ /* allow divide by zero -- Inf */ ++ fpsetmask(fpgetmask() & ~(FP_X_DZ | FP_X_INV)); ++#endif ++ + #if defined(OS2) + int rc; + if (_osmode == OS2_MODE) { +@@ -565,6 +574,11 @@ + #ifdef OS2 + if (_osmode == OS2_MODE) + RexxDeregisterSubcom("GNUPLOT", NULL); ++#endif ++ ++#ifdef __FreeBSD__ ++ fpresetsticky(FP_X_DZ | FP_X_INV); ++ fpsetmask(fpgetmask() | (FP_X_DZ | FP_X_INV)); + #endif + + #if defined(ATARI) || defined(MTOS) |