ASMB,R,L,C
      HED  * 7210A PLOTTER "PLOT" ROUTINE   A92409-80001-1 REV.D
      NAM PLOT,7 92409-80001 REV. D 
* 
****************************************************************
* 
*     7210A PLOTTER UTILITY 
* 
****************************************************************
**************************************************************
* (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975.  ALL RIGHTS    *
* RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- *
* PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH-  *
* OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.  *
**************************************************************
* 
*     LIST:   A92409-80001-1
*     SOURCE: 92409-80001 
* 
*     REV. D 750313  C. HAMILTON (3-13-75)
* 
****************************************************************
* 
* 
* 
* 
* 
      ENT WHERE,FACT,PLOT,PLTLU 
      ENT LLEFT,URITE,SFACT 
* 
* 
      EXT .ENTR,EXEC,FLOAT,IFIX,RSFLG 
* 
*  THIS IS THE CENTRAL PROGRAM IN THE 
* HP  REAL-TIME EXECUTIVE OPERATING SYSTEM
* PLOTTER PACKAGE.
* 
* 
************************* 
* 
* 
*   THERE ARE 7 SECTIONS TO THE PLOT PROGRAM
* 
*      1-WHERE        ESTABLISHES CURRENT PEN LOCATION
*      2-FACT         ESTABLISHES SCALING FACTOR OF PLOT
*      3-PLOT         CONVERTS THE X,Y AND PEN DATA TO PLOT 
*                       COMMANDS. 
*      4-PLTLU        ESTABLISHES PLOTTER LOG. UNIT # 
*      5-LLEFT        MOVES PEN TO LOWER LEFT CORNER AND
*                       ESTABLISHES ORIGIN AT 0,0.
*      6-URITE        MOVES PEN TO UPPER RIGHT CORNER 
*      7-SFACT        SCALES PLOTTER FOR 10X15 INCH PLOT
* 
* 
* 
* 
      SKP 
**********  ***  ***  *** 
* 
* 
**** ** WHERE ****
* 
*  THE -WHERE- CALL ALLOWS THE USER TO DETERMINE THE
*  CURRENT PLOTTER PEN POSITION.  THE NUMBERS PROVIDED
*  TO THE USER WILL BE IN FLOATING POINT. 
* 
* *  - FORTRAN LINKAGE -
* 
*         CALL WHERE(X,Y) 
* 
*               X  SPECIFIES THE 2 WORD BUFFER FOR X (REAL).
*               Y  SPECIFIES THE 2 WORD BUFFER FOR Y (REAL).
* 
* 
* * 
* 
* *  -  CALLING SEQUENCE -
* 
*           JSB WHERE    WHERE ROUTINE ORIGIN 
*           DEF *+3      RETURN 
*           DEF XC       LOCATION OF USER X 2 WD BUFFER 
*           DEF YC       LOCATION OF USER Y 2 WD BUFFER 
* 
* 
** ** ** ** **
* 
* 
XC    OCT 0         ADDRESS OF 2 WD BUFFER FOR X
YC    OCT 0         ADDRESS OF 2 WD BUFFER FOR Y
* 
* 
WHERE NOP 
      JSB .ENTR 
      DEF WHERE-2 
      LDA #XPEN     FETCH CURRENT  X  POSITION
      JSB FLOAT     CONVERT FROM FIXED TO FLOATING PT 
      FDV #CFAC 
      DST XC,I      STORE IN USERS BUFFER 
* 
      LDA #YPEN     FETCH CURRENT  Y  POSITION
      JSB FLOAT     CONVERT FROM FIXED TO FLOATING
      FDV #DFAC 
      DST YC,I      STORE IN USERS BUFFER 
      JMP WHERE,I   EXIT
* 
* 
* 
* 
      SKP 
* 
***********   ****
* 
* 
***** FACT **** 
* 
* 
*  THE -FACT- CALL ALLOWS THE USER TO VARY THE SCALING
*  FACTOR USED FOR EACH PLOT.  THE SCALING FACTOR WILL
*  BE INITIALIZED AT  "1". THE FACTOR IS
*  MULTIPLIED BY 1000,0 FOR USE WITH
*  THE .001 " (SET UP FOR 10") PLOTTER
* 
* *  - FORTRAN LINKAGE -
* 
*       CALL FACT(AX,AY)
* 
*           AX = X PLOT FACTOR (REAL) 
*           AY = Y PLOT FACTOR (REAL) 
* 
* * 
* 
* *  - CALLING SEQUENCE - 
* 
*          JSB FACT      FACTOR ROUTINE ORIGIN
*           DEF *+3 
*           DEF FCT    LOC OF X PLOT FACTOR 
*           DEF FCT+1   "  "  Y   "    "
* 
* 
** ** ** ** ** ** 
* 
* 
* 
FCT   OCT 0         ADDRESS OF 2 WD FP FACTOR 
      OCT 0 
FACT  NOP 
      JSB .ENTR 
      DEF FACT-2
      JSB RSFLG     SET SAVE RSOURCE FLAG 
      DEF *+1 
      DLD FCT,I 
      FMP F1000 
      DST #CFAC     X COORDINATE PLOT FACTOR. 
      DLD FCT+1,I 
       FMP F1000
       DST #DFAC    Y COORDINATE PLOT FACTOR
      JMP FACT,I
* 
* 
* 
      SKP 
*********** ******** ****** 
* 
* 
***** PLOT **** 
* 
* 
*  THE -PLOT- ROUTINE CONVERTS THE DEFINED X,Y
*  PARAMETERS TO PLOT INFORMATION THEN EXECUTES 
*  THE PLOT.
* 
* 
* 
* 
** RESTRICTION--- NO PLOT LENGTH CAN EXCEED 16,383
*                 INCREMENTS. (APPROXIMATELY 163 INCHES)
* 
* *  - FORTRAN LINKAGE -
* 
*         CALL PLOT(X,Y,IC) 
* 
*           -X,Y DEFINES THE NEW COORDINATE TO BE PLOTTED.
* 
*           -IC  DEFINES THE PEN UP/DOWN COMMAND. 
*                -2 MOVES W/PEN DOWN  FINAL PEN POSITION =NEW ORIGIN. 
*                -3 MOVES W/PEN UPWN  FINAL PEN POSITION =NEW ORIGIN. 
*                +2 MOVES W/PEN DOWN  ORIGIN IS UNCHANGED.
*                +3 MOVES W/PEN UP    ORIGIN IS UNCHANGED.
* * 
* 
* *  - CALLING SEQUENCE - 
* 
*         JSB  PLOT      PLOT ROUTINE ORIGIN
*         DEF  *+4
*         DEF  X         ADDRESS OF X COORDINATE. 
*         DEF  Y         ADDRESS OF Y COORDINATE. 
*         DEF  IC        ADDRESS OF PEN COMMAND.
******  ******
* 
* 
X     OCT 0         ADDRESS OF X PLOT DATA. 
Y     OCT 0         ADDRESS OF Y PLOT DATA. 
IC    OCT 0         ADDRESS OF PEN COMMAND. 
* 
PLOT  NOP 
      JSB .ENTR 
      DEF PLOT-3
      JSB RSFLG     SET SAVE RESOURCE FLAG
      DEF *+1 
* 
* 
      DLD X,I       LOAD X PLOT DATA
      JSB FPC       CONVERT AND FACTOR
      STA IX        STORE FIXED X #.
* 
      DLD Y,I       LOAD Y PLOT DATA
       JSB FPD      CONVERT AND FACTOR
      STA IY        STORE FIXED Y #.
* 
      DLD #XPEN     LOAD OLD X,Y PLOT DATA
* 
*       #XPEN AND #YPEN ARE IN 2 CONSECUTIVE
*       LOCATIONS FOR THIS DOUBLE LOAD. 
* 
*       THE NEW DX,DY (IDX,IDY) WILL BE 
*       CALCULATED AS FOLLOWS:
* 
*              IX - #XPEN= IDX
*              IY - #YPEN= IDY
* 
*                WHERE IX = NEW X 
*                      IY = NEW Y 
*                    #XPEN= OLD X 
*                    #YPEN= OLD Y 
* 
      CMA,INA       2'S COMPLEMENT #XPEN
      CMB,INB       2'S COMPLEMENT #YPEN
      ADA IX        IX - #XPEN
      ADB IY        IY - #YPEN
      DST IDX       STORE #XPEN,#YPEN 
* 
      DLD IX        SET #XPEN,#YPEN= IX,IY
      DST #XPEN 
* 
*   AT THIS POINT #XPEN,#YPEN CONTAIN THE NEW X,Y 
*   FOR REFERENCE AS THE "OLD" POINT FOR THE NEXT 
*   PLOT CALL.
* 
* 
* 
*   DETERMINE PLOT MODE AND DRAW THE LINE.... 
* 
      LDA IC,I     GET PEN COMMAND
      SSA,RSS      NEW ORIGIN?
      JMP PU.1     NO 
      CLB          YES
      STB #XPEN 
      STB #YPEN 
      CMA,INA      ABSOLUTIZE PEN COMAND
PU.1  CPA C01      PLOT POINTS? 
      JMP PU.4      YES!
      CPA C02      MOVE WITH PEN DOWN?
      JMP PU.2     YES
      CCA          MOVE WITH PEN UP 
      STA PENC
      JMP PU.3
PU.4  CLA 
      RSS 
PU.2  CLA,INA      MOVE WITH PEN DOWN 
      STA PENC
PU.3  JSB EXEC      DRAW THE LINE.... 
      DEF *+5 
      DEF C02 
      DEF #PTLU 
      DEF BUFR
      DEF C05 
      JMP PLOT,I
* 
* 
* 
*  THESE ROUTINES MULTIPLY THE PLOT CO-ORDINATES
*  BY THE SCALE FACTORS THEN CONVERTS FROM
*  FLOATING POINT TO FIXED. 
*          A= X OR Y PLOT CO-ORDINATE ON ENTRY. 
* 
FPC   NOP 
      FMP #CFAC     (CO-ORDINATE)(X PLOT FACTOR)
      FAD FD05      ADD ROUNDING VALUE
      JSB IFIX      CONVERT TO INTEGER VALUE
      JMP FPC,I     EXIT WITH A=FIXED PLOT #. 
* 
* 
* 
FPD   NOP 
      FMP #DFAC     (CO-ORDINATE) (Y PLOT FACTOR) 
      FAD FD05      ADD ROUNDING VALUE
      JSB IFIX      CONVERT TO INTEGER VALUE. 
      JMP FPD,I     EXIT WITH A=FIXED PLOT NUMBER 
* 
* 
* 
* 
       SKP
*** PLTLU *** 
* 
* 
*  THE -PLTLU- CALL ALLOWS THE USER TO SET THE
* LOGICAL UNIT NUMBER FOR THE DESIRED PLOTTER.
* THIS CALL MUST BE MADE TO SET THE LU # BEFORE 
* THE FIRST CALL TO -PLOT-; OTHERWISE THE SYSTEM
* WILL TERMINATE THE USER PROGRAM BECAUSE OF AN 
* I/O REQUEST ERROR "LOGICAL UNIT = ZERO".
* 
* * - FORTRAN LINKAGE - 
* 
*      CALL PLTLU(ILU)
* 
*       THE LOGICAL UNIT # MUST BE INTEGER
* 
* * - CALLING SEQUENCE :
* 
*      JSB PLTLU    PLOT LU ROUTINE 
*      DEF *+2      RETURN
*      DEF ILU      LOCATION OF INTEGER LU #
* 
*****  ***  ***** 
* 
* 
* 
ILU   NOP           STORAGE FOR LU # ADDRESS
* 
* 
PLTLU NOP 
      JSB .ENTR     SET ADDRESS OF
      DEF PLTLU-1    PARAMETER IN "ILU".
      JSB RSFLG     SET SAVE RESOURCE FLAG
      DEF *+1 
* 
      LDA ILU,I     SET LU #
      AND B77       ISOLATE LU NUMBER 
      IOR B100
      STA #PTLU      IN LOCAL STORAGE 
      JMP PLTLU,I 
* 
B77   OCT 77
      SKP 
* 
* LLEFT 
* URITE 
* SFACT(X,Y)
* 
* LLEFT MOVES PEN(IN UP POSITION) TO THE LOWER LEFT CORNER
* OF THE PAPER. URITE MOVES PEN TO THE UPPER RIGHT CORNER.
* SFACT SETS UP THE SCALE FACTOR SUCH THAT THE VALUES GIVEN 
* IN A CALL TO SFACT WILL BE INTERPRETED AS 9999 BY PLOT. 
* 
* LLEFT 
* 
LLEFT NOP 
      JSB .ENTR 
       DEF LLEFT
      JSB EXEC
      DEF *+5 
      DEF C02 
      DEF #PTLU 
      DEF BUFR1 
      DEF C05 
* 
      JSB WHERE 
      DEF *+3 
      DEF X2
      DEF Y2
* 
      JSB PLOT
      DEF *+4 
      DEF X2
      DEF Y2
      DEF N3
* 
      JMP LLEFT,I 
* 
* URITE 
* 
URITE NOP 
      JSB .ENTR 
       DEF URITE
      JSB EXEC
      DEF *+5 
      DEF C02 
      DEF #PTLU 
      DEF BUFR2 
      DEF C05 
      JMP URITE,I 
* 
*SFACT
* 
X1    NOP           X: WIDTH SCALE FOR HORIZONATAL MOVEMENTS
Y1    NOP           Y: HEIGHT SCALE FOR VERTICAL MOVEMENTS
SFACT NOP 
      JSB .ENTR 
      DEF X1
* 
      DLD F1000 
      FMP X1,I
      DST X2
      DLD F9999 
      FDV X2
      DST X2
      DLD F1000 
      FMP Y1,I
      DST Y2
      DLD F9999 
      FDV Y2
      DST Y2
* 
      JSB FACT
      DEF *+3 
      DEF X2
      DEF Y2
* 
      JMP SFACT,I 
      SKP 
* 
* 
******   ******  ****** 
* 
* 
* 
******   ******  ****** 
* 
***** WORKING STORAGE *** 
* 
* 
*  THE FOLLOWING GROUPS OF TWO WORDS MUST BE
*  IN 2 CONSECUTIVE MEMORY LOCATIONS. 
* 
BUFR  NOP 
PENC  NOP 
      DEC -1
IDX   NOP 
IDY   NOP 
* 
* 
IX    OCT 0         ACTUAL X PLOT DATA
IY    OCT 0         ACTUAL Y PLOT DATA
* 
* 
* 
* 
* 
C01   OCT 1 
C02   OCT 2 
C05   OCT 5 
B100  OCT 100 
N3    DEC -3
F1000 DEC 1000. 
F9999 DEC 9999. 
X2    NOP 
      NOP 
Y2    NOP 
      NOP 
#XPEN NOP 
#YPEN NOP 
#CFAC DEC 1000.0
#DFAC DEC 1000.0
#PTLU DEC 63
* 
BUFR1 NOP 
      DEC -1
      DEC 0 
      DEC 0 
      DEC 0 
* 
BUFR2 NOP 
      DEC -1
      DEC 0 
      DEC 9999
      DEC 9999
* 
* 
FD05  DEC .5
* 
      END 
                                                          