SUBTTL Initialization /RWS/JMS ftdbug==-1 ;temporary - while debugging IFNDEF TOPS,TOPS==10 ;CSM runs version 7.01 of TOPS-10 DEFINE TOPS10, DEFINE TOPS20, SALL TOPS10< SEARCH MACTEN,UUOSYM > ;Standard TOPS-10 definitions TOPS20< SEARCH MACSYM,MONSYM ;Standard TOPS-20 definitions IF2,< PRINTX [Creating TOPS-20 PLTUNV]> DEFINE ND(SYM,VAL),< ;Macro not in MACSYM IF2,> IFNDEF SYM,> > > ;End TOPS20 ;Define the version number PLTWHO==0 ;Who last edited 'PLOT' PLTVER==12 ;The version number of 'PLOT' PLTMIN=="@"-"@" ;The minor version number of 'PLOT' PLTEDT==514 ;The edit number of 'PLOT' ;Last edited 29-Oct-82 by Joe Smith VERSON== SUBTTL Feature-Test definitions TOPS10< ND FT701,-1 > ;Use FILOP. with extended channels TOPS20< FT701==0 > ;Use OPEN/LOOKUP/IN/RELEAS uuos TOPS20< FTSHR==0 > ;No HISEG for orange toads ND FTJSYS,0 ;No native mode TOPS20 stuff yet ND FTDBUG,0 ;Do not include features for debugging PLOT.REL with DDT ND FTKA,0 ;Use FIXR instruction instead of IFX.1 subroutine ND FTMKTB,0 ;Do not include MKTBL and SETABL in SYMBOL (DEC compatibility) ND FTSHR,-1 ;Put code in HISEG, data in LOSEG ND FTAPLT,0 ;Do not allow for alias plotters (subroutine PLOTER) SUBTTL Table of Contents ; Table of Contents for PLOT universal definitions ; ; ; Section Page ; ; 1. Feature-Test definitions . . . . . . . . . . . . . . . 1 ; 2. Table of Contents . . . . . . . . . . . . . . . . . . 2 ; 3. Edit history . . . . . . . . . . . . . . . . . . . . . 3 ; 4. Macro definitions . . . . . . . . . . . . . . . . . . 4 ; 5. AC definitions . . . . . . . . . . . . . . . . . . . . 6 ; 6. Subroutine Descriptions ; 6.1 IPLOT - Fake a call to PLOTS . . . . . . . . 7 ; 6.2 PLOTS - Initialize the plotter . . . . . . . 8 ; 6.3 CRSHRS - Alias for XHAIRS . . . . . . . . . . 9 ; 6.4 ERASE - Erase screen or go to new page . . . 10 ; 6.5 FACTOR - Change size of plotter movements . . 11 ; 6.6 GETWIN - Get size of universal window . . . . 12 ; 6.7 NEWPEN - Change to different pen color . . . . 13 ; 6.8 OPRTXT - Send a message to the OPR . . . . . . 14 ; 6.9 PAUSEP - Cause the plotter to pause . . . . . 15 ; 6.10 PLOT - Move the pen to X,Y coordinates . . . 16 ; 6.11 PLOTER - Define plotter aliases . . . . . . . 17 ; 6.12 PLOTOF - Temporarily disable output . . . . . 18 ; 6.13 PLOTOK - Get status of the plotter . . . . . . 19 ; 6.14 PLOTON - Resume plotting . . . . . . . . . . . 20 ; 6.15 ROTATE - Set up for a rotation of axis . . . . 21 ; 6.16 SETWIN - Set the size of the universal windo . 22 ; 6.17 SUBWIN - Set/reset/status of sub-window . . . 23 ; 6.18 TITLE - Plot symbols (letters, digits, etc) . 24 ; 6.19 WHERE - Get current pen position . . . . . . 25 ; 6.20 XHAIRS - Trigger crosshairs on TEK 4012 . . . 26 SUBTTL Edit history ;Version number 11 ;Edit Date ; *** **-***-** RWS No previous history. ; PLOT.MAC was written by Rex Shadrick around 1976. ; ; 443 12-Aug-81 JMS Last edit to version 11. ; Joe Smith at CSM. ; ;************ START OF VERSION 12 **************************************** ; ; 500 16-Dec-81 JMS Major changes. Reset version number. ; (PLOT.MAC) ; ; 501 26-Jul-82 JMS Add ReGIS output for VT125 and GIGI terminals. ; (PLTRGS portion of PLOT.MAC) ; ; 502 18-Aug-82 JMS Split into separate source files, compile ; PLOT.MAC+PLTDSK.MAC+PLTRGS.MAC+PLTTEK.MAC+PLTIOD.MAC ; ; 503 22-Sep-82 JMS More on edit 502. ; (all) ; ; 504 15-Oct-82 JMS Remove all UUOs from PLOT.MAC, put them in PLTIOD. ; (PLOT,PLTIOD) ; ; 505 20-Oct-82 JMS Remove debugging HALT from SYMBOL. ; (SYMBOL) ; ; 506 20-Oct-82 JMS Implement CR, LF, TAB, BS, SI, and SO in SYMBOL. ; (SYMBOL) ; ; 507 22-Oct-82 JMS Clear the screen when XHAIRS reads a formfeed. ; (PLTTEK,PLTRGS) ; ; 510 22-Oct-82 JMS Initialize Tektronix 4025 properly. ; (PLTTEK) ; ; 511 27-Oct-82 JMS Do orthoganal or diagonal moves up to 8 pixels by ; sending only digits to the GIGI. ; (PLTRGS) ; ; 512 29-Oct-82 JMS Implement SETSYM routine to replace ISETAB/MSETAB. ; (SYMBOL) ; ; 513 2-Nov-82 JMS Allow [1,2] to write in other directories, ; fix the return of IERR in SETSYM after edit 512. ; (PLTIOD,SYMBOL) ; ; 514 9-Nov-82 JMS Do not special case CR, LF, etc for centered symbols. ; (SYMBOL) ; ;End of Revision History PAGE ; Suggestions to be implemented ; ; What happens for centered symbols on tables without them? ; ; Make callable from ALGOL, COBOL, PASCAL, XPL0, etc ; ; Return plotter type in ASCII as well as integer ; ; Try to intercept calls to EXIT on fatal FORTRAN errors SUBTTL Macro definitions ; $TITLE - This is a macro to the define the version number ; ; Calling sequence: ; $TITLE \VERSION.NUMBER,\EDIT.LEVEL DEFINE $TITLE ($VER,$EDT),< DEFINE UNV ($TXT), DEFINE TTL ($TXT,$TYPE),< SALL TITLE $TXT %'$VER($EDT) IFNB <$TYPE>,> IFB <$TYPE>, TOPS20< SEARCH MACSYM,MONSYM > IF2, $RELOC 400000 >> ;End of DEFINE TTL > ;End of DEFINE $TITLE $TITLE \PLTVER,\PLTEDT UNV PURGE $TITLE ; $RELOC, $HISEG, $LOSEG - Relocation macros for 1 or 2 segments IFE FTSHR,< ;Put everything in LOSEG, with data and code intermixed DEFINE $RELOC (ADDR),<..==.> DEFINE $HISEG,<..==.> DEFINE $LOSEG,<..==.> > ;End of IFE FTSHR IFN FTSHR,< ;Put code in HISEG and data in LOSEG DEFINE $RELOC (ADDR),< TWOSEG RELOC ADDR> DEFINE $HISEG,> ;HISEG origin must be 400000 or above DEFINE $LOSEG,> > ;End of IFN FTSHR ; PFALL - Used to verify the flow by falling into subroutines DEFINE PFALL(LABEL),> ;End IFN and IF2 ..==LABEL > ;End DEFINE PFALL ; ERRSTR - Output an error message to the terminal ; Produces 1 word of in-line code, can be skiped over DEFINE ERRSTR(MESSAGE),< IFDEF RESTTY,< PUSHJ P,[HRROI T1,[ASCIZ ~ MESSAGE ~] PJRST RESTTY]>;;Restore TTY to normal before outputing string IFNDEF RESTTY,< TOPS10< OUTSTR [ASCIZ ~ MESSAGE ~]> TOPS20< PUSHJ P,[HRROI T1,[ASCIZ ~ MESSAGE ~] PSOUT POPJ P,]> >> ;End IFNDEF, end DEFINE ; Definitions from MACTEN and UUOSYM that are not in MACSYM TOPS20< DEFINE MONRT., ;Quiet exit to the EXEC OPDEF PJRST [JUMPA 17,] ;Not in MACSYM SYN FLD,INSVL. ;Insert value .IOASC==0 ;Normal ASCII mode .IOPIM==3 ;Packed Image Mode for TTY .IOIMG==10 ;Image mode .IOIBN==13 ;Image BINARY mode > ;End TOPS20 ;DMOVE and DMOVEM for handling (X,Y) as a pair IFN FTKA,< ;Define DMOVE and DMOVEM to load/store X and Y DEFINE DMOVE (AC,MEM), MOVE AC,MEM MOVE AC+1,MEM+1> DEFINE DMOVEM (AC,MEM), MOVEM AC,MEM MOVEM AC+1,MEM+1> > ;End of IFN FTKA ;FLOAT macro - converts a signed integer with 27 or fewer bits to floating point IFN FTKA,< DEFINE FLOAT (AC,MEM),<;;Convert small integers to floating point IFB ,< FSC AC,233> IFNB ,< MOVE AC,MEM FSC AC,233> >> ;End of KA FLOAT IFE FTKA,< DEFINE FLOAT (AC,MEM),<;;Convert small integers to floating point IFB ,< FLTR AC,AC> IFNB , >> ;End of non-KA FLOAT SUBTTL AC definitions T0= 0 ;Temporary T1= 1 ; ACs usually T2= 2 ; NOT saved T3= 3 ; across T4= 4 ; routines P1= 5 ;Permanent ACs P2= 6 ; usually saved P3= 7 ; across P4=10 ; routines X= 11 ;Holds the location Y= 12 ; being moved to G3==13 ;General ACs, G4==14 ; redefined in G5==15 ; modules that need them L= 16 ;Pointer to the argument list P= 17 ;Push down pointer ;Other definitions PEN.DN==2 ;Lower the pen before moving PEN.UP==3 ;Raise the pen before moving PEN.OR==-3 ;Change the origin OPDEF INTEGER [Z 02,0] ;Fixed point argument OPDEF REAL [Z 04,0] ;Floating point argument OPDEF STRING [Z 17,0] ;ASCIZ string ;NOTE: In the remaining modules in this file, IPLOT must come before PLOTS. ; PLOTS must come before .PLOT. to properly set up forward references ; Everything else is in alphabetical order. PRGEND ;End of PLTUNV universal SUBTTL Subroutine Descriptions -- IPLOT - Fake a call to PLOTS SEARCH PLTUNV ;Search the universal file TTL () ; FUNCTION IPLOT(IWARN) ! You should use PLOTS instead of IPLOT ; IERR = IWARN ! Number of warnings to type ; CALL PLOTS (IERR,0) ! Initialize the plot the right way ; IPLOT = IERR ! Return 0 if OK, -1 if failed ; END ENTRY IPLOT SIXBIT /IPLOT/ IPLOT: MOVEI 0,SAVE00 ;Save all ACs BLT 0,SAVE00+L ;1 through 16 ;*; ERRSTR (<[Function IPLOT has called subroutine PLOTS to set up the plotter]>) ;Call PLOTS directly to avoid the message MOVE T1,@0(L) ;Get argument to IPLOT(IWARN) MOVEM T1,IERR ;Store as 2nd arg to PLOTS MOVEI L,[-2,,0 ;2 args INTEGER IERR ;IERR - Nonzero if error occured INTEGER IPLT ;IPLT - Type of plotter ]+1 ;Point to args PUSHJ P,PLOTS## ;Call routine in PLOT module SKIPE IERR ;Was IERR non-zero? SETOM IERR ;Yes, return -1 even for positive IERR MOVSI L,SAVE00 ;Restore ACs BLT L,L ;0 through 16 MOVE T0,IERR ;Return function value in AC 0 POPJ P, $LOSEG ;Variables SAVE00: BLOCK 16+1 ;Functions must preserve ACs 2-16 IERR: BLOCK 1 IPLT: BLOCK 1 ;Zero means use default plotter $HISEG LITS: PRGEND SUBTTL Subroutine Descriptions -- PLOTS - Initialize the plotter SEARCH PLTUNV ;Search the universal file TTL (,DUMMY) ;Calling sequence: ; CALL PLOTS (IERR) ; CALL PLOTS (IERR, IPLT) ; CALL PLOTS (IERR, IPLT, DFILE) ; ; IERR - (input) The number of "window exceeded" errors to display. ; If negative, the subroutine calls will be traced. ; (output) The error flag. Zero means no errors. ; -1 if no such plotter, positive numbers for output file failure. ; ; IPLT - The type of plotter to set up. This variable is either an integer ; or name stored in an A5 format. ; ' ' or 0 Default plotter ('SPOOL' unless set otherwise) ; 'PLOT' or 'PLT' Same as 0, use the default plotter ; 'TTY' 'TEK' or 'GIGI' depending on terminal type ; 'SPOOL' or 1 Spooled disk file, use ".PLOT *.PLT" to send to plotter ; 100, 200, or 400 Spooled disk file, using that many increments per inch ; 'ARDS' or 2 Advanced Remote Display Station ; 'TEK' or 3 Generic Tektronix terminal (same as 4010) ; 'REGIS' or 4 Generic ReGIS terminal (GIGI, VT125, HI-DMP4R ; 'XY10' or 10 Unspooled output directly to plotter (DEC format) ; 'GIGI', 'VK100', 'VT125', or 'DMP4R' = Specific ReGIS terminals ; '4006' or 4006 Tektronix 4006 terminal ; '4010' or 4010 Tektronix 4010 or 4012 terminal ; '4014' or 4014 Tektronix 4014 terminal using full resolution ; '4025' or 4025 Tektronix 4025 raster scan terminal ; ; DFILE - (optional) A literal or double-precision variable specifying ; the device and file name for output, in an (A10) format. ;Examples: ; IERR = 0 !Do not trace window exeeded errors ; CALL PLOTS (IERR,'TEK') !Set TEKTRONIX into graphics mode ; IF (IERR.NE.0) STOP 'Cannot open PLOT file' ; ; or ; ; IERR = -9 !Trace first 9 errors ; CALL PLOTS (IERR,'SPOOL','LIB:ABCDEF') !Send data to LIB:ABCDEF.PLT ; IF (IERR.NE.0) STOP 'Cannot open PLOT file' ; ;Note: On the last example, logical device LIB: can be defined by ; .PATH LIB:/SEARCH=[13,10,PLOT,TEST] PAGE EXTERN SYMBOL,ISETAB ;Use subroutine SYMBOL for headers and TITLE EXTERN .PLOT. ;Default plotter (ASCII/SPOOL/) ENTRY PLOTS PLOTS=%PLOTS## ;Defined in PLOT module PRGEND SUBTTL Subroutine Descriptions -- CRSHRS - Alias for XHAIRS SEARCH PLTUNV ;Search the universal file TTL (,DUMMY) ;Calling sequence: See subroutine XHAIRS ENTRY CRSHRS CRSHRS=%XHAIRS## ;Defined in PLOT module PRGEND SUBTTL Subroutine Descriptions -- ERASE - Erase screen or go to new page SEARCH PLTUNV ;Search the universal file TTL (,DUMMY) ;Calling sequence: ; CALL ERASE ; ; The current X and Y positions are set to zero, the origin is set to the ;lower left corner of the screen, and rotation is turned off. ; ; The GENCOM, DIABLO, or PTC5 will move to the top of a new page. ENTRY ERASE ERASE=%ERASE## ;Defined in PLOT module PRGEND SUBTTL Subroutine Descriptions -- FACTOR - Change size of plotter movements SEARCH PLTUNV ;Search the universal file TTL (,DUMMY) ;Calling sequence: ; CALL FACTOR (FACT) ; CALL FACTOR (FACT, FACTY) ; ; FACT - The multiplicative factor value to be used ; FACTY - (optional) Factor to be used in the Y directon. If not given, ; FACT will be used for both directions. ; ; If FACT or FACTY is zero, the corresponding factor is left unchanged. ENTRY FACTOR FACTOR=%FACTOR## ;Defined in PLOT module PRGEND SUBTTL Subroutine Descriptions -- GETWIN - Get size of universal window SEARCH PLTUNV ;Search the universal file TTL (,DUMMY) ;Calling sequence: ; CALL GETWIN (XMIN, YMIN, XMAX, YMAX) ; ; XMIN - Coordinate of left edge of window ; YMIN - Coordinate of bottom edge of window ; XMAX - Coordinate of right edge of window ; YMAX - Coordinate of upper edge of window ;Example: ; CALL GETWIN (XMIN, YMIN, XMAX, YMAX) !Get the current borders ; CALL PLOT (XMIN, YMIN, -3) !Restore true origin ; CALL FACTOR (1.0) !Restore true factor ENTRY GETWIN GETWIN=%GETWIN## ;Defined in PLOT module PRGEND SUBTTL Subroutine Descriptions -- NEWPEN - Change to different pen color SEARCH PLTUNV ;Search the universal file TTL (,DUMMY) ;Calling sequence: ; CALL NEWPEN(IPEN,IERR) ; ; IPEN - The new pen to be used, return current pen if IPEN=0. ; IERR - The error flag. Returned as 0 if no errors in setting up the ; new pen, -1 if IPEN is illegal, and returns the current pen ; number if IPEN=0. ; Pen 1 is blue, 2 is black, and 3 is red. ENTRY NEWPEN NEWPEN=%NEWPEN## ;Defined in PLOT module PRGEND SUBTTL Subroutine Descriptions -- OPRTXT - Send a message to the OPR SEARCH PLTUNV ;Search the universal file TTL (,DUMMY) ;Calling sequence: ; CALL OPRTXT (IARRAY, N) ; ; IARRAY - The array of characters (the message) to be output ; N - The number of characters in the message ;Example: ; CALL OPRTXT ('Need black felt-tip in pen 1', 28) ; CALL PLOT (X, Y, 0) !Wait for operator to change pens ENTRY OPRTXT OPRTXT=%OPRTXT## ;Defined in PLOT module PRGEND SUBTTL Subroutine Descriptions -- PAUSEP - Cause the plotter to pause SEARCH PLTUNV ;Search the universal file TTL (,DUMMY) ;Calling sequence: ; CALL PAUSEP (NSEC) ; ; NSEC - The number of seconds to pause ; ;Note: PAUSEP can be used on graphics terminals to allow the user to ; view the plot. PAUSEP does not affect the spooled plotter (DP-8), ; but the command is stored in the disk file in case the 'TEK' ; program is used to view the plot. ENTRY PAUSEP PAUSEP=%PAUSEP## ;Defined in PLOT module PRGEND SUBTTL Subroutine Descriptions -- PLOT - Move the pen to X,Y coordinates SEARCH PLTUNV ;Search the universal file TTL (,DUMMY) ;Calling sequence: ; CALL PLOT (X, Y, IFUNC) ; ;(X,Y) Floating point values of X and Y to be used in this call to PLOT. ; ;IFUNC = 999 To finish off the PLOT in proper form. ;--------- 999 must be executed before the end of your program ------------- ; = 13 X and Y are polar coordinates (X = radus and Y = angle in ; radians), the movement is with pen up. ; = 12 X and Y are polar coordinates, the movement is with the ; pen down. ; = 11 X and Y are polar coordinates, the movement is with the last ; pen value (2 or 3). ; = 10 X and Y are polar coordinates (X = radus and Y = angle in ; degrees), the movement is with pen up. ; = 9 X and Y are polar coordinates, the movement is with the ; pen down. ; = 8 X and Y are polar coordinates, the movement is with the last ; pen value (2 or 3). ;-------------- --------------------- ; = 7 X and Y are delta values, the movement is with the pen up. ; = 6 X and Y are delta values, the movement is with the pen down. ; = 5 X and Y are delta values, the movement is with the old pen (up or down) ;-------------- --------------------- ; = 4 Make the current pen position (X,Y) by shifting the origin. ;-------------- These next two functions are used the most --------------------- ; = 3 X and Y are coordinates, the movement is with the pen up. ; = 2 X and Y are coordinates, the movement is with the pen down. ;-------------- --------------------- ; = 1 X and Y are coodinates, leaving the pen as is (up or down). ; = 0 Make the output to the plotter pause, CRT's will wait for LF. ; = -1 Same as '1', except after the movement this point is the origin. ;-------------- --------------------- ; -2 to -13 Set origin to (X,Y) after moving to new position. ; -999 to abort the plot and delete the disk file (if any). ; ;##NOTE: For absolute value of "IFUNC" greater than 13 ends the plot. ;The proper way to finish the plot is by: ; CALL PLOT (X, Y, 999) ENTRY PLOT PLOT=%PLOT## ;Defined in PLOT module PRGEND SUBTTL Subroutine Descriptions -- PLOTER - Define plotter aliases SEARCH PLTUNV ;Search the universal file IFN FTAPLT,< ;Only if alias plotters TTL (,DUMMY) ;Calling sequence: ; CALL PLOTER (IPLT,IALIAS,IERR) ; ; IPLT - An existing plotter type. See PLOTS for list of valid types. ; ; IALIAS - The new name to define. Up to 5 letters and/or digits. ; ; IERR - Returned as 0 if OK, -1 if IPLT is unknown or table full. ENTRY PLOTER PLOTER=%PLTER## ;Defined in PLOT module PRGEND > ;End of IFN FTAPLT SUBTTL Subroutine Descriptions -- PLOTOF - Temporarily disable output SEARCH PLTUNV ;Search the universal file TTL (,DUMMY) ;Calling sequence: ; CALL PLOTOF (IPLT) ; ; IPLT - The plotter to turn off. Zero means current plotter. ; See PLOTS for list of valid types. ; ;NOTE: If your program intends to do READ/ACCEPT from the terminal or ; WRITE/TYPE to the terminal, you must call PLOTOF to reset the graphics ; terminal to text mode. Subroutine PLOTON will resume plotting without ; erasing the screen, subroutine PLOTS will erase and start over. ENTRY PLOTOF PLOTOF=%PLTOFF## ;Defined in PLOT module PRGEND SUBTTL Subroutine Descriptions -- PLOTOK - Get status of the plotter SEARCH PLTUNV ;Search the universal file TTL (,DUMMY) ;Calling sequence: ; CALL PLOTOK (IPLT,IOK,DNAME,X,Y,IPEN,FACTX,FACTY,ORIGX,ORIGY,ANGLE) ; ; IPLT - The type of plotter to check. See PLOTS for list. ; IOK - Plotter status, -1 if no such plotter, 0 if OFF, 1 if ON ; DNAME - Output device and file name, double precision in (A10) format ; X - Current pen position ; Y - " " ; IPEN - Current pen number, negative if pen is up (Set by PLOT and NEWPEN) ; FACTX - Scaling factor in X direction (Set by call to FACTOR) ; FACTY - Scaling factor in Y direction ; ORIGX - Coordinate of absolute origin (Set by CALL PLOT (X,Y,-3) ; ORIGY - " " " ; ANGLE - Rotation angle in degrees (Set by call to ROTATE) ENTRY PLOTOK PLOTOK==%PLTOK## ;Defined in PLOT module PRGEND SUBTTL Subroutine Descriptions -- PLOTON - Resume plotting SEARCH PLTUNV ;Search the universal file TTL (,DUMMY) ;Calling sequence: ; CALL PLOTON (IPLT) ; ; IPLT - The type of plotter to turn on. Zero means the current plotter. ; See PLOTS for list of plotter types. ; ;NOTE: PLOTS can be called more than once, to send output to the spooled ; plotter and to the Tektronix simultaneously. You can call PLOTOF ; and PLOTON to turn on and off each plotter individually. ;Example: ; ; CALL PLOTS (IERR,'SPOOL') !Open spooled plotter disk file ; IF (IERR.NE.0) STOP 'PLOTS failed' ; CALL PLOTS (IERR,'TEK') !Enable the Tektronix also ; --- (a bunch of calls to PLOT) ; CALL PLOTOF('TEK') !Set Tektronix back to text mode ; TYPE 10 ;10 FORMAT (' Proceed? ',$) ; ACCEPT 20, ANS ;20 FORMAT (A1) ; IF (ANS.NE.'Y') GOTO 2000 !Abort if not "YES" ; CALL PLOTON('TEK') !Back to graphics mode ; --- (more calls to PLOT) ;1000 CALL PLOT(X,Y,999) !Finish off the plot properly ; STOP 'Plot is done' ;2000 CALL PLOT(X,Y,998) !Cancel the plot file ; STOP '%Plot aborted' ; END ENTRY PLOTON PLOTON=%PLTON## ;Defined in PLOT module PRGEND SUBTTL Subroutine Descriptions -- ROTATE - Set up for a rotation of axis SEARCH PLTUNV ;Search the universal file TTL (,DUMMY) ;Calling sequence: ; CALL ROTATE (IFUNC, X, Y, ANGLE) ; ; (X,Y) - The coordinate the plot is to be rotated about, new origin ; ANGLE - The angle the plot is to be rotated about, in degrees ; IFUNC = 0 To clear all rotation, set origin to lower left corner ; Current origin and angle are returned in X, Y, and ANGLE ; < 0 To set rotation to ANGLE, regardless of previous rotation. ; > 0 To sum the new angle with old rotation. ; ;NOTE: The origin set by CALL PLOT(X,Y,-3) affects all plotters equally. ; The origin set by ROTATE affects only the plotters currently active. ; The origin of the Tektronix can be set to be different from that of ; the spooled plotter by calling PLOTOF to disable all other plotters ; before calling ROTATE, and calling PLOTON after. ENTRY ROTATE ROTATE=%ROTATE## ;Defined in PLOT module PRGEND SUBTTL Subroutine Descriptions -- SETWIN - Set the size of the universal window SEARCH PLTUNV ;Search the universal file TTL (,DUMMY) ;Calling sequence: ; CALL SETWIN (WX, WY, PRVX, PRVY) ; ; WX - The requested width of the window in inches (X direction) ; WY - The requested height of the window in inches (Y direction) ; PRVX - The maximum width you are allowed to use. ; PRVY - The maximum height you are allowed to use. ; Users are limited to 11 inches unless special privleges are granted. ; ; This subroutine defines the universal window. It must be called before ;PLOT and SUBWIN, but after PLOTS. ENTRY SETWIN SETWIN=%SETWIN## ;Defined in PLOT module PRGEND SUBTTL Subroutine Descriptions -- SUBWIN - Set/reset/status of sub-window SEARCH PLTUNV ;Search the universal file TTL (,DUMMY) ; This routine allows the user to set up a subwindow. The user can ;also turn the subwindow feature off and on at will. No lines will ;be plotted outside the current subindow. ; ;Calling sequence: ; ; CALL SUBWIN (IFUNC, IVALUE, X0, Y0, WIDTH, HEIGHT) ; ; IFUNC - (Input) allows for 4 modes of operation ; 0 or 'SET' - Set up the window. ; 1 or 'READ' - Read the window size and ON/OFF flag. ; 2 or 'OFF' - Disable the subwindow for now. ; 3 or 'ON' - Reenable the window with the last subwindow defined. ; ; IVALUE - (Output) A mode (IFUNC) dependent value (if IFUNC < 0 or IFUNC > 4 ; then IVALUE will be set equal to -1) ; IFUNC = 0 or 'READ' ; -1 - Error - The width or height was less than zero. ; 0 - The window was set up. ; IFUNC = 1 or 'SET' ; -1 - Error - No subwindow has been set up yet. ; 0 - The subwindow is defined, but disabled. ; 1 - The subwindow is defined and active. ; IFUNC = 2 or 'OFF' or 3 or 'ON' ; -1 - Error - No subwindow was set up. ; 0 - The subwindow checking was set or cleared. ; ; X0,Y0 - (I/O) The coordinate of the lower hand corner of the subwindow ; (not used if IFUNC = 2 or 3) ; ; WIDTH - (I/O) The width of the window (not used if IFUNC = 2 or 3) ; ; HEIGHT - (I/O) The height of the window (not used if IFUNC = 2 or 3) ENTRY SUBWIN SUBWIN=%SUBWIN## ;Defined in PLOT module PRGEND SUBTTL Subroutine Descriptions -- TITLE - Plot symbols (letters, digits, etc) SEARCH PLTUNV ;Search the universal file TTL (,DUMMY) ;Calling sequence: ; CALL TITLE (X, Y, HEIGHT, ICHAR, ANGLE, NUMCHR) ; ; (X,Y) - The coordinate of the first character to be drawn. ; HEIGHT - The height of the characters in inches. ; ICHAR - An array of characters to be plotted, or an integer number. ; ANGLE - The angle of rotation, must be a multiple of 45 degrees. ; NUMCHR - the number of characters to be plotted. ; If NUMCHR is zero, plot the single char whose ASCII code is in ICHAR. ; ;This routine uses the hardware character set if possible. Otherwise it ;uses subroutine SYMBOL and ISETAB table #1. ENTRY TITLE TITLE==%TITLE## ;Defined in PLOT module PRGEND SUBTTL Subroutine Descriptions -- WHERE - Get current pen position SEARCH PLTUNV ;Search the universal file TTL (<WHERE - Returns the current loctation of the pen>,DUMMY) ;Calling sequence: ; CALL WHERE (X, Y, FACT) ; CALL WHERE (X, Y, FACT, IPLT, FACTY) ; ; X - The current X value of the point ; Y - The current Y value of the point ; FACT - The current factor value ; IPLT - (optional) The current type of plotter in use: ; 1 - Spooled version, compressed output for PLTSPL ; 2 - ARDS terminal ; 3 - TEKTRONIX terminal ; 4 - ReGIS terminal (GIGI,VT125) ; 10 - Original DEC spooler version, expanded output ; FACTY - (optional) The current factor used in the Y direction ENTRY WHERE WHERE=%WHERE## ;Defined in PLOT module PRGEND SUBTTL Subroutine Descriptions -- XHAIRS - Trigger crosshairs on TEK 4012 SEARCH PLTUNV ;Search the universal file TTL (<XHAIRS - Triggers crosshairs on TEK 4012 and GIGI>,DUMMY) ;Calling sequence: ; CALL XHAIRS (XPOS, YPOS, LETTER) ; CALL XHAIRS (XPOS, YPOS, LETTER, DSTRNG) ; CALL CRSHRS (XPOS, YPOS, LETTER) ! Old name for XHAIRS ; ; XPOS - The X coordinate of the crosshairs ; YPOS - The Y coordinate of the crosshairs ; LETTER - The character that was typed. Normal characters are ; returned in an 'A1' format, control characters are returned ; as a number between 1 and 31 in an 'R1' format. ; DSTRNG - (optional) The string of characters as sent by terminal ; left justified in a DOUBLE PRECISION variable. (10 characters ; for GIGI, only 5 for TEKTRONIX.) ; ; If the character typed is a Control-L (formfeed), the screen is erased, ;the beam position set to (0,0) at the lower left corner of the screen, ;and all arguments are returned as zero. ENTRY XHAIRS XHAIRS=%XHAIRS## ;Defined in PLOT module END