rjl@monu1.cc.monash.edu.au (Russell Lang) (10/06/90)
Posting-number: Volume 15, Issue 18 Submitted-by: Russell Lang <rjl@monu1.cc.monash.edu.au> Archive-name: gnuplot2/patch03 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of shell archive." # Contents: patch1b # Wrapped by eln272v@monu1 on Tue Sep 18 14:52:59 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f patch1b -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"patch1b\" else echo shar: Extracting \"patch1b\" \(63974 characters\) sed "s/^X//" >patch1b <<'END_OF_patch1b' X*** ./graphics.c Tue Mar 27 09:01:22 1990 X--- ../patch1/graphics.c Mon Sep 10 09:57:37 1990 X*************** X*** 60,66 X static int xleft, xright, ybot, ytop; X X /* Boundary and scale factors, in user coordinates */ X! static double xmin, xmax, ymin, ymax; X static double xscale, yscale; X X /* And the functions to map from user to terminal coordinates */ X X--- 60,69 ----- X static int xleft, xright, ybot, ytop; X X /* Boundary and scale factors, in user coordinates */ X! /* x_min, x_max, y_min, y_max are local to this file and X! * are not the same as variables of the same names in other files X! */ X! static double x_min, x_max, y_min, y_max; X static double xscale, yscale; X X /* And the functions to map from user to terminal coordinates */ X*************** X*** 64,71 X static double xscale, yscale; X X /* And the functions to map from user to terminal coordinates */ X! #define map_x(x) (int)(xleft+(x-xmin)*xscale+0.5) /* maps floating point x to screen */ X! #define map_y(y) (int)(ybot+(y-ymin)*yscale+0.5) /* same for y */ X X /* (DFK) Watch for cancellation error near zero on axes labels */ X #define SIGNIF (0.01) /* less than one hundredth of a tic mark */ X X--- 67,74 ----- X static double xscale, yscale; X X /* And the functions to map from user to terminal coordinates */ X! #define map_x(x) (int)(xleft+(x-x_min)*xscale+0.5) /* maps floating point x to screen */ X! #define map_y(y) (int)(ybot+(y-y_min)*yscale+0.5) /* same for y */ X X /* (DFK) Watch for cancellation error near zero on axes labels */ X #define SIGNIF (0.01) /* less than one hundredth of a tic mark */ X*************** X*** 108,115 X int_error(errbuf, NO_CARET); X } else X return(log10(coord)); X- } else { X- return(coord); X } X return((double)NULL); /* shut lint up */ X } X X--- 111,116 ----- X int_error(errbuf, NO_CARET); X } else X return(log10(coord)); X } X return(coord); X } X*************** X*** 111,117 X } else { X return(coord); X } X! return((double)NULL); /* shut lint up */ X } X X /* borders of plotting area */ X X--- 112,118 ----- X } else X return(log10(coord)); X } X! return(coord); X } X X /* borders of plotting area */ X*************** X*** 187,196 X X /* store these in variables global to this file */ X /* otherwise, we have to pass them around a lot */ X! xmin = min_x; X! xmax = max_x; X! ymin = min_y; X! ymax = max_y; X X if (polar) { X /* will possibly change xmin, xmax, ymin, ymax */ X X--- 188,197 ----- X X /* store these in variables global to this file */ X /* otherwise, we have to pass them around a lot */ X! x_min = min_x; X! x_max = max_x; X! y_min = min_y; X! y_max = max_y; X X if (polar) { X /* will possibly change x_min, x_max, y_min, y_max */ X*************** X*** 193,199 X ymax = max_y; X X if (polar) { X! /* will possibly change xmin, xmax, ymin, ymax */ X polar_xform(plots,pcount); X } X X X--- 194,200 ----- X y_max = max_y; X X if (polar) { X! /* will possibly change x_min, x_max, y_min, y_max */ X polar_xform(plots,pcount); X } X X*************** X*** 197,203 X polar_xform(plots,pcount); X } X X! if (ymin == VERYLARGE || ymax == -VERYLARGE) X int_error("all points undefined!", NO_CARET); X X if (xmin == VERYLARGE || xmax == -VERYLARGE) X X--- 198,204 ----- X polar_xform(plots,pcount); X } X X! if (y_min == VERYLARGE || y_max == -VERYLARGE) X int_error("all points undefined!", NO_CARET); X X if (x_min == VERYLARGE || x_max == -VERYLARGE) X*************** X*** 200,206 X if (ymin == VERYLARGE || ymax == -VERYLARGE) X int_error("all points undefined!", NO_CARET); X X! if (xmin == VERYLARGE || xmax == -VERYLARGE) X int_error("all points undefined!", NO_CARET); X X /* Apply the desired viewport offsets. */ X X--- 201,207 ----- X if (y_min == VERYLARGE || y_max == -VERYLARGE) X int_error("all points undefined!", NO_CARET); X X! if (x_min == VERYLARGE || x_max == -VERYLARGE) X int_error("all points undefined!", NO_CARET); X X /* Apply the desired viewport offsets. */ X*************** X*** 204,212 X int_error("all points undefined!", NO_CARET); X X /* Apply the desired viewport offsets. */ X! if (ymin < ymax) { X! ymin -= boff; X! ymax += toff; X } else { X ymax -= boff; X ymin += toff; X X--- 205,213 ----- X int_error("all points undefined!", NO_CARET); X X /* Apply the desired viewport offsets. */ X! if (y_min < y_max) { X! y_min -= boff; X! y_max += toff; X } else { X y_max -= boff; X y_min += toff; X*************** X*** 208,215 X ymin -= boff; X ymax += toff; X } else { X! ymax -= boff; X! ymin += toff; X } X if (xmin < xmax) { X xmin -= loff; X X--- 209,216 ----- X y_min -= boff; X y_max += toff; X } else { X! y_max -= boff; X! y_min += toff; X } X if (x_min < x_max) { X x_min -= loff; X*************** X*** 211,219 X ymax -= boff; X ymin += toff; X } X! if (xmin < xmax) { X! xmin -= loff; X! xmax += roff; X } else { X xmax -= loff; X xmin += roff; X X--- 212,220 ----- X y_max -= boff; X y_min += toff; X } X! if (x_min < x_max) { X! x_min -= loff; X! x_max += roff; X } else { X x_max -= loff; X x_min += roff; X*************** X*** 215,222 X xmin -= loff; X xmax += roff; X } else { X! xmax -= loff; X! xmin += roff; X } X X /* SETUP RANGES, SCALES AND TIC PLACES */ X X--- 216,223 ----- X x_min -= loff; X x_max += roff; X } else { X! x_max -= loff; X! x_min += roff; X } X X /* SETUP RANGES, SCALES AND TIC PLACES */ X*************** X*** 221,227 X X /* SETUP RANGES, SCALES AND TIC PLACES */ X if (ytics && yticdef.type == TIC_COMPUTED) { X! ytic = make_tics(ymin,ymax,log_y); X X if (autoscale_ly) { X if (ymin < ymax) { X X--- 222,228 ----- X X /* SETUP RANGES, SCALES AND TIC PLACES */ X if (ytics && yticdef.type == TIC_COMPUTED) { X! ytic = make_tics(y_min,y_max,log_y); X X if (autoscale_ly) { X if (y_min < y_max) { X*************** X*** 224,232 X ytic = make_tics(ymin,ymax,log_y); X X if (autoscale_ly) { X! if (ymin < ymax) { X! ymin = ytic * floor(ymin/ytic); X! ymax = ytic * ceil(ymax/ytic); X } X else { /* reverse axis */ X ymin = ytic * ceil(ymin/ytic); X X--- 225,233 ----- X ytic = make_tics(y_min,y_max,log_y); X X if (autoscale_ly) { X! if (y_min < y_max) { X! y_min = ytic * floor(y_min/ytic); X! y_max = ytic * ceil(y_max/ytic); X } X else { /* reverse axis */ X y_min = ytic * ceil(y_min/ytic); X*************** X*** 229,236 X ymax = ytic * ceil(ymax/ytic); X } X else { /* reverse axis */ X! ymin = ytic * ceil(ymin/ytic); X! ymax = ytic * floor(ymax/ytic); X } X } X } X X--- 230,237 ----- X y_max = ytic * ceil(y_max/ytic); X } X else { /* reverse axis */ X! y_min = ytic * ceil(y_min/ytic); X! y_max = ytic * floor(y_max/ytic); X } X } X } X*************** X*** 236,242 X } X X if (xtics && xticdef.type == TIC_COMPUTED) { X! xtic = make_tics(xmin,xmax,log_x); X X if (autoscale_lx) { X if (xmin < xmax) { X X--- 237,243 ----- X } X X if (xtics && xticdef.type == TIC_COMPUTED) { X! xtic = make_tics(x_min,x_max,log_x); X X if (autoscale_lx) { X if (x_min < x_max) { X*************** X*** 239,247 X xtic = make_tics(xmin,xmax,log_x); X X if (autoscale_lx) { X! if (xmin < xmax) { X! xmin = xtic * floor(xmin/xtic); X! xmax = xtic * ceil(xmax/xtic); X } else { X xmin = xtic * ceil(xmin/xtic); X xmax = xtic * floor(xmax/xtic); X X--- 240,248 ----- X xtic = make_tics(x_min,x_max,log_x); X X if (autoscale_lx) { X! if (x_min < x_max) { X! x_min = xtic * floor(x_min/xtic); X! x_max = xtic * ceil(x_max/xtic); X } else { X x_min = xtic * ceil(x_min/xtic); X x_max = xtic * floor(x_max/xtic); X*************** X*** 243,250 X xmin = xtic * floor(xmin/xtic); X xmax = xtic * ceil(xmax/xtic); X } else { X! xmin = xtic * ceil(xmin/xtic); X! xmax = xtic * floor(xmax/xtic); X } X } X } X X--- 244,251 ----- X x_min = xtic * floor(x_min/xtic); X x_max = xtic * ceil(x_max/xtic); X } else { X! x_min = xtic * ceil(x_min/xtic); X! x_max = xtic * floor(x_max/xtic); X } X } X } X*************** X*** 249,259 X } X } X X! /* This used be xmax == xmin, but that caused an infinite loop once. */ X! if (fabs(xmax - xmin) < zero) X! int_error("xmin should not equal xmax!",NO_CARET); X! if (fabs(ymax - ymin) < zero) X! int_error("ymin should not equal ymax!",NO_CARET); X X /* INITIALIZE TERMINAL */ X if (!term_init) { X X--- 250,260 ----- X } X } X X! /* This used be x_max == x_min, but that caused an infinite loop once. */ X! if (fabs(x_max - x_min) < zero) X! int_error("x_min should not equal x_max!",NO_CARET); X! if (fabs(y_max - y_min) < zero) X! int_error("y_min should not equal y_max!",NO_CARET); X X /* INITIALIZE TERMINAL */ X if (!term_init) { X*************** X*** 268,275 X boundary(scaling); X X /* SCALE FACTORS */ X! yscale = (ytop - ybot)/(ymax - ymin); X! xscale = (xright - xleft)/(xmax - xmin); X X /* DRAW AXES */ X (*t->linetype)(-1); /* axis line type */ X X--- 269,276 ----- X boundary(scaling); X X /* SCALE FACTORS */ X! yscale = (ytop - ybot)/(y_max - y_min); X! xscale = (xright - xleft)/(x_max - x_min); X X /* DRAW AXES */ X (*t->linetype)(-1); /* axis line type */ X*************** X*** 297,304 X if (ytics) { X switch (yticdef.type) { X case TIC_COMPUTED: { X! if (ymin < ymax) X! draw_ytics(ytic * floor(ymin/ytic), X ytic, X ytic * ceil(ymax/ytic)); X else X X--- 298,305 ----- X if (ytics) { X switch (yticdef.type) { X case TIC_COMPUTED: { X! if (y_min < y_max) X! draw_ytics(ytic * floor(y_min/ytic), X ytic, X ytic * ceil(y_max/ytic)); X else X*************** X*** 300,306 X if (ymin < ymax) X draw_ytics(ytic * floor(ymin/ytic), X ytic, X! ytic * ceil(ymax/ytic)); X else X draw_ytics(ytic * floor(ymax/ytic), X ytic, X X--- 301,307 ----- X if (y_min < y_max) X draw_ytics(ytic * floor(y_min/ytic), X ytic, X! ytic * ceil(y_max/ytic)); X else X draw_ytics(ytic * floor(y_max/ytic), X ytic, X*************** X*** 302,308 X ytic, X ytic * ceil(ymax/ytic)); X else X! draw_ytics(ytic * floor(ymax/ytic), X ytic, X ytic * ceil(ymin/ytic)); X X X--- 303,309 ----- X ytic, X ytic * ceil(y_max/ytic)); X else X! draw_ytics(ytic * floor(y_max/ytic), X ytic, X ytic * ceil(y_min/ytic)); X X*************** X*** 304,310 X else X draw_ytics(ytic * floor(ymax/ytic), X ytic, X! ytic * ceil(ymin/ytic)); X X break; X } X X--- 305,311 ----- X else X draw_ytics(ytic * floor(y_max/ytic), X ytic, X! ytic * ceil(y_min/ytic)); X X break; X } X*************** X*** 309,317 X break; X } X case TIC_SERIES: { X! draw_ytics(yticdef.def.series.start, X! yticdef.def.series.incr, X! yticdef.def.series.end); X break; X } X case TIC_USER: { X X--- 310,318 ----- X break; X } X case TIC_SERIES: { X! draw_series_ytics(yticdef.def.series.start, X! yticdef.def.series.incr, X! yticdef.def.series.end); X break; X } X case TIC_USER: { X*************** X*** 315,321 X break; X } X case TIC_USER: { X! draw_user_ytics(yticdef.def.user); X break; X } X default: { X X--- 316,322 ----- X break; X } X case TIC_USER: { X! draw_set_ytics(yticdef.def.user); X break; X } X default: { X*************** X*** 331,338 X if (xtics) { X switch (xticdef.type) { X case TIC_COMPUTED: { X! if (xmin < xmax) X! draw_xtics(xtic * floor(xmin/xtic), X xtic, X xtic * ceil(xmax/xtic)); X else X X--- 332,339 ----- X if (xtics) { X switch (xticdef.type) { X case TIC_COMPUTED: { X! if (x_min < x_max) X! draw_xtics(xtic * floor(x_min/xtic), X xtic, X xtic * ceil(x_max/xtic)); X else X*************** X*** 334,340 X if (xmin < xmax) X draw_xtics(xtic * floor(xmin/xtic), X xtic, X! xtic * ceil(xmax/xtic)); X else X draw_xtics(xtic * floor(xmax/xtic), X xtic, X X--- 335,341 ----- X if (x_min < x_max) X draw_xtics(xtic * floor(x_min/xtic), X xtic, X! xtic * ceil(x_max/xtic)); X else X draw_xtics(xtic * floor(x_max/xtic), X xtic, X*************** X*** 336,342 X xtic, X xtic * ceil(xmax/xtic)); X else X! draw_xtics(xtic * floor(xmax/xtic), X xtic, X xtic * ceil(xmin/xtic)); X X X--- 337,343 ----- X xtic, X xtic * ceil(x_max/xtic)); X else X! draw_xtics(xtic * floor(x_max/xtic), X xtic, X xtic * ceil(x_min/xtic)); X X*************** X*** 338,344 X else X draw_xtics(xtic * floor(xmax/xtic), X xtic, X! xtic * ceil(xmin/xtic)); X X break; X } X X--- 339,345 ----- X else X draw_xtics(xtic * floor(x_max/xtic), X xtic, X! xtic * ceil(x_min/xtic)); X X break; X } X*************** X*** 343,351 X break; X } X case TIC_SERIES: { X! draw_xtics(xticdef.def.series.start, X! xticdef.def.series.incr, X! xticdef.def.series.end); X break; X } X case TIC_USER: { X X--- 344,352 ----- X break; X } X case TIC_SERIES: { X! draw_series_xtics(xticdef.def.series.start, X! xticdef.def.series.incr, X! xticdef.def.series.end); X break; X } X case TIC_USER: { X*************** X*** 349,355 X break; X } X case TIC_USER: { X! draw_user_xtics(xticdef.def.user); X break; X } X default: { X X--- 350,356 ----- X break; X } X case TIC_USER: { X! draw_set_xtics(xticdef.def.user); X break; X } X default: { X*************** X*** 551,557 X break; X } X case OUTRANGE: { X! if (!inrange(plot->points[i].x, xmin,xmax)) X continue; X x = map_x(plot->points[i].x); X if ((ymin < ymax X X--- 552,558 ----- X break; X } X case OUTRANGE: { X! if (!inrange(plot->points[i].x, x_min,x_max)) X continue; X x = map_x(plot->points[i].x); X if ((y_min < y_max X*************** X*** 554,569 X if (!inrange(plot->points[i].x, xmin,xmax)) X continue; X x = map_x(plot->points[i].x); X! if ((ymin < ymax X! && plot->points[i].y < ymin) X! || (ymax < ymin X! && plot->points[i].y > ymin)) X! y = map_y(ymin); X! if ((ymin < ymax X! && plot->points[i].y > ymax) X! || (ymax<ymin X! && plot->points[i].y < ymax)) X! y = map_y(ymax); X break; X } X default: /* just a safety */ X X--- 555,570 ----- X if (!inrange(plot->points[i].x, x_min,x_max)) X continue; X x = map_x(plot->points[i].x); X! if ((y_min < y_max X! && plot->points[i].y < y_min) X! || (y_max < y_min X! && plot->points[i].y > y_min)) X! y = map_y(y_min); X! if ((y_min < y_max X! && plot->points[i].y > y_max) X! || (y_max<y_min X! && plot->points[i].y < y_max)) X! y = map_y(y_max); X break; X } X default: /* just a safety */ X*************** X*** 699,705 X int i; /* line segment from point i-1 to point i */ X double *ex, *ey; /* the point where it crosses an edge */ X { X! /* global xmin, xmax, ymin, xmax */ X double ax = points[i-1].x; X double ay = points[i-1].y; X double bx = points[i].x; X X--- 700,706 ----- X int i; /* line segment from point i-1 to point i */ X double *ex, *ey; /* the point where it crosses an edge */ X { X! /* global x_min, x_max, y_min, x_max */ X double ax = points[i-1].x; X double ay = points[i-1].y; X double bx = points[i].x; X*************** X*** 708,714 X X if (by == ay) { X /* horizontal line */ X! /* assume inrange(by, ymin, ymax) */ X *ey = by; /* == ay */ X X if (inrange(xmax, ax, bx)) X X--- 709,715 ----- X X if (by == ay) { X /* horizontal line */ X! /* assume inrange(by, y_min, y_max) */ X *ey = by; /* == ay */ X X if (inrange(x_max, ax, bx)) X*************** X*** 711,720 X /* assume inrange(by, ymin, ymax) */ X *ey = by; /* == ay */ X X! if (inrange(xmax, ax, bx)) X! *ex = xmax; X! else if (inrange(xmin, ax, bx)) X! *ex = xmin; X else { X (*term_tbl[term].text)(); X (void) fflush(outfile); X X--- 712,721 ----- X /* assume inrange(by, y_min, y_max) */ X *ey = by; /* == ay */ X X! if (inrange(x_max, ax, bx)) X! *ex = x_max; X! else if (inrange(x_min, ax, bx)) X! *ex = x_min; X else { X (*term_tbl[term].text)(); X (void) fflush(outfile); X*************** X*** 723,729 X return; X } else if (bx == ax) { X /* vertical line */ X! /* assume inrange(bx, xmin, xmax) */ X *ex = bx; /* == ax */ X X if (inrange(ymax, ay, by)) X X--- 724,730 ----- X return; X } else if (bx == ax) { X /* vertical line */ X! /* assume inrange(bx, x_min, x_max) */ X *ex = bx; /* == ax */ X X if (inrange(y_max, ay, by)) X*************** X*** 726,735 X /* assume inrange(bx, xmin, xmax) */ X *ex = bx; /* == ax */ X X! if (inrange(ymax, ay, by)) X! *ey = ymax; X! else if (inrange(ymin, ay, by)) X! *ey = ymin; X else { X (*term_tbl[term].text)(); X (void) fflush(outfile); X X--- 727,736 ----- X /* assume inrange(bx, x_min, x_max) */ X *ex = bx; /* == ax */ X X! if (inrange(y_max, ay, by)) X! *ey = y_max; X! else if (inrange(y_min, ay, by)) X! *ey = y_min; X else { X (*term_tbl[term].text)(); X (void) fflush(outfile); X*************** X*** 740,749 X X /* slanted line of some kind */ X X! /* does it intersect ymin edge */ X! if (inrange(ymin, ay, by) && ymin != ay && ymin != by) { X! x = ax + (ymin-ay) * ((bx-ax) / (by-ay)); X! if (inrange(x, xmin, xmax)) { X *ex = x; X *ey = ymin; X return; /* yes */ X X--- 741,750 ----- X X /* slanted line of some kind */ X X! /* does it intersect y_min edge */ X! if (inrange(y_min, ay, by) && y_min != ay && y_min != by) { X! x = ax + (y_min-ay) * ((bx-ax) / (by-ay)); X! if (inrange(x, x_min, x_max)) { X *ex = x; X *ey = y_min; X return; /* yes */ X*************** X*** 745,751 X x = ax + (ymin-ay) * ((bx-ax) / (by-ay)); X if (inrange(x, xmin, xmax)) { X *ex = x; X! *ey = ymin; X return; /* yes */ X } X } X X--- 746,752 ----- X x = ax + (y_min-ay) * ((bx-ax) / (by-ay)); X if (inrange(x, x_min, x_max)) { X *ex = x; X! *ey = y_min; X return; /* yes */ X } X } X*************** X*** 750,759 X } X } X X! /* does it intersect ymax edge */ X! if (inrange(ymax, ay, by) && ymax != ay && ymax != by) { X! x = ax + (ymax-ay) * ((bx-ax) / (by-ay)); X! if (inrange(x, xmin, xmax)) { X *ex = x; X *ey = ymax; X return; /* yes */ X X--- 751,760 ----- X } X } X X! /* does it intersect y_max edge */ X! if (inrange(y_max, ay, by) && y_max != ay && y_max != by) { X! x = ax + (y_max-ay) * ((bx-ax) / (by-ay)); X! if (inrange(x, x_min, x_max)) { X *ex = x; X *ey = y_max; X return; /* yes */ X*************** X*** 755,761 X x = ax + (ymax-ay) * ((bx-ax) / (by-ay)); X if (inrange(x, xmin, xmax)) { X *ex = x; X! *ey = ymax; X return; /* yes */ X } X } X X--- 756,762 ----- X x = ax + (y_max-ay) * ((bx-ax) / (by-ay)); X if (inrange(x, x_min, x_max)) { X *ex = x; X! *ey = y_max; X return; /* yes */ X } X } X*************** X*** 760,770 X } X } X X! /* does it intersect xmin edge */ X! if (inrange(xmin, ax, bx) && xmin != ax && xmin != bx) { X! y = ay + (xmin-ax) * ((by-ay) / (bx-ax)); X! if (inrange(y, ymin, ymax)) { X! *ex = xmin; X *ey = y; X return; X } X X--- 761,771 ----- X } X } X X! /* does it intersect x_min edge */ X! if (inrange(x_min, ax, bx) && x_min != ax && x_min != bx) { X! y = ay + (x_min-ax) * ((by-ay) / (bx-ax)); X! if (inrange(y, y_min, y_max)) { X! *ex = x_min; X *ey = y; X return; X } X*************** X*** 770,780 X } X } X X! /* does it intersect xmax edge */ X! if (inrange(xmax, ax, bx) && xmax != ax && xmax != bx) { X! y = ay + (xmax-ax) * ((by-ay) / (bx-ax)); X! if (inrange(y, ymin, ymax)) { X! *ex = xmax; X *ey = y; X return; X } X X--- 771,781 ----- X } X } X X! /* does it intersect x_max edge */ X! if (inrange(x_max, ax, bx) && x_max != ax && x_max != bx) { X! y = ay + (x_max-ax) * ((by-ay) / (bx-ax)); X! if (inrange(y, y_min, y_max)) { X! *ex = x_max; X *ey = y; X return; X } X*************** X*** 791,797 X */ X if (ax == -VERYLARGE) { X if (ay != -VERYLARGE) { X! *ex = min(xmin, xmax); X *ey = by; X return; X } X X--- 792,798 ----- X */ X if (ax == -VERYLARGE) { X if (ay != -VERYLARGE) { X! *ex = min(x_min, x_max); X *ey = by; X return; X } X*************** X*** 797,803 X } X } else if (bx == -VERYLARGE) { X if (by != -VERYLARGE) { X! *ex = min(xmin, xmax); X *ey = ay; X return; X } X X--- 798,804 ----- X } X } else if (bx == -VERYLARGE) { X if (by != -VERYLARGE) { X! *ex = min(x_min, x_max); X *ey = ay; X return; X } X*************** X*** 804,810 X } else if (ay == -VERYLARGE) { X /* note we know ax != -VERYLARGE */ X *ex = bx; X! *ey = min(ymin, ymax); X return; X } else if (by == -VERYLARGE) { X /* note we know bx != -VERYLARGE */ X X--- 805,811 ----- X } else if (ay == -VERYLARGE) { X /* note we know ax != -VERYLARGE */ X *ex = bx; X! *ey = min(y_min, y_max); X return; X } else if (by == -VERYLARGE) { X /* note we know bx != -VERYLARGE */ X*************** X*** 809,815 X } else if (by == -VERYLARGE) { X /* note we know bx != -VERYLARGE */ X *ex = ax; X! *ey = min(ymin, ymax); X return; X } X X X--- 810,816 ----- X } else if (by == -VERYLARGE) { X /* note we know bx != -VERYLARGE */ X *ex = ax; X! *ey = min(y_min, y_max); X return; X } X X*************** X*** 846,852 X int i; /* line segment from point i-1 to point i */ X double *lx, *ly; /* lx[2], ly[2]: points where it crosses edges */ X { X! /* global xmin, xmax, ymin, xmax */ X double ax = points[i-1].x; X double ay = points[i-1].y; X double bx = points[i].x; X X--- 847,853 ----- X int i; /* line segment from point i-1 to point i */ X double *lx, *ly; /* lx[2], ly[2]: points where it crosses edges */ X { X! /* global x_min, x_max, y_min, x_max */ X double ax = points[i-1].x; X double ay = points[i-1].y; X double bx = points[i].x; X*************** X*** 856,865 X X if (by == ay) { X /* horizontal line */ X! /* y coord must be in range, and line must span both xmin and xmax */ X! /* note that spanning xmin implies spanning xmax */ X! if (inrange(by, ymin, ymax) && inrange(xmin, ax, bx)) { X! *lx++ = xmin; X *ly++ = by; X *lx++ = xmax; X *ly++ = by; X X--- 857,866 ----- X X if (by == ay) { X /* horizontal line */ X! /* y coord must be in range, and line must span both x_min and x_max */ X! /* note that spanning x_min implies spanning x_max */ X! if (inrange(by, y_min, y_max) && inrange(x_min, ax, bx)) { X! *lx++ = x_min; X *ly++ = by; X *lx++ = x_max; X *ly++ = by; X*************** X*** 861,867 X if (inrange(by, ymin, ymax) && inrange(xmin, ax, bx)) { X *lx++ = xmin; X *ly++ = by; X! *lx++ = xmax; X *ly++ = by; X return(TRUE); X } else X X--- 862,868 ----- X if (inrange(by, y_min, y_max) && inrange(x_min, ax, bx)) { X *lx++ = x_min; X *ly++ = by; X! *lx++ = x_max; X *ly++ = by; X return(TRUE); X } else X*************** X*** 868,876 X return(FALSE); X } else if (bx == ax) { X /* vertical line */ X! /* x coord must be in range, and line must span both ymin and ymax */ X! /* note that spanning ymin implies spanning ymax */ X! if (inrange(bx, xmin, xmax) && inrange(ymin, ay, by)) { X *lx++ = bx; X *ly++ = ymin; X *lx++ = bx; X X--- 869,877 ----- X return(FALSE); X } else if (bx == ax) { X /* vertical line */ X! /* x coord must be in range, and line must span both y_min and y_max */ X! /* note that spanning y_min implies spanning y_max */ X! if (inrange(bx, x_min, x_max) && inrange(y_min, ay, by)) { X *lx++ = bx; X *ly++ = y_min; X *lx++ = bx; X*************** X*** 872,878 X /* note that spanning ymin implies spanning ymax */ X if (inrange(bx, xmin, xmax) && inrange(ymin, ay, by)) { X *lx++ = bx; X! *ly++ = ymin; X *lx++ = bx; X *ly++ = ymax; X return(TRUE); X X--- 873,879 ----- X /* note that spanning y_min implies spanning y_max */ X if (inrange(bx, x_min, x_max) && inrange(y_min, ay, by)) { X *lx++ = bx; X! *ly++ = y_min; X *lx++ = bx; X *ly++ = y_max; X return(TRUE); X*************** X*** 874,880 X *lx++ = bx; X *ly++ = ymin; X *lx++ = bx; X! *ly++ = ymax; X return(TRUE); X } else X return(FALSE); X X--- 875,881 ----- X *lx++ = bx; X *ly++ = y_min; X *lx++ = bx; X! *ly++ = y_max; X return(TRUE); X } else X return(FALSE); X*************** X*** 883,892 X /* slanted line of some kind */ X /* there can be only zero or two intersections below */ X X! /* does it intersect ymin edge */ X! if (inrange(ymin, ay, by)) { X! x = ax + (ymin-ay) * ((bx-ax) / (by-ay)); X! if (inrange(x, xmin, xmax)) { X *lx++ = x; X *ly++ = ymin; X intersect = TRUE; X X--- 884,893 ----- X /* slanted line of some kind */ X /* there can be only zero or two intersections below */ X X! /* does it intersect y_min edge */ X! if (inrange(y_min, ay, by)) { X! x = ax + (y_min-ay) * ((bx-ax) / (by-ay)); X! if (inrange(x, x_min, x_max)) { X *lx++ = x; X *ly++ = y_min; X intersect = TRUE; X*************** X*** 888,894 X x = ax + (ymin-ay) * ((bx-ax) / (by-ay)); X if (inrange(x, xmin, xmax)) { X *lx++ = x; X! *ly++ = ymin; X intersect = TRUE; X } X } X X--- 889,895 ----- X x = ax + (y_min-ay) * ((bx-ax) / (by-ay)); X if (inrange(x, x_min, x_max)) { X *lx++ = x; X! *ly++ = y_min; X intersect = TRUE; X } X } X*************** X*** 893,902 X } X } X X! /* does it intersect ymax edge */ X! if (inrange(ymax, ay, by)) { X! x = ax + (ymax-ay) * ((bx-ax) / (by-ay)); X! if (inrange(x, xmin, xmax)) { X *lx++ = x; X *ly++ = ymax; X intersect = TRUE; X X--- 894,903 ----- X } X } X X! /* does it intersect y_max edge */ X! if (inrange(y_max, ay, by)) { X! x = ax + (y_max-ay) * ((bx-ax) / (by-ay)); X! if (inrange(x, x_min, x_max)) { X *lx++ = x; X *ly++ = y_max; X intersect = TRUE; X*************** X*** 898,904 X x = ax + (ymax-ay) * ((bx-ax) / (by-ay)); X if (inrange(x, xmin, xmax)) { X *lx++ = x; X! *ly++ = ymax; X intersect = TRUE; X } X } X X--- 899,905 ----- X x = ax + (y_max-ay) * ((bx-ax) / (by-ay)); X if (inrange(x, x_min, x_max)) { X *lx++ = x; X! *ly++ = y_max; X intersect = TRUE; X } X } X*************** X*** 903,913 X } X } X X! /* does it intersect xmin edge */ X! if (inrange(xmin, ax, bx)) { X! y = ay + (xmin-ax) * ((by-ay) / (bx-ax)); X! if (inrange(y, ymin, ymax)) { X! *lx++ = xmin; X *ly++ = y; X intersect = TRUE; X } X X--- 904,914 ----- X } X } X X! /* does it intersect x_min edge */ X! if (inrange(x_min, ax, bx)) { X! y = ay + (x_min-ax) * ((by-ay) / (bx-ax)); X! if (inrange(y, y_min, y_max)) { X! *lx++ = x_min; X *ly++ = y; X intersect = TRUE; X } X*************** X*** 913,923 X } X } X X! /* does it intersect xmax edge */ X! if (inrange(xmax, ax, bx)) { X! y = ay + (xmax-ax) * ((by-ay) / (bx-ax)); X! if (inrange(y, ymin, ymax)) { X! *lx++ = xmax; X *ly++ = y; X intersect = TRUE; X } X X--- 914,924 ----- X } X } X X! /* does it intersect x_max edge */ X! if (inrange(x_max, ax, bx)) { X! y = ay + (x_max-ax) * ((by-ay) / (bx-ax)); X! if (inrange(y, y_min, y_max)) { X! *lx++ = x_max; X *ly++ = y; X intersect = TRUE; X } X*************** X*** 935,942 X */ X if (ax == -VERYLARGE) { X if (ay != -VERYLARGE X! && inrange(by, ymin, ymax) && inrange(xmax, ax, bx)) { X! *lx++ = xmin; X *ly = by; X *lx++ = xmax; X *ly = by; X X--- 936,943 ----- X */ X if (ax == -VERYLARGE) { X if (ay != -VERYLARGE X! && inrange(by, y_min, y_max) && inrange(x_max, ax, bx)) { X! *lx++ = x_min; X *ly = by; X *lx++ = x_max; X *ly = by; X*************** X*** 938,944 X && inrange(by, ymin, ymax) && inrange(xmax, ax, bx)) { X *lx++ = xmin; X *ly = by; X! *lx++ = xmax; X *ly = by; X intersect = TRUE; X } X X--- 939,945 ----- X && inrange(by, y_min, y_max) && inrange(x_max, ax, bx)) { X *lx++ = x_min; X *ly = by; X! *lx++ = x_max; X *ly = by; X intersect = TRUE; X } X*************** X*** 944,951 X } X } else if (bx == -VERYLARGE) { X if (by != -VERYLARGE X! && inrange(ay, ymin, ymax) && inrange(xmax, ax, bx)) { X! *lx++ = xmin; X *ly = ay; X *lx++ = xmax; X *ly = ay; X X--- 945,952 ----- X } X } else if (bx == -VERYLARGE) { X if (by != -VERYLARGE X! && inrange(ay, y_min, y_max) && inrange(x_max, ax, bx)) { X! *lx++ = x_min; X *ly = ay; X *lx++ = x_max; X *ly = ay; X*************** X*** 947,953 X && inrange(ay, ymin, ymax) && inrange(xmax, ax, bx)) { X *lx++ = xmin; X *ly = ay; X! *lx++ = xmax; X *ly = ay; X intersect = TRUE; X } X X--- 948,954 ----- X && inrange(ay, y_min, y_max) && inrange(x_max, ax, bx)) { X *lx++ = x_min; X *ly = ay; X! *lx++ = x_max; X *ly = ay; X intersect = TRUE; X } X*************** X*** 953,959 X } X } else if (ay == -VERYLARGE) { X /* note we know ax != -VERYLARGE */ X! if (inrange(bx, xmin, xmax) && inrange(ymax, ay, by)) { X *lx++ = bx; X *ly = ymin; X *lx++ = bx; X X--- 954,960 ----- X } X } else if (ay == -VERYLARGE) { X /* note we know ax != -VERYLARGE */ X! if (inrange(bx, x_min, x_max) && inrange(y_max, ay, by)) { X *lx++ = bx; X *ly = y_min; X *lx++ = bx; X*************** X*** 955,961 X /* note we know ax != -VERYLARGE */ X if (inrange(bx, xmin, xmax) && inrange(ymax, ay, by)) { X *lx++ = bx; X! *ly = ymin; X *lx++ = bx; X *ly = ymax; X intersect = TRUE; X X--- 956,962 ----- X /* note we know ax != -VERYLARGE */ X if (inrange(bx, x_min, x_max) && inrange(y_max, ay, by)) { X *lx++ = bx; X! *ly = y_min; X *lx++ = bx; X *ly = y_max; X intersect = TRUE; X*************** X*** 957,963 X *lx++ = bx; X *ly = ymin; X *lx++ = bx; X! *ly = ymax; X intersect = TRUE; X } X } else if (by == -VERYLARGE) { X X--- 958,964 ----- X *lx++ = bx; X *ly = y_min; X *lx++ = bx; X! *ly = y_max; X intersect = TRUE; X } X } else if (by == -VERYLARGE) { X*************** X*** 962,968 X } X } else if (by == -VERYLARGE) { X /* note we know bx != -VERYLARGE */ X! if (inrange(ax, xmin, xmax) && inrange(ymax, ay, by)) { X *lx++ = ax; X *ly = ymin; X *lx++ = ax; X X--- 963,969 ----- X } X } else if (by == -VERYLARGE) { X /* note we know bx != -VERYLARGE */ X! if (inrange(ax, x_min, x_max) && inrange(y_max, ay, by)) { X *lx++ = ax; X *ly = y_min; X *lx++ = ax; X*************** X*** 964,970 X /* note we know bx != -VERYLARGE */ X if (inrange(ax, xmin, xmax) && inrange(ymax, ay, by)) { X *lx++ = ax; X! *ly = ymin; X *lx++ = ax; X *ly = ymax; X intersect = TRUE; X X--- 965,971 ----- X /* note we know bx != -VERYLARGE */ X if (inrange(ax, x_min, x_max) && inrange(y_max, ay, by)) { X *lx++ = ax; X! *ly = y_min; X *lx++ = ax; X *ly = y_max; X intersect = TRUE; X*************** X*** 966,972 X *lx++ = ax; X *ly = ymin; X *lx++ = ax; X! *ly = ymax; X intersect = TRUE; X } X } X X--- 967,973 ----- X *lx++ = ax; X *ly = y_min; X *lx++ = ax; X! *ly = y_max; X intersect = TRUE; X } X } X*************** X*** 993,1002 X If not autoscaling, use the yrange for both x and y ranges. X */ X if (autoscale_ly) { X! xmin = VERYLARGE; X! ymin = VERYLARGE; X! xmax = -VERYLARGE; X! ymax = -VERYLARGE; X autoscale_lx = TRUE; X } else { X xmin = ymin; X X--- 994,1003 ----- X If not autoscaling, use the yrange for both x and y ranges. X */ X if (autoscale_ly) { X! x_min = VERYLARGE; X! y_min = VERYLARGE; X! x_max = -VERYLARGE; X! y_max = -VERYLARGE; X autoscale_lx = TRUE; X } else { X x_min = y_min; X*************** X*** 999,1006 X ymax = -VERYLARGE; X autoscale_lx = TRUE; X } else { X! xmin = ymin; X! xmax = ymax; X } X X this_plot = plots; X X--- 1000,1007 ----- X y_max = -VERYLARGE; X autoscale_lx = TRUE; X } else { X! x_min = y_min; X! x_max = y_max; X } X X this_plot = plots; X*************** X*** 1017,1026 X pnts[i].x = x; X pnts[i].y = y; X if (autoscale_ly) { X! if (xmin > x) xmin = x; X! if (xmax < x) xmax = x; X! if (ymin > y) ymin = y; X! if (ymax < y) ymax = y; X pnts[i].type = INRANGE; X } else if(inrange(x, xmin, xmax) && inrange(y, ymin, ymax)) X pnts[i].type = INRANGE; X X--- 1018,1027 ----- X pnts[i].x = x; X pnts[i].y = y; X if (autoscale_ly) { X! if (x_min > x) x_min = x; X! if (x_max < x) x_max = x; X! if (y_min > y) y_min = y; X! if (y_max < y) y_max = y; X pnts[i].type = INRANGE; X } else if(inrange(x, x_min, x_max) && inrange(y, y_min, y_max)) X pnts[i].type = INRANGE; X*************** X*** 1022,1028 X if (ymin > y) ymin = y; X if (ymax < y) ymax = y; X pnts[i].type = INRANGE; X! } else if(inrange(x, xmin, xmax) && inrange(y, ymin, ymax)) X pnts[i].type = INRANGE; X else X pnts[i].type = OUTRANGE; X X--- 1023,1029 ----- X if (y_min > y) y_min = y; X if (y_max < y) y_max = y; X pnts[i].type = INRANGE; X! } else if(inrange(x, x_min, x_max) && inrange(y, y_min, y_max)) X pnts[i].type = INRANGE; X else X pnts[i].type = OUTRANGE; X*************** X*** 1030,1036 X } X } X X! if (autoscale_lx && anydefined && fabs(xmax - xmin) < zero) { X /* This happens at least for the plot of 1/cos(x) (vertical line). */ X fprintf(stderr, "Warning: empty x range [%g:%g], ", xmin,xmax); X if (xmin == 0.0) { X X--- 1031,1037 ----- X } X } X X! if (autoscale_lx && anydefined && fabs(x_max - x_min) < zero) { X /* This happens at least for the plot of 1/cos(x) (vertical line). */ X fprintf(stderr, "Warning: empty x range [%g:%g], ", x_min,x_max); X if (x_min == 0.0) { X*************** X*** 1032,1041 X X if (autoscale_lx && anydefined && fabs(xmax - xmin) < zero) { X /* This happens at least for the plot of 1/cos(x) (vertical line). */ X! fprintf(stderr, "Warning: empty x range [%g:%g], ", xmin,xmax); X! if (xmin == 0.0) { X! xmin = -1; X! xmax = 1; X } else { X xmin *= 0.9; X xmax *= 1.1; X X--- 1033,1042 ----- X X if (autoscale_lx && anydefined && fabs(x_max - x_min) < zero) { X /* This happens at least for the plot of 1/cos(x) (vertical line). */ X! fprintf(stderr, "Warning: empty x range [%g:%g], ", x_min,x_max); X! if (x_min == 0.0) { X! x_min = -1; X! x_max = 1; X } else { X x_min *= 0.9; X x_max *= 1.1; X*************** X*** 1037,1044 X xmin = -1; X xmax = 1; X } else { X! xmin *= 0.9; X! xmax *= 1.1; X } X fprintf(stderr, "adjusting to [%g:%g]\n", xmin,xmax); X } X X--- 1038,1045 ----- X x_min = -1; X x_max = 1; X } else { X! x_min *= 0.9; X! x_max *= 1.1; X } X fprintf(stderr, "adjusting to [%g:%g]\n", x_min,x_max); X } X*************** X*** 1040,1046 X xmin *= 0.9; X xmax *= 1.1; X } X! fprintf(stderr, "adjusting to [%g:%g]\n", xmin,xmax); X } X if (autoscale_ly && anydefined && fabs(ymax - ymin) < zero) { X /* This happens at least for the plot of 1/sin(x) (horiz. line). */ X X--- 1041,1047 ----- X x_min *= 0.9; X x_max *= 1.1; X } X! fprintf(stderr, "adjusting to [%g:%g]\n", x_min,x_max); X } X if (autoscale_ly && anydefined && fabs(y_max - y_min) < zero) { X /* This happens at least for the plot of 1/sin(x) (horiz. line). */ X*************** X*** 1042,1048 X } X fprintf(stderr, "adjusting to [%g:%g]\n", xmin,xmax); X } X! if (autoscale_ly && anydefined && fabs(ymax - ymin) < zero) { X /* This happens at least for the plot of 1/sin(x) (horiz. line). */ X fprintf(stderr, "Warning: empty y range [%g:%g], ", ymin, ymax); X if (ymin == 0.0) { X X--- 1043,1049 ----- X } X fprintf(stderr, "adjusting to [%g:%g]\n", x_min,x_max); X } X! if (autoscale_ly && anydefined && fabs(y_max - y_min) < zero) { X /* This happens at least for the plot of 1/sin(x) (horiz. line). */ X fprintf(stderr, "Warning: empty y range [%g:%g], ", y_min, y_max); X if (y_min == 0.0) { X*************** X*** 1044,1053 X } X if (autoscale_ly && anydefined && fabs(ymax - ymin) < zero) { X /* This happens at least for the plot of 1/sin(x) (horiz. line). */ X! fprintf(stderr, "Warning: empty y range [%g:%g], ", ymin, ymax); X! if (ymin == 0.0) { X! ymin = -1; X! ymax = 1; X } else { X ymin *= 0.9; X ymax *= 1.1; X X--- 1045,1054 ----- X } X if (autoscale_ly && anydefined && fabs(y_max - y_min) < zero) { X /* This happens at least for the plot of 1/sin(x) (horiz. line). */ X! fprintf(stderr, "Warning: empty y range [%g:%g], ", y_min, y_max); X! if (y_min == 0.0) { X! y_min = -1; X! y_max = 1; X } else { X y_min *= 0.9; X y_max *= 1.1; X*************** X*** 1049,1056 X ymin = -1; X ymax = 1; X } else { X! ymin *= 0.9; X! ymax *= 1.1; X } X fprintf(stderr, "adjusting to [%g:%g]\n", ymin, ymax); X } X X--- 1050,1057 ----- X y_min = -1; X y_max = 1; X } else { X! y_min *= 0.9; X! y_max *= 1.1; X } X fprintf(stderr, "adjusting to [%g:%g]\n", y_min, y_max); X } X*************** X*** 1052,1058 X ymin *= 0.9; X ymax *= 1.1; X } X! fprintf(stderr, "adjusting to [%g:%g]\n", ymin, ymax); X } X } X X X--- 1053,1059 ----- X y_min *= 0.9; X y_max *= 1.1; X } X! fprintf(stderr, "adjusting to [%g:%g]\n", y_min, y_max); X } X } X X*************** X*** 1067,1073 X double ticmin, ticmax; /* for checking if tic is almost inrange */ X X if (end == VERYLARGE) /* for user-def series */ X! end = max(ymin,ymax); X X /* limit to right side of plot */ X end = min(end, max(ymin,ymax)); X X--- 1068,1074 ----- X double ticmin, ticmax; /* for checking if tic is almost inrange */ X X if (end == VERYLARGE) /* for user-def series */ X! end = max(y_min,y_max); X X /* limit to right side of plot */ X end = min(end, max(y_min,y_max)); X*************** X*** 1070,1076 X end = max(ymin,ymax); X X /* limit to right side of plot */ X! end = min(end, max(ymin,ymax)); X X /* to allow for rounding errors */ X ticmin = min(ymin,ymax) - SIGNIF*incr; X X--- 1071,1077 ----- X end = max(y_min,y_max); X X /* limit to right side of plot */ X! end = min(end, max(y_min,y_max)); X X /* to allow for rounding errors */ X ticmin = min(y_min,y_max) - SIGNIF*incr; X*************** X*** 1073,1080 X end = min(end, max(ymin,ymax)); X X /* to allow for rounding errors */ X! ticmin = min(ymin,ymax) - SIGNIF*incr; X! ticmax = max(ymin,ymax) + SIGNIF*incr; X end = end + SIGNIF*incr; X X for (ticplace = start; ticplace <= end; ticplace +=incr) { X X--- 1074,1081 ----- X end = min(end, max(y_min,y_max)); X X /* to allow for rounding errors */ X! ticmin = min(y_min,y_max) - SIGNIF*incr; X! ticmax = max(y_min,y_max) + SIGNIF*incr; X end = end + SIGNIF*incr; X X for (ticplace = start; ticplace <= end; ticplace +=incr) { X*************** X*** 1085,1091 X for (ltic = 2; ltic <= 9; ltic++) { X lticplace = ticplace+log10((double)ltic); X if ( inrange(lticplace,ticmin,ticmax) ) X! ytick(lticplace, (char *)NULL, incr, 0.5); X } X } X } X X--- 1086,1092 ----- X for (ltic = 2; ltic <= 9; ltic++) { X lticplace = ticplace+log10((double)ltic); X if ( inrange(lticplace,ticmin,ticmax) ) X! ytick(lticplace, "\0", incr, 0.5); X } X } X } X*************** X*** 1091,1097 X } X } X X- X /* DRAW_XTICS: draw a regular tic series, x axis */ X draw_xtics(start, incr, end) X double start, incr, end; /* tic series definition */ X X--- 1092,1097 ----- X } X } X X /* DRAW_XTICS: draw a regular tic series, x axis */ X draw_xtics(start, incr, end) X double start, incr, end; /* tic series definition */ X*************** X*** 1103,1109 X double ticmin, ticmax; /* for checking if tic is almost inrange */ X X if (end == VERYLARGE) /* for user-def series */ X! end = max(xmin,xmax); X X /* limit to right side of plot */ X end = min(end, max(xmin,xmax)); X X--- 1103,1109 ----- X double ticmin, ticmax; /* for checking if tic is almost inrange */ X X if (end == VERYLARGE) /* for user-def series */ X! end = max(x_min,x_max); X X /* limit to right side of plot */ X end = min(end, max(x_min,x_max)); X*************** X*** 1106,1112 X end = max(xmin,xmax); X X /* limit to right side of plot */ X! end = min(end, max(xmin,xmax)); X X /* to allow for rounding errors */ X ticmin = min(xmin,xmax) - SIGNIF*incr; X X--- 1106,1112 ----- X end = max(x_min,x_max); X X /* limit to right side of plot */ X! end = min(end, max(x_min,x_max)); X X /* to allow for rounding errors */ X ticmin = min(x_min,x_max) - SIGNIF*incr; X*************** X*** 1109,1116 X end = min(end, max(xmin,xmax)); X X /* to allow for rounding errors */ X! ticmin = min(xmin,xmax) - SIGNIF*incr; X! ticmax = max(xmin,xmax) + SIGNIF*incr; X end = end + SIGNIF*incr; X X for (ticplace = start; ticplace <= end; ticplace +=incr) { X X--- 1109,1116 ----- X end = min(end, max(x_min,x_max)); X X /* to allow for rounding errors */ X! ticmin = min(x_min,x_max) - SIGNIF*incr; X! ticmax = max(x_min,x_max) + SIGNIF*incr; X end = end + SIGNIF*incr; X X for (ticplace = start; ticplace <= end; ticplace +=incr) { X*************** X*** 1121,1127 X for (ltic = 2; ltic <= 9; ltic++) { X lticplace = ticplace+log10((double)ltic); X if ( inrange(lticplace,ticmin,ticmax) ) X! xtick(lticplace, (char *)NULL, incr, 0.5); X } X } X } X X--- 1121,1127 ----- X for (ltic = 2; ltic <= 9; ltic++) { X lticplace = ticplace+log10((double)ltic); X if ( inrange(lticplace,ticmin,ticmax) ) X! xtick(lticplace, "\0", incr, 0.5); X } X } X } X*************** X*** 1127,1134 X } X } X X! /* DRAW_USER_YTICS: draw a user tic series, y axis */ X! draw_user_ytics(list) X struct ticmark *list; /* list of tic marks */ X { X double ticplace; X X--- 1127,1189 ----- X } X } X X! /* DRAW_SERIES_YTICS: draw a user tic series, y axis */ X! draw_series_ytics(start, incr, end) X! double start, incr, end; /* tic series definition */ X! /* assume start < end, incr > 0 */ X! { X! double ticplace, place; X! double ticmin, ticmax; /* for checking if tic is almost inrange */ X! double spacing = log_y ? log10(incr) : incr; X! X! if (end == VERYLARGE) X! end = max(CheckLog(log_y, y_min), CheckLog(log_y, y_max)); X! else X! /* limit to right side of plot */ X! end = min(end, max(CheckLog(log_y, y_min), CheckLog(log_y, y_max))); X! X! /* to allow for rounding errors */ X! ticmin = min(y_min,y_max) - SIGNIF*incr; X! ticmax = max(y_min,y_max) + SIGNIF*incr; X! end = end + SIGNIF*incr; X! X! for (ticplace = start; ticplace <= end; ticplace +=incr) { X! place = (log_y ? log10(ticplace) : ticplace); X! if ( inrange(place,ticmin,ticmax) ) X! ytick(place, yformat, spacing, 1.0); X! } X! } X! X! X! /* DRAW_SERIES_XTICS: draw a user tic series, x axis */ X! draw_series_xtics(start, incr, end) X! double start, incr, end; /* tic series definition */ X! /* assume start < end, incr > 0 */ X! { X! double ticplace, place; X! double ticmin, ticmax; /* for checking if tic is almost inrange */ X! double spacing = log_x ? log10(incr) : incr; X! X! if (end == VERYLARGE) X! end = max(CheckLog(log_x, x_min), CheckLog(log_x, x_max)); X! else X! /* limit to right side of plot */ X! end = min(end, max(CheckLog(log_x, x_min), CheckLog(log_x, x_max))); X! X! /* to allow for rounding errors */ X! ticmin = min(x_min,x_max) - SIGNIF*incr; X! ticmax = max(x_min,x_max) + SIGNIF*incr; X! end = end + SIGNIF*incr; X! X! for (ticplace = start; ticplace <= end; ticplace +=incr) { X! place = (log_x ? log10(ticplace) : ticplace); X! if ( inrange(place,ticmin,ticmax) ) X! xtick(place, xformat, spacing, 1.0); X! } X! } X! X! /* DRAW_SET_YTICS: draw a user tic set, y axis */ X! draw_set_ytics(list) X struct ticmark *list; /* list of tic marks */ X { X double ticplace; X*************** X*** 1132,1139 X struct ticmark *list; /* list of tic marks */ X { X double ticplace; X! double incr = (ymax - ymin) / 10; X! /* global xmin, xmax, xscale, ymin, ymax, yscale */ X X while (list != NULL) { X ticplace = list->position; X X--- 1187,1194 ----- X struct ticmark *list; /* list of tic marks */ X { X double ticplace; X! double incr = (y_max - y_min) / 10; X! /* global x_min, x_max, xscale, y_min, y_max, yscale */ X X while (list != NULL) { X ticplace = (log_y ? log10(list->position) : list->position); X*************** X*** 1136,1145 X /* global xmin, xmax, xscale, ymin, ymax, yscale */ X X while (list != NULL) { X! ticplace = list->position; X! if ( inrange(ticplace, ymin, ymax) /* in range */ X! || NearlyEqual(ticplace, ymin, incr) /* == ymin */ X! || NearlyEqual(ticplace, ymax, incr)) /* == ymax */ X ytick(ticplace, list->label, incr, 1.0); X X list = list->next; X X--- 1191,1200 ----- X /* global x_min, x_max, xscale, y_min, y_max, yscale */ X X while (list != NULL) { X! ticplace = (log_y ? log10(list->position) : list->position); X! if ( inrange(ticplace, y_min, y_max) /* in range */ X! || NearlyEqual(ticplace, y_min, incr) /* == y_min */ X! || NearlyEqual(ticplace, y_max, incr)) /* == y_max */ X ytick(ticplace, list->label, incr, 1.0); X X list = list->next; X*************** X*** 1146,1153 X } X } X X! /* DRAW_USER_XTICS: draw a user tic series, x axis */ X! draw_user_xtics(list) X struct ticmark *list; /* list of tic marks */ X { X double ticplace; X X--- 1201,1208 ----- X } X } X X! /* DRAW_SET_XTICS: draw a user tic set, x axis */ X! draw_set_xtics(list) X struct ticmark *list; /* list of tic marks */ X { X double ticplace; X*************** X*** 1151,1158 X struct ticmark *list; /* list of tic marks */ X { X double ticplace; X! double incr = (xmax - xmin) / 10; X! /* global xmin, xmax, xscale, ymin, ymax, yscale */ X X while (list != NULL) { X ticplace = list->position; X X--- 1206,1213 ----- X struct ticmark *list; /* list of tic marks */ X { X double ticplace; X! double incr = (x_max - x_min) / 10; X! /* global x_min, x_max, xscale, y_min, y_max, yscale */ X X while (list != NULL) { X ticplace = (log_x ? log10(list->position) : list->position); X*************** X*** 1155,1164 X /* global xmin, xmax, xscale, ymin, ymax, yscale */ X X while (list != NULL) { X! ticplace = list->position; X! if ( inrange(ticplace, xmin, xmax) /* in range */ X! || NearlyEqual(ticplace, xmin, incr) /* == xmin */ X! || NearlyEqual(ticplace, xmax, incr)) /* == xmax */ X xtick(ticplace, list->label, incr, 1.0); X X list = list->next; X X--- 1210,1219 ----- X /* global x_min, x_max, xscale, y_min, y_max, yscale */ X X while (list != NULL) { X! ticplace = (log_x ? log10(list->position) : list->position); X! if ( inrange(ticplace, x_min, x_max) /* in range */ X! || NearlyEqual(ticplace, x_min, incr) /* == x_min */ X! || NearlyEqual(ticplace, x_max, incr)) /* == x_max */ X xtick(ticplace, list->label, incr, 1.0); X X list = list->next; X*************** X*** 1194,1209 X } X X /* label the ticmark */ X! if (text) { X! (void) sprintf(ticlabel, text, CheckLog(log_y, place)); X! if ((*t->justify_text)(RIGHT)) { X! (*t->put_text)(xleft-(t->h_char), X! map_y(place), ticlabel); X! } else { X! (*t->put_text)(xleft-(t->h_char)*(strlen(ticlabel)+1), X! map_y(place), ticlabel); X! } X! } X } X X /* draw and label an x-axis ticmark */ X X--- 1249,1265 ----- X } X X /* label the ticmark */ X! if (text == NULL) X! text = yformat; X! X! (void) sprintf(ticlabel, text, CheckLog(log_y, place)); X! if ((*t->justify_text)(RIGHT)) { X! (*t->put_text)(xleft-(t->h_char), X! map_y(place), ticlabel); X! } else { X! (*t->put_text)(xleft-(t->h_char)*(strlen(ticlabel)+1), X! map_y(place), ticlabel); X! } X } X X /* draw and label an x-axis ticmark */ X*************** X*** 1233,1239 X (*t->move)(map_x(place), ybot); X (*t->vector)(map_x(place), ybot - ticsize); X } X! X /* label the ticmark */ X if (text) { X (void) sprintf(ticlabel, text, CheckLog(log_x, place)); X X--- 1289,1295 ----- X (*t->move)(map_x(place), ybot); X (*t->vector)(map_x(place), ybot - ticsize); X } X! X /* label the ticmark */ X if (text == NULL) X text = xformat; X*************** X*** 1235,1248 X } X X /* label the ticmark */ X! if (text) { X! (void) sprintf(ticlabel, text, CheckLog(log_x, place)); X! if ((*t->justify_text)(CENTRE)) { X! (*t->put_text)(map_x(place), X! ybot-(t->v_char), ticlabel); X! } else { X! (*t->put_text)(map_x(place)-(t->h_char)*strlen(ticlabel)/2, X! ybot-(t->v_char), ticlabel); X! } X } X } X X--- 1291,1305 ----- X } X X /* label the ticmark */ X! if (text == NULL) X! text = xformat; X! X! (void) sprintf(ticlabel, text, CheckLog(log_x, place)); X! if ((*t->justify_text)(CENTRE)) { X! (*t->put_text)(map_x(place), X! ybot-(t->v_char), ticlabel); X! } else { X! (*t->put_text)(map_x(place)-(t->h_char)*strlen(ticlabel)/2, X! ybot-(t->v_char), ticlabel); X } X } Xdiff -cr ./docs/gnuplot.1 ../patch/docs/gnuplot.1 X*** ./docs/gnuplot.1 Tue Mar 27 08:59:42 1990 X--- ../patch/docs/gnuplot.1 Thu Sep 6 09:59:07 1990 X*************** X*** 1,5 X .\" dummy line X! .TH GNUPLOT 1 "13 February 1990" X .UC 4 X .SH NAME X gnuplot \- an interactive plotting program X X--- 1,5 ----- X .\" dummy line X! .TH GNUPLOT 1 "31 August 1990" X .UC 4 X .SH NAME X gnuplot \- an interactive plotting program X*************** X*** 4,10 X .SH NAME X gnuplot \- an interactive plotting program X .SH SYNOPSIS X! .B gnuplot file ... X .br X .SH DESCRIPTION X .I Gnuplot X X--- 4,11 ----- X .SH NAME X gnuplot \- an interactive plotting program X .SH SYNOPSIS X! .B gnuplot X! [ X11 options ] [file ...] X .br X .SH DESCRIPTION X .I Gnuplot X*************** X*** 38,43 X BBN BitGraph, X Roland DXY800A, X EEPIC, X Epson LX-800, X Fig, X HP2623, X X--- 39,46 ----- X BBN BitGraph, X Roland DXY800A, X EEPIC, X+ EmTeX, X+ Epson 60dpi printers, X Epson LX-800, X Fig, X HP2623, X*************** X*** 54,59 X QMS QUIC, X ReGis (VT125 and VT2xx), X Selanar, X Tek 401x, X Vectrix 384, X and unixplot. X X--- 57,64 ----- X QMS QUIC, X ReGis (VT125 and VT2xx), X Selanar, X+ Star color printer, X+ Tandy DMP-130 printer, X Tek 401x, X Tek 410x, X Vectrix 384, X*************** X*** 55,60 X ReGis (VT125 and VT2xx), X Selanar, X Tek 401x, X Vectrix 384, X and unixplot. X The PC version compiled by Microsoft C X X--- 60,66 ----- X Star color printer, X Tandy DMP-130 printer, X Tek 401x, X+ Tek 410x, X Vectrix 384, X Unix PC (ATT 3b1 or ATT 7300) X unixplot, X*************** X*** 56,62 X Selanar, X Tek 401x, X Vectrix 384, X! and unixplot. X The PC version compiled by Microsoft C X supports IBM CGA, EGA, VGA, Hercules, ATT 6300, X and Corona 325 graphics. X X--- 62,70 ----- X Tek 401x, X Tek 410x, X Vectrix 384, X! Unix PC (ATT 3b1 or ATT 7300) X! unixplot, X! and X11. X The PC version compiled by Microsoft C X supports IBM CGA, EGA, VGA, Hercules, ATT 6300, X and Corona 325 graphics. X*************** X*** 61,67 X supports IBM CGA, EGA, VGA, Hercules, ATT 6300, X and Corona 325 graphics. X The PC version compiled by Turbo C X! supports IBM CGA, EGA, MCGA, VGA and Hercules graphics. X Other devices can be added simply, but will require recompiling. X .PP X Shell escapes and command line substitution. X X--- 69,75 ----- X supports IBM CGA, EGA, VGA, Hercules, ATT 6300, X and Corona 325 graphics. X The PC version compiled by Turbo C X! supports IBM CGA, EGA, MCGA, VGA, Hercules and ATT 6300 graphics. X Other devices can be added simply, but will require recompiling. X .PP X Shell escapes and command line substitution. X*************** X*** 73,78 X All computations performed in the complex domain. Just the real part is X plotted by default, but functions like imag() and abs() and arg() are X available to override this. X .SH AUTHORS X Thomas Williams, Pixar Corporation, X .br X X--- 81,123 ----- X All computations performed in the complex domain. Just the real part is X plotted by default, but functions like imag() and abs() and arg() are X available to override this. X+ .SH X11 OPTIONS X+ .I Gnuplot X+ provides two terminal types (\fIx11\fP and \fIX11\fP) for use X+ with X servers. The \fIX11\fP terminal type provides differing colors as well X+ as shapes for the \fIpoints\fP plotting style. The two types are otherwise X+ identical. When used with either of these terminal types, \fIgnuplot\fP X+ honors all the standard X Toolkit options and resources such as geometry, font, X+ foreground and background. See the X(1) man page for a description of X+ the options. For color or grayscale displays \fIgnuplot\fP also honors X+ the following resources (shown here with default values): X+ .sp X+ .B "gnuplot*textColor: black" X+ .br X+ .B "gnuplot*borderColor: black" X+ .br X+ .B "gnuplot*axisColor: black" X+ .br X+ .B "gnuplot*line1Color: red" X+ .br X+ .B "gnuplot*line2Color: green" X+ .br X+ .B "gnuplot*line3Color: blue" X+ .br X+ .B "gnuplot*line4Color: magenta" X+ .br X+ .B "gnuplot*line5Color: cyan" X+ .br X+ .B "gnuplot*line6Color: sienna" X+ .br X+ .B "gnuplot*line7Color: orange" X+ .br X+ .B "gnuplot*line8Color: coral" X+ .br X+ .PP X+ The size or aspect ratio of a plot may be changed by resizing the X+ .I gnuplot X+ window. X .SH AUTHORS X Thomas Williams, Pixar Corporation, X .br X*************** X*** 87,92 X Further additions by David Kotz, Duke University, North Carolina, USA. X .br X (dfk@cs.duke.edu) X .SH BUGS X The atan() function does not work correctly for complex arguments. X .br X X--- 132,139 ----- X Further additions by David Kotz, Duke University, North Carolina, USA. X .br X (dfk@cs.duke.edu) X+ .br X+ X11 support by Ed Kubaitis, University of Illinois, USA. X .SH BUGS X The atan() function does not work correctly for complex arguments. X .br X*************** X*** 90,95 X .SH BUGS X The atan() function does not work correctly for complex arguments. X .br X See the X .I help bugs X command in gnuplot. X X--- 137,144 ----- X .SH BUGS X The atan() function does not work correctly for complex arguments. X .br X+ The bessel functions do not work for complex arguments. X+ .br X See the X .I help bugs X command in gnuplot. X*************** X*** 95,97 X command in gnuplot. X .SH SEE ALSO X See the printed manual or the on-line help for details on specific commands. X X--- 144,148 ----- X command in gnuplot. X .SH SEE ALSO X See the printed manual or the on-line help for details on specific commands. X+ .br X+ X(1). Xdiff -cr ./docs/gnuplot.doc ../patch/docs/gnuplot.doc X*** ./docs/gnuplot.doc Tue Mar 27 08:59:55 1990 X--- ../patch/docs/gnuplot.doc Wed Sep 12 17:36:14 1990 X*************** X*** 21,26 X many commands. X X For help on any topic, type 'help' followed by the name of the topic. X 2 clear X ?clear X The `clear` command erases the current screen or output device as X X--- 21,39 ----- X many commands. X X For help on any topic, type 'help' followed by the name of the topic. X+ 2 cd X+ ?cd X+ The `cd` command changes working directory. X+ X+ Syntax: X+ cd <directory-name> X+ X+ The directory name must be enclosed in quotes. X+ X+ Examples: X+ X+ cd 'subdir' X+ cd ".." X 2 clear X ?clear X The `clear` command erases the current screen or output device as X*************** X*** 30,36 X ?comments X Comments are supported as follows: a # may appear in most places in a line X and GNUPLOT will ignore the rest of the line. It will not have this X! affect inside quotes, inside numbers (including complex numbers), inside X command substitutions, etc. In short, it works anywhere it makes sense X to work. X 2 environment X X--- 43,49 ----- X ?comments X Comments are supported as follows: a # may appear in most places in a line X and GNUPLOT will ignore the rest of the line. It will not have this X! effect inside quotes, inside numbers (including complex numbers), inside X command substitutions, etc. In short, it works anywhere it makes sense X to work. X 2 environment X*************** X*** 49,56 X On VMS, the symbol GNUPLOT$HELP should be defined as the name of X the help library for gnuplot. X X! On Unix, HOME is used as the name of a directory to search for a X! .gnuplot file if none is found in the current directory. X On MS-DOS, GNUPLOT is used. On VMS, SYS$LOGIN: is used. X See help start-up. X X X--- 62,69 ----- X On VMS, the symbol GNUPLOT$HELP should be defined as the name of X the help library for gnuplot. X X! On Unix, HOME is used as the name of a directory to search for X! a .gnuplot file if none is found in the current directory. X On MS-DOS, GNUPLOT is used. On VMS, SYS$LOGIN: is used. X See help start-up. X X*************** X*** 653,658 X print <expression> X X See `expressions`. X 2 quit X ?quit X The `exit` and `quit` commands and your computer's END-OF-FILE X X--- 666,677 ----- X print <expression> X X See `expressions`. X+ 2 pwd X+ ?pwd X+ The `pwd` command prints the name of the working directory to the screen. X+ X+ Syntax: X+ pwd X 2 quit X ?quit X The `exit` and `quit` commands and your computer's END-OF-FILE X*************** X*** 1400,1405 X ?bugs X The atan() function does not work correctly for complex arguments. X X The most important known bug is actually in the stdio library for the X Sun4 operating system (SunOS Sys4-3.2). The "%g" format for `printf` X sometimes incorrectly prints numbers (e.g., 200000.0 as "2"). Thus, X X--- 1419,1426 ----- X ?bugs X The atan() function does not work correctly for complex arguments. X X+ The bessel functions do not work for complex arguments. X+ X The most important known bug is actually in the stdio library for the X Sun4 operating system (SunOS Sys4-3.2). The "%g" format for `printf` X sometimes incorrectly prints numbers (e.g., 200000.0 as "2"). Thus, X*************** X*** 1446,1448 X %g format than release 2.4, but not much. Trailing decimal points are X now removed, but trailing zeros are still not removed from %g numbers X in exponential format. X X--- 1467,1472 ----- X %g format than release 2.4, but not much. Trailing decimal points are X now removed, but trailing zeros are still not removed from %g numbers X in exponential format. X+ X+ Please report any bugs you find to pixar!bug-gnuplot@sun.com or X+ pixar!bug-gnuplot@ucbvax.berkeley.edu. XCommon subdirectories: ./docs/latextut and ../patch/docs/latextut Xdiff -cr ./docs/latextut/tutorial.tex ../patch/docs/latextut/tutorial.tex X*** ./docs/latextut/tutorial.tex Tue Mar 27 09:00:42 1990 X--- ../patch/docs/latextut/tutorial.tex Tue Aug 28 16:17:28 1990 X*************** X*** 57,62 X and may produce better-looking plots. See Section~\ref{s:eepic} for X more information. X X \section{Using GNUPLOT for \LaTeX: a Tutorial} X X GNUPLOT is by nature an interactive program. Users making plots for X X--- 57,68 ----- X and may produce better-looking plots. See Section~\ref{s:eepic} for X more information. X X+ There is a small package of auxiliary files (makefiles and scripts) X+ that I find useful for making \LaTeX\ plots with GNUPLOT. This is X+ available for \verb+ftp+ as \verb+pub/gnuplot-latex.shar+ from X+ \verb+cs.duke.edu+. I can mail copies (see the end of this paper for X+ information). X+ X \section{Using GNUPLOT for \LaTeX: a Tutorial} X X GNUPLOT is by nature an interactive program. Users making plots for X*************** X*** 500,505 X may be changed. X X \section{Contact} X! Please contact me at dfk@cs.duke.edu with any comments you may have. X X \end{document} X X--- 506,515 ----- X may be changed. X X \section{Contact} X! Please contact me at \verb+dfk@cs.duke.edu+ with any comments you may X! have on GNUPLOT's \LaTeX\ driver. For general GNUPLOT questions, send X! mail to the GNUPLOT mailing list X! (\verb+pixar!info-gnuplot@ucbvax.berkeley.edu+). X! X X \end{document} Xdiff -c ./translate/command.c ../patch/translate/command.c X*** ./translate/command.c Tue Mar 27 09:03:58 1990 X--- ../patch/translate/command.c Tue Aug 28 16:07:33 1990 X*************** X*** 983,989 X err_msg(message); X X if (point && line) X! return(LINESPOINTS); X if (point) X return(POINTS); X if (line) X X--- 983,989 ----- X err_msg(message); X X if (point && line) X! return((int)LINESPOINTS); X if (point) X return((int)POINTS); X if (line) X*************** X*** 985,991 X if (point && line) X return(LINESPOINTS); X if (point) X! return(POINTS); X if (line) X return(LINES); X X X--- 985,991 ----- X if (point && line) X return((int)LINESPOINTS); X if (point) X! return((int)POINTS); X if (line) X return((int)LINES); X X*************** X*** 987,993 X if (point) X return(POINTS); X if (line) X! return(LINES); X X /* should not happen */ X err_msg("no standard style corresponds to this style"); X X--- 987,993 ----- X if (point) X return((int)POINTS); X if (line) X! return((int)LINES); X X /* should not happen */ X err_msg("no standard style corresponds to this style"); X*************** X*** 991,997 X X /* should not happen */ X err_msg("no standard style corresponds to this style"); X! return(LINES); X } X X X X--- 991,997 ----- X X /* should not happen */ X err_msg("no standard style corresponds to this style"); X! return((int)LINES); X } X X END_OF_patch1b if test 63974 -ne `wc -c <patch1b`; then echo shar: \"patch1b\" unpacked with wrong size! fi # end of overwriting check fi echo shar: End of shell archive. exit 0