*DECK S$OWNLD 
          IDENT  S$OWNLD
          TITLE  S$OWNLD - LOAD OWNCODE FROM A FILE 
          COMMENT S$OWNLD - LOAD OWNCODE FROM A FILE
          SPACE  4
**        S$OWNLD - LOAD OWNCODE FROM A FILE
* 
*     CALLING SEQUENCE- 
*         S$OWNLD(GOODLOAD, OWNNA$, OWNF$, SPEC$OWNN);
* 
*         GOODLOAD = TRUE IF LOADING IS O K 
*         OWNNA$ = USER OWNCODE NAMES 
*         OWNF$ = USER FILE CONTAINING OWNCODE ROUTINES 
*         SPEC$OWNN = ADDRESS OF OWNCODE ROUTINES 
* 
*     DOES- 
*         IF ANY OWNNA$OWNN SPECIFIED THEN LOADER IS CALLED 
*         TO LOAD FROM FILE SPECIFIED BY OWNF$. 
*         SPEC$OWNN ARE THEN SET TO THE EPT ADDRESSES RETURNED
*         BY LOADER FOR A SUCCESSFUL LOAD AND GOODLOAD IS SET TO TRUE 
*         GOODLOAD IS SET TO FALSE FOR A BAD LOAD.
* 
          ENTRY  S$OWNLD
 S$OWNLD  SUBR
          SB1    1           CONSTANT 1 
          SX7    A1          SAVE APLIST ADDRESS
          SA7    APLIST 
  
* MODIFY THE PASSLOC TABLE - CHANGE Q2NTRY. TO Q2$$$$$ AND
* Q5NTRY TO Q5$$$$$. THIS AVOIDS DUPLICATE ENTRY POINT ERRORS 
* DURING THE PROGRAM-INITIATED LOAD 
  
          SA2    =7LQ2$$$$$   X2 = NON-EXISTENT ENTRY POINT 
          BX7    X2 
          SA7    Q2           LABEL WITHIN THE PASSLOC DECK 
          SA2    =7LQ5$$$$$   X2 = NON-EXISTENT ENTRY POINT 
          BX7    X2 
          SA7    Q5           LABEL WITHIN THE PASSLOC DECK 
  
          MX7    1
          SA7    X1          ASSUME A GOOD LOAD 
  
          SB2    B0          INDEX TO OWNNA$ AND SPEC$OWNN
          SB3    B0          INDEX TO EPTNAMES
          SB4    5           NUMBER OF EPTS 
  
          SA3    A1+B1       ADDRESS OF OWNNA$
          SA3    X3 
 S$OWNLD1 SA4    A3+B2       X4 = EPT OWNNA$OWNN
          MX0    42 
          BX4    X0*X4       MASK LO 18 BITS
          BX6    X4 
          SA6    A4 
  
          IFTHEN X4"0        IF 10H_EPT_NAME
            SX2    1R          CONVERT BLANKS TO ZEROS
            MX0    -6 
            DUP    10 
            BX3    -X0*X4 
            IX3    X3-X2
            IFTHEN X3=0        IF BLANK 
              BX4    X4-X2
              ENDIF.
            LX4    6
            ENDD
  
            BX6    X4 
            SA6    EPTNAMES+B3   STORE INTO LOADER REQUEST TABLE
            SB3    B3+B1       INCREMENT INDEX TO EPTNAMES
            ENDIF.
  
          SB2    B2+B1       INCREMENT INDEX TO OWNNA$
          LT     B2,B4,S$OWNLD1     IF MORE OWNCODES, LOOP
  
          EQ     B3,S$OWNLD  IF NO OWNCODE NAME SPECIFIED,EXIT
  
*     REQUEST LOADER
  
          SA4    ENTRYPTS    LOADER REQUEST EPT ENTRY 
          SX2    B3          NUMBER OF ENTRY POINTS 
          LX2    36 
          BX6    X2+X4
          SA6    A4 
  
          SA4    A1+2        ADDRESS OF OWNF$ 
          SA4    X4 
          SX2    1R          ONE BLANK
          MX0    -6 
          DUP    10          BEGINNING OF DUPLICATION (COMPASS) 
          BX3    -X0*X4 
          IX3    X3-X2
          IFTHEN X3=0        IF BLANK 
            BX4    X4-X2
            ENDIF.
          LX4    6
          ENDD               END OF DUPLICATION (COMPASS) 
          MX0    42 
          BX6    X0*X4       MASK OUT LO 18 BITS
          SA6    LOADFILE    SET LFN FOR LDREQ LOAD FILE
  
+         RJ     =XLOADER.
-         VFD    12/0,18/HEADER    LOAD WITH CMM VERSION
  
*     RESTORE APLIST ADDRESS IN A1
  
          SA1    APLIST 
          SA1    X1 
  
*     IF FATAL LOADER ERRORS, SET GOODLOAD TO FALSE 
  
          SA3    STATUS      CHECK LOADING STATUS 
          IFTHEN X3<0        IF FATAL ERROR 
            MX7    0         SET GOODLOAD TO FALSE (0)
            SA7    X1        ADDRESS OF GOODLOAD
            MESSAGE (=C$ SORT5 - UNABLE TO LOAD OWNCODE$) 
            EXIT
            ENDIF.
  
*     SET SPEC$OWNN WITH EPT ADDRESSES. 
  
          SB2    B0          INDEX TO OWNNA$ AND SPEC$OWNN
          SB3    B0          INDEX TO EPTNAMES
          SB4    5           NUMBER OF EPTS 
  
          SA3    A1+B1       ADDRESS OF OWNNA$
          SA3    X3 
          SA4    A1+3        ADDRESS OF SPEC$OWNN 
          SA4    X4 
  
 S$OWNLD2 SA5    A3+B2       X5 = OWNNA$OWNN
          ZR    X5,SKIPIT    IF NO OWNCODE NAME SPECIFIED 
  
          SA2    EPTNAMES+B3    42/0LEPTNAME,18/ADDRESS 
          SX2    X2          LEAST SIGNIFICANT 18 BITS
          IFTHEN X2=0        IF LOADER DID NOT FIND NAME
            MX7    0         SET GOODLOAD TO FALSE
            SA7    X1        ADDRESS OF GOODLOAD
            MESSAGE (=C$ SORT5 - UNSATISFIED OWNCODE EXTERNAL$) 
            EXIT
            ENDIF.
  
          BX6    X2 
          SA6    A4+B2       SET SPEC$OWNN
          SB3    B3+B1       INCREMENT INDEX TO EPTNAMES
  
 SKIPIT   SB2    B2+B1       INCR INDEX TO OWNNA$ AND SPEC$OWNN 
          LT     B2,B4,S$OWNLD2     IF MORE OWNCODES, LOOP
  
          MESSAGE   (=C$ SORT/MERGE 5 WRITING LOADMAP TO ZZZZZLM$)
          EXIT
  
  
 APLIST   DATA 0             SAVE *A1* ADDRESS HERE 
  
* 
*     LOADER REQUEST TABLE
*     SEE LOADER RM FOR OPTION TABLE FORMATS. 
* 
  
*     BEGIN OPTION
  
 HEADER   VFD    3/7,9/      LOAD SEQUENCE HEADER 
            VFD    18/0        FWASC
            VFD    12/
            VFD    18/0        LWSAC
          DATA 0               ECS ADDRESSES
 STATUS   DATA   0
  
* 
*         SET MAP OPTION TO LDSET(MAP=SBEX/ZZZZZLM) 
* 
          VFD    12/11B,12/1,17/0,18/17B,1/1
MAPNAME   DATA   10LZZZZZLM 
* 
* NOW TELL THE LOADER LDSET(OMIT=S$XLINK) 
* THIS WILL HAVE THE EFFECT OF REMOVING THE CROSSLINKS
* IN SYSLIB WHICH WOULD CAUSE THE PROGRAM-INITIATED LOAD
* TO HAVE MANY MANY DUPLICATE ENTRY POINTS. 
*     OMIT OPTION 
  
          VFD    12/20B,12/1,36/0 
          VFD    42/7LS$XLINK,18/0
* 
* NOW GIVE IT OUR (MODIFIED) PASSLOC TABLE
* (MODIFICATION REMOVES REFERENCES TO Q2NTRY. AND Q5NRTY.)
*CALL PASSLOC 
*     LOAD OPTION 
  
          VFD    12/0,12/1,36/0    LOAD FROM FILE 
 LOADFILE BSS    1           LFN
  
*     SATISFY OPTION
  
          VFD    12/7,12/0,36/0 
  
*     ENTRY OPTION
  
 ENTRYPTS VFD 12/21B,12/0,36/0
 EPTNAMES BSSZ   5           EPT NAME/ADDRESS 
  
*     END OPTION
  
          DATA   0           END LOADING SEQUENCE 
  
  
          END 
