home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload
/
ShartewareOverload.cdr
/
progm
/
graphfor.zip
/
GRAPH.FOR
< prev
next >
Wrap
Text File
|
1990-05-04
|
6KB
|
146 lines
PROGRAM GRAPH
*
* Fortran source GRAPH.for v2.0 Copyright (C) D.I.Hoyer, 1990
*
INTEGER*2 IGRAPH
CHARACTER*80 GLABEL, XLABEL, YLABEL, LEGEND, STRNG
DIMENSION IGRAPH(1040,110), X(200), Y(200), P(20)
*
* Graph plotting on dot matrix printers.
*
* This is a sample main program for plotting a graph from a data file,
* which must be set up as described in the manual.
*
* The program is set up for IBM, Epson, Star type dot matrix printers.
* If you have a printer which uses different graphics commands, or if
* the graph doesn't appear to print properly, check your printer manual
* and change the appropriate parameters in subroutine PRTGRF.
*
* Maximum graph size (nominal, for Hi-res plotting) = 20 x 25 cm.
* This can be changed by changing the DIMENSION of IGRAPH :
* DIMENSION IGRAPH(a,b) : a = max no. of dot columns across page
* b = (max no of dot rows)/14 + 1
*
* GLABEL, XLABEL & YLABEL : Graph heading, and X & Y axis labels.
* XL,YL = Lengths of X and Y axes, cm.
* MAXX = Number of dots across x-axis. (calculated by PREP)
* MAXY = Number of dots along y-axis. (calculated by PREP)
* XMIN, XMAX, YMIN, YMAX = Min & max x,y values to define edges of
* plotting area.
* XMINA, XMAX, YMINA, YMAXA = Total plotting area, including space above,
* below and left of the graph for labels. These
* are calculated by PREP
* NDIVX, NDIVY = No of divisions along axes (0 for log. scales)
* NSDIVX, NSDIVY = No of secondary divisions along axes (between other
* divisions). Use 1 or 9 for log. scales.
* NDPX, NDPY = No of decimal places to be printed after dec. point, for
* axis values. Ignored for log. scales.
* IVH = 1 for vertical (portrait) printout, 2 for horizontal (landscape).
* IGRPRT= 1 to print the axes,
* 0 to suppress printing of axes.
* LOHI = 1 for Low-res (quick) plot, 2 for Hi-Res.
* IOFF = Offset. This number of blank spaces will be printed from the left
* margin ahead of the graph.
* IGRID = 0 to print axes without grid lines,
* 1 to n for grid lines of line type LTYP.
* NSETS = No of sets of data to be plotted.
* Each set of points, curve, function or text string is a data set.
* LEGPOS= Position of legend block. 1 = top left, to 4 = top right.
* 5 = bott. " , to 8 = bott. " .
* NPTS = No of data points for current data set, or if <=0 then..
* 0 to plot a function curve,
* -1 for plotting a text string,
* -2 to clear a rectangular area of the graph, with optional border.
* LTYP = Line type for joining points.
* 0 = no line,
* 1 to 5 straight lines,
* -5 to -1 for cubic spline fit (smooth curve).
* MARK = Symbol to be plotted at each point
* (1 = dot, 2..8 = symbol, 32..126 = ASCII character)
* MSIZE = Size of MARK (1..n) Try 3 for a start.
* LEGEND= Text to describe each data set.
* Blank to suppress.
* IFN = Function number (pre-compiled in FUNCT) to plot if NPTS=0.
* NPARMS= Number of parameters to be passed to function IFN (max 100).
* X1,X2 = Start and end values of x for plotting IFN.
* P(J),J=1,NPARMS = The parameters to be passed to function IFN.
* ITXSIZ= Size of text to be plotted (1 to n). 2 = "normal".
* STRNG = A string of text to be printed on the graph
*
* MMAXX,MMAXY are for passing the dimension of IGRAPH through subs.
* (calculated by PREP)
* MMAXX is the number of columns of dots across the page,
* MMAXY is the (number of rows of dots)/14
*
READ(5,606) IGRPRT, XL, YL, GLABEL
606 FORMAT(I10,2F10.0,A60)
READ(5,505) XMIN, XMAX, YMIN, YMAX
505 FORMAT(8F10.0)
READ(5,101) NDIVX, NSDIVX, NDPX, XLABEL
101 FORMAT(3I10,A60)
READ(5,101) NDIVY, NSDIVY, NDPY, YLABEL
READ(5,202) IVH, LOHI, IOFF, IGRID, NSETS, LEGPOS
202 FORMAT(8I10)
*
* Do some preparations/calcs before plotting axes or data
*
CALL PREP(XL,YL,NDIVX,NDIVY,XMINA,XMAXA,YMINA,YMAXA,
$ XMIN,YMIN,XMAX,YMAX,MAXX,MAXY,MMAXX,MMAXY,LOHI,IVH)
*
* Clear the graph (this is only necessary if you want your program
* to print more than one graph, as the first graph is clear when you start).
* Remove the comment asterisk in column 1 to activate the next line if you
* need to clear the graph:
*
* CALL CLRGRF(MMAXX,MMAXY,IGRAPH)
*
* Draw the axes
*
IF(IGRPRT.EQ.1) CALL AXES(IGRID,NDIVX,NDIVY,NSDIVX,NSDIVY,NDPX,
$ NDPY,GLABEL,XLABEL,YLABEL,XMINA,XMAXA,YMINA,YMAXA,XMIN,YMIN,XMAX,
$ YMAX,MAXX,MAXY,MMAXX,MMAXY,LOHI,IGRAPH,IVH)
*
* Read the NSETS sets of data
*
ILEGND = 0
DO 10 I=1, NSETS
READ(5,707) NPTS, LTYP, MARK, MSIZE, LEGEND
707 FORMAT(4I10,A)
IF(NPTS.EQ.-2) THEN ! If NPTS=-2 then clear a box, with border
READ(5,505) X(1), Y(1), X(2), Y(2)
ELSEIF(NPTS.EQ.-1) THEN ! If NPTS=-1 then text is to be plotted.
READ(5,808) IORI, ITXSIZ, XX, YY
808 FORMAT(2I10,2F10.0)
READ(5,909) STRNG
909 FORMAT(A)
ELSEIF(NPTS.EQ.0) THEN ! If NPTS=0 then a function plot is required.
READ(5,404) IFN, NPARMS, X1, X2
404 FORMAT(2I10,2F10.0)
READ(5,505) (P(J),J=1,NPARMS)
ELSE ! A set of points is to be plotted
READ(5,303) (X(J),Y(J),J=1,NPTS)
303 FORMAT(2F10.0)
ENDIF
*-------Plot the data set (text, function or points)
CALL PLOTD(NPTS,LTYP,MARK,MSIZE,LEGEND,IORI,ITXSIZ,XX,YY,
$ XMINA,XMAXA,YMINA,YMAXA,XMIN,YMIN,XMAX,YMAX,MAXX,MAXY,MMAXX,
$ MMAXY,LOHI,IGRAPH,IVH,STRNG,IFN,X1,X2,P,X,Y,ILEGND,LEGPOS,
$ NDIVX,NDIVY)
10 CONTINUE
*
* Print out the graph
*
CALL PRTGRF(IOFF,MMAXX,MMAXY,LOHI,IGRAPH)
STOP
END
*---------------------------------------------------------------------------
INCLUDE "GRAPHFNS.for"
INCLUDE "GRAPHLIB.for"
*---------------------------------------------------------------------------