*DECK DBP$PIL 
          IDENT  DBP$PIL
DBP$PIL   TITLE  DBP$PIL
DBP$PIL   TITLE  PROGRAM-INITIATE LOAD DATABASE PROCEDURES
*                            *
*         D B P $ P I L      *
*                            *
*  THIS ROUTINE PERFORMS A PROGRAM-INITIATED LOAD OF DATABASE PROCEDURES
*  AS DIRECTED BY THE CALLER. IT BUILDS LOADER REQUEST TABLES IN THE
*  ENTRY POINT LIST SPACE PROVIDED BY THE CALLER( LIST MUST CONTAIN 
*  ENTRY POINTS PLUS SUFFICIENT SPACE FOR ANOTHER LIST OF EPS AND 150D
*  WORDS FOR VARIOUS LDREQ MACROS.) THE EXPECTED FORMAT OF THE ENTRY
*  POINT LIST IS LEFT-JUSTIFIED DISPLAY CODE ( 7 CHARS MAXIMUM) WITH
*  ZERO FILL. THE NUMBER OF ENTRY POINTS IS ALSO NEEDED, THE CALLER CAN 
*  SPECIFY A LIBRARY TO LOAD FROM - LEFT-JUSTIFIED DISPLAY CODE WITH
*  ZERO FILL. UPON COMPLETION,  THE FIRST-WORD-ADDRESS OF THE LOADED
*  AREA WILL BE RETURNED. 
* 
*         CALLING SEQUENCE -
*                           DBP$PIL(EPL,NUMEPS,LIB,FWA) 
* 
* 
*     PASSLOC LISTS PROVIDE OTHER ENTRY POINTS FOR THE DBPS.
* 
  
  
*         WHEN ANY OF THE ENTRY POINTS WITHIN A RELOCATABLE MODULE ARE
*         DEFINED IN PASSLOC ENTRIES, ALL OF THE ENTRY POINTS WITHIN
*         THAT MODULE MUST BE DEFINED.
* 
*         THIS WILL AVOID THE DUPLICATE LOADING OF THE MODULE THAT
*         OCCURS IF A USER REFENCES ONE OF THE ENTRY POINTS THAT IS NOT 
*         INCLUDED IN THE PASSLOC LIST. 
* 
*         DUPLICATE LOADING OF MODULES CAUSES - 
*         ..  LOADER DIAGNOSTICS "DUPLICATE ENTRY POINTS".
*         ..  ERRORS IN EXECUTION (IN SOME CASES).
*         ..  WASTED MEMORY SPACE.
  
  
          B1=1
  
          EJECT 
*CALL MACRO 
          TITLE  SETWC MACRO
          PURGMAC SETWC 
  
*         THIS MACRO SETS THE WORD COUNT FIELD IN -TABLE- TO -VALUE-
*         IT IS DESIGNED TO HANDLE LDREQ MACROS WHERE THE WORD COUNT
*         IS IN BYTE 1 (FROM THE LEFT) IN WORD  0 OF -TABLE-. 
 SETWC    MACRO  TABLE,VALUE       SETS WORD COUNT IN LDREQ TABLE 
          SX6    VALUE
          SA1    TABLE
          LX6    36D
          MX7    12D
          LX7    60D-12D
          BX7    -X7*X1 
          BX6    X6+X7
          SA6    A1 
          ENDM
  
*         MACRO FOR GENERATING PASSLOC LIST.
  
PSL       MACRO  P
L         MICRO 
          IRP    P
          EXT    P
L         MICRO  1,,*"L",(P,,,P)* 
          IRP 
L         MICRO  2,,*"L"* 
          LDREQ  PASSLOC,("L")
          ENDM
          EJECT 
          TITLE  LDREQ MACROS AND SCRATCH STORAGE 
 COM.1    LDREQ  BEGIN
 COM.MAP  LDREQ  MAP,N             *MAP,OFF* IS DEFAULT                 000190
          LDREQ  SUBST,(X-X)
          LDREQ  PASSLOC,((CIO=,,,=XCIO=))
          LDREQ  PASSLOC,((CLOSEM,,,=XQ$CLOSE)) 
          LDREQ  PASSLOC,((DIAGRTN,,,=XDIAGRTN))
          LDREQ  PASSLOC,((DLTE,,,=XQ$DLTE))
          LDREQ  PASSLOC,((D.PACK,,,=XQ$CIN1))
          LDREQ  PASSLOC,((D.UNPAK,,,=XQ$CONF)) 
          LDREQ  PASSLOC,((FILEAK,,,=XQ$FAK)) 
          LDREQ  PASSLOC,((FILEDA,,,=XQ$FDA)) 
          LDREQ  PASSLOC,((FILEIS,,,=XQ$FIS)) 
          LDREQ  PASSLOC,((FILESQ,,,=XQ$FSQ)) 
          LDREQ  PASSLOC,((GET,,,=XQ$GET))
          LDREQ  PASSLOC,((GETN,,,=XQ$GETN))
          LDREQ  PASSLOC,((IFETCH,,,=XQ$FETCH)) 
          LDREQ  PASSLOC,((MSG=,,,=XMSG=))
          LDREQ  PASSLOC,((OPENM,,,=XQ$OPEN)) 
          LDREQ  PASSLOC,((PREBFSZ,,,=XPREBFSZ))
          LDREQ  PASSLOC,((PUT,,,=XQ$PUT))
          LDREQ  PASSLOC,((QUCIN1,,,=XQ$CIN1))
          LDREQ  PASSLOC,((QUCIN2,,,=XQ$CIN2))
          LDREQ  PASSLOC,((QUCONF,,,=XQ$CONF))
          LDREQ  PASSLOC,((QUREAD,,,=XQ$READ))
          LDREQ  PASSLOC,((QUWRITE,,,=XQ$WRITE))
          LDREQ  PASSLOC,((RCL=,,,=XRCL=))
          LDREQ  PASSLOC,((RDC=,,,=XRDC=))
          LDREQ  PASSLOC,((RDW=,,,=XRDW=))
          LDREQ  PASSLOC,((RECOVR,,,=XRECOVR))
          LDREQ  PASSLOC,((REPLC,,,=XQ$REPLC))
          LDREQ  PASSLOC,((SD$OCT,,,=XSD$OCT))
          LDREQ  PASSLOC,((SD$RPVD,,,=XSD$RPVD))
          LDREQ  PASSLOC,((SD$TRC,,,=XSD$TRC))
          LDREQ  PASSLOC,((SETUP.,,,=XSETUP.))
          LDREQ  PASSLOC,((STARTM,,,=XQ$START)) 
          LDREQ  PASSLOC,((STOREF,,,=XQ$STORE)) 
          LDREQ  PASSLOC,((SYS=,,,=XSYS=))
          LDREQ  PASSLOC,((REWND,,,=XQ$REWND))
          LDREQ  PASSLOC,((WNB=,,,=XWNB=))
          LDREQ  PASSLOC,((WTC=,,,=XWTC=))
          LDREQ  PASSLOC,((WTW=,,,=XWTW=))
*         PASSLOC LIST FOR CMM
  
*                            CMM.R
  
          PSL    (CMM.ALF,CMM.FRF)
          PSL    (CMM.AUS,CMM.CFL,CMM.CUL,CMM.ICM,CMM.MEP)
  
  
*         PASSLOC LIST FOR FDL
  
*                            FDL.MMI, LOD=
  
          PSL    (FDL.LDC,FDL=PCL,FDL.ULC,FDL=PCU,FDL.ROS,FDL.UGD)
          PSL    (FDL=GGD,FDL=SGD,LOD=) 
  
  
*         PASSLOC LIST FOR CRM
  
*                            CTL$RM 
  
          PSL    (LOF$RM,RM$PLL,RMP$FE,RM$PL) 
          PSL    (RM$PLB,CMMX.AA,RM$CIO,RM$RCLA)
          PSL    (OFCT$RM,CHWR$RM,MOVE$RM,RM$ABUF)
          PSL    (RM$PD,RM$FAT,RM$FOC,RM$LGO) 
          PSL    (RM$BLD,RM$LDC,RM$UTC,RM$TMP)
          PSL    (RM$LVL,RM$ULJ,CLOF$RM,OPNM$RM)
          PSL    (SFIT$RM,GET$RM,RM$P4G,RM$G1)
          PSL    (PUT$RM,RM$EREX,RM$PAR4,RM$P1) 
  
*                            CTL$WR 
  
          PSL    (REW$RM,WEOS$RM,WEOP$RM) 
  
*                            ERR$RM, CTL$PTL
  
          PSL    (ERR$RM,GETP$RM,PUTP$RM) 
  
*                            CTL$SKP
  
          PSL    (SKBF$RM,SKBP$RM,SKFF$RM,SKFP$RM,SKFL$RM,SKBL$RM)
  
*                            CTRL$AA
  
          PSL    (RM$APL,RMP$LR,DHASH.2,DHASH.1,CTRL$AA,AAM$GO,AAM$BL)
          PSL    (AAM$LOK,DLT$RM,GETN$RM,RM$PARI,GTNR$RM,REPL$RM) 
          PSL    (RM$PARO,SEEK$RM,STRT$RM,FLSH$RM)
  
*                            RMKDEF, ER$SRM 
  
          PSL    (RMKDEF,RM$KDPT,RM$KDWS,ER$SRM)
  
 LGCOM.1  EQU    *-COM.1           LG OF  BEGIN,MAP, AND PASSLOC MACROS 
                                                                        000430
                                                                        000440
                                                                        000450
 LIB.1    LDREQ  LIBLOAD,DMSLIB,(DUMMY) 
 LGLIB.1  EQU    *-LIB.1           LG OF LIBLOAD MACRO
                                                                        000710
                                                                        000720
                                                                        000730
 LIB.2    LDREQ  SATISFY,(DMSLIB) 
 LGLIB.2  EQU    *-LIB.2           LG OF LIB OPTION                     000750
                                                                        000470
                                                                        000480
                                                                        000490
 LOC.1    LDREQ  LOAD,(QUEXITS/R) 
 LGLOC.1  EQU    *-LOC.1           LG OF LOAD MACRO 
                                                                        000510
                                                                        000520
                                                                        000530
 COM.2    LDREQ  LIB,(DMSLIB) 
 LGCOM.2  EQU    *-COM.2           LENGTH OF LIB REQUEST
                                                                        000550
                                                                        000560
                                                                        000570
 COM.2A   LDREQ  SATISFY           SATISFY FROM LOCAL LIBRARY SET 
 LGCOM.2A EQU    *-COM.2A          LENGTH OF THE EMPTY SATISFY OPTION 
                                                                        000590
                                                                        000600
                                                                        000610
 COM.3    LDREQ  ENTRY,(QU$EXIT,XCOMMON)
 LGCOM.3  EQU    *-COM.3           LENGTH OF ENTRY OPTION 
                                                                        000630
                                                                        000640
                                                                        000650
 COM.4    LDREQ  END
 LGCOM.4  EQU    *-COM.4           LENGTH OF END OPTION 
  
          ENTRY  DBP$LTL
 DBP$LTL  VFD    60/*-COM.1        LOADER TABLE LENGTH
                                                                        000670
                                                                        000680
                                                                        000690
 BUFFLENG EQU    4                 LENGTH FOR DUMMY BUFFER FOR USE BY 
                                   READSKP TO FIND OUT IF THE FILE IS 
                                   EMPTY OR NOT.
 QUEXITS  FILEB  DUMBUFF,BUFFLENG  POSSIBLE LOCAL FILE WITH DBPS
 ZZZZZ17  FILEB  DUMBUFF,BUFFLENG  LOADER SCRATCH FILE OF KNOWN EPS,ETC.
 DUMBUFF  BSSZ   BUFFLENG          DUMMY BUFFER 
 LOC.EPL  BSSZ   1                 WILL CONTAIN LOCATION OF ORIGINAL EPL
 LOC.FWA  BSSZ   1                 WILL CONTAIN LOCATION OF FWA PARAM 
 LG.EPL   BSSZ   1                 WILL CONTAIN LG OF EPL 
 LD.EPL   BSSZ   1                 WILL CONTAIN LOC OF LIST OF LOADED 
                                        ENTRY POINTS
PLIST     DATA   0                 WILL HOLD POINTER TO PARAM LIST
          EJECT 
DBP$PIL   TITLE  DBP$PIL
          ENTRY  DBP$PIL
  
 PIL5     LOADER *+1S17,CMM 
          SA1    LOC.EPL           (X1) = LOCATION OF EPL/LDREQ LIST
          SA2    LOC.FWA           (X2) = ADDR OF FWA PARAMETER 
          SA3    X1                (X3) = WORD 0 OF LDREQ BEGIN 
          AX3    30                RIGHT JUSTIFY FWA OF LOAD
          SX6    X3                (X6) = 18 BIT FWA OF LOAD
          SA6    X2                FWA RETURNED TO CALLER 
          SA2    LD.EPL            (X2) = ADDR OF LIST OF LOADED EPS
          SA3    LG.EPL            (X3) = NUMBER OF EPS IN EPL
          =A4    X2-1              (X4) = ADDRESS OF -XCOMMON- EP INFO
          SX4    X4                JUST WANT ADDR AT BOTTOM IF ANY
          ZR     X4,PIL6           IF XCOMMON NOT A LOADED ENTRY POINT
          =A4    A4-1              ADDR OF QUEXITS EP 
          SX6    X4                BOTTOM 18 BITS 
          ZR     X6,PIL6           IF NO QUEXITS WITH XCOMMON 
          MX7    1
          LX7    60-5              POSITION THE ONE TO LOOK LIKE -RJ- 
          LX6    30                POSITION ADDRESS OF QUEXITS FOR -RJ- 
          BX6    X7+X6             FORM THE -RJ QUEXITS- INSTRUCTION
          SA6    =XDBP$EXT         STORE THE -RJ QUEXITS- INSTRUCTION 
 PIL6     MOVE   X2,X3,X1          MOVE EPL FROM LOAD TO ORIGINAL 
                                       POSITION 
  
 DBP$PIL  JP     *+1S17 
          SB1    1
          SX6    A1                (X6) = POINTER TO PARAMETER LIST 
          SA6    PLIST             SAVE THAT POINTER
          RETURN ZZZZZ17           RETURN LOADER SCRATCH FILE 
          SA1    =XDFLAG           (X1) = *D* OPTION FLAGS              000210
          LX1    59-03             POSITION DFLAG03 IN SIGN BIT         000220
          PL     X1,PIL1A          IF DFLAG03 NOT SET                   000230
          SA1    COM.MAP           (X1) = MAP OPTION                    000240
          SX6    37B               (X6) = MAP OPTION BITS FOR *SBEX*
          BX6    X1+X6             (X6) = MAP OPTION FOR *SBEX* 
          SA6    A1                REPLACE MAP OPTION                   000270
 PIL1A    SA1    PLIST             (X1) = POINTER TO PARAMETER LIST     000280
          SA1    X1                RESET A1 TO POINT TO PARAMETER LIST
          BX6    X1                (X6) = ADDRESS OF EPL
          SA6    LOC.EPL           SAVE LOCATION OF EPL 
          =A2    A1+1              (X2) = ADDR. OF NO. OF EPS 
          SA2    X2                FETCH VALUE
          BX6    X2 
          SA6    LG.EPL            SAVE LENGTH OF EPL 
          SA2    A1+3              (X2) = ADDR OF FWA PARAMETER 
          BX6    X2 
          SA6    LOC.FWA           SAVE LOCATION OF FWA PARAMETER 
          SA1    A1+2              FETCH POINTER TO LIBRARY NAME
          SA1    X1                FETCH LIBRARY NAME, IF ANY 
          NZ     X1,PIL1           IF LIBRARY SPECIFIED 
          REWIND QUEXITS,RECALL    REWIND FOR TEST FOR LOCAL FILE 
          READSKP QUEXITS,RECALL   SEE IF ANY INFO ON QUEXITS 
          SA1    QUEXITS+2         (X1) = IN POINTER
          =A2    A1+1              (X2) = OUT POINTER 
          IX3    X1-X2
          NZ     X3,PIL3           IF FILE QUEXITS IS NON-EMPTY 
          RETURN QUEXITS           RETURN JUST-CREATED EMPTY FILE 
          EQ     PIL2              GO LOAD FROM LIBRARY DMSLIB
*         --
          EJECT 
DBP$PIL   TITLE  SETUP LDREQ TABLES FOR LIBRARY LOAD
*         THIS SECTION BUILDS THE LOADER REQUEST TABLES FOR LOADING 
*         DATABASE PROCEDURES FROM A LIBRARY. 
  
  
 PIL1     BX6    X1                (X6) = LIB NAME
          SA6    LIB.1+1           REPLACE LIB NAME IN LIBLOAD
          SA6    LIB.2+1           LIB NAME FOR SATISFY OPTION          000270
          SA6    COM.2+1           LIB NAME FOR LIB OPTION              000280
 PIL2     BSS    0
          SA4    LG.EPL 
          SETWC  LIB.1,X4+1        LENGTH OF EPS PLUS LIB NAME
          SETWC  COM.3,X4+2        LENGTH OF EPS PLUS XCOMMON+QUEXITS 
          SA2    LOC.EPL
          SX0    X2+LGCOM.1        LWA+1 OF FIRST TABLE 
          SX0    X0+LGLIB.1-1      LWA+1 OF TABLES PRIOR TO EPL1
          MOVE   X2,X4,X0          MOVE EPL TO EPL1 POSITION
          MOVE   COM.1,LGCOM.1,X2           BEGIN,MAP,AND PASSLOCS
          MOVE   LIB.1,LGLIB.1-1,X2+LGCOM.1    LIBLOAD
          IX2    X0+X4             LWA+1 OF EPL1
          MOVE   LIB.2,LGLIB.2,X2  SATISFY OPTION                       000320
          SX2    X2+LGLIB.2        LWA+1 OF SATISFY OPTION
          =X3    LGCOM.2           LENGTH OF LIB REQUEST
          MOVE   COM.2,X3,X2       LIB OPTION                           000340
          IX2    X2+X3             LWA+1 OF LIB OPTION                  000350
          MOVE   COM.2A,LGCOM.2A,X2  MOVE EMPTY SATISFY OPTION
          SX2    X2+LGCOM.2A       (X2) = LWA+1 OF EMPTY SATISFY OPTION 
          MOVE   COM.3,LGCOM.3,X2  ENTRY
          SX5    X2+LGCOM.3        LWA+1 OF ENTRY 
          MOVE   X0,X4,X5          EPL2 
          SX6    X5                LOC(EPL2)
          SA6    LD.EPL            (X6) = LOC OF LIST OF LOADED EPS 
          IX3    X4+X5             (X3) = LWA+1 OF EPL2 
          MOVE   COM.4,LGCOM.4,X3  END
          EQ     PIL4 
*         --
          EJECT 
DBP$PIL   TITLE  SETUP LDREQ TABLES FOR LOCAL FILE LOAD 
*         THIS SECTION BUILDS THE LOADER REQUEST TABLES FOR LOADING 
*         DATABASE PROCEDURES FROM A LOCAL FILE, QUEXITS. 
  
  
 PIL3     BSS    0
          SA4    LG.EPL            (X4) = LENGTH OF EPL 
          SETWC  COM.3,X4+2        SET WORD COUNT FOR ENTRY OPTION
          SA2    LOC.EPL           (X2) = LOC OF EPL
          SX0    X2+LGCOM.1        (X0) = LWA+1 OF BEGIN,MAP,ANDPASSLOCS
          SX0    X0+LGLOC.1        (X0) = LWA+1 OF LOAD MACRO 
          SX3    LGCOM.2           (X3) = LENGTH OF LIB REQUEST 
          IX0    X0+X3             (X0) = LWA+1 OF LIB OPTION           000410
          SX0    X0+LGCOM.2A       (X0) = LWA+1 OF EMPTY SATISFY OPTION 
          SX0    X0+LGCOM.3        (X0) = LWA+1 OF ENTRY OPTION 
          MOVE   X2,X4,X0          MOVE EPL TO END OF ALL THESE TABLES
          BX6    X0 
          SA6    LD.EPL            (X6) = ADDR OF LIST OF LOADED EPS
          IX1    X4+X0             (X1) = LWA+1 OF MOVED EPL
          MOVE   COM.4,LGCOM.4,X1  END
          MOVE   COM.1,LGCOM.1,X2  BEGIN,MAP, AND PASSLOCS
          MOVE   LOC.1,LGLOC.1,X2+LGCOM.1     LOAD OPTION 
          SX2    X2+LGLOC.1+LGCOM.1   LWA+1 OF LOAD OPTION
          MOVE   COM.2,X3,X2       LIB OPTION 
          IX2    X2+X3             LWA+1 OF LIB OPTION
          MOVE   COM.2A,LGCOM.2A,X2  MOVE EMPTY SATISFY OPTION
          SX2    X2+LGCOM.2A       (X2) = LWA+1 OF EMPTY SATISFY OPTION 
          MOVE   COM.3,LGCOM.3,X2  ENTRY
          EQ     PIL4 
*         --
          EJECT 
          TITLE 
*         HERE TO FORMAT THE LOADER REQUEST RETURN JUMP 
  
  
 PIL4     SA1    LOC.EPL           (X1) = LOCATION OF EPL/LDREQ LIST
          SA2    PIL5              (X2) = LOADER MACRO WORD 
          MX0    30 
          BX6    X0*X2             (X6) = RJ LOADER 
          BX6    X6+X1             (X1) = LOC OF LDREQ LIST 
          SA6    A2                (X6) = NEW LOADER MACRO WORD 
          RJ     CLR.INS           CLEAR INSTRUCTION STACK
 CLR.INS  DATA   0
          EQ     PIL5 
*         --
          END 
