.PROC,GENNOS*I,
VSN "- Volume Serial Number of DS tape"= (*N=,
                                     *S6(ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789)),
D "tape Density (GE,PE,HD,HY)"         = (*N=PE,GE,PE,HD,HY),
B "- file of replacement records"      = (*N=0,*F),
I "- LIBEDIT directive Input file"     = (*N=,*F),
O "- LIBEDIT Output file"              = (*N=OUTPUT,*F),
LO "- LIBEDIT List Options"            = (*N=EM,*S4(CEMN),F),
.
.HELP
 The GENNOS procedure GENerates a NOS deadstart tape using the local
 file SYSTEM from the GETNOS procedure. The library NVELIB, the
 content of the NOSBINS library, the SETVE procedure from NVELIB, and
 the content of the file specified by the B parameter are
 added/replaced to the new deadstart tape.

 Parameter   Default   Description
   Name       Value

  [vsn]                 deadstart tape volume serial number
  [d]           pe      deadstart tape density (ge,pe,hd,hy)
  [b]           0       file containing replacement records for the
                        new deadstart file (CMRDECKs, IPRDECKs, etc.)
  [i]                   file containing LIBEDIT directives
  [o]         output    file receiving LIBEDIT output
  [lo]          EM      LIBEDIT list options

.HELP,VSN
 The VSN parameter specifies the deadstart tape volume serial number.
.HELP,D
 The D parameter specifies the deadstart tape density.
 The default density is PE.
.HELP,B
 The B parameter names the file containing user supplied
 replacements. The default assumes no user supplied file exists.
.HELP,I
 The I parameter specifies a file of LIBEDIT directives to direct
 insertion/deletion of NOS deadstart file records. The default assumes
 no user supplied file exists.
.HELP,O
 The O parameter specifies the file to which LIBEDIT output is written.
 The default value is OUTPUT.
.HELP,LO
 The LO parameter specifies the LIBEDIT list options used.
 The default value is EM (errors, and modifications).
.ENDHELP
SETASL,*.
SETJSL,*.
SETTL,*.
.IFE,FILE(SYSTEM,.NOT.AS),QUIT.
  $NOTE,OUTPUT,NR.+ **  OLD NOS SYSTEM FILE NOT FOUND,
  $NOTE,OUTPUT,NR.+ **  RERUNNING GETNOS PROCEDURE.
  GETNOS.
.ENDIF,QUIT.
.IFE,$B$.NE.$0$,GETB.
  GETFILE,B,B,,READ,A=YES.
  $UNLOAD,YYYYGRP.
  $COPY,B,YYYYGRP,TC=#I,PO=M. * REMOVE ANY EXTRANEOUS *EOF* FILE MARKS
  $RENAME,B=YYYYGRP.
.ENDIF,GETB.
$NOTE,OUTPUT,NR.+ **  EXTRACTING RECORDS FROM NOSBINS.
GETLIB,ALL,L=NOSBINS,G=YYYYGRP.
$RENAME,NOSBINS=YYYYGRP.
GETFILE,NVELIB,NVELIB,,READ,A=YES.
$UNLOAD,YYYYDIR.
$GTR,NVELIB,YYYYDIR,U,,,NA.ULIB/NVELIB
$IFE,.NOT.FILE(YYYYDIR,AS),CHANGENAME.
  $NOTE,OUTPUT,NR.+ ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
  $NOTE,OUTPUT,NR.+ **    WARNING ... WARNING ... WARNING     **
  $NOTE,OUTPUT,NR.+ **  FILE NVELIB HAS WRONG DIRECTORY NAME, **
  $NOTE,OUTPUT,NR.+ **  CHANGING DIRECTORY NAME TO NVELIB.    **
  $NOTE,OUTPUT,NR.+ ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
  $LIBEDIT,P=NVELIB,N=YYYYDIR,#B=0,L=0,#I=0,U=NVELIB.
  $UNLOAD,ZZZZZG2.
  $RENAME,NVELIB=YYYYDIR.
  $LIBRARY,NVELIB/D.
  $LIBRARY,NVELIB/A.
$ENDIF,CHANGENAME.
$NOTE(YYYYDIR,NR)+*FILE NOSBINS
$NOTE(YYYYDIR,NR)+*REWIND NOSBINS
$NOTE(YYYYDIR,NR)+*#B *,ABS/*
$NOTE(YYYYDIR,NR)+*#B *,PP/*
$NOTE(YYYYDIR,NR)+*#B *,PROC/*
$NOTE(YYYYDIR,NR)+*FILE NVELIB
$NOTE(YYYYDIR,NR)+*REWIND NVELIB
$NOTE(YYYYDIR,NR)+*#B *,ULIB/NVELIB
.IFE,$I$.NE.$$,GETI.
  GETFILE,I,I,,READ,A=YES.
  $NOTE(YYYYDIR,NR)+*FILE B
  $NOTE(YYYYDIR,NR)+*REWIND B
  $NOTE(YYYYDIR,NR)+*TYPE TEXT
  $COPYEI,I,YYYYDIR.
  .IFE,.NOT.FILE(I,AS),RETURNI.
    $UNLOAD,I.
  .ENDIF,RETURNI.
.ENDIF,GETI.
$PACK(YYYYDIR)
$NOTE,OUTPUT,NR.+ **  GENERATING NEW NOS DEADSTART FILE.
$UNLOAD,YYYYERR.
$LIBEDIT,P=SYSTEM,L=YYYYERR,#B=B,N=YYYYNOS,#I=YYYYDIR,#LO=LO.
$REWIND,YYYYERR.
$COPY,YYYYERR,O.
$UNLOAD,YYYYERR.
.IFE,$B$.NE.$0$,USERBIN.
  .IFE,.NOT.FILE(B,AS),RETURNB.
    $UNLOAD,B.
  .ENDIF,RETURNB.
.ENDIF,USERBIN.
$SKIP,NOERROR.
  $EXIT.
  $REWIND,YYYYERR.
  $COPY,YYYYERR,O.
  $UNLOAD,YYYYDIR,YYYYERR.
  $IFE,(EF.EQ.TIE).OR.(EF.EQ.TAE),TERMINATED.
    $EXIT. GENNOS *TERMINATED*
  $ENDIF,TERMINATED.
  $REVERT,ABORT. DEADSTART FILE GENERATION ERROR
$ENDIF,NOERROR.
.IFE,$VSN$.EQ.$$,WRITEFILE.
  $UNLOAD,SYSTEM.
  $ATTACH,SYSTEM/NA.
  $IFE,FILE(SYSTEM,AS),CHANGENAME.
    $PURGE,OLDSYS/NA.
    $CHANGE,OLDSYS=SYSTEM.
    $NOTE,OUTPUT,NR.+ **  EXISTING FILE "SYSTEM" NOW "OLDSYS".
    $UNLOAD,SYSTEM.
  $ENDIF,CHANGENAME.
  $PURGE,SYSTEM/NA.
  $DEFINE,SYSTEM/CT=S.
  $REWIND,YYYYNOS.
  $COPYEI,YYYYNOS,SYSTEM.
  $UNLOAD,YYYYNOS,SYSTEM.
  $SKIP,NOERROR.
    $NOTE,OUTPUT,NR.+ **  ERROR IN WRITING DEADSTART FILE TO "SYSTEM".
    $UNLOAD,NOSBINS,YYYYDIR,YYYYNOS,SYSTEM.
    $REVERT,ABORT. ERROR IN WRITING TO DEADSTART FILE.
.ELSE,WRITEFILE.
  $SET,R1=0.
  $WHILE,(FILE(YYYYNOS,AS).AND.(R1.LT.3)),WRITETAPE.
    $UNLOAD,SYSTEM.
    $NOTE,OUTPUT,NR.+ **  REQUESTING NEW DEADSTART TAPE AS ...
    $NOTE,OUTPUT,NR.+ **  $LABEL,SYSTEM,#D=D,PO=W,LB=KU,F=#I,#VSN=VSN.
    $LABEL,SYSTEM,#D=D,PO=W,LB=KU,F=#I,#VSN=VSN.
    $REWIND,YYYYNOS.
    $NOTE,OUTPUT,NR.+ **  COPYING NOS DEADSTART FILE TO TAPE.
    $COPYEI,YYYYNOS,SYSTEM.
    $UNLOAD,NOSBINS,YYYYDIR,YYYYNOS,SYSTEM.
    $SKIP,NOERROR.
      $EXIT. TAPE ERROR .....................................
      $IFE,(EF.EQ.TIE).OR.(EF.EQ.TAE),TERMINATED.
        $UNLOAD,YYYYDIR,SYSTEM.
        $RENAME,NEWNOS=YYYYNOS.
        $NOTE,OUTPUT,NR.+ **  DEADSTART FILE PLACED ON FILE "NEWNOS".
        $EXIT. GENNOS *TERMINATED*
      $ENDIF,TERMINATED.
      $IFE,R1=2,GIVEUP.
        $UNLOAD,YYYYDIR,SYSTEM.
        $RENAME,NEWNOS=YYYYNOS.
        $NOTE,OUTPUT,NR.+ **  DEADSTART FILE PLACED ON FILE "NEWNOS".
        $REVERT,ABORT. TOO MANY TAPE ERRORS
      $ELSE,GIVEUP.
        $NOTE,OUTPUT,NR.+ **  TAPE ERROR ENCOUNTERED ... ATTEMPTING REWRITE.
        $SET,R1=R1+1.
      $ENDIF,NOERROR.
    $ENDW,WRITETAPE.
.ENDIF,WRITEFILE.
$ENDIF,NOERROR.
$REVERT. NOS DEADSTART FILE WRITTEN
/EOR
