COMCLOD 
COMMON
          CTEXT  COMCLOD - USER CALL LOADER INTERFACE.
 COMCLOD  SPACE  4,10 
          BASE   D
          IF     -DEF,QUAL$,1 
          QUAL   COMCLOD
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 COMCLOD  SPACE  4,10 
***       LOADER= - USER CALL LOADER INTERFACE. 
*         P.D. FARRELL.      77/01/06.
 LOADER=  SPACE  4,10 
**        LOADER= PROVIDES THE INTERFACE BETWEEN THE *LOADER* 
*         MACRO AND THE USER CALL LOADER. 
* 
*         RESTRICTIONS: 
* 
*         (1)  COMCLOD DOES NOT PROVIDE FOR OLD-STYLE (SCOPE 3.3) 
*              LOADER CALLS.
*         (2)  COMCLOD CANNOT BE OVERWRITTEN BY THE LOAD. 
* 
*         MACRO CALL -
* 
* ADR     LOADER FWRQ 
* 
*         MACRO CALL EXPANSION -
* 
* ADR     RJ     LOADER=
* +       CON    FWRQ 
* 
*         ENTRY  ADR = ADDRESS OF CALL. 
*                FWRQ = FWA OF LDREQ LIST.  THIS IS THE LOADER
*                       REQUEST LIST GENERATED USING THE *LDREQ*
*                       MACROS.  REFER TO THE LOADER REFERENCE
*                       MANUAL FOR A DESCRIPTION OF THIS LIST.
* 
*         EXIT   TO ADR+2 AFTER LOAD COMPLETION.
*                (B1) = 1.
*                (B7) = LWA+1 OF COMPLETED LOAD IF LWPR DEFINED.
*                (X2) = LOADER STATUS WORD FROM LOAD REQUEST
*                       TABLE.
*                (X6) = BITS 59-36 OF LOADER STATUS FROM LOADER 
*                       REQUEST TABLE HEADER, RIGHT JUSTIFIED.
*                       NEGATIVE INDICATES THAT A FATAL ERROR 
*                       OCCURRED WHILE LOADING; POSITIVE NONZERO
*                       CONTAINS THE FIRST NONFATAL ERROR CODE
*                       ENCOUNTERED DURING THE LOAD OPERATION IN
*                       BITS 18-0.
*                (X7) = LWA+1 OF COMPLETED LOAD IF LWPR DEFINED.
* 
*         USES   ALL REGISTERS. 
* 
*                THE FOLLOWING REGISTERS ARE USED TO PASS PARAMETERS
*                TO THE LOADER: 
* 
*                (A0) = LWA+1 LOADABLE CM.
*                (X0) = LWA+1 LOADABLE ECS. 
*                (B7) = FWA LOADABLE CM.
*                (X6) = 6/, 18/ RTN, 18/ LWRQ, 18/ FWRQ 
*                       RTN  = PROGRAM RETURN ADDRESS.
*                       LWRQ = LWA+1 LDREQ LIST.
*                       FWRQ = FWA LDREQ LIST.
* 
*         CALLS  LDV, LOADU.
  
  
 LOADER=  PS     0           ENTRY/EXIT 
          SA1    LOADER=     READ ENTRY 
          SB1    1           SET CONSTANT B1 = 1
          LX1    30 
          SA3    X1          (X3) = LDREQ LIST ADDRESS
  
*         FORMAT LOADER PARAMETER REGISTERS.
  
          SA5    X3          READ LDREQ LIST HEADER 
          MX0    -12
          SA0    X5          (A0) = LWA+1 OF LOAD AREA
          AX5    30 
          SX5    X5+         (X5) = FWA OF LOAD AREA
          SX6    X3+3        SET ADDRESS OF FIRST REQUEST 
          SA2    X3+1        READ SECOND WORD OF LIST HEADER
 LOD1     SA1    X6          READ REQUEST HEADER
          LX1    0-36 
          BX7    -X0*X1      MASK REQUEST LENGTH
          SX6    X6+B1
          IX6    X6+X7       SET NEXT REQUEST ADDRESS 
          NZ     X1,LOD1     IF NOT END OF LIST 
          MX0    -24
          AX2    30          SHIFT SECOND WORD OF LIST HEADER 
          LX6    18          SHIFT LWA+1 OF LDREQ LIST
          SX4    LOD2        SET LOADER RETURN ADDRESS
          BX0    -X0*X2      (X0) = ECS FIELD LENGTH
          LX4    36          SHIFT RETURN ADDRESS 
          BX4    X4+X3
          SB7    X5          (B7) = FWA OF LOAD AREA
          IX6    X4+X6       (X6) = 24/ RTN, 18/LWRQ, 18/FWRQ 
  
*         FORMAT *LDV* CALL.
  
          SA1    LODA        GET LOADER NAME
          SA2    A1+B1       GET FLAG BITS
          SX3    A0+         LWA+1 OF LOAD AREA 
          BX7    X1 
          LX3    18 
          SA1    LODB        GET *LDV* CALL 
          SA7    LODC        SET LOADER NAME
          BX2    X2+X5       MERGE FLAG BITS, FWA LOAD AREA 
          BX7    X2+X3       SET PARAMETERS 
          SA7    A7+B1
          BX7    X1 
  
*         ENTER LOADER CALL.
* 
*                (A0) = LWA+1 LOADABLE CM.
*                (X0) = LWA+1 LOADABLE ECS. 
*                (B7) = FWA LOADABLE CM.
*                (X6) = 6/, 18/RTN, 18/LWRQ, 18/FWRQ. 
*                       RTN  = PROGRAM RETURN ADDRESS FROM LOADER.
*                       LWRQ = LWA+1 LDREQ LIST.
*                       FWRQ = FWA LDREQ LIST.
  
          SA7    1           ENTER RA+1 REQUEST 
          XJ
  
*         RETURN FROM LOAD OPERATION. 
  
 LOD2     SA1    LOADER=     READ ENTRY POINT 
          SB1    1
          LX1    30 
          SA2    X1          READ LDREQ LIST ADDRESS
          SB6    X1+1        SET RETURN ADDRESS 
          SA2    X2+2        READ LDREQ LIST STATUS REPLY 
          BX6    X2          SET STATUS EXIT
          AX6    36 
 LWPR     IF     DEF,LWPR 
          SA1    LWPR        GET LWA+1 OF LOAD
          SX7    X1 
          SB7    X1 
 LWPR     ENDIF 
          JP     B6          RETURN TO CALLING PROGRAM
          SPACE  4,10 
**        LOADER REQUEST PARAMETER WORDS. 
* 
*         ENTRY  2 WORDS. 
* 
*         60/ LOADER NAME (LEFT JUSTIFIED)
*         24/ FLAG BITS, 18/ LWA+1 LOAD, 18/ FWA LOAD 
*                FLAG BITS = 12/400B = (4,0) OVERLAY, 
*                            12/141B = U, V, AND E BITS.
  
  
 LODA     VFD    60/0LLOADU 
          VFD    12/400B,12/141B,36/0 
  
 LODB     VFD    24/0LLDVP,36/LODC  LDV PPU CALL
  
 LODC     BSSZ   2           LOADER CALL PARAMETER AREA 
          SPACE  4,10 
          BASE   *
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 LOADER=  EQU    /COMCLOD/LOADER= 
 QUAL$    ENDIF 
          ENDX
