SSOVL 
COPYRT
COMMON
SSOVL 
          IDENT  SSOVL
          ENTRY  SSOVL
          ENTRY  SSOVL
          SYSCOM B1 
 SSOVL    TITLE  SSOVL - LOAD *SSEXEC* OVERLAYS.
*COMMENT  LOAD *SSEXEC* OVERLAYS. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
  
*CALL COMCMAC 
          SPACE  4,30 
***       SSOVL - LOAD *SSEXEC* OVERLAYS. 
* 
*         SSOVL(OVLLEV,XFRADR);        ( *SYMPL* CALL ) 
* 
*         ENTRY  (OVLLEV) = OVERLAY LEVEL.  THE FORMAT IS - 
*                           48/ 0, 6/ PRIMARY LEVEL, 6/ SECONDARY 
*                           LEVEL.
* 
*                (XFRADR) = TRANSFER ADDRESS, ENTRY TO OVERLAY. 
*                           IF 0, ENTER OVERLAY AT ENTRY POINT ADDRESS. 
*                           ELSE, ENTER OVERLAY AT SPECIFIED ABSOLUTE 
*                           ADDRESS.
* 
*         EXIT   THE RETURN ADDRESS IS PLACED IN THE OVERLAY. 
*                CONTROL TRANSFERS TO THE OVERLAY.
* 
*         USES   A - 1, 2, 5, 6.
*                B - 1, 6, 7. 
*                X - 0, 1, 2, 5, 6, 7.
* 
*         CALLS  FOL.LOV. 
* 
*         NOTES  IT IS ASSUMED THAT THE ENTRY POINT ADDRESS OF EACH 
*                OVERLAY CONTAINS (IN BITS 47-30) THE ADDRESS OF THE
*                ROUTINE TO BE EXECUTED.  THIS MODIFICATION IN OVERLAY
*                DESIGN IS DONE TO HANDLE *SYMPL* PROCEDURES. 
* 
*         DAYFILE MESSAGE    * OVERLAY NOT FOUND.*
  
  
 SSOVL    SUBR               ENTRY/EXIT 
  
 SSOVL0   BSS    0           ENTRY FROM *RCOVL* 
          SB1    1
          SX6    A1          PARAMETER LIST ADDRESS 
          SA2    A1+B1
          SA3    X2          GET *XFRADR* PARAMETER 
          BX7    X3 
          SA7    XFRADR      SAVE TRANSFER ADDRESS
          SA6    OVLPARAM 
  
*         DETERMINE IF REQUESTED OVERLAY IS PRIMARY OR SECONDARY. 
*         IF IT IS ALREADY LOADED, SKIP THE LOAD. 
  
          SA1    X1          LEVEL OF REQUESTED OVERLAY 
          MX7    -6 
          BX0    -X7*X1      EXTRACT SECONDARY LEVEL NUMBER 
          ZR     X0,OVL.1    IF PRIMARY OVERLAY REQUESTED 
          SX0    B1 
 OVL.1    BSS    0
          SA5    X0+OVLLEV   LEVEL OF CURRENT OVERLAY 
          SA2    X0+OVLEPTA 
          SB7    X2          CURRENT OVERLAY ENTRY POINT ADDRESS
          BX6    X1-X5
          ZR     X6,OVL1     IF OVERLAY IS ALREADY IN FL
  
          BX6    X1 
          SA6    A5          SAVE OVERLAY LEVEL 
          NZ     X0,OVL.2    IF SECONDARY LOAD
          MX6    0
          SA6    OVLLEV+1    CLEAR SECONDARY LEVEL NUMBER 
 OVL.2    BSS    0
  
*         LOAD THE OVERLAY. 
  
          RJ     =XFOL.LOV   CALL OVERLAY LOADER
          NG     B7,OVL3     IF OVERLAY NOT FOUND 
          SA2    OVLC        INCREMENT OVERLAY COUNTER
          SX6    X2+B1
          SA6    A2 
          SX6    B7          ENTRY POINT ADDRESS
          SA6    X0+OVLEPTA  SAVE ENTRY POINT ADDRESS 
  
*         SET UP RETURN ADDRESS AND ENTER THE OVERLAY.
  
 OVL1     BSS    0
          SA2    SSOVL       GET RETURN ADDRESS 
          BX6    X2 
          SA5    B7          GET ADDRESS TO PROCEDURE 
          LX5    30 
          SB7    X5          ENTRY POINT ADDRESS TO PROCEDURE 
          SA6    B7          PLACE RETURN ADDRESS 
          SB7    B7+B1       ADVANCE TO TRANSFER ADDRESS
          SA1    OVLPARAM    PARAMETER LIST ADDRESS 
          SA2    XFRADR 
          ZR     X2,OVL2     IF TRANSFER TO ENTRY POINT 
  
  
          SB7    X2          TRANSFER ADDRESS 
  
 OVL2     SA1    X1+2        ADVANCE PARAMETER POINTER
  
          JP     B7          SIMULATED CALL TO PROGRAM
  
  
 OVL3     MESSAGE MADDR      ISSUE ERROR MESSAGE
          ABORT              ABORT
*CALL COMXOVL 
  
 MADDR    DATA   40C OVERLAY NOT FOUND. 
 XFRADR   BSSZ   1           SAVED TRANSFER ADDRESS 
 OVLEPTA  BSSZ   2           ENTRY POINT ADDRESS OF CURRENT OVERLAY 
 OVLLEV   BSSZ   2           LEVEL NUMBER OF CURRENT OVERLAY
 OVLPARAM BSSZ   1           ADDRESS TO CALLER PARAMETER LIST 
  
  
 RSOVL    TITLE  RSOVL - REPLACE CURRENT OVERLAY. 
  
**        RSOVL - REPLACE CURRENT OVERLAY.
* 
*         RSOVL(OVLLEV,XFRADR);              ( *SYMPL* CALL ) 
* 
*         ENTRY  (OVLLEV) = OVERLAY LEVEL.  THE FORMAT IS - 
*                           48/ 0, 6/ PRIMARY LEVEL, 6/ SECONDARY 
*                           LEVEL.
* 
*                (XFRADR) = TRANSFER ADDRESS, ENTRY TO OVERLAY. 
*                           IF 0, ENTER OVERLAY AT ENTRY POINT ADDRESS. 
*                           ELSE, ENTER OVERLAY AT SPECIFIED ABSOLUTE 
*                           ADDRESS.
*                *SSOVL* MUST HAVE BEEN CALLED PREVIOUSLY TO LOAD 
*                THE PRIMARY OVERLAY. 
* 
*         EXIT   (A1)     = *FWA* OF PARAMETER LIST.
* 
*         CALLS  SSOVL
* 
*         NOTES  *RSOVL* CAN BE CALLED ONLY TO GO FROM ONE SECONDARY
*                OVERLAY TO ANOTHER SECONDARY OVERLAY.  THE CURRENT 
*                SECONDARY OVERLAY IS REPLACED BY THE REQUESTED 
*                SECONDARY OVERLAY.  *RSOVL* CANNOT BE USED TO GO 
*                FROM ONE PRIMARY OVERLAY TO ANOTHER PRIMARY OVERLAY. 
  
  
 RSOVL    SUBR               ENTRY/EXIT 
          EQ     SSOVL0      ALTERNATE ENTRY TO *SSOVL* 
  
          END 
