SUB PLOT (INTEGER num_of_points, SINGLE xarr(), yarr(), STRING xlab, ylab) !+ ! This is a program which will plot NUM_OF_POINTS points in the ! arrays XARR and YARR. The labels for the axis are specified ! by XLAB and YLAB. ! OPTION TYPE = EXPLICIT, CONSTANT TYPE = INTEGER DECLARE INTEGER CONSTANT green = 1% DECLARE INTEGER CONSTANT red = 2% DECLARE INTEGER CONSTANT blue = 3% DECLARE STRING TRIMMED_XLAB, TRIMMED_YLAB DECLARE SINGLE x_min, x_max, y_min, y_max, x_incr, y_incr DECLARE LONG do_x, i !+ ! Determine MAX and MIN values for X and Y !- x_min, y_min = 2.0**31 y_max, x_max = -2.0**31 FOR i = 0% TO num_of_points - 1% x_min = xarr(i) IF xarr(i) < x_min x_max = xarr(i) IF xarr(i) > x_max Y_min = yarr(i) IF yarr(i) < y_min y_max = yarr(i) IF yarr(i) > Y_max NEXT i SET WINDOW x_min - .30*(x_max - x_min), x_max + .10 * (x_max - x_min), & y_min - .30 * (y_max - y_min), y_max + .10*(y_max - y_min) CLEAR !+ ! Find the appropriate interval size !- x_incr = (x_max - x_min)/10% y_incr = (y_max - y_min)/10% DIM single xx(10%), yy(10%) !+ ! Fill in background of graph area !- XX(0) = x_min \ yy(0) = y_min xx(1) = x_max \ yy(1) = y_min XX(2) = x_max \ yy(2) = y_max xx(3) = x_min \ yy(3) = y_max SET AREA COLOR blue SET AREA STYLE 'SOLID' MAT GRAPH AREA, COUNT 4%: xx,yy !+ ! Define characteristics of Axis lines !- SET LINE STYLE 1 SET LINE COLOR green !+ ! Draw axis !- MAT GRAPH LINES, COUNT 2%: XX,YY XX(0) = x_min \ yy(0) = y_min xx(1) = x_min \ yy(1) = y_max MAT GRAPH LINES, COUNT 2%: XX, YY !+ ! Label and mark increments on AXIS !- SET POINT STYLE 2 SET POINT SIZE .3 SET POINT COLOR GREEN SET CLIP 'OFF' SET TEXT HEIGHT .035 * (y_max - y_min) xx(0) = x_min yy(0) = y_min do_x = 1 FOR i = 1% TO 10% yy(i) = y_min + (i * y_incr) SET TEXT JUSTIFY "RIGHT", "HALF" GRAPH TEXT AT x_min-.25*x_incr,yy(i): NUM1$(int(yy(i)*100%)/100.0) GRAPH POINTS x_min, yy(i) !+ ! Only label every other increment on X axis because of space !- xx(i) = x_min + (i * x_incr) IF do_x THEN SET TEXT JUSTIFY "CENTER", "TOP" GRAPH TEXT AT xx(i), y_min - .5* y_incr: & NUM1$(int(xx(i)*100%)/100.0) END IF do_x = 1 - do_x GRAPH POINTS xx(i), y_min NEXT i !+ ! PLOT POINTS !- SET POINT COLOR red SET POINT SIZE .5 MAT GRAPH POINTS, COUNT num_of_points: xarr, yarr !+ ! Connect points with solid line !- SET LINE COLOR red MAT GRAPH LINES, COUNT num_of_points: xarr, yarr !+ ! Label AXIS !- trimmed_xlab = EDIT$(xlab, 8 + 128) ! Trim leading and trailing spaces and tabs trimmed_ylab = EDIT$(ylab, 8 + 128) ! Trim SET TEXT JUSTIFY "CENTER", "HALF" SET TEXT HEIGHT .05 * (y_max - y_min) GRAPH TEXT AT x_min + .55 *(x_max - x_min), & y_min - .15 * (y_max - y_min): trimmed_xlab SET TEXT PATH "DOWN" GRAPH TEXT AT x_min -.25 * (x_max - x_min), & y_min + .55 * (y_max - y_min) : trimmed_ylab END SUB