\\ .TITLE ^VERSAPLOT-07 .C;^VERSAPLOT-07 ^^DOCUMENTATION\\ .C;^^TABLE OF CONTENTS\\ .SKIP 2 .TAB STOPS 30 .NOFILL ^VERSAPLOT-07 ^^SUMMARY 2 EXAMPLES 15 OPERATIONS 17 ERRORS 24 INDEX \\27 .SKIP 4;^DOCUMENT MAINTAINER: ^ADVANCED ^GRAPHICS ^LAB .BR;^LAST UPDATE: 26-^Sep-78 .FILL;.PAGE .C;^^VERSAPLOT-07 ^^SUMMARY\\ .SKIP 2 ^THE ^^VERSAPLOT-07 ^^PPEP\\(^PEN ^PLOTTING ^EMULATOR ^PACKAGE) CONSISTS OF ^^FORTRAN\\ CALLABLE SUBROUTINES : .SKIP 1 .NOFILL;.TAB STOPS 8,16 ^^PLOTS\\ INITIALIZE ^VERSAPLOT-07 ^^PLOTS2\\ Initializes ^Versaplot-07 and enables the real-time dialogue ^^PLOTS3\\ Initializes ^Versaplot-07 with specified parameters. ^^PLOT\\ PROCESS COORDINATE DATA INTO VECTORS ^^OFFSET\\ SETS COORDINATE OFFSETS AND SCALING FACTORS ^^FACTOR\\ SETS NEW DRAWING FACTOR ^^NEWPEN\\ SETS LINE WIDTH ^^WHERE\\ RETURNS CURRENT POSITION AND DRAW FACTOR ^^SYMBOL\\ PLOT CHARACTER TEXT AND SPECIAL SYMBOLS ^^NUMBER\\ PLOTS NUMERIC VALUES OF PROGRAM VARIABLES ^^SCALE\\ SEARCHES UNSCALED DATA ARRAYS FOR MAX OR MIN, THEN COMPUTES SCALE FACTORS ^^LINE\\ PLOTS ARRAYS OF SCALED OR UNSCALED DATA (LINE OR CENTERED SYMBOLS) ^^AXIS\\ DRAWS AXES ^^SETMSG\\ SETS LEVEL OF DIAGNOSTIC MESSAGES .SKIP 1 .FILL ^IN ADDITION TO ^^PPEP\\ THE FOLLOWING ^^EPS\\ (^ELECTROSTATIC ^PLOTTING ^SYSTEM) ROUTINES ARE AVAILABLE: .SKIP 1 .NOFILL ^^GRID\\ DRAWS HORIZONTAL AND/OR VERTICAL GRIDS ^^TONE\\ PERFORMS AREA SHADING WITH USER DEFINED PATTERNS IN USER DEFINED POLYGONS .PAGE .FILL .INDEX ^^PLOTS\\ .INDEX ^^PLOTS2\\ .INDEX ^^PLOTS3\\ 1.##^&^^PLOTS,PLOTS2,PLOTS3\\\& -^INITIALIZE SYSTEM FOR PLOTTING. .SKIP 1.UC ^Three entry points are available to initialize the ^Versaplot-07 system; ^^PLOTS, PLOTS2, and PLOTS3\\. ^The ^^PLOTS\\ and ^^PLOTS2\\ entries are as made available by the ^Versaplot-07 software whereas ^^PLOTS3\\ is an ^^AGL\\ extension to the package. ^The entries provide the following capabilites: .sk.lm15.i-10 ^^PLOTS\\ --# Initializes system with default parameters (no arguments) .i-10 ^^PLOTS2\\ -- Allows the user to define external plotting parameters at the time of execution of the user program through the real-time dialogue (no arguments) .sk.lm5 ^When a call to ^^PLOTS2\\ is made, the program prompts with ^^VP\\7> and accepts input of the form ^^PARAMETER=NUMBER\\ where ^^PARAMETER\\ is one of those listed below and ^^NUMBER\\ is an acceptable value for that parameter. ^Parameters not set explicitly are set to the default values used by ^^PLOTS\\. .no fill.no just.sk.lm20.i-12.ts20 ^&PARAMETER\& ^&DESCRIPTION\& .fill.just.sk.i-12 ^^MODEL\\= Set ^Versatec model (default=1200) .sk.i-12 ^^XMIN\\= Default=0. .i-12 ^^XMAX\\= Default=^^XMIN\\+plotter width .sk.i-12 ^^YMIN\\= Default=0. .i-12 ^^YMAX\\= Default=^^YMIN\\+plotter width .i-12.sk ^^MSGLVL\\= Set message level; operates exactly as does a call to ^^SETMSG\\ (default=0) .sk.i-12 ^^XSTART\\= Define starting x position (default=0.) .i-12 ^^YSTART\\= Define starting y position (default=0.) .sk.i-12 ^^SCALE\\= Plotting scale factor (e.g., =2. doubles plot size; default=1.) .sk.i-12 ^^XFACT\\= Plotting scale factor for x axis (default=1.) .i-12 ^^YFACT\\= Plotting scale factor for y axis (default=1.) .sk.i-12 ^^UNITS\\= Define plotting units of measure; expressed as new unit/inch (e.g., =2.54 defines units as centimeters, default=1.) .sk.i-12 ^^STRIP\\= Strip width (default=plotter width) .i-12 ^^STRIP0\\= Strip offset (default=0.) .sk.i-12 ^^SPACE\\= Maximum allowable blank space to be plotted (default=plotter width) .sk.i-12 ^^LUNIT\\= List output unit (default=5) .sk.i-12 ^^LYNES\\= Maximum number of active lines available during raster phase (default=600) .sk.i-12 ^^I2FLG\\= =1 to single buffer raster output, =2 to double buffer (default=2) .sk.i-12 ^^OUT\\= Define space to be output between plots; if ^^GT\\ 0., space and form feed will occur after each plot; if ^^EQ\\ 0., no space is put between plots; if ^^LT\\ 0., form feed only (default=^^XMAX-XMIN\\) .sk.i-12 /^L List parameters values on terminal .sk.i-12 /^E End of input, proceed with execution .sk.fill.just.lm5 ^For example, to enlarge the plot window and blow up a plot by 50 percent, the dialogue would proceed as follows: .sk.lm10 >^^RUN PROG .br VP7>YMAX=15.0 .br VP7>SCALE=1.5 .br VP7>/E\\ .br ^Program executes... .sk.lm15.i-10 ^^PLOTS3\\ -- ^The ^^PLOTS3\\ entry allows setting of the above parameters from within the program, without user keyins. ^The one argument passed to ^^PLOTS3\\ is an array containing ^^PARAMETER=NUMBER\\ strings separated by commas. The list is terminated by the /^E parameter which must be included. ^For example, the following is functionally equivalent to the above example: .sk ^^CALL PLOTS3('YMAX=15.0,SCALE=1.5,/E')\\ .sk.lm5 ^After the initial call to ^^PLOTS, PLOTS2, or PLOTS3\\, subsequent calls reset the plotting parameters to those established by the first call; the real-time dialog is not re-enabled by ^^PLOTS2\\ and the ^^PLOTS3\\ parameter list is ignored. ^A call to ^^PLOTS\\ is automatically made by an end of plot call (^^CALL PLOT(0.,0.,-999))\\ so more than the initial call is unnecessary. .sk ^The ^^SCALE=, XFACT=\\, and ^^YFACT=\\ parameters used in ^^PLOTS2\\ and ^^PLOTS3\\ are global scaling factors in that they affect all coordinates, including the plotting window defined by ^^XMIN, XMAX, YMIN,\\ and ^^YMAX\\. ^The subroutine ^^FACTOR\\ affects only the plotting size and not the plotting window. .sk ^The ^versaplot-07 software will automatically do strip plotting if the plot window is made wider than the plotter width. .SKIP 1;.FILL.lm0 .TP 30 .INDEX ^^PLOT\\ 2.##^&^^PLOT\\\& -PROCESSES PEN MOVES, RE-ORIGINING, AND END-OF-PLOTS. .SKIP 1;.NOFILL ########^^CALL PLOT(\\X,Y,IPEN) .SKIP 1 .FILL;.LEFT MARGIN 16 .INDENT -5 X,Y .BREAK TERMINAL COORDINATE OF PEN MOVE. .INDENT -5;IPEN .BREAK SIGNED INTEGER VALUE CONTROLLING PEN UP/DOWN,ETC. .BREAK;=+999#:#END-OF-PLOT,TERMINATE ALL PLOTTING .BREAK;=-999#:#END-OF-PLOT .BREAK;=+23#:#END-OF-PLOT .BREAK;=-23#:#END-OF-PLOT .BREAK;=+22#:#END-OF-PLOT .BREAK;=-22#:#END-OF-PLOT .BREAK;=+13#:#MOVE TO OFFSET/SCALLED (X,Y) .BREAK;=+12#:#DRAW TO OFFSET/SCALED (X,Y) .BREAK;=+3#:#MOVE TO (X,Y) .BREAK;=+2#:#DRAW TO (X,Y) .BREAK;=-2#:#DRAW TO (X,Y), RE-ORIGIN .BREAK;=-3#:#MOVE TO (X,Y), RE-ORIGIN .BREAK;=-12#:#DRAW TO OFFSET/SCALED (X,Y), RE-ORIGIN .BREAK;=-13#:#MOVE TO OFFSET/SCALED (X,Y), RE-ORIGIN .BREAK;=???#:#IGNORED (ERROR MESSAGE PRINTED) .SKIP 1;.FILL .TP 11 .INDEX ^^OFFSET\\ .LEFT MARGIN 0 3.##^&^^OFFSET\\\& -SETS SPECIAL SCALE FACTORS AND OFFSETS WHICH ARE APPLIED TO INCOMING DATA ON ^^PLOT\\ CALLS WHERE 'IPEN' IS 12 OR 13: .NOFILL .SKIP 1 ########^XNEW = (^XDATA - XOFF)/XFAC .SKIP 1 ########^YNEW = (^YDATA - YOFF)/YFAC .SKIP 1 ########^^CALL OFFSET\\(XOFF,XFAC,YOFF,YFAC) .SKIP 1;.FILL .TP 9 .INDEX ^^FACTOR\\ 4.##^&^^FACTOR\\\& - ENLARGE OR REDUCE THE SIZE OF THE ENTIRE PLOT. .sk ^The plotting factor defined by the user applies only to plotted coordinates, such as vectors drawn with calls to ^^PLOT\\; it does not apply to the external parameters such as the plot window defined by the ^^PLOTS2\\ and ^^PLOTS3\\ routines .SKIP 1;.NOFILL ########^^CALL FACTOR\\(FACT) .SKIP 1 .LEFT MARGIN 16 .FILL;.INDENT -5;FACT .BR RATIO OF DESIRED SIZE TO NORMAL (E.G. =2. WILL CAUSE A DOUBLE SIZE PLOT) .SKIP 1;.FILL .TP 8 .INDEX ^^NEWPEN\\ .LEFT MARGIN 0 5.##^&^^NEWPEN\\\& - SELECT DIFFERENT LINE WIDTHS. .SKIP 1;.NOFILL ########^^CALL NEWPEN\\(INP) .SKIP 1 .LEFT MARGIN 16 .FILL;.INDENT -5;INP .BR LINE WIDTH 1 TO 5 DOTS WIDE .lm0.sk (^^NOTE\\: the line width set by ^^NEWPEN\\ does not affect the lines drawn by ^^GRID\\) .SKIP 1;.FILL .TP 11 .INDEX ^^WHERE\\ .LEFT MARGIN 0 6.##^&^^WHERE\\\& - RETURNS CURRENT PEN POSITION AND CURRENT DRAWING FACTOR. .SKIP 1;.NOFILL ########^^CALL WHERE\\(XNOW,YNOW,DFACT) .SKIP 1 .LEFT MARGIN 16;.FILL;.INDENT -5;XNOW,YNOW .BR CURRENT PEN COORDINATE. .INDENT -5;DFACT .BR CURRENT DRAWING FACTOR RATIO. .LEFT MARGIN 0 .SKIP 1;.FILL .TP 30 .INDEX ^^SYMBOL\\ 7.##^&^^SYMBOL\\\& - PLOTS ALPHANUMERIC ANNOTATIONS AT VARIOUS ANGLES AND SIZES. .SKIP 1;.NOFILL ########^^CALL SYMBOL\\(X,Y,HEIGHT,ITEXT,ANGLE,NC) .SKIP 1 .FILL;.LEFT MARGIN 16;.INDENT -5;X,Y .BR STARTING COORDINATES FOR LOWER LEFT-HAND CORNER OF THE FIRST CHARATER .INDENT -5;HEIGHT .BR DEFINE CHARACTER HEIGHT IN 'UNITS'. .INDENT -5;ITEXT .BR +NC: ITEXT CONTAINS ALPHANUMERIC TEXT STRING IN ^^PDP\\-11 FORMAT, LEFT JUSTIFIED. .BREAK;NC=0: ITEXT CONTAINS ONE RIGHT JUSTIFIED CHARACTER. .BREAK;-NC: ITEXT CONTAINS INTEGER SYMBOL NUMBER TO BE PLOTTED. .INDENT -5;ANGLE .BR ANGLE IN DEGREES THAT THE TEXT IS TO BE ROTATED MEASURED COUNTERCLOCKWISE (0. IS HORIZONTAL, 90. IS VERTICAL). .INDENT -5;NC .BR NUMBER OF CHARACTERS TO BE PLOTTED: .BREAK;=0:SINGLE RIGHT JUSTIFIED CHARACTER. .BREAK;=-:ITEXT IS AN INTEGER SYMBOL NUMBER. .BREAK;=-1:PEN IS TO BE UP DURING INITIAL MOVE. .BREAK;=-2...PEN IS TO BE DOWN DURING INITIAL MOVE. .lm0.sk ^Several features and limitations of the ^^SYMBOL\\ routine are worth noting: .list.sk .le;^Special ^Characters -- All characters plottable by the ^^SYMBOL\\ routine (see "^^CHARACTERS AVAILABLE IN THE PPEP/UVS SYMBOL ROUTINE\\", available at ^^AGL\\) can be specified by their integer codes, as well as by text strings. .le;^Character ^Spacing -- ^The distance between the lower left corner of consecutive characters in a line is the same as the character height. .le;^Line ^Continuation -- ^If x or y in a call to ^^SYMBOL\\ equals 999., the value used is the x and/or y coordinate of the next character position which would have followed the last character plotted by the last call to ^^SYMBOL\\. ^For example, if ^^SYMBOL\\ is called with x=y=999., the text string is appended to the last line plotted by ^^SYMBOL\\. ^The user should note that the routines ^^AXIS\\ and ^^LINE\\ also call ^^SYMBOL\\. .le;^Default ^Character ^Specs -- ^If the height argument to ^^SYMBOL\\ is less than or equal to 0., the height, angle and mode (^^SUP\\ or ^^SUB\\ or normal) of the previous call to ^^SYMBOL\\ are used. .le;^Control ^Characters -- ^The characters ^^CR, BS, SUB, SUP\\ and ^^NUL\\ are not plotted as illustrated in "^^CHARACTERS AVAILABLE IN THE PPEP/UVS SYMBOL ROUTINE"\\, but rather are used as special control codes as follows: .sk.lm+5 ^^CR (C\\arriage return) -- ^Character plotting will continued under the first character of the last (including current) call to ^^SYMBOL\\, excluding calls where x or y equals 999. ^Spacing between lines is 5/7 the height of the last line plotted. .sk ^^BS (B\\ack space) -- ^Character position is moved back one; useful for underlined or overscored lines. .sk ^^SUB (s\\ubscript) -- ^Following characters are plotted at .7 normal height with the top at the middle of current character position. .sk ^^SUP (s\\uperscript) -- ^Following characters are plotted at .7 current height with the bottom at the middle of current character position. .sk ^^NUL (n\\ull) -- ^No affect. .sk.lm-5 .le;^Optimal ^Character ^Height -- ^Optimal height is a multiple of 7/200 inches. .le;^No ^Lower ^Case -- ^Lower case letters are not available in ^^SYMBOL\\. .le;^N^C=0 ^Is ^Useless -- ^Due to the manner in which text is stored in arrays by ^^FORTRAN\\ on the ^^PDP\\11/34, the ^N^C=0 (one charater right justified ) call to ^^SYMBOL\\ does not operate as expected. ^N^C=0 causes the low order byte to be used as the character to be plotted. .els .LEFT MARGIN 0 .SKIP 1;.FILL .TP 32 .INDEX ^^NUMBER\\ 8.##^&^^NUMBER\\\& - MAY BE USED TO CONVERT FLOATING POINT NUMBERS TO THE APPROPRIATE DECIMAL EQUIVALENT WHICH CAN THEN BE DRAWN. .SKIP 1;.NOFILL ########^^CALL NUMBER\\(X,Y,HEIGHT,FPN,ANGLE,NDEC) .SKIP 1 .FILL;.LEFT MARGIN 16;.INDENT -5;X,Y .BR STARTING COORDINATE OF LOWER LEFTHAND CORNER OF THE FIRST CHARACTER. ^IF X OR Y EQUALS 999.0 ANNOTATION IS CONTINUED FROM CURRENT POSITION. .INDENT -5;HEIGHT .BR DEFINES CHARACTER HEIGHT IN 'UNITS'. .INDENT -5;FPN .BR FLOATING POINT NUMBER TO BE PLOTTED. .INDENT -5;ANGLE .BR ANGLE IN DEGREES MEASURED FROM THE X-AXIS (VECTOR DIRECTION). .INDENT -5;NDEC .BR SIGNED NUMBER INDICATING NUMBER OF DECIMAL DIGITS TO BE PLOTTED: .BREAK;=+#:#DEFINES NUMBER OF DIGITS TO RIGHT OF DECIMAL POINT TO BE PLOTTED. .BREAK;=0#:#ONLY INTEGER POSITION AND DECIMAL POINT. .BREAK;=-1#:#ONLY INTEGER PORTION TO BE PLOTTED. .BREAK;=-2...:#ABSOLUTE VALUE OF NDEC-1 ARE TO BE RIGHT TRUNCATED FROM THE INTEGER PORTION AND PLOTTED. .LEFT MARGIN 0 .SKIP 1;.FILL .TP 25 .INDEX ^^SCALE\\ 9.##^&^^SCALE\\\& - DETERMINE THE NECESARRY SCALE FACTORS FOR THE ARRAY. ^THESE FACTORS, FVAL AND DV, ARE STORED AT THE END OF THE ARRAY: FVAL AT ARRAY(NPTS*INC+1) AND DV AT ARRAY(NPTS*INC+INC+1). FVAL IS EITHER A MINIMUM OR A MAXIMUM (USER SELECTABLE), AND DV IS THE NUMBER OF DATA UNITS PER AXIS 'UNITS'. .SKIP 1;.NOFILL ########^^CALL SCALE\\(ARRAY,AXLEN,NPTS,INC) .SKIP 1 .LEFT MARGIN 16;.FILL;.INDENT -5;ARRAY .BR ARRAY TO BE EXAMINED FOR SCALING FACTORS. .INDENT -5;AXLEN .BR AXIS LENGTH TO WHICH THE UNSCALED DATA IS TO BE SCALED. MUST BE GREATER THAN 1.0 'UNITS'. .INDENT -5;NPTS .BR NUMBER OF DATA POINTS TO BE SCALED, NOT INCLUDING FVAL OR DV. .INDENT -5;INC .BR INCREMENT (ABSOLUTE) USED IN GATHERING DATA. (^processing always begins with the first element of the array). E.G. =2 INDEXES EVERY OTHER DATA ELEMENT: .BREAK;=+#:#FVAL APPROXIMATES A MINIMUM. .BREAK;=-#:#FVAL APPROXIMATES A MAXIMUM. .LEFT MARGIN 0 .SKIP 1;.FILL .TP 30 .INDEX ^^LINE\\ 10.#^&^^LINE\\\& - PLOTS ARRAYS USING CENTERED SYMBOLS AND SCALING PARAMETERS (FVAL AND DV) THAT IMMEDIATELY FOLLOW ARRAY. .SKIP 1;.NOFILL ########^^CALL LINE\\(X,Y,NPTS,INC,LINTYP,INTEQ) .SKIP 1 .LEFT MARGIN 16;.FILL;.INDENT -5;X .BR ABSCISSA (X) VALUE ARRAY PLUS SCALING PARAMS (FVAL AND DV). .INDENT -5;Y .BR ORDINATE (Y) VALUE ARRAY PLUS SCALING PARAMS (FVAL AND DV). .INDENT -5;NPTS .BR NUMBER OF DATA POINTS, NOT INCLUDING FVAL OR DV. .INDENT -5;INC .BR INCREMENT USED IN GATHERING DATA (processing always begins with the first element of the array): .BR;=+#:#FVAL APPROXIMATES A MINIMUM. .BR;=-#:#FVAL APPROXIMATES A MAXIMUM. .INDENT -5;LINTYP .BR DEFINES LINE TYPE AND SYMBOL: .BREAK;=0#:#CONNECT DATA POINTS WITH STRAIGHT LINES BUT NO SYMBOLS. .BREAK;=+#:#CONNECT DATA POINTS WITH STRAIGHT LINES AND USE SYMBOLS. .BREAK;=-#:#ONLY SYMBOLS TO BE PLOTTED. .INDENT -5;INTEQ .BR SYMBOL NUMBER TO BE USED IN PLOTTING. .LEFT MARGIN 0 .SKIP 1;.FILL .TP 25 .INDEX ^^AXIS\\ 11.#^&^^AXIS\\\& - GENERATE AXIS LINE WITH LABELS, SCALE ANNOTATIONS, AND TICKS. .SKIP 1;.NOFILL ########^^CALL AXIS\\(X,Y,LABEL,NCHAR,AXLEN,ANGLE,FVAL,DV) .SKIP 1 .LEFT MARGIN 16;.FILL;.INDENT -5;X,Y .BR STARTING COORDINATE OF AXIS. .INDENT -5;LABEL .BR APHANUMERIC TEXT TO BE CENTERED ON AXIS. .INDENT -5;NCHAR .BR NUMBER OF CHARATERS IN LABEL: .BREAK;=+#:#LABELS TO BE PLACED ABOVE AXIS. .BREAK;=-#:#LABELS TO BE PLACED BELOW AXIS . .INDENT -5;AXLEN .BR LENGTH OF AXIS IN 'UNITS'. .INDENT -5;ANGLE .BR ANGLE IN DEGREES AT WHICH AXIS IS TO BE DRAWN. NORMALLY X IS 0. AND Y IS 90. .INDENT -5 .BR FVAL .BR FIRST VALUE FOR ANNOTATING AXIS AT 'UNIT' INTERVALS. .INDENT -5;DV .BR NUMBER OF DATA UNITS PER AXIS 'UNIT'. .sk.lm0 ^A character height of 0.14 is used by ^^AXIS\\ for the label, 0.105 for numbers at tic marks, and 0.07 for the exponents of 10 appended to the label when necessary. .SKIP 1;.FILL .TP 12 .LEFT MARGIN 0 .INDEX ^^SETMSG\\ 12.#^&^^SETMSG\\\& - ALTER ERROR MESSAGE LEVEL. .SKIP 1;.NOFILL ########^^CALL SETMSG\\(MSGLVL) .SKIP 1.ts 8,16 MSGLVL =0 NONE. =1 SUMMARY AND WARNING (DEFAULT). =2 UNPLOTTABLE CALLS. =3 CLIPPED ^^PLOT\\CALLS. =4 ALL ^^PLOT\\ CALLS. =5 VECTOR GENERATION. .SKIP 1;.FILL .TP 26 .INDEX ^^GRID\\ 13.#^&^^GRID\\\& - GENERATE GRID OR OVERLAY FORMS. .SKIP 1;.NOFILL ^^CALL GRID\\(X,Y,NX,XD,NY,YD,LMASK) .SKIP 1 .LEFT MARGIN 16;.FILL;.INDENT -5;X,Y .BR STARTING COORDINATES OF LOWER LEFT HAND CORNER. .INDENT -5;NX .BR NUMBER OF INTERVALS IN X DIRECTION. IF NX IS GREATER THAN 1000, XD IS AN ARRAY OF NX-1000 VALUES. .INDENT -5;XD .BR DISTANCE BETWEEN UNIFORMLY SPACED VERTICAL LINES. IF NX IS GREATER THAN 1000, XD IS AN ARRAY. .INDENT -5;NY .BR NUMBER OF INTERVALS IN THE Y DIRECTION. IF NY IS GREATER THAN 1000, YD IS AN ARRAY OF NY-1000 VALUES. .INDENT -5;YD .BR DISTANCE BETWEEN UNIFORMLY SPACED HORIZONTAL LINES. .INDENT -5;LMASK .BR LINE MASK BIT PATTERN TO BE USED. .LEFT MARGIN 0 .SKIP 1 .TP 32 .INDEX ^^TONE\\ .FILL 14.#^&^^TONE\&\\ - PERFORMS PATTERNED SHADING OF USER SPECIFIED POLYGONAL AREAS: .SKIP 1;.NOFILL ######FORM-1, SET ^^TONE\\ PATTERN ARRAY: .SKIP 1 ^^CALL TONE(0.,0.,\\IPAT,-NTP) .SKIP 1 ######FORM-2, ^^TONE\\ AREA: .SKIP 1 ^^CALL TONE\\(X,Y,NE,NA) .SKIP 1;.FILL;.BR;.LEFT MARGIN 16;.INDENT -5;IPAT .BR;^^TONE\\ PATTERN ARRAY. .BR;.INDENT -5;NTP .BR;NUMBER OF ^^TONE\\ PATTERN WORDS IN IPAT, MAX=16. .BR;.INDENT -5;X,Y .BR;COORDINATE DATA ARRAYS DEFINING AREA(S) TO BE SHADED. ^IF AREA IS NOT CLOSED, THE FIRST AND LAST ELEMENT ARE CONNECTED TO FORCE CLOSING. .BR;.INDENT -5;NE .BR;AN ARRAY CONTAINING THE NUMBER OF X,Y ELEMENTS WHICH SPECIFY A PARTICULAR AREA. (E.G. NE(1) SPECIFIES THE NUMBER OF COORDINATES IN AREA 1, NE(2) SPECIFIES THE NUMBER OF COORDINATES IN AREA 2, ETC.) .BR;.INDENT -5;NA .BR;NUMBER OF AREAS DEFINED (ARRAY NE MUST CONTAIN NA ELEMENTS). .SKIP 1 .LEFT MARGIN 0 .PAGE .C;^^EXAMPLES\\ .INDEX ^EXAMPLES .SKIP 1;.FILL 1.##^&^^GRID E\\XAMPLE:\& .INDEX ^^GRID E\\XAMPLE .SKIP 1;.NOFILL; C... GRID EXAMPLE C DIMENSION Y(18) C C... LMASK1 = B'1000100010001000' C... LMASK2 = B'1010101010101010' DATA LMASK1/-30584/,LMASK2/-21846/ C C... INITIALIZE PLOTTING CALL PLOTS(0,0,0) C C... DRAW LINEAR GRID BY SUPERIMPOSING A SMALL C... INTERVAL GRID C... WITH A LARGE INTERVAL GRID (5X THE SMALL ONE) CALL GRID(1.,1.,15,0.2,20,0.2,LMASK1) CALL GRID(1.,1.,3,1.0,4,1.0,LMASK2) C C... COMPUTE SINGLE CYCLE LOG AT .5 INCH INTERVALS SCALED C... TO 4 INCHES AND DRAW SEMI-LOG GRID Z=1. DO 100 I=1,18 Y(I)= 4.0*(ALOG(Z+.5)-ALOG10(Z)) 100 Z=Z+.5 CALL GRID(5.,1.,15,0.2,1018,Y,LMASK1) C C... END OF PLOTTING CALL PLOT(0.,0.,999) STOP END .SKIP 1;.FILL .PAGE .INDEX ^^TONE E\\XAMPLE 2.##^^^&TONE E\\XAMPLE:\& .SKIP 1;.NOFILL C... TONE EXAMPLE C DIMENSION XX(302),YY(302),IPAT2(4) DATA IPAT2/O401,O1002,O2004,O4010/ DATA PI/3.14159265/,E/2.71828183/,NE/151/ C C... INITIALIZE PLOTTING CALL PLOTS(0,0,0) C C... CREATE XX AND YY FOR AREA UNDER DAMPENED SINE WAVE DO 100 I=1,NE XARG=.04*FLOAT(I-1) XX(I)=XARG 100 YY(I)=((E**(-XARG))*SIN(PI*XARG)+.5)/.2 C C... SET HORIZONTAL PATTERN AND TONE UNDER SINE WAVE CALL TONE(0.,0.,IPAT2,-4) CALL TONE(XX,YY,NE,1) C C... END OF PLOT CALL PLOT(0.,0.,999) STOP END .PAGE .INDEX ^OPERATIONS .C;^^OPERATIONS\\ .SKIP 2 .NOFILL 1.##^&^OPERATIONAL ^OVERVIEW\& .INDEX ^OPERATIONAL ^OVERVIEW .FILL ^THE ^VERSAPLOT-07 SYSTEM HAS THREE DISTINCT PHASES: 1) THE USER INTERFACE PHASE OPERATES WITH THE USER PROGRAM TO CREATE VECTOR INFORMATION FROM THE APPLICATION PLOTTING CALLS; 2) RAW VECTOR DATA IS THEN HANDLED BY A VECTOR ORDERING PHASE TO PRODUCE VECTOR OUTPUT WHICH IS THEN ORDERED IN THE DIRECTION OF PAPER MOTION; 3) THE VECTOR TO RASTER PHASE CONVERTS THE ORDERED VECTOR TO RASTER DATA WHICH IS THEN OUTPUT ON THE PLOTTER. .SKIP 1 ^TO IMPROVE EFFICIENCY, THREE DIFFERENT ORDERING ALGORITHMS ARE AVAILABLE: ^LINKED-VECTOR, ^MAPPED-VECTOR, AND ^SORTED-VECTOR. .LEFT MARGIN +5;.SKIP 1 1.1##^&^LINKED-VECTOR ALGORITHM\&- SHOULD BE USED: .INDEX ^LINKED-VECTOR ALGORITHM .LEFT MARGIN +5 .SKIP 1;.BR;* FOR DENSE TO EXTREMELY DENSE PLOTS, UNLESS THE PLOT IS LARGE. .SKIP 1;.BR;* FOR PLOTS CREATED IN SCATTERED BITS AND PIECES RATHER THAN IN AN ORDERLY BAND BY BAND FASHION. .SKIP 1;.BR;* FOR PLOTS THAT ARE NOT EXTREMELY LONG. .SKIP 1;.LEFT MARGIN -5 ^THE ^LINKED ALGORITHM IS INTERMEDIATE IN EFFICIENCY AND COMPUTER RESOURCE UTILIZATION FOR MOST NORMAL PLOTS. .SKIP 1 .INDEX ^MAPPED-VECTOR ALGORITHM 1.2.##^&^MAPPED-VECTOR ALGORITHM\&- SHOULD BE USED: .LEFT MARGIN +5 .SKIP 1;.BR;* FOR PLOTS WITHOUT LARGE NUMBERS OF VECTORS. .SKIP 1;.BR;* WHEN PLOT IS CREATED BAND BY BAND INSTEAD OF IN SCATTERED PIECES (THE BANDS DO NOT HAVE TO BE CREATED IN ORDER). .SKIP 1;.BR;* FOR MOST NORMAL PLOTS . .SKIP 1;.LEFT MARGIN -5 ^THE MAPPED ALGORITHM ALMOST ALWAYS INCURS LESS ^^CPU\\ TIME AND OFTEN LESS ^^I/O\\ TIME THAN OTHER ALGORITHMS, ESPECIALLY FOR SMALL PLOTS. .SKIP 1 1.3.##^&^SORTED-VECTOR ALGORITHM\&- SHOULD BE USED FOR: .INDEX ^SORTED-VECTOR ALGORITHM .LEFT MARGIN +5 .SKIP 1;.BR;*FOR PLOTS WITH VERY LARGE NUMBER OF VECTORS. .SKIP 1;.BR;* FOR VERY LONG PLOTS AND VERY WIDE PLOTS ( 10 TIMES PLOTTER WIDTH). .SKIP 1;.BR;* FOR ANY PLOT THAT CAN NOT BE PLOTTED USING ANOTHER ALGORITHM. .SKIP 1;.LEFT MARGIN -5 ^THE ^SORTED-VECTOR ALGORITHM WILL USE MORE ^^CPU\\ AND DO MORE ^^I/O\\ THAN OTHER ALGORITHMS ON NORMAL PLOTS. .LEFT MARGIN 0;.PAGE 2.##^^^&RSX-11M O\\PERATIONS\& .INDEX ^^RSX-11M \\^OPERATIONS .SK 2 .INDEX ^SIMPLEST PLOTTING METHOD ^A. ^&^SIMPLEST PLOTTING METHOD\&: ^THE SIMPLEST METHOD IS TO USE THE ^^BLD\\ COMMAND FILE LOCATED IN ^^LB1:[1,2]\\ TO DO YOUR TASK BUILDING AND TO INSTALL VARIOUS LIBRARY TASKS. ^THE STEPS ARE: .TAB STOP 10 .BR; 1) COMPILE YOUR PROGRAM. .BR; 2) EXECUTE THE INDIRECT COMMAND FILE ^^LB1:[1,2]BLD\\. .BR; 3) RUN YOUR TASK. .BR; 4) RUN THE APPROPRIATE ORDERING PHASE TASK ; IT .BR; WILL LINK TO THE PLOTTING PHASE AUTOMATICALLY. .SK 1 ^FOR EXAMPLE, IF YOUR PROGRAM IS NAMED ^^'PROG'\\ AND THE ORDERING ALGORITHM DESIRED IS THE MAPPED VERSION: .SK 1 .NOFILL .BR; ; .BR; ; COMPILE PROGRAM .BR; ; .BR; ^^>F4P PROG,LP:=PROG .BR; ; .BR; ; DO BLD .BR; ; .BR; >@LB1:[1,2]BLD .BR; >* LIBRARY SUPPORT FOR VG,? [Y/N]: .BR; >* FOR VPLOT-7,?[Y/N]:Y .BR; >* FOR CALCOMP,? [Y/N]: .BR; >* FOR K-LAB.? [Y/N]: .BR; >; IDENTIFY ORDERING/RASTER ALGO. FOR VPLOT: .BR; >* M FOR MAPPED, S FOR SORTED, L FOR LINKED (M ###OR S OR L) [S]: M .BR; >* INPUT TASK NAME/SWITCHES [S]: PROG .BR; >* INPUT MAP DEST. (=NONE) [S]: .BR; >* INPUT OBJS (DEFAULT:TASKNAME) [S]: .BR; >* INPUT OPTIONS (=NONE) [S] : .BR; ####### TASK BUILD AND INSTALLS WILL NOW OCCUR .BR; ####### : .BR; ####### : .BR; >@ .BR; ; .BR; ; RUN YOUR TASK .BR; ; .BR; >RUN PROG .BR; TTN -- STOP .SK 1 .BR; ; .BR; ; RUN APPROPRIATE ORDERING TASK .BR; ; .BR; >RUN RASM .BR; RASM -- STOP .SK 2 \\ .FILL ^IF ANOTHER ALGORITHM IS DESIRED, YOU ENTER THE APPROPRIATE LETTER DURING THE DIALOGUE (>*^^M FOR MAPPED, S FOR SORTED, L FOR LINKED \\) AND USE A DIFFERENT TASK FOR THE ORDERING PHASE: .NOFILL .BR; FOR MAPPED: ###>^^RUN RASM\\ .BR; FOR SORTED: ###>^^RUN SORT\\ .BR; FOR LINKED: ###>^^RUN LINK\\ .FILL .SK 2 ^WHEN YOU ARE FINISHED PLOTTING, USE THE INDIRECT COMMAND FILE ^^LB1:[1,2]VPREM\\ TO DELETE THE PLOT FILES (^^VECTR1.BIN, VECTR2.BIN,VECTR3.BIN,PARM.BIN\\) AND REMOVE LIBRARY TASKS: .SK 1 .BR; >@^^LB1:[1,2]VPREM\\ .SK 2 ^B. ^&^MULTIPLE COPIES OF YOUR PLOT\&: ^TO OBTAIN MULTIPLE COPIES .INDEX ^MULTIPLE COPIES OF YOUR PLOT OF YOUR PLOT, RUN THE RASTER PHASE OVER. ^FOR LINKED OR SORTED ALGORITHM, THIS PHASE WAS CALLED AUTOMATICALLY BY THE ORDERING PHASE; FOR THE MAPPED ALGORITHM, THE ORDERING AND RASTERING PHASE ARE THE SAME. .SK 1 ^TO OBTAIN A SECOND PLOT OF A FILE: .SK 1 .BR; FOR MAPPED: ###>^^RUN RASM\\ .BR; FOR SORTED: ###>^^RUN RASS\\ .BR; FOR LINKED: ###>^^RUN RASL\\ .SK 2 ^C. ^&^RUNNING YOUR TASK THE NEXT DAY\&: ^TO RE-RUN YOUR PLOTTING .INDEX ^RUNNING YOUR TASK THE NEXT DAY TASK THE NEXT (OR SOME LATER SESSION), YOU MUST FORCE THE INSTALLATION OF VARIOUS LIBRARY TASKS: .SK 1 .BR; ; .BR; ; FORCE LIBRARY TASK INSTALLATION .BR; ; .BR; >@^^LB1:[1,2]VPINS\\ .BR; ; .BR; ; RUN YOUR TASK .BR; ; .BR; >^^RUN PROG\\ .BR; ; .BR; ; RUN APPROPRIATE ORDERING ALGORITHM .BR; ; .BR; >^^RUN RASM\\ .BR; #####OR .BR; >^^RUN SORT\\ .BR; #####OR .BR; >^^RUN LINK\\ .SK 2 ^D. ^&^SUMMARY OF RUN-TIME FILES\&: ^THE FOLLOWING IS A SUMMARY .INDEX ^SUMMARY OF RUN-TIME FILES OF USEFUL RUN-TIME TASKS AND COMMAND FILES: .SK 1 .TAB STOP 5,21 .NOFILL .BR; NAME DESCRIPTION ---- ----------- ^^ LB1:[1,2]BLD \\INDIRECT FILE FOR TASK BUILD AND LIBRARY INSTALLS .SK 1 ^^RASM\\ ORDER AND RASTER PHASES FOR MAPPED ALGORITHM, WHEN INSTALLED .SK 1 ^^SORT\\ ORDER PHASE FOR SORT ALGORITHM, WHEN INSTALLED .SK 1 ^^LINK\\ ORDER PHASE FOR LINK ALGORITHM, WHEN INSTALLED .SK 1 ^^RASS\\ RASTER PHASE FOR SORT ALGORITHM, AUTOMATICALLY CALLED BY SORT WHEN INSTALLED .SK 1 ^^RASL\\ RASTER PHASE FOR LINK ALGORITHM, AUTOMATICALLY CALLED BY LINK WHEN INSTALLED .SK 1 ^^LB1:[1,2]VPREM\\ INDIRECT COMMAND FILE TO DELETE PLOT FILES,REMOVE TASKS .SK 1 ^^LB1:[1,2]VPINS\\ INDIRECT COMMAND FILE TO INSTALL VPLOT TASKS, AUTOMATICALLY CALLED BY ^^LB1:[1,2]BLD\\ .SK 2.fill.just .lm5.i-5 ^E.##^&^^PLOTTING WITHOUT USING BLD\&\\ .lm0.sk ^The following details the procedure for doing ^Versaplot-07 plotting without using the ^^BLD\\ command file. ^The name ^^PROG\\ is used below for the user's ^^FORTRAN\\ program, object file and task name with the default extensions ###.^^FTN, .OBJ and .TSK\\ and is only an example; any legal filename is permissable. .list .le;^The ^^FORTRAN\\ program is compiled as is any ^^FORTRAN\\ program. ^For example, the following ^^MCR\\ command line compiles ^^PROG.FTN\\ and produces the object file ^^PROG.OBJ\\ and a ^^FORTRAN\\ listing on the printer: .sk >^^F4P PROG,LP:=PROG\\ .le;^A task is built using the desired ^^FORTRAN\\ object file, the object file for the plotting algorithm to be used, and the ^Versaplot library. ^The plotting algorithm object files are named ^^MAPPED.OBJ, LINKED.OBJ\\ and ^^SORTED.OBJ\\ and are located on ^L^B1:[1,24]. ^The ^Versaplot library is named ^^PEPLIB.OLB\\ and is located on ^L^B1:[1,1]. ^For example, the command line .sk ^^TKB PROG=PROG,LB1:[1,24]MAPPED,[1,1]PEPLIB/LB\\ .sk Produces the task file ^^PROG.TSK\\ where the mapped algorithm has been specified. ^The algorithm object file name must preceed the library name in the ^^TKB\\ command line. .le;^The user task is now run. ^The task will produce two files on the pseudo-device ^^VP\\:, therefore ^^VP\\: must be assigned to an appropriate device, such as ^^SY\\: (usually the user's disk). ^The command lines .sk >^^ASN SY:=VP:\\ .br >^^RUN PROG\\ .sk will do the assignment and run the user's task. ^The files produced by the task are called ^^PARM.BIN\\ and ^^VECTR_#.BIN\\ where _# is 1 if the linked or sorted algorithm was used, or 2 if the mapped algorithm was used. ^The files will be used later in the raster generation phases. .le;^System tasks which do the vector to raster conversion and plotting on the ^Versatec should now be installed. ^The tasks are located on ^L^B1:[1,54] and are named ^^SORT.TSK, LINK.TSK,\\ and ^^RAS\\X.^^TSK\\ where x is ^^S, L or M\\. ^One of the following should be done, depending upon the algorithm: .sk ^If mapped,#>^^INS LB1:$RASM\\ .br ^If sorted,#>^^INS LB1:$SORT\\ .br #######################>^^INS LB1:$RASS\\ .br ^If Linked,#>^^INS LB1:$LINK\\ .br #######################>^^INS LB1:$RASL\\ .sk ^Note that the $ indicates ^^UIC [1,54].\\ .le;^The plotting is done at this point by executing the appropriate system task which uses the plot files described in step 3 above. ^Again, the procedure depends upon the plotting algorithm used: .sk ^If mapped,#####>^^RUN RASM\\ .br ^If sorted,#####>^^RUN SORT\\ .br ^If linked,#####>^^RUN LINK\\ .sk ^The tasks ^^SORT\\ and ^^LINK\\ call the tasks ^^RASS\\ and ^^RASL\\ installed above. ^If the sorted algorithm has been used, the file ^^VECTR1.BIN\\ is deleted and a new file named ^^VECTR3.BIN\\ is created. ^If the linked algorithm was used, a new file named ^^VECTR2.BIN\\ is created (^^VECTR1.BIN\\ is preserved). ^The mapped algorithm does not modify the ^^VECTR2.BIN\\ file. .le;^After the first plot has completed, the user may obtain multiple copies by executing the appropriate raster-plotting task. (^Note: do not repeat step 5; those tasks, for the linked and sorted algorithms, generate new ^^VECTR_#.BIN\\ files used by the ^^RAS\\x.^^TKS\\ tasks installed in step 4.) ^To obtain a duplicate plot, run the appropriate task below: .sk ^If Mapped,#####>^^RUN RASM\\ .br ^If sorted,#####>^^RUN RASS\\ .br ^If linked,#####>^^RUN RASL \\ .sk .le;^After completing a plot, the user may delete the plot files by doing the following: .sk >^^PIP PARM.BIN;*/DE,VECTR1.BIN;*/DE .break >^^PIP VECTR2.BIN;*/DE,VECTR3.BIN;*/DE\\ .sk .le;^The tasks installed to do the plotting can be removed by the appropriate command lines below: .sk ^If mapped,#####>^^REM RASM\\ .br ^If sorted,#####>^^REM#SORT\\ .br ###############>^^REM RASS\\ .br ^If linked,#####>^^REM LINK\\ .br ###############>^^REM RASL\\ .sk .le;^An example session. ^The following is a complete example where the mapped algorithm has been chosen. .sk.lm+5.no fill.no just.ts30 ^Compilation >^^F4P PROG,LP:=PROG\\ .br ^Task build >^^TKB PROG=PROG,LB1:[1,24] MAPPED,[1,1]PEPLIB/LB\\ .br ^^VP:A\\ssignment >^^ASN SY:=VP:\\ .br ^Task execution >^^RUN PROG\\ .br ^Raster installation >^^INS LB1:$RASM\\ .br ^First plot >^^RUN RASM\\ .br ^Duplicate plot >^^RUN RASM\\ .br ^File Deletion >^^PIP *.BIN;*/DE\\ .br .sk.lm-5.fill.just .le;^Logical Units. ^The ^Versaplot-07 software uses logical unit 1 to read and write ^^PARM.BIN\\, unit 2 for ^^VECTR1.BIN\\, unit 3 for ^^VECTR2.BIN\\ and unit 4 for ^^VECTR3.BIN\\. ^The user must insure that his use of these units does not conflict with the ^Versaplot-07 assignments. .els .FILL .PAGE;.C;^^ERRORS\\ .INDEX ^ERRORS .NOFILL;.TAB STOPS 35 .SKIP 2 ^&PHASE 1 ERRORS\& ^&MESSAGE CONDITION\& ^^CALL OFFSET P1,P2,P3,P4 DEBUG,M>=4 CALL PLOT P1,P2,P3 DEBUG,M>=4 UNPLOTTABLE VECTOR:PREF, X,Y,PORT,RORG INFORMATIVE,M>=2 ( ) TO ( ) CLIPPED TO ( ) TO ( ) INFORM.,M>=3 CALL PLOT P1,P2,P3- UNDEFINED INFORM.,M>=1 REORIGIN-PREF RORG PORT INFORM.,M>=4 PLOTTABLE VECTOR ( ) TO ( ) PORT INFORM.,M>=5 MODEL NOT FOUND FATAL INVALID PARAMETER FATAL:MUST BE NONZERO ***PLOT OPTIONS IF EFFECT*** INFORM.,M>=1 X= Y= HGT= ANG= DEBUG,M>=6 SYMBOL NUMBER=,NODE INDEX= DEBUG,M>=6 NODES LEFT=,NODE X=, NODE Y= DEBUG,M>=6 XT=,YT=,IC=... DEBUG,M>=6 I=,X(I)=,Y(I)= DEBUG,M>=9 NET=,XMAX=,XMW=,STEP,SGNF- DEBUG,M>=6 XLF=,XRI=,XMAX= DEBUG,M>=6 X1,Y1= X2,Y2= DEBUG,M>=7 INTERSECT-N=,YL(N), YR(N),SLOPE= DEBUG,M>=7 I,J=,XLF,YL(1),YL(3)... DEBUG,M>=7 SUBSECTION AT XRI= DEBUG,M>=6 TONE AREA-1=... DEBUG,M>=6 STRIP VECTOR:X1,Y1 X2,Y2 INFORM.,M>=5 RECORD ,MAX X1= MIN Y1= INFORM.,M>=6 RECORD ,... INFORM.,M>=6 VERS...X1,Y1,NDLTX, IY2= INFORM.,M>=6 LINKED-VECTOR INFORM.,M>=1 MAPPED-VECTOR INFORM.,M>=1 ^&LINKED-VECTOR MIDDLE PHASE ERRORS\& ^&MESSAGE CONDITION\& NSCAN DEBUG,M>=6 FILE/ALGORITHM MISMATCH FATAL,TRYING TO USE ANOTHER ALGORITHM'S INPUT FILE. FLUSH= DEBUG,M>=6 BUFFER ALLOCATION FAILURE FATAL,NOT ENOUGH ROOM FOR TABLES,TRY ANOTHER ALGORITHM. IBAND,INBUF(INCTR), NSCAN... DEBUG,M>=6 LINK-REC... DEBUG,M>=6 ADDED... DEBUG,M>=6 ^&SORTED VECTOR MIDDLE PHASE\& ^&MESSAGE CONDITION\& STOP 100 FATAL,TRYING TO USE ANOTHER ALGORITHM'S INPUT. STOP N FATAL,SYS ERROR ^&VECTOR TO RASTER PHASE\& ^&MESSAGE CONDITION\& N VECTORS LOST INFORM.,M>=1 N ACTIVE LINES USED INFORM.,M>=6 FILE/ALGORITHM MISMATCH OR BUFFER SIZE WRONG FATAL,BAD INPUT OR BUFFER SIZES DONT MATCH. IX0,IY1,NDLTX,IY2= DEBUG,M>=6 IM OR INBUF ARRAY NOT PROPERLY DIMENSIONED FATAL MAP BUFFERS EXCEEDED FATAL,TRY SORTED ALGO. IIWORD,IWORD MISMATCH FATAL .TAB STOPS .FILL .PAGE .C;^^INDEX\\ .PRINT INDEX