*DECK FDLOCR
          IDENT  FDL.OCR
          ENTRY  FDL.LOC
          ENTRY  FDL.UOC
          ENTRY  FDL=ROL
          SYSCOM B1 
          TITLE  FDL.OCR - OVERLAY-CAPSULE RESIDENT.
          COMMENT OVERLAY-CAPSULE RESIDENT. 
          COMMENT COPYRIGHT CONTROL DATA CORP. 1976, 1977, 1978, 1979, 1
,980, 1981, 1982. 
          SPACE  4,10 
*****     FDL.OCR - OVERLAY-CAPSULE RESIDENT. 
*         GREGG TOWNSEND.    76/06/12.
*         C. J. LABATE.      77/03/04.
* 
*         FDL.OCR PROVIDES THE USER INTERFACE FOR LOADING AND UNLOADING 
*         OVERLAY-CAPSULES: FDL CAPSULES WHICH ARE LINKED INTO A
*         PARTICULAR MAIN OVERLAY AND REQUIRE ITS PRESENCE FOR PROPER 
*         EXECUTION.
          SPACE  4,10 
***       FDL.LOC AND FDL.UOC ARE CALLED (RESPECTIVELY) TO LOAD AND 
*         UNLOAD OVERLAY-CAPSULES.  MOST OF THE PROCESSING IS IDENTICAL 
*         WITH LOADING OR UNLOADING STANDARD CAPSULES.  ONLY THE
*         DIFFERENCES ARE NOTED HERE. 
* 
*         THE FOL DIRECTORY, GENERATED WHEN THE OVERLAY STRUCTURE WAS 
*         GENERATED, IS USED TO LOCATE OVCAPS.  PROCESSING IS AS
*         FOLLOWS --
*         1.) IF THE MAIN OVERLAY CAME FROM *NUCLEUS*, AS INDICATED 
*         BY RA+64/65, THEN LOAD VIA SUPPLIED LIBRARY NAME, ELSE
*         2.) IF RA+106/107 IS AVAILABLE, LOAD VIA FOL DIRECTORY
*         AND *LOADQ*, ELSE 
*         3.) IF THE MAIN OVERLAY CAME FROM THE *CLD*, THEN LOAD VIA
*         SUPPLIED LIBRARY NAME, ELSE 
*         4.) TAKE THE FILE NAME FROM RA+64, ASSUME THE MAIN OVERLAY
*         WAS AT PRU 1, AND LOAD VIA FOL DIRECTORY AND *LOADQ*. 
* 
*         WHEN LOADED DYNAMICALLY, OVERLAY-CAPSULES WILL BE LINKED ONLY 
*         TO OTHER OVERLAY-CAPSULES AND TO PASSLOC TABLES, NEVER TO 
*         SIMPLE CAPSULES.
          SPACE  4,10 
*CALL FDLCOM
*         LOCAL VARIABLES.
  
  
 CL       CON    0           CHAIN LINK (ADDRESS OF 1ST CAPSULE BLOCK)
 DA       CON    0           DIRECTORY ADDRESS
  
          IPARAMS 
  
          IFMACS             DEFINE *IFNOS* AND *IFSCOPE* 
  
 IS       IFSCOPE 
 LOCA     DATA   6LSYSOVL    LIBRARY LIST IF NONE GIVEN 
          DATA   0
 IS       ENDIF 
  
 LOC      TITLE  FDL.LOC - LOAD OVERLAY-CAPSULE.
***       FDL.LOC - LOAD OVERLAY-CAPSULE. 
* 
*         ENTRY  (X1) = 42/GROUP NAME, 18/SIZE ESTIMATE.
*                (X2) = OVERLAY-CAPSULE NAME. 
*                (X3) = LIBRARY LIST ADDRESS. 
*                (X4) = PASSLOC LIST ADDRESS. 
* 
*         EXIT   (B1) = 1.
*                (X6) = ERROR CODE: 
*                            0 = NO ERROR.
*                            1 = BAD LIBRARY LIST.
*                            2 = UNKNOWN GROUP NAME.
*                            3 = UNKNOWN OVERLAY-CAPSULE NAME.
*                            4 = BAD OVERLAY-CAPSULE FORMAT.
*                            5 = BAD PASSLOC FORMAT.
*                            6 = OVERLAY-CAPSULE ALREADY IN MEMORY. 
*                            7 = CAPSULE / OVCAP CONFUSION. 
* 
*         SAVES  A0, X0, B2, B3, X5.
* 
*         CALLS  FDL=PRS, FDL=GGD, FDL=SGD, FDL=PCL, FOL.GDE. 
  
  
 FDL.LOC  SUBR   =           ENTRY
  
          MX6    7*6
          SB4    FDL.LOC     EXIT ADDRESS 
          BX7    X6*X1
          NZ     X7,LOC1.5   IF GROUP NAME PROVIDED 
          NO
          BX7    X1 
          SA1    RA.ORG+8 
          BX6    X6*X1
          IX1    X6+X7       USE FIRST ENTRY NAME AS GROUP NAME 
  
 LOC1.5   RJ     =XFDL=PRS   PRESET PROCESSING
          BX1    X2          (X2) = OVCAP NAME
          RJ     =XFOL.GDE   SEARCH FOL DIRECTORY FOR OVCAP 
          NZ     X6,LOC1     IF FOUND 
          SX6    ERR.UCN     ERROR STATUS OF OVCAP NOT FOUND
          EQ     =XFDL=RSC   EXIT 
  
*                            WHEN WE ENTER *LOC1* THE OVCAP HAS BEEN
*                            FOUND IN THE FOL DIRECTORY BY *FOL.GDE*
*                            AND (X6) = 42/NAME, 18/0 
*                            AND (X7) = 18/0, 24/REL PRU, 18/LENGTH 
  
 LOC1     SA1    RA.PGN      (X1) = FILE/LIBRARY NAME FROM RA+64B 
          AX1    18 
          SA2    A1+B1
          SA3    =7RNUCLEUS 
          LX2    59-18       (X2) MINUS IF MAIN OVL LOADED FROM LIBRARY 
          IX1    X3-X1       (X1) = ZERO IF FROM *NUCLEUS*
          NZ     X1,LOC4     IF NOT FROM *NUCLEUS*
          PL     X2,LOC4     IF NOT FROM A LIBRARY
 IS       IFSCOPE 
          SA3    SVX3        RESTORE (X3) 
          ZR     X3,LOC2.3   IF NO LIBRARY LIST GIVEN 
          SA1    X3          CHECK FIRST ENTRY
          NZ     X1,LOC2.5   IF LIST NON-EMPTY
 LOC2.3   SX6    LOCA 
          SA6    A3          REPLACE *SVX3* 
 LOC2.5   BSS    0
 IS       ENDIF 
 LOC2     SA1    SVX1        RESTORE (X1) 
          SA3    SVX3        RESTORE (X3) 
          SA4    SVX4        RESTORE (X4) 
          SA2    DA          CHECK DIRECTORY ADDRESS POINTER
          MX0    60          INDICATE LOADING OPERATION 
          SA0    X2          (A0) = DIRECTORY ADDRESS 
          NZ     X2,LOC3     IF DIRECTORY ALREADY SET 
          RJ     =XFDL=GGD   GET GROUP DIRECTORY
  
*         ENTRY FROM *FDL=PCL* TO RETRY AFTER DIRECTORY RELOAD. 
  
 FDL=ROL  BSS    0
          SX6    A0 
          SA6    DA          SAVE DIRECTORY ADDRESS 
 LOC3     RJ     =XFDL=SGD   SEARCH GROUP DIRECTORY 
          SB2    -B1         INDICATE OVCAP LOAD
          SX6    CL          (X6) = ADDRESS OF OVCAP LINK 
          EQ     =XFDL=PCL   PERFORM OVCAP LOAD 
  
 LOC4     SA4    RA.ORG+7    GET INFO FROM RA+107B (PRU INFO FOR (0,0)) 
          NZ     X4,LOC5     IF THIS INFO IS AVAILABLE
          MI     X2,LOC2     IF FROM A LIBRARY (HENCE THE *CLD*)
          SA3    RA.PGN      (X3) = FILE NAME FROM RA+64B 
          MX0    42 
          SX4    B1 
          BX3    X0*X3       (X3) = 42/FILENAME, 18/0 (=FILE SPEC)
          LX4    18-0        (X4) = 3/0,21/0,18/1(PRU OF (0,0)),18/0
          IX4    X4+X7       (X4) = 3/0,21/0,18/1+REL PRU,18/LENGTH 
          MX1    1
          BX4    X1+X4       (X4) = 3/4,21/0,18/1+REL PRU,18/LENGTH 
          EQ     LOC6 
  
 LOC5     SA3    RA.ORG+6    GET INFO FROM RA+106B (FILE SPEC ENTRY)
          MX0    42 
  
 IN       IFNOS 
          BX3    X0*X3       (X3) = 42/FILESPEC,18/0
          IX4    X4+X7       (X4) = 18/0,24/PRU,18/LENGTH 
 IN       ENDIF 
  
 IS       IFSCOPE 
          BX1    X0*X7       (X1) = 24/0,18/REL PRU,18/0
          BX3    X0*X3       (X3) = 42/FILESPEC,18/0
          LX1    18          (X1) = 6/0,18/REL PRU,36/0 
          BX7    X1+X7       (X7) = 6/0,18/REL PRU,18/REL PRU,18/LENGTH 
          IX4    X4+X7       (X4) = 3/R, 21/PRU, 18/PRU, 18/LENGTH
 IS       ENDIF 
  
 LOC6     SA1    SVX2 
          SA2    SVX1 
          BX1    X0*X1       (X1) = 42/OVCAP NAME, 18/0 
          BX2    X0*X2       (X2) = 42/GROUP NAME, 18/0 
          MX0    60          INDICATE LOADING OPERATION 
          SB2    -B1         INDICATE OVCAP LOAD
          SX6    CL          (X6) = ADDRESS OF OVCAP LINK 
          EQ     =XFDL=PCL   PERFORM OVCAP LOAD 
 UOC      TITLE  FDL.UOC - UNLOAD OVERLAY-CAPSULE.
***       FDL.UOC - UNLOAD OVERLAY-CAPSULE. 
* 
*         ENTRY  (X2) = OVERLAY-CAPSULE NAME. 
*                (X4) = PASSLOC LIST ADDRESS. 
* 
*         EXIT   (B1) = 1.
*                (X6) = ERROR CODE: 
*                            0 = NO ERROR.
*                            3 = UNKNOWN OVERLAY-CAPSULE NAME.
*                            4 = BAD OVERLAY-CAPSULE FORMAT.
*                            5 = BAD PASSLOC FORMAT.
* 
*         SAVES  A0, X0, B2, B3, X5.
* 
*         CALLS  FDL RESIDENT (FDL=PRS, FDL=PCU). 
  
  
 FDL.UOC  SUBR   =           ENTRY
          SB4    FDL.UOC     EXIT ADDRESS 
          RJ     =XFDL=PRS   PRESET PROGRAM 
          BX7    X2 
          MX0    0           INDICATE UNLOADING OPERATION 
          SA7    CM+1        SAVE NAME
          SX6    CL          CHAIN LINK ADDRESS 
          SX7    B1          INDICATE OVCAP 
          EQ     =XFDL=PCU   PERFORM CAPSULE UNLOAD 
          SPACE  4
          END 
