Cloned SEACAS for EXODUS library with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
3.2 KiB

2 years ago
C Copyright(C) 1999-2020 National Technology & Engineering Solutions
C of Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with
C NTESS, the U.S. Government retains certain rights in this software.
C
C See packages/seacas/LICENSE for details
C=======================================================================
SUBROUTINE OPNFIL (IUNIT, INOUT, FFORM, IDAPAR, IERR)
C=======================================================================
C --*** OPNFIL *** (ETCLIB) Open a file
C -- Written by Amy Gilkey - revised 04/20/88
C --
C --OPNFIL opens an input or output file. The file name is retrieved
C --with a call to EXNAME. The file is rewound after open.
C --
C --Parameters:
C -- IUNIT - IN - the file unit number
C -- INOUT - IN -
C -- 'I' if input file (status = "old")
C -- 'O' if output file (status = "new")
C -- 'S' if scratch file (status = "scratch")
C -- 'U' if opened with status = "unknown"
C -- FFORM - IN - the file type:
C -- 'F' if formatted file
C -- 'U' if unformatted file
C -- 'L' if formatted, no carriage control file
C -- IDAPAR - IN - direct access parameters:
C -- (1) = number of words in record; 0 if not direct access
C -- (2) = number of records
C -- IERR - OUT - the open error status (0 = no error)
C --Routines Called:
C -- EXNAME - (SUPES) Get filename from unit
C -- LENSTR - (STRLIB) Get string length
CHARACTER INOUT
CHARACTER FFORM
INTEGER IDAPAR(2)
CHARACTER*1024 FILNAM
CHARACTER*11 FORM
CHARACTER*7 STAT
CHARACTER*8 CDUM
IERR = 999
CALL EXNAME (IUNIT, FILNAM, LNAM)
IF (FFORM .EQ. 'U') THEN
FORM = 'UNFORMATTED'
ELSE
FORM = 'FORMATTED'
END IF
LFORM = LENSTR (FORM)
IF (INOUT .EQ. 'I') THEN
STAT = 'OLD'
ELSE IF (INOUT .EQ. 'O') THEN
STAT = 'NEW'
ELSE IF (INOUT .EQ. 'U') THEN
STAT = 'UNKNOWN'
ELSE IF (INOUT .EQ. 'S') THEN
STAT = 'SCRATCH'
ELSE
IERR = -999
GOTO 10
END IF
LSTAT = LENSTR (STAT)
NINREC = IDAPAR(1)
IF (NINREC .EQ. 0) THEN
OPEN (UNIT=IUNIT, FILE=FILNAM(:LNAM), FORM=FORM(:LFORM),
& STATUS=STAT(:LSTAT), IOSTAT = IERR)
IF (IERR .NE. 0 .AND. INOUT .EQ. 'I') THEN
call screrr(iunit, filnam, lnam, '...', '...')
END IF
ELSE
NRECS = IDAPAR(2)
CALL EXPARM (CDUM, CDUM, IDUM, KSCU, KNSU, IDAU)
IF (IDAU .EQ. 0) THEN
NICE = 512
ELSE
NICE = (512 * KNSU - KNSU + 1) / KSCU
END IF
NBLKS = (NINREC + NICE-1) / NICE
NINREC = NBLKS * NICE
IF (IDAU .EQ. 0) THEN
LREC = (NINREC * KSCU + KNSU-1) / KNSU
ELSE
LREC = NINREC
END IF
IF (INOUT .EQ. 'S') THEN
STAT = 'unknown'
LSTAT = LENSTR (STAT)
END IF
NSIZE = NINREC * NRECS
OPEN (UNIT=IUNIT, FILE=FILNAM(:LNAM), FORM=FORM(:LFORM),
& ACCESS='DIRECT', RECL=LREC,
& STATUS=STAT(:LSTAT), ERR=10)
END IF
IERR = 0
10 CONTINUE
RETURN
END