.PROC,LINFMU*I,
M "- Module name (or ALL or *)"        = (*N=*,ALL=*,*,FMSLAVE),
*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 LINFMU procedure LINks the NOS 170 portion of the NOS/VE File Management
 Utility. Requires libraries NVELIB, SYMLIB, BAMLIB, SRVLIB (on NOS only), and
 SYSLIB.

 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 FMSLAVE or ALL
 may be selected. The default value is ALL 170 File Management Utility 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. THE #UN PARAMETER MUST NOT BE SPECIFIED
  .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(NVELIB,.NOT.AS),GETNVELIB.
  GETFILE,NVELIB,NVELIB,UN.
.ENDIF,GETNVELIB.
.IFE,FILE(SYMLIB,.NOT.AS),GETSYMLIB.
  GETFILE,SYMLIB,SYMLIB,UN.
.ENDIF,GETSYMLIB.
.IFE,FILE(BAMLIB,.NOT.AS),GETBAMLIB.
  GETFILE,BAMLIB,BAMLIB,UN.
.ENDIF,GETBAMLIB.
.IFE,FILE(SRVLIB,.NOT.AS),GETSRVLIB.
  GETFILE,SRVLIB,SRVLIB,UN.
.ENDIF,GETSRVLIB.
.IFE,FILE(SYSLIB,.NOT.AS),GETSYSLIB.
  GETFILE,SYSLIB,SYSLIB,UN.
.ENDIF,GETSYSLIB.
.IFE,(($M$.EQ.$FMSLAVE$).OR.($M$.EQ.$*$)),GETFMSLAVE.
  NOTE(OUTPUT,NR)+ LINKING FMSLAVE
  LDSET(#MAP=SBEX/MAP)
  .IFE,SYS.EQ.NOS,NOSSLAVE.
    $LDSET(LIB=B/NVELIB/SYMLIB/BAMLIB/SRVLIB/SYSLIB,PRESET=ZERO)
    $SLOAD(B,FASLAVE,GETTXT)
  .ELSE,NOSSLAVE.
    LDSET(LIB=NVELIB/SYMLIB/BAMLIB/SYSLIB,PRESET=ZERO)
    SLOAD(B,FASLAVE)
    SLOAD(B,FA$$$$ACQF,FA$$$$GDEV,FA$$$$GFAT,GETTXT)
  .ENDIF,NOSSLAVE.
  NOGO,YYYYABS.
  REPLIB,YYYYABS,L,,UN.
  NOTE(OUTPUT,NR)+ MODULE SLAVE --> L
.ENDIF,GETFMSLAVE.
SKIP,NOERROR.
  EXIT.
  UNLOAD,YYYYREL,YYYYABS.
  .IFE,FILE(B,.NOT.AS),RET_B.
    UNLOAD,B.
  .ENDIF,RET_B.
  .IFE,FILE(NVELIB,.NOT.AS),RETNVELIB.
    UNLOAD,NVELIB.
  .ENDIF,RETNVELIB.
  .IFE,FILE(SYMLIB,.NOT.AS),RETSYMLIB.
    UNLOAD,SYMLIB.
  .ENDIF,RETSYMLIB.
  .IFE,FILE(BAMLIB,.NOT.AS),RETBAMLIB.
    UNLOAD,BAMLIB.
  .ENDIF,RETBAMLIB.
  .IFE,FILE(SRVLIB,.NOT.AS),RETSRVLIB.
    UNLOAD,SRVLIB.
  .ENDIF,RETSRVLIB.
  .IFE,FILE(SYSLIB,.NOT.AS),RETSYSLIB.
    UNLOAD,SYSLIB.
  .ENDIF,RETSYSLIB.
  .IFE,(EF.EQ.TIE).OR.(EF.EQ.TAE),TERMINATED.
    EXIT. LINFMU PROCEDURE *TERMINATED*
  .ENDIF,TERMINATED.
  REVERT,ABORT. LINFMU PROCEDURE FAILED
ENDIF,NOERROR.
.IFE,FILE(B,.NOT.AS),RET_B.
  UNLOAD,B.
.ENDIF,RET_B.
.IFE,FILE(NVELIB,.NOT.AS),RETNVELIB.
  UNLOAD,NVELIB.
.ENDIF,RETNVELIB.
.IFE,FILE(SYMLIB,.NOT.AS),RETSYMLIB.
  UNLOAD,SYMLIB.
.ENDIF,RETSYMLIB.
.IFE,FILE(BAMLIB,.NOT.AS),RETBAMLIB.
  UNLOAD,BAMLIB.
.ENDIF,RETBAMLIB.
.IFE,FILE(SRVLIB,.NOT.AS),RETSRVLIB.
  UNLOAD,SRVLIB.
.ENDIF,RETSRVLIB.
.IFE,FILE(SYSLIB,.NOT.AS),RETSYSLIB.
  UNLOAD,SYSLIB.
.ENDIF,RETSYSLIB.
.IFE,$M$.EQ.$*$,LINKALL.
  REVERT. LINKED FMU 170 --> L
.ELSE,LINKALL.
  REVERT. LINKED M --> L
.ENDIF,LINKALL.
/EOR
