.PROC,LINRHF*I,
M "- Module name (or ALL or *)"        = (*N=*,ALL=*,*,RHAQEP,RHMPFP),
*IF ($string($name(wev$target_operating_system))='NOSBE')
B "- Binary input file name"           = (*N=NVERELB,*F),
L "- Library name for linked output"   = (*N=NBEBINS,*F),
*ELSE
B "- Binary input file name"           = (*N=NVERELS,*F),
L "- Library name for linked output"   = (*N=NOSBINS,*F),
*IFEND
MAP "- MAP file name"                  = (*N=LINKMAP,*F),
UN "- NOS/BE perm file ID"             = (*N=,*F),
.
.HELP
 The LINRHF procedure LINks the NOS 170 portion of the NOS/VE Remote Host
 Facility. Requires library CYBCLIB.

 Parameter   Default   Description
   Name       Value

  [m]          all     Module name being linked (or ALL or *)
*IF ($string($name(wev$target_operating_system))='NOSBE')
  [b]        nverelb   Binary input file containing the relocatable binaries
  [l]        nbebins   Library name to which the linked module is written
*ELSE
  [b]        nverels   Binary input file containing the relocatable binaries
  [l]        nosbins   Library name to which the linked module is written
*IFEND
  [map]      linkmap   File name to which the linkmap is written

.HELP,M
 The M parameter selects the module name to be linked. Either RHMPFP, RHAQEP,
 or ALL may be selected. The default is ALL 170 Remote Host modules.
.HELP,B
 The B parameter names the binary file containing the relocatable binaries.
*IF ($string($name(wev$target_operating_system))='NOSBE')
 The default value is NVERELB.
*ELSE
 The default value is NVERELS.
*IFEND
.HELP,L
 The L parameter specifies the library file to which the linked module
*IF ($string($name(wev$target_operating_system))='NOSBE')
 is written. The default value is NBEBINS.
*ELSE
 is written. The default value is NOSBINS.
*IFEND
.HELP,MAP
 The MAP parameter names the file to which the linkmap is written.
 The default value is LINKMAP.
.HELP,UN
 The UN parameter specifies a permanent file ID on NOS/BE systems. This
 parameter must not be specified on NOS.
.ENDHELP
.IF,SYS.EQ.NOSB,CHECKUN.
  .IF,$UN$.EQ.$$,BADUN.
    NOTE(OUTPUT); THE #UN PARAMETER MUST BE SPECIFIED.
    REVERT,ABORT.
  .ENDIF,BADUN.
.ELSE,CHECKUN.
  .IF,$UN$.NE.$$,BADUN2.
    REVERT,ABORT. NO UN PARAMETER ON NOS
  .ENDIF,BADUN2.
.ENDIF,CHECKUN.
.IFE,FILE(B,.NOT.AS),GET_B.
  GETFILE,B,B,UN,READ,A=YES.
.ENDIF,GET_B.
.IF,SYS.EQ.NOS,NOSSYS.
  $GTR(B,YYYYREL)REL/*
  $UNLOAD,B.
  $LIBEDIT,P=0,N=B,I=0,#B=YYYYREL,#L=0,U=B,NX=1.
  $UNLOAD,YYYYREL.
.ENDIF,NOSSYS.
.IFE,FILE(CYBCLIB,.NOT.AS),GETCYBCLIB.
  GETFILE,CYBCLIB,CYBCLIB,UN.
.ENDIF,GETCYBCLIB.
.IFE,(($M$.EQ.$RHMPFP$).OR.($M$.EQ.$*$)),GETRHMPFP.
  NOTE(OUTPUT,NR)+ LINKING RHMPFP
  .IFE,SYS.EQ.NOS,NOSRHP.
    $LDSET(#MAP=SBEX/MAP,LIB=B/CYBCLIB,PRESET=ZERO)
  .ELSE,NOSRHP.
    LDSET(#MAP=SBEX/MAP,LIB=CYBCLIB,PRESET=ZERO)
  .ENDIF,NOSRHP.
  SLOAD(B,RHAPFP)
  SLOAD(B,RHMPFP,RHM7ML,CYBMLI)
  SLOAD(B,TESTNBE,DSACYIF,RHACPM,RHMLIO,RHMLGM,RHMPMC,RHMWIT,RHABEIO)
*IF ($string($name(wev$target_operating_system))='NOSBE')
  NOGO,YYYYABS,RHPPFP.
*ELSE
  $NOGO,YYYYABS,RHPPFP,$SSJ=$.
*IFEND
  REPLIB,YYYYABS,L,,UN.
  NOTE(OUTPUT,NR)+ MODULE RHMPFP --> L
.ENDIF,GETRHMPFP.
.IFE,(($M$.EQ.$RHAQEP$).OR.($M$.EQ.$*$)),GETRHAQEP.
  NOTE(OUTPUT,NR)+ LINKING RHMQEP
  .IFE,SYS.EQ.NOS,NOSQEP.
    $LDSET(#MAP=SBEX/MAP,LIB=B/CYBCLIB,PRESET=ZERO)
  .ELSE,NOSQEP.
    LDSET(#MAP=SBEX/MAP,LIB=CYBCLIB,PRESET=ZERO)
  .ENDIF,NOSQEP.
  SLOAD(B,RHAQEP)
  SLOAD(B,RHMQEP,CYBMLI,RHM7ML)
  SLOAD(B,RHMMLI,RHMQFR,RHMRTF,RHMQFT)
  SLOAD(B,TESTNBE,DSACYIF,RHAQAC,RHQXFER,RHMQFA,RHMCLS)
  SLOAD(B,RHMLGM,RHMOPN,RHMQRF,RHMWIT,RHAQFM,RHAQRM)
*IF ($string($name(wev$target_operating_system))='NOSBE')
  NOGO,YYYYABS,RHPQEP.
*ELSE
  $NOGO,YYYYABS,RHPQEP,$SSJ=$.
*IFEND
  REPLIB,YYYYABS,L,,UN.
  NOTE(OUTPUT,NR)+ MODULE RHMQEP --> L
.ENDIF,GETRHAQEP.
SKIP,NOERROR.
  EXIT.
  UNLOAD,YYYYREL,YYYYABS.
  .IFE,FILE(B,.NOT.AS),RET_B.
    UNLOAD,B.
  .ENDIF,RET_B.
  .IFE,FILE(CYBCLIB,.NOT.AS),RETCYBCLIB.
    UNLOAD,CYBCLIB.
  .ENDIF,RETCYBCLIB.
  .IFE,(EF.EQ.TIE).OR.(EF.EQ.TAE),TERMINATED.
    EXIT. LINRHF PROCEDURE *TERMINATED*
  .ENDIF,TERMINATED.
  REVERT,ABORT. LINRHF PROCEDURE FAILED
ENDIF,NOERROR.
.IFE,FILE(B,.NOT.AS),RET_B.
  UNLOAD,B.
.ENDIF,RET_B.
.IFE,FILE(CYBCLIB,.NOT.AS),RETCYBCLIB.
  UNLOAD,CYBCLIB.
.ENDIF,RETCYBCLIB.
.IFE,$M$.EQ.$*$,LINKALL.
  REVERT. LINKED 170 RHF --> L
.ELSE,LINKALL.
  REVERT. LINKED M --> L
.ENDIF,LINKALL.
/EOR
