.PROC,GENNVE*I,
VSN "Volume Serial Number of DS tape"  = (*N=,
                           *S6(ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789)),
D "tape Density (GE,PE,HD,HY)"         = (*N=PE,GE,PE,HD,HY),
L "Library containing NOS/VE binaries" = (*N=NVEBINS,*F),
CF "Command File for deadstart builder"= (*N=LOADDIR,*F),
SC "SCript name for NOS/VE binaries"   = (*N=SSCRIPT,*F),
UN "User Name for file access"         = (*N=,*F),
.
.HELP
 The GENNVE procedure GENerates a NOS/VE deadstart file from
 configured components contained on the NVELIB user library and/or
 files named the same as binaries contained on the library named
 by the L parameter value.

 Parameter   Default   Description
   Name       Value

  [vsn]                 deadstart tape volume serial number
  [d]           pe      deadstart tape density (ge,pe,hd,hy)
  [l]         nvebins   library containing NOS/VE binaries
  [cf]        loaddir   command file for deadstart tape builder
  [sc](*)     db56lst   script name for NOS/VE binaries
  [un]                  permanent file id (NOS/BE systems only)

.HELP,VSN
 The VSN parameter specifies the deadstart tape volume serial number.
 The default is to create a permanent file named NEWTPXK.
.HELP,D
 The D parameter specifies the deadstart tape density.
 The default density is PE.
.HELP,L
 The L parameter specifies the library containing NOS/VE binaries.
 The default value is NVEBINS.
.HELP,CF
 The CF parameter names the file containing deadstart tape builder
 directives. The default is LOADDIR.
.HELP,SC
 The SC parameter names a script associated with the type of NOS/VE
 binaries used to construct the deadstart file.
 The default is SSCRIPT.
.HELP,UN
 The UN parameter is used as a permanent file ID on NOS/BE systems. It
 should not be specified on NOS systems.
.ENDHELP
.IFE,SYS=NOS,NOSSYS1.
  $SETASL,*.
  $SETJSL,*.
  $SETTL,*.
.ENDIF,NOSSYS1.
SET,R1=0.
.IFE,FILE(L,.NOT.AS),GETL.
  GETFILE,L,L,UN,READ,A=YES.
.ENDIF,GETL.
.*
.* GET THE DEADSTART TAPE DIRECTIVES AND SCRIPTS TO DETERMINE TAPE CONTENT.
.*
.IFE,FILE(CF,.NOT.AS),GETCF.
  GETFILE,CF,CF,UN,READ,A=YES.
.ENDIF,GETCF.
GETFILE,SC,SC,UN,READ,A=YES.
.*
.* GET THE NOS/VE CORE AND TEMPLATE FILES
.*
EXPTEXT,PSYXX,L,UN,G=PSYXX.
EXPTEXT,PJBXXYY,L,UN,G=PJBXXYY.
.*
.* GET THE NOS/VE $SYSTEM FILES
.*
EXPTEXT,BLTNLIB,L,UN,G=BLTNLIB.
EXPTEXT,TASKLIB,L,UN,G=TASKLIB.
.*
.* GET THE NOS/VE PP BINARIES
.*
EXPTEXT,DSMSMU,L,UN,G=DSMSMU.
EXPTEXT,CTMSCD,L,UN,G=CTMSCD.
EXPTEXT,DSMRES,L,UN,G=DSMRES.
EXPTEXT,DSK7154,L,UN,G=DSK7154.
EXPTEXT,DSK55A,L,UN,G=DSK55A.
EXPTEXT,DSK55B,L,UN,G=DSK55B.
EXPTEXT,DSK55C7,L,UN,G=DSK55C7.
EXPTEXT,DSK55C8,L,UN,G=DSK55C8.
EXPTEXT,ISD,L,UN,G=ISD.
EXPTEXT,TAPE,L,UN,G=TAPE.
EXPTEXT,DSMSMA,L,UN,G=DSMSMA.
EXPTEXT,NETW,L,UN,G=NETW.
EXPTEXT,VM5B,L,UN,G=VM5B.
.*
.* GET THE SYSTEM CORE COMMAND FILE
.*
GETFILE,DCFILE,DCFILE,UN,READ.
.*
.* ACQUIRE THE CONFIGURATION PROLOG
.*
GETFILE,SITECP,SITECP,UN,READ.
.*
.* ASSURE THAT SYSTEM CORE AND JOB TEMPLATE ARE PROPERLY FORMATTED.
.*
RETURN,NEWPSC,NEWDESC,NEWPJT.
.IFE,($VSN$.EQ.$$),NOVSN.
  .IFE,SYS=NOS,NOSSYS2.
    $PURGE,NEWTPXK/NA.
    $DEFINE,NVETAPE=NEWTPXK/CT=S.
  .ELSE,NOSSYS2.
    REQUEST,NVETAPE,SN,PF.
  .ENDIF,NOSSYS2.
.ENDIF,NOVSN.
.*
.* BEGIN NOS/VE DEADSTART FILE GENERATION
.*
DSMDSTG(CF)
IFE,(FILE(NVETAPE,AS)),ADDTERM.
  DSMDSTG(TERMEND)
  .IFE,($VSN$.EQ.$$).AND.(SYS.EQ.NOSB),NBESYS1.
    REPFILE,NVETAPE,NEWTPXK,,,,UN.
  .ENDIF,NBESYS1.
ELSE,ADDTERM.
  SET,R1=1. ERROR IN GENERATION - ERROR FLAG SET
ENDIF,ADDTERM.
SKIP,NOERROR.
  EXIT.
  DAYFILE.
  ROUTE,OUTPUT,DC=PR.
  SET,R1=1. GENERATION ABORT - ERROR FLAG SET
ENDIF,NOERROR.
UNLOAD,PSYXX,PJBXXYY,PSYXLDR.
UNLOAD,DSK7154,DSK55A,DSK55B,DSK55C7,DSK55C8,ISD.
UNLOAD,DSMSMU,CTMSCD,DSMSMA,DSMRES,TAPE,VM5B.
UNLOAD,DCFILE,PROLOGS,TEMPDTA.
UNLOAD,TERM,EMPTY,TERMEND,LOADDIR,SSCRIPT,ZZZZCF1,ZZZZCF2.
UNLOAD,BLTNLIB.
UNLOAD,TASKLIB.
IFE,R1=1,ERROR.
  .IFE,($VSN$.EQ.$$).AND.(SYS.EQ.NOS),CLEANUP.
    $PURGE,NEWTPXK/NA.
  .ENDIF,CLEANUP.
  .IFE,SYS=NOS,NOSSYS3.
    $IFE,(EF.EQ.TIE).OR.(EF.EQ.TAE),TERMINATED.
      $EXIT. GENNVE *TERMINATED*
    $ENDIF,TERMINATED.
  .ENDIF,NOSSYS3.
  REVERT,ABORT. GENERATION ERRORS
ELSE,ERROR.
  .IFE,($VSN$.NE.$$),WRITEVSN.
    WHILE,(FILE(NVETAPE,AS).AND.(R1.LT.3)),WRITETAPE.
      UNLOAD,TAPE.
      REWIND,NVETAPE.
      .IFE,SYS=NOS,NOSSYS4.
        $LABEL,TAPE,#D=D,F=I,LB=KU,PO=W,#VSN=VSN.
        $COPYEI,NVETAPE,TAPE.
        $WRITEF(TAPE)
      .ELSE,NOSSYS4.
        REQUEST,TAPE,D,RING,#VSN=VSN.
        COPYBF,NVETAPE,TAPE.
      .ENDIF,NOSSYS4.
      UNLOAD,TAPE,NVETAPE.
      SKIP,NOERROR.
        EXIT. TAPE ERROR ....................................
        .IFE,SYS=NOS,NOSSYS5.
          $IFE,(EF.EQ.TIE).OR.(EF.EQ.TAE),TERMINATED.
            $EXIT. GENNVE *TERMINATED*
          $ENDIF,TERMINATED.
        .ENDIF,NOSSYS5.
        IFE,R1=2,GIVEUP.
          REVERT,ABORT. TOO MANY TAPE ERRORS
        ELSE,GIVEUP.
          NOTE,OUTPUT,NR.+ TAPE ERROR ENCOUNTERED ... ATTEMPTING REWRITE
          SET,R1=R1+1.
        ENDIF,GIVEUP.
      ENDIF,NOERROR.
    ENDW,WRITETAPE.
  .ELSE,WRITEVSN.
    UNLOAD,NVETAPE.
  .ENDIF,WRITEVSN.
  REVERT. DEADSTART TAPE GENERATED
ENDIF,ERROR.
.DATA,TERM
THIS IS THE TERMINATION RECORD FILE.
.DATA,EMPTY
THIS IS EMPTY FILE
.DATA,TERMEND
LOADFILE,TERM,TERMINATOR
ENDTAPE
LOADEND
.DATA,LOADDIR
WRITEAR,0
LOADPP,DSMSMU,SMU
LOADPP,CTMSCD,SCD
LOADPP,DSMRES,RES
LOADPP,DSK7154,D4
LOADPP,DSK55A,D5A
LOADPP,DSK55B,D5B
LOADPP,DSK55C7,D5C
LOADPP,DSK55C8,D5C2
LOADPP,ISD,ISD
LOADPP,TAPE,TAPE
LOADPP,NETW,NETW
LOADPP,VM5B,VM5B
WRITEAR,1
LOADCRE,PSYXX
WRITEAR,3
LOADSSR,DSMSMA
WRITEAR,4
LOADDCF,DCFILE
WRITEAR,5
LOADTPL,PJBXXYY
WRITEAR,11
LOADFILE,SITECP,ASCII180
LOADFILE,SSCRIPT,DESCRIPTOR,NAME170=SSCRIPT
LOADFILE,BLTNLIB,B56,NAME170=BLTNLIB
LOADFILE,TASKLIB,B56,NAME170=TASKLIB
LOADFILE,TERM,TERMINATOR
LOADEND
.DATA,SSCRIPT
FILE180 = 'OSF$BUILTIN#_LIBRARY'
PACKING = 'B56'
CREATE#_VARIABLE RAV$IGNORE#_STATUS K=STATUS
DETACH#_FILE $NAME(FILE180) STATUS=RAV$IGNORE#_STATUS
REPEAT
TASK RING=3
DELETE#_FILE $FNAME('$USER.'//FILE180) STATUS=RAV$IGNORE#_STATUS
TASKEND
UNTIL NOT RAV$IGNORE#_STATUS.NORMAL
CREATE#_FILE $FNAME('$USER.'//FILE180) $NAME(FILE180) LOG=FALSE RETENTION=999
CREATE#_FILE#_PERMIT $FNAME('$USER.'//FILE180) GROUP=PUBLIC
SET#_FILE#_ATTRIBUTES $FNAME('$USER.'//FILE180) FC=OBJECT FS=LIBRARY RT=UNDEFINED
DISPLAY#_VALUE ' LOADING '//FILE180//', CONVERSION='//PACKING
LOAD#_FILE LFN=$NAME(FILE180) FS=$NAME(PACKING)
DETACH#_FILE $NAME(FILE180) STATUS=RAV$IGNORE#_STATUS
CHANGE#_FILE#_ATTRIBUTES $FNAME('$USER.'//FILE180) RING#_ATTRIBUTES=(3 13 13)
DETACH#_FILE $FNAME('$USER.'//FILE180) STATUS=RAV$IGNORE#_STATUS
.EOR
FILE_180 = 'OSF$OPERATOR#_LIBRARY'
PACKING = 'B56'
DETACH#_FILE $NAME(FILE180) STATUS=RAV$IGNORE#_STATUS
REPEAT
TASK RING=3
DELETE#_FILE $FNAME('$USER.'//FILE180) STATUS=RAV$IGNORE#_STATUS
TASKEND
UNTIL NOT RAV$IGNORE#_STATUS.NORMAL
CREATE#_FILE $FNAME('$USER.'//FILE180) $NAME(FILE180) LOG=FALSE RETENTION=999
SET#_FILE#_ATTRIBUTES $FNAME('$USER.'//FILE180) FC=OBJECT FS=LIBRARY RT=UNDEFINED
DISPLAY#_VALUE 'LOADING '//FILE180//', CONVERSION='//PACKING
LOAD#_FILE LFN=$NAME(FILE180) FS=$NAME(PACKING)
CHANGE#_FILE#_ATTRIBUTES $FNAME('$USER.'//FILE180) RING#_ATTRIBUTES=(3 13 13)
DETACH#_FILE $FNAME('$USER.'//FILE180) STATUS=RAV$IGNORE#_STATUS
/EOR
