*DECK LOADREL 
          IDENT  LOADREL
          COMMENT  LOAD ROUTINE FOR -EXECUTE- DIRECTIVE 
 LOADREL  TITLE    LOADREL - LOAD ROUTINE FOR -EXECUTE- DIRECTIVE 
  
  
  
          USE    /SORTBL/ 
 SORTLOC  BSS    0           SHOULD CONTAIN POINTER TO EXECUTE TABLE
          USE    *
  
  
  
          ENTRY  LOADREL
 LOADREL  SUBR               ENTRY/EXIT 
          SB1    1
          SA1    SORTLOC     (X1) = POINTER TO EXECUTE TABLE
          ZR     X1,NOTABLE  IF NO EXECUTE TABLE
          SA1    X1+B1       (X1) = LFN FROM WHICH TO LOAD
          ZR     X1,LIBLOAD  IF =0, LOAD FROM LIBRARY DMSLIB
          SX6    3
          BX6    X1+X6
          SA6    LOCLFN+1 
          SA6    FET         STORE LFN IN FET 
          SA1    A6+B1       (X1) = WORD 1 OF FET 
          SX6    X1          (X6) = FIRST 
          SA6    A1+B1       IN = FIRST 
          SA6    A6+B1       OUT = FIRST
          MX6    3           EMPTY LDREQ BEGIN TABLE
          SA6    LOCREQ      STORE IN LOCAL LOAD REQUEST
          MX6    0
          SA6    A6+B1       CLEAR WORD 1 OF *BEGIN* TABLE
          SA6    A6+B1       CLEAR WORD 2 OF *BEGIN* TABLE
  
  
*    RETURN THE LOADER WORK FILE -ZZZZZ17- TO AVOID HAVING  DUPLICATE 
*    ENTRY POINTS 
  
          RETURN ZZZZZ17,RECALL    RETURN LOADER"S FILE 
  
  
*   IF THERE IS SUCH A FILE, THEN THE -IN- POINTER WILL HAVE MOVED AND
*   WE KNOW THAT THE LFN SPECIFIED EXISTS WITH SOMETHING ON IT. 
  
          REWIND FET,RECALL 
          READSKP FET,RCL    READ FROM THE SPECIFIED FILE 
          SX2    BUF
          SA3    FET+2       READ UP IN POINTER 
          IX3    X2-X3
          ZR     X3,NOBIN    IF =0, WE HAVE AN EMPTY FILE 
          SA1    SORTLOC           FIND ADDRESS OF EP NAME
          SA1    X1                READ UP EPN
          BX6    X1 
          SA6    LOCEP+1           STORE EP NAME IN LOADER REQUEST
          LOADER LOCREQ,CMM        REQUEST LOAD FROM LOCAL FILE 
          SA1    LOCEP+1           FIND ADDRESS OF EP LOADED
          SA2    LOCREQ      (X2) FW OF THE *BEGIN* TABLE 
          EQ  CONCLUDE
  
  
 LIBLOAD  SA1    SORTLOC     (X1) = POINTER TO EXECUTE TABLE
          SA1    X1                READ UP EPN
          BX6    X1 
          SA6    LIBLIST+2
          SA6    LIBEP+1           STORE EP NAME IN LOADER REQUEST
          MX6    3           EMPTY LDREQ BEGIN TABLE
          SA6    LIBREQ      STORE IN LIBRARY LOAD REQUEST
          MX6    0
          SA6    A6+B1       CLEAR WORD 1 OF *BEGIN* TABLE
          SA6    A6+B1       CLEAR WORD 2 OF *BEGIN* TABLE
          LOADER LIBREQ,CMM        REQUEST LOAD FROM LIBRARY DMSLIB 
          SA1    LIBEP+1           FIND ADDRESS OF EP LOADED
          SA2    LIBREQ      (X2) FW OF THE *BEGIN* TABLE 
          EQ     CONCLUDE 
  
  
* CONCLUDE EXPECTS (X1) TO BE ADDRESS OF ENTRY POINT TO EXECUTE 
*                  (X2) TO BE FW OF *BEGIN* TABLE 
  
 CONCLUDE MX0    42 
          AX2    30D         (X2) = 42/STUFF,18/FWA OF LOAD 
          BX6    -X0*X2      (X6) = FWA OF LOAD 
          SA6    LOADFWA     SAVE SO WE CAN RELEASE THE CORE LATER
          BX2    -X0*X1      (X2) = ADDR OF EP
          ZR     X2,CONCL1   IF EP NOT LOADED 
          SA1    MOD         (X1) = R-JUST *RJ ADDR*
          BX1    X0*X1       (X1) = R-JUST *RJ 0* 
          BX6    X1+X2       (X6) = R-JUST *RJ EP*
          SA6    A1          REPLACE AS LINK TO EXECUTE ROUTINE 
          RJ     CLR.INS     CLEAR INSTRUCTION STACK
 CLR.INS  DATA   0
          SX6     B0
          SA6     LOFLOC       CLEAR PREVIOUS COMPLETE BIT
          GETLOF  LOFLOC,RCL   GET ADDRESS OF LIST OF FILES FROM
          SA1    SORTLOC
          SA1    X1+2              A1= ADDR OF PARAM LIST 
*                                  X1= ADDR OF 1ST PARAM
          JP     MOD         GO EXECUTE LOADED ROUTINE
  
 CONCL1   BX6    X1                (X1) = 42/EPNAME, 18/0 
          SA6    CONCLA            STORE NAME FOR DIAGNOSTIC
          SA1    CONCLB            (A1) = FWA OF PARAM LIST FOR DIAG
          RJ     =XDIAG            ISSUE THE DIAGNOSTIC 
          EQ     LEAVE1            EXIT, BYPASSING RJ TO 0
  
 CONCLA   DATA   0                 EP NAME TO DIAGNOSE
 CONCLB   VFD    60/CONCLC         PTR TO DIAG NUMBER 
          VFD    60/CONCLA         PTR TO EP NAME FOR DIAGNOSTIC
 CONCLC   VFD    60/319            DIAG 319...ENTRY POINT NOT FOUND 
  
  
  
  
 NOBIN    RETURN FET,RCL     RETURN THE FNT CREATED 
          SA1    NBERROR
          RJ     =XDIAG 
          EQ     LEAVE1            DO NOT CONTINUE THE EXECUTE
  
 NBERROR  VFD    60/NBDIAG,60/0 
 NBDIAG   VFD    60/336D           EMPTY -EXECUTE FROM- FILE
  
  
  
  
 NOTABLE  SA1    ANBDIAG2          (X1) = ADDR OF NBDIAG2 
          RJ     =XDIAG            ISSUE A DIAGNOSTIC 
          EQ     LEAVE1 
  
 ANBDIAG2 VFD    60/NBDIAG2 
 NBDIAG2  VFD    60/337D           INTERNAL ERROR - NO TABLES FOR EXECUT
  
  
  
 MOD      SB0    LOADFWA     NO-OP SO THE *RJ 0* GETS RIGHT JUSTIFIED 
          RJ     0           MODIFIED TO *RJ EP* WHEN EP IS LOADED
  
          MX6     59
          SA1     LOFLOC       X1 = 30/LOF,30/COMPLETE BIT
          BX6     X6*X1        CLEAR COMPLETE BIT 
          SA6     A1
          SETLOF  LOFLOC,RCL   TELL O/S THE LOCATION OF LISTS OF FILES
 LEAVE1   SA1    SORTLOC     (X1) = POINTER TO EXECUTE TABLE
          ZR     X1,LEAVE2   IF NO EXECUTE TABLE
          MX6    0
          SA6    A1          CLEAR POINTER TO EXECUTE TABLE 
          RJ     =XCMM.FRF   FREE THE FIXED BLOCK 
 LEAVE2   SA1    LOADFWA     (X1) = FWA OF LOADED ROUTINE 
          ZR     X1,EXIT.    IF NO LOADED ROUTINE 
          MX6    0
          SA6    A1          CLEAR POINTER TO LOADED ROUTINE
          RJ     =XCMM.FRF   FREE THE FIXED BLOCK 
          EQ     EXIT.
  
  
 LIBREQ   LDREQ  BEGIN       REQUEST LOAD FROM DMSLIB LIBRARY 
          LDREQ  MAP,N
 LIBLIST  LDREQ  LIBLOAD,DMSLIB,(E0)
          LDREQ  LIB,(DMSLIB) 
          LDREQ  SATISFY
 LIBEP    LDREQ  ENTRY,(E0)        WILL CONTAIN EP TO EXECUTE 
          LDREQ     END 
  
  
  
 LOCREQ   LDREQ  BEGIN       REQUEST LOAD FROM LOCAL FILE 
          LDREQ  MAP,N
 LOCLFN   LDREQ  LOAD,(LFN/R) 
          LDREQ  SATISFY
 LOCEP    LDREQ  ENTRY,(E0)        WILL CONTAIN EP TO EXECUTE 
          LDREQ     END 
  
  
 LOADFWA  DATA   0           WILL HOLD FWA OF LOADED ROUTINE
 LOFLOC   BSSZ     1           SETLOF/GETLOF PARAMETER WORD 
  
  
 BUFSIZ   EQU    4                 LENGTH FOR DUMMY BUFFER FOR USE BY 
                                   READSKP TO FIND OUT IF THE FILE IS 
                                   EMPTY OR NOT.
 FET      FILEB  BUF,BUFSIZ 
 ZZZZZ17  FILEB  BUF,BUFSIZ 
 BUF      BSS    BUFSIZ 
  
          END 
