.PROC,CREFILE*I,
LFN "- Local File Name"                = (*F),
PFN "- Permanent File Name"            = (*N=,*F),
CT "- Catalog Type"                    = (*N=S,P,S,PU,SPRIV,PUBLIC,PR,PRIVATE),
M "- Mode of file access"              = (*N=R,E=E,R=R,EXECUTE=E,READ=R),
DEFINE "- YES causes DIRECT file made" = (*N=NO,YES,NO),
.
.HELP
 The CREFILE procedure saves local files as either INDIRECT or
 DIRECT access permanent files depending upon validation limits.
 This procedure CREates INDIRECT FILEs when possible to conserve disk
 space. The procedure aborts if the permanent file already exists.

 Parameter   Default   Description
   Name       Value

   lfn                 local file name by which the file is accessed
  [pfn]       lfn      permanent file name of the stored file
  [ct]         s       file catalog type, which limits access
  [m]          r       access mode of the file
  [define]     no      YES value causes DIRECT access file creation

.HELP,LFN
 The LFN parameter selects the name by which the file is accessed.
.HELP,PFN
 The PFN parameter selects the name by which the file is stored.
 The default is the value specified for the LFN parameter.
.HELP,CT
 The CT parameter specifies the file permissions of the created file.
 Options are:  S | SPRIV        - for semiprivate files (default value)
               PU | PUBLIC      - for public files
               P | PR | PRIVATE - for private files
.HELP,M
 The M parameter selects the Mode of access for the file.
 Options are:  R | READ     - for read access (default value)
               E | EXECUTE  - for execute access
.HELP,DEFINE
 The DEFINE parameter forces creation of a DIRECT access file.
 Options are: NO   - create an INDIRECT access file (default value)
              YES  - create a DIRECT access file

.ENDHELP
$REWIND,LFN.
.IFE,$PFN$.EQ.$$,NOPFN.
  $REVERT,EX.CREFILE,LFN,LFN,CT,M,DEFINE.
.ENDIF,NOPFN.
.IFE,(($DEFINE$.EQ.$NO$).AND.(FILE(LFN,AS))),FILEIND.
  $SAVE,LFN=PFN/#CT=CT,#M=M.
  $GET,YYYYCRE=PFN/NA.
.ENDIF,FILEIND.
$IFE,.NOT.FILE(YYYYCRE,AS),INDFAIL.
  .IFE,FILE(LFN,AS),FILELOC.
    $#DEFINE,YYYYCRE=PFN/#CT=CT,#M=M.
    $COPYEI,LFN,YYYYCRE.
    $REWIND,LFN.
    $UNLOAD,YYYYCRE.
    $REVERT. FILE LFN CREATED --> PFN(*D)
  .ELSE,FILELOC.
    .IFE,OT.EQ.TXO,TERMINAL.
      $NOTE,OUTPUT,NR.+ LOCAL FILE LFN DOES NOT EXIST.
      $NOTE,OUTPUT,NR.+ ENTER DATA FOR LOCAL FILE YOU WISH TO CREATE,
      $NOTE,OUTPUT,NR.+ TERMINATE INPUT WITH CARRIAGE RETURN.
      $COPYBF,,LFN.
      $REVERT,EX.CREFILE,LFN,PFN,CT,M,DEFINE.
    .ELSE,TERMINAL.
      $REVERT,ABORT. LOCAL FILE LFN DOES NOT EXIST
    .ENDIF,TERMINAL.
  .ENDIF,FILELOC.
  $EXIT. DEFINE OF FILE FAILED
  $IFE,(EF.EQ.TIE).OR.(EF.EQ.TAE),TERMINATED.
    $EXIT. CREFILE *TERMINATED*
  $ENDIF,TERMINATED.
  $REVERT,ABORT. FILE PFN ALREADY EXISTS
$ELSE,INDFAIL.
  $VERIFY,YYYYCRE,LFN,N,L=0,A,R.
  $UNLOAD,YYYYCRE.
  $REVERT. FILE LFN CREATED --> PFN(*I)
  $EXIT. FILE NOT SAVED CORRECTLY
  $UNLOAD,YYYYCRE.
  $IFE,(EF.EQ.TIE).OR.(EF.EQ.TAE),TERMINATED.
    $EXIT. CREFILE *TERMINATED*
  $ENDIF,TERMINATED.
  $REVERT,ABORT. FILE PFN ALREADY EXISTS
$ENDIF,INDFAIL.
/EOR
