*DECK GETRCF
          IDENT  GETRCF 
          TITLE  GETRCF - GET RHF CONFIGURATION RECORD. 
          ENTRY  GETRCF 
          LIST   F
          SYSCOM B1 
*CALL COMCMAC 
          SPACE  4,10 
**        GETRCF - GET RHF CONFIGURATION RECORD.
* 
*         GETRCF IS CALLED TO FIND A PARTICULAR RHF CONFIGURATION 
*         RECORD.  A RHF CONFIGURATION RECORD IS A *50*-TYPE
*         OVERLAY WITH A PREFIX TABLE.  THE FOLLOWING ORDER IS
*         USED TO SEARCH FOR THE RECORD:  
*                1. LOCAL FILE *RCFILE*,
*                2. PERMANENT FILE *RCFXXX*, WHERE XXX IS THE 
*                   MAINFRAME PID,
*                3. SYSTEM LIBRARY. 
* 
*         GETRCF (RECNAME, PID, FWA, LWA) 
* 
*         ENTRY  (RECNAME) = NAME OF RHF CONFIGURATION RECORD,
*                (PID) = MAINFRAME PID, 
*                (FWA) = FWA OF AREA AVAILABLE TO LOAD RECORD,
*                (LWA) = LWA OF AREA AVAILABLE TO LOAD RECORD.
* 
*         EXIT   (RECNAME) = NAME OF RECORD, IF FOUND.
*                (PID) = LFN WHERE RECORD WAS FOUND - 
*                            RCFILE, RCMXXX, OR SYSTEM, 
*                        SPACES IF RECORD NOT FOUND.
*                (FWA) = FWA OF WORD FOLLOWING *50* TABLE.
*                (LWA) = LWA OF CONFIG FILE,
*                        0, IF RECORD TOO LARGE.
          SPACE  4,10 
 FWA      CON    0           FWA OF BUFFER
  
 LWA      CON    0
  
 RECNAME  VFD    42/**,18/** RECORD NAME, RECORD TYPE 
  
 RCFILE   FILEB  0,101B,(FET=13B),EPR 
  
 SAVEA0   CON    0           TEMPORARY STORAGE FOR A0 
  
 NOS      IFEQ   OS$NOS 
  
 PF       CON    0           PERMANENT FILE NAME
  
 NOS      ELSE
  
 FDBADR   FDB    RCFILE,RCFXXX,ID=RHF,MR=1
 PF       EQU    FDBADR-4 
  
 NOS      ENDIF 
          SPACE  4,10 
 GETRCF   SUBR
          SB1    1
          SX6    A0          SAVE CONTENTS OF A0
          SA6    SAVEA0 
          SA0    A1          (A0) = FWA OF PARAMETER LIST 
          SA2    X1          (X2) = RECORD NAME 
          MX0    7*6
          BX2    X0*X2
          SX6    4           *OVL* RECORD TYPE
          BX6    X2+X6       (X6) = 42/RECNAME,18/4 
          SA6    RECNAME
          SA1    A1+B1
          SA2    X1          (X2) = PID 
          MX0    3*6
          SX6    3RRCF       FIRST THREE CHARACTERS OF PFN
          BX2    X0*X2
          LX6    59-17
          LX2    41-59
          BX6    X2+X6       (X6) = *RCFPID*
          SA6    PF          STORE PERM FILE NAME 
          SA1    A1+B1
          SA2    X1          GET FWA
          SX6    X2 
          SA6    FWA
          SA1    A1+B1
          SA2    X1          GET LWA
          SX6    X2 
          SA6    LWA
          RJ     GTR         GET RECORD FROM LFN *RCFILE* 
          SA2    RCFILE      (X2) = LFN 
          ZR     X5,GRR1     IF RECORD FOUND
          RETURN RCFILE,RCL 
  
 NOS      IFEQ   OS$NOS 
          ATTACH RCFILE,PF,,,R
          RJ     GTR         GET RECORD FROM PFN *RCFPID* 
          SA2    PF          (X2) = PFN 
          ZR     X5,GRR1     IF RECORD FOUND
          GET    RCFILE,PF
          RJ     GTR         GET RECORD FROM INDIRECT PFN 
          SA2    PF          (X2) = PFN 
          ZR     X5,GRR1     IF RECORD FOUND
 NOS      ELSE
          ATTACH FDBADR,RT
          RJ     GTR         GET RECORD FROM PFN *RCFPID* 
          SA2    PF          (X2) = PFN 
          ZR     X5,GRR1     IF RECORD FOUND
 NOS      ENDIF 
  
          RJ     SLL         SEARCH SYSTEM LIBRARY
          SA2    =0HSYSTEM   LOADED FROM SYSTEM 
          ZR     X5,GRR1     IF RECORD FOUND
          SA2    =1H         RECORD NOT FOUND 
  
 GRR1     SA1    A0+B1       ADDRESS OF SECOND PARAMETER
          SA3    =4R
          MX0    6*6
          BX6    X0*X2
          BX6    X6+X3
          SA6    X1          RETURN LFN OR BLANKS 
          SA1    SAVEA0 
          SA0    X1          RESTORE A0 
          EQ     GETRCF      RETURN 
 GTR      SPACE  4,10 
**        GTR - GET RECORD FROM FILE. 
* 
*         ENTRY  (RCFILE) = FET.
* 
*         EXIT   (X5) = ZERO, IF RECORD WAS FOUND.
  
  
 GTR      SUBR
          SA2    FWA         GET FIRST
          SA1    RCFILE+1 
          MX0    42 
          BX6    X0*X1
          BX6    X6+X2
          SA6    A1 
          SX6    X2 
          SA6    A6+B1       SET IN TO FIRST
          SA6    A6+B1       SET OUT TO FIRST 
          SX6    X6+102B
          SA6    A6+B1       SET LIMIT TO READ FIRST PRU
          REWIND RCFILE,RCL  ENSURE FILE IS REWOUND 
  
 GTR1     SA1    RCFILE+1    GET FIRST
          SX6    X1 
          SA6    A1+B1       SET IN TO FIRST
          SA6    A6+B1       SET OUT TO FIRST 
          READ   RCFILE,RCL  READ FIRST PRU OF NEXT RECORD
          READO  X2          GET FIRST WORD OF RECORD 
          SX5    X1+B1
          ZR     X5,GTR1     IF END-OF-FILE 
          MI     X5,GTR5     IF END-OF-INFORMATION
          SA1    =77000016000000000000B 
          BX1    X1-X6
          NZ     X1,GTR1     IF NOT PREFIX TABLE
          SA2    RCFILE+1    GET FIRST
          SX2    X2          (X2) = FWA OF RECORD 
          SX1    X2+102B     (X1) = LWA OF RECORD 
          RJ     =XSRT=      SET RECORD TYPE
          SA1    RECNAME     GET RECORD NAME AND TYPE 
          BX1    X1-X6
          ZR     X1,GTR2     IF CORRECT RECORD NAME AND TYPE
          SA1    RCFILE 
          LX1    59-4 
          MI     X1,GTR1     IF END-OF-RECORD REACHED 
          SKIPF  RCFILE,1,RCL  SKIP REST OF RECORD
          EQ     GTR1        READ NEXT RECORD 
  
 GTR2     SA2    RCFILE+4 
          SA3    LWA         OLD VALUE OF LIMIT 
          MX0    42 
          BX2    X0*X2
          BX3    -X0*X3 
          BX6    X2+X3
          SA6    A2 
          SA2    RCFILE+1 
          SX6    X2          GET FIRST
          SA6    RCFILE+3    RESET OUT TO FIRST 
          SA1    RCFILE 
          LX1    59-4 
          MI     X1,GTR3     IF END-OF-RECORD REACHED 
          READ   RCFILE,RCL  READ REST OF RECORD
          SA1    X2 
          LX1    59-4 
          MI     X1,GTR3     IF END-OF-RECORD REACHED 
          BX6    X6-X6       RETURN LWA = 0 (RECORD TOO LARGE)
          EQ     GTR4 
  
 GTR3     SA1    RCFILE+2    GET IN 
          SX6    X1-1        LWA = IN - 1 
 GTR4     SA1    A0+3        ADDRESS OF FOURTH PARAMETER
          SA6    X1          RETURN LWA 
          SA1    A1-B1       ADDRESS OF THIRD PARAMETER 
          SA2    RCFILE+1    GET FIRST
          SX6    X2+16B+1    SKIP OVER PREFIX TABLE AND *50* TABLE
          SA6    X1          RETURN FWA 
          BX5    X5-X5       SIGNAL RECORD FOUND
  
 GTR5     RETURN RCFILE,RCL 
          EQ     GTR         RETURN 
 SLL      SPACE  4,10 
**        SLL - SEARCH SYSTEM LIBRARY.
* 
*         ENTRY  (RECNAME) = RECORD NAME. 
* 
*         EXIT   (X5) = ZERO, IF RECORD WAS FOUND.
  
  
 SLL      SUBR
          SA1    RECNAME     GET RECORD NAME
          MX0    42 
          BX6    X0*X1
          SA6    SLLA        SET NAME IN *LOADREQ* BLOCK
          SA1    FWA         FWA OF LOAD AREA 
          SA2    LWA         LWA OF LOAD AREA 
          SA3    SLLB        FLAGS FOR *LOADREQ*
          LX2    18-0 
          BX6    X3+X1
          BX6    X6+X2       24/FLAGS,18/LWA,18/FWA 
          SA6    A6+B1
          BX6    X6-X6
          SA6    A6+B1
 NOS      IFEQ   OS$NOS 
          BX6    X6-X6
          SA6    SLLC        ASSUME LOAD WORKED 
          RECOVR SLR,20B,0   REPRIEVE ON PP ABORTS
          LOADREQ  SLLA,RCL  ATTEMPT TO LOAD OVERLAY
          RECOVR SLR,0,0     REMOVE REPRIEVE ROUTINE
          SA5    SLLC 
          NZ     X5,SLL2     IF LOAD FAILED 
          SA1    LWA         LWA OF LOAD
 NOS      ELSE
          LOADREQ  SLLA,RCL  ATTEMPT TO LOAD OVERLAY
          SA1    SLLA+1 
          MX0    2
          LX1    59-37       37/NON-FATAL ERROR,36/FATAL ERROR
          BX5    X0*X1
          NZ     X5,SLL2     IF AN ERROR OCCURRED 
          SA1    SLLA+1 
          LX1    0-17 
 NOS      ENDIF 
  
          SX6    X1          LWA OF LOAD
          SA1    A0+3        ADDRESS OF FOURTH PARAMETER
          SA6    X1          RETURN LWA 
          SA1    A1-B1       ADDRESS OF THIRD PARAMETER 
          SA2    FWA         GET FWA OF LOAD
          SA3    X2 
          MX0    12 
          BX3    X0*X3
          LX3    11-59
          SX5    X3-5000B 
          NZ     X5,SLL2     IF NOT *5000* TABLE
          SX6    X2 
          SA6    X1          RETURN FWA 
          BX5    X5-X5       SIGNAL RECORD FOUND
  
 SLL2     EQ     SLL         RETURN 
  
 SLLA     VFD    42/**,18/0  OVERLAY NAME OR ENTRY POINT
          VFD    24/**,18/**,18/**  FLAGS, LWA, FWA 
          CON    0
  
 SLLB     CON    0202B*1S48+0S46+1S42+1S41 LEVEL,N=0,U,V
  
 NOS      IFEQ   OS$NOS 
  
 SLLC     CON    **          LOAD FAILED IF NON-ZERO
 SLR      SPACE  4,10 
**        SLR - SYSTEM LOAD FAILED REPRIEVE.
* 
*         SLR IS CALLED BY THE OPERATING SYSTEM *RECOVR* INTERFACE
*         WHEN A OVERLAY LOAD FAILS UNDER NOS.  THIS ROUNDABOUT 
*         PROCEDURE IS USED BECAUSE THE NOS SYSTEM OVERLAY LOADER,
*         LDR, UNCONDITIONALLY ABORTS THE CALLER IF AN OVERLAY
*         LOAD REQUEST FAILS.  SLR SETS THE LOAD FAILED FLAG AND
*         CAUSES SLL EXECUTION TO BE RESUMED. 
* 
*         ENTRY  (A1) = ADDRESS OF PARARMETER LIST
*                       (SEE *RECOVR* DOCUMENTATION). 
* 
*         EXIT   (SLLC) = NON-ZERO
*                (XP+17D) = 4 => RESUME EXECUTION.
  
  
 SLR      SUBR
          SX6    4
          SA6    X1+17D      SET RESUME FLAG
          SA6    SLLC        SET LOAD FAILED FLAG 
          EQ     SLR
  
 NOS      ENDIF 
  
          END 
