.PROC,LINDSMR*I,
M "- Module name (or ALL or *)"        = (*N=*,ALL=*,*,DSMRUN),
*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 LINDSMR procedure links the NOS 170 absolute binary DSMRUN to run dual
 state. Requires libraries CYBCLIB and NETIO.

 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 DSMRUN or ALL
 may be selected. The default value is ALL 170 Interactive Facility 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(CYBCLIB,.NOT.AS),GETCYBCLIB.
  GETFILE,CYBCLIB,CYBCLIB,UN,A=YES.
.ENDIF,GETCYBCLIB.
.IFE,(($M$.EQ.$DSMRUN$).OR.($M$.EQ.$*$)),GETDSMRUN.
  NOTE(OUTPUT,NR)+ LINKING DSMRUN
  .IFE,SYS.EQ.NOS,NOSRUN.
    $LDSET(#MAP=SBEX/MAP,LIB=B/CYBCLIB/NETIO,PRESET=ZERO)
  .ELSE,NOSRUN.
    LDSET(#MAP=SBEX/MAP,LIB=CYBCLIB,PRESET=ZERO)
  .ENDIF,NOSRUN.
  SLOAD(B,DSMRUN)
  SLOAD(B,DSADCAL) (MUST BE BELOW 10000B)
  SLOAD(B,MLMSMI,ICM$$$$PAR,MLP$$$$MLI,RHMJEP,RHMQRF,DSMORFV,TESTNBE)
  SLOAD(B,DSACYIF,MLMASM,RHAQAC,RHAQRM,RHMLGM,RHASDTS)
  .IFE,SYS.EQ.NOS,NOSSSJ.
    $NOGO,YYYYABS,DSMRUN,$SSJ=$.
  .ELSE,NOSSSJ.
    NOGO,YYYYABS.
  .ENDIF,NOSSSJ.
  REPLIB,YYYYABS,L,,UN.
  NOTE(OUTPUT,NR)+ MODULE DSMRUN --> L
.ENDIF,GETDSMRUN.
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. LINDSMR PROCEDURE *TERMINATED*
  .ENDIF,TERMINATED.
  REVERT,ABORT. LINDSMR 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 IAF --> L
.ELSE,LINKALL.
  REVERT. LINKED M --> L
.ENDIF,LINKALL.
/EOR

