*COMDECK LOADOVL
* *   LOADOVL -- LOAD FIXED OVERLAYS
* *   R L MCALLESTER                             DATE  06/18/80 
* 
* DC  PURPOSE 
* 
*     LOAD THE OVERLAY THAT CONTAINS THE PROCEDURE BEING CALLED.
*     THE LOADING WILL BE AVOIDED IF THE OVERLAY IS ALREADY LOADED. 
*     THEN SIMULATE A CALL TO THE PROCEDURE.
* 
* DC  ENTRY CONDITIONS
* 
*     THE RETURN ADDRESS IN THE LOADOVL ENTRY WORD POINTS TO THE
*     LOADOVL INPUT DATA. 
*     THE INPUT DATA FORMAT IS DEFINED BY THE OVENT MACRO.
* 
*     ADDR-2     60/OVENT ENTRY WORD
*     ADDR-1     30/RJ LOADOVL
*                12/MULTENT  = 0   CALLED OVERLAY HAS ONLY ONE ENTRY PT 
*                            = 1   CALLED OVERLAY HAS MULTIPLE ENTRY PTS
*                18/ENTIND   IF MULTENT = 1, ENTIND IS THE INDEX INTO 
*                            THE ENTRY POINT INDEX AT THE TRANSFER PT.
*     ADDR       42/OVERLAY NAME
*                6/ 0 
*                6/ PRIMARY OVERLAY NUMBER
*                6/ SECONDARY OVERLAY NUMBER
* 
* DC  EXIT CONDITIONS 
* 
*     REGISTER A1 IS PRESERVED TO PASS PARAMETERS TO THE CALLED 
*     PROCEDURE IN THE OVERLAY. 
* 
* DC  CALLING ROUTINES
* 
*     LOADOVL IS AN INTERNAL PROCEDURE THAT IS CALLED BY EACH OF
*     THE OVENT MACROS. 
* 
* DC  CALLED ROUTINES 
* 
*     CMM.LOV -- LOAD OVERLAY, CMM IS ACTIVE. 
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     LOADOVL IS CONTAINED IN EACH OVERLAY THAT LOADS ANY HIGHER LEVEL
*     OVERLAYS. 
*     AN OVENT MACRO IS USED TO DEFINE AN ENTRY POINT IN THE LOWER
*     LEVEL OVERLAY CORRESPONDING TO EACH ENTRY POINT THAT IS TO BE 
*     CALLED IN THE HIGHER LEVEL OVERLAYS.
* 
*     WHEN LOADOVL LOADS AN OVERLAY, IT RECORDS THE OVERLAY NAME AND
*     LEVEL AT CUROVL.  THE TRANSFER POINT ADDRESS IS SAVED AT ENTADR.
*     IF THE NEXT LOADOVL CALL IS FOR THE SAME OVERLAY, IT IS NOT 
*     RELOADED. 
* 
*     THE CONTENTS OF THE OVENT (DB.XXXX) ENTRY POINT IS TRANSFERRED
*     INTO THE (DB$XXXX) ENTRY POINT IN THE OVERLAY.
*     CONTROL IS TRANSFERRED TO THE WORD FOLLOWING THE OVERLAY ENTRY
*     POINT.
*     THE EFFECT IS AS IF THE OVERLAY PROCEDURE HAD BEEN CALLED 
*     DIRECTLY. 
* 
*     IF ANY ERROR OCCURS WHILE LOADING THE OVERLAY, AN ERROR MESSAGE 
*     IS ISSUED AND THE HOST PROGRAM IS ABORTED.
*#
          SPACE  5,20 
*         MACRO DEFINITIONS 
  
          PURGMAC OVENT 
  
*         OVENT  OVERLAY ENTRY POINT DEFINITIONS
* 
*         PARAMETERS -
*                LABEL - ENTRY POINT PSEUDONYM FOR MAIN OVERLAY 
*                P1 - OVERLAY NAME
*                L1 - LEVEL 1 
*                L2 - LEVEL 2 
* 
*         IF AN OVERLAY HAS MORE THAN ONE ENTRY POINT, EACH ENTRY POINT 
*         MUST BE SPECIFIED ON A SEPARATE OVENT MACRO.
*         P1, L1 AND L2 MUST BE IDENTICAL ON EACH OF THESE MACROS.
*         THEY DO NOT HAVE TO BE GROUPED TOGETHER.
*         THERE MUST BE A CORRESPONDING INDEX LIST LOCATED AT THE 
*         TRANSFER POINT IN THE OVERLAY.
*         THE OVENT MACROS AND THE ENTRY POINT ADDRESSES IN THE INDEX 
*         LIST MUST CORRESPOND WITH EACH OTHER IN NUMBER AND SEQUENCE.
* 
*         WHEN THERE IS ONLY ONE ENTRY POINT THERE IS NO INDEX LIST.
*         THE TRANSFER POINT IS THE ENTRY POINT.
  
          MACRO  OVENT,LAB,P1,L1,L2 
          ENTRY  LAB
LAB       EQ     *+1S17 
          IF     DEF,.P1,3
.P1       SET    .P1+1
#_P1      EQU    1
          SKIP   5
.P1       SET    0
          RMT 
          IF     -DEF,#_P1,1
#_P1      EQU    0
          RMT 
          RJ     LOADOVL
-         VFD    12/#_P1
          VFD    18/.P1 
          VFD    42/0L_P1 
          VFD    6/0
          VFD    6/L1_B,6/L2_B
          ENDM
          SPACE  3,5
*         LOCAL DATA ITEMS
  
SAVEP     CON    0           SAVE PARAMETER LIST ADDRESS
CUROVL    CON    0           OVERLAY CURRENTLY LOADED 
ENTADR    CON    0           ENTRY ADDRESS IN CURRENT OVERLAY 
          SPACE  5,20 
*         LOAD OVERLAY UNLESS ALREADY LOADED. 
  
LOADOVL   EQ   *+1S17 
          SA2    LOADOVL     ENTRY WORD POINTS TO CALLING OVENT MACRO 
          SA3    CUROVL      NAME OF OVERLAY THAT IS CURRENTLY LOADED 
          LX2    30 
          SA4    X2          NAME OF OVERLAY THAT IS BEING CALLED 
          BX3    X3-X4
          BX7    X4 
          ZR   X3,LOADED     THE OVERLAY IS ALREADY LOADED
  
          SA7    A3          SAVE THE NAME OF THE NEW OVERLAY 
          SX6    A1 
          SA6    SAVEP       SAVE THE PARAMETER LIST ADDRESS
          BX1    X4          CMM.OVL PARAMETER TO X1
          RJ   =XCMM.LOV
          SA2    LOADOVL     GET THE CALLING OVENT ADDRESS AGAIN
          SA1    SAVEP
          SX6    B7          OVERLAY ENTRY POINT ADDRESS RETURNED BY FOL
          LX2    30 
          SA1    X1          RESTORE PARAMETER LIST ADDRESS 
          SA6    ENTADR      SAVE THE ENTRY POINT ADDRESS 
          MI   X6,=XDB$FOLE  FOL ERROR DETECTED 
          SPACE  2,8
*         THE OVERLAY IS LOADED.
*         SIMULATE A DIRECT CALL WITHOUT DB$OVLD INTEVENTION. 
  
LOADED    BSS    0
          SA5    X2-1        GET MULTIPLE ENTRY INDICATOR 
          SA3    X2-2        GET THE DB. ENTRY WORD FOR RETURNING JUMP
          SA4    ENTADR      OVERLAY ENTRY POINT ADDRESS
          SB5    X5          SAVE INDEX OFFSET
          LX5    59-18       POSITION MULT ENTRY INDICATOR BIT
          PL   X5,SINGLE
  
*         IT IS A MULTIPLE ENTRY POINT OVERLAY. 
*         THE TRANSFER ADDRESS POINTS TO AN INDEX OF ENTRY POINTS.
  
          SA4    X4+B5       GET ENTRY ADDRESS FROM THE OVERLAY INDEX 
  
SINGLE    BSS    0
          BX6    X3 
          SB2    X4+1 
          SA6    X4          STORE EQ JUMP IN THE OVERLAY ENTRY POINT 
          RJ     *+1         CLEAR THE INSTRUCTION STACK
          EQ     *+1S17 
          JP     B2          JUMP TO THE WORD AFTER THE ENTRY POINT 
