aboutsummaryrefslogtreecommitdiffstats
path: root/math/gnuplot+/files/patch-xg
diff options
context:
space:
mode:
Diffstat (limited to 'math/gnuplot+/files/patch-xg')
-rw-r--r--math/gnuplot+/files/patch-xg236
1 files changed, 236 insertions, 0 deletions
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);
++ }
++ }
++ }
+ }
+ }
+ }