Opens an existing file or creates a new file. If you do not explicitly open a file before accessing it, the file is created (for write operations) or opened with default attributes. OPEN (par[,par]...) par Is a keyword specification in one of the following forms: keywd keywd=value keywd Is a keyword. (See the subtopic headings listed at the end of this Help topic.) value Is a keyword value. (Some keywords do not have keyword values.) If an OPEN statement is executed for a unit that is already open, and the file pathname (or specification) is different from that of the current open file, the previously opened file is closed and the new file is opened. If the file pathname (or specification) is the same for both files, the new value of the BLANK= specifier is in effect, but the position of the file is unaffected. Keyword specifications can appear in any order. In most cases, they are optional. Default values apply in their absence. If the logical unit specifier is the first parameter in the list, the UNIT keyword is optional. You can specify character values at run time by substituting a general character expression for a keyword value in the OPEN statement. The character value can contain trailing spaces but not leading or embedded spaces; for example: CHARACTER*6 FINAL /' '/ ... IF (exp) FINAL = 'DELETE' OPEN (UNIT=1, STATUS='NEW', DISP=FINAL) NOTE Keyword values that are numeric expressions can be any integer or real expression. The value of the expression is converted to integer data type before it is used in the OPEN statement.
1 – ACCESS
Indicates the access method for the connection of the file. It takes the following form: ACCESS = acc acc Is a character expression with one of the following values: 'DIRECT' Access by record number 'SEQUENTIAL' Access sequentially (the default) 'KEYED' Access by a specified key 'APPEND' Access sequentially, after the last record of the file
2 – ACTION
Indicates the allowed I/O operations for the file connection. It takes the following form: ACTION = act act Is a character expression with one of the following values: 'READ' Indicates that only READ statements can refer to this connection. 'WRITE' Indicates that only WRITE, DELETE, and ENDFILE statements can refer to this connection. 'READWRITE' Indicates that READ, WRITE, DELETE, and ENDFILE statements can refer to this connection (*DEFAULT*)
3 – ASSOCIATEVARIABLE
Indicates a variable that is updated after each direct access I/O operation, to reflect the record number of the next sequential record in the file. It takes the following form: ASSOCIATEVARIABLE = asv asv Is an integer variable. It cannot be a dummy argument to the routine in which the OPEN statement appears. Use only in direct access mode. NOTE Direct access READ, direct access WRITE, FIND, DELETE, and REWRITE statements can affect the value of the variable.
4 – BLANK
Indicates how blanks are interpreted in a file. It takes the following form: BLANK = blnk blnk Is a character expression with one of the following values: 'NULL' Ignore all blanks in a numeric field (unless the field is all blanks, in which case treat blanks as zero). 'ZERO' Treat all blanks other than leading blanks as zeros. The default is 'NULL' (for explicitly OPENed files, preconnected files, and internal files). If the BN or BZ edit descriptors are specified for a formatted input statement, they supersede the default interpretation of blanks.
5 – BLOCKSIZE
Indicates the physical I/O transfer size for the file. It takes the following form: BLOCKSIZE = bks bks Is a numeric expression whose value specifies a number of bytes. For magnetic tape files, the value of "bks" specifies the physical record size in the range 18 to 32767 bytes. The default value is 2048 bytes. For sequential disk files, "bks" is rounded up to an integral number of 512-byte blocks and used to specify multiblock transfers. The number of blocks transferred can be 1 to 127; it is determined by RMS defaults. For indexed and relative files, "bks" is rounded up to an integral number of 512-byte blocks and used to specify the RMS bucket size. This must fall in the range 1 to 63 blocks. The default is the smallest value capable of holding a single record.
6 – BUFFERCOUNT
Indicates the number of buffers to be associated with the logical unit for multibuffered I/O. It takes the following form: BUFFERCOUNT = bc bc Is a numeric expression. The range of values for "bc" is 1 to 127. If you do not specify BUFFERCOUNT or you specify 0, the process or system default is assumed.
7 – BUFFERED
Indicates run-time library behavior following WRITE operations. It takes the following form: BUFFERED = bf bf Is a character expression with one of the following values: 'NO' Requests that the run-time library send output data to the file system after each WRITE operation. 'YES' Requests that the run-time library accumulate output data in its internal buffer, possibly across several WRITE operations, before the data is sent to the file system. Buffering may improve run-time performance for output-intensive applications. The default is 'NO'. On OpenVMS, BUFFERED has no effect. The operating system automatically performs buffering, which can be affected by the values of the BUFFERCOUNT and BUFFERSIZE keywords when the file is opened.
8 – CARRIAGECONTROL
Indicates the type of carriage control used when a file is displayed at a terminal. It takes the following form: CARRIAGECONTROL = cc cc Is a character expression with one of the following values: 'FORTRAN' Process with normal FORTRAN interpretation of the first character 'LIST' Process with single spacing between records 'NONE' Do not use implied carriage control The default for unformatted files is 'NONE'. The default for formatted files is 'FORTRAN'.
9 – CONVERT
Indicates a nonnative numeric format for unformatted data. It takes the following form: CONVERT = fm fm Is a character expression with one of the following options: 'LITTLE_ENDIAN'- Little endian integer data of the appropriate size (INTEGER*1, INTEGER*2, INTEGER*4, or INTEGER*8) and IEEE floating-point data of the appropriate size and type (REAL*4, REAL*8, REAL*16, COMPLEX*8, COMPLEX*16, or COMPLEX*32). INTEGER*1 data is the same for little endian and big endian. 'BIG_ENDIAN' - Big endian integer data of the appropriate size (INTEGER*1, INTEGER*2, INTEGER*4, or INTEGER*8) and IEEE floating-point data of the appropriate size and type (REAL*4, REAL*8, REAL*16, COMPLEX*8, COMPLEX*16, or COMPLEX*32). INTEGER*1 data is the same for little endian and big endian. 'CRAY' - Big endian integer data of the appropriate size (INTEGER*1, INTEGER*2, INTEGER*4, or INTEGER*8) and CRAY floating-point data of size REAL*8 or COMPLEX*16. 'FDX' - Little endian integer data of the appropriate size (INTEGER*1, INTEGER*2, INTEGER*4, or INTEGER*8) and HP VAX floating-point data of format F_floating for REAL*4 or COMPLEX*8, D_floating for size REAL*8 or COMPLEX*16, and IEEE X_floating for REAL*16 or COMPLEX*32. 'FGX' - Little endian integer data of the appropriate size (INTEGER*1, INTEGER*2, INTEGER*4, or INTEGER*8) and HP VAX floating-point data of format F_floating for REAL*4 or COMPLEX*8, G_floating for size REAL*8 or COMPLEX*16, and IEEE X_floating for REAL*16 or COMPLEX*32. 'IBM' - Big endian integer data of the appropriate size (INTEGER*1, INTEGER*2, INTEGER*4, or INTEGER*8) and IBM System\370 floating-point data of size REAL*4 or COMPLEX*8 (IBM short 4) and size REAL*8 or COMPLEX*16 (IBM long 8). 'VAXD' - Little endian integer data of the appropriate size (INTEGER*1, INTEGER*2, INTEGER*4, or INTEGER*8) and HP VAX floating-point data of format F_floating for size REAL*4 or COMPLEX*8, D_floating for size REAL*8 or COMPLEX*16, and H_floating for REAL*16 or COMPLEX*32. 'VAXG' - Little endian integer data of the appropriate size (INTEGER*1, INTEGER*2, INTEGER*4, or INTEGER*8) and HP VAX floating-point data of format F_floating for size REAL*4 or COMPLEX*8, G_floating for size REAL*8 or COMPLEX*16, and H_floating for REAL*16 or COMPLEX*32. 'NATIVE' - No data conversion. This is the default. You can use CONVERT to specify multiple formats in a single program, usually one format for each specified unit number. When reading a non-native format, the non-native format on disk is converted to native format in memory. If a converted non-native value is outside the range of the native data type, a run-time message appears. There are other ways to specify numeric format for unformatted files: you can specify an OpenVMS logical name or the compiler option /CONVERT (or OPTIONS/CONVERT). The order of precedence is OpenVMS logical name, OPEN (CONVERT=), OPTIONS/CONVERT, and then compiler option /CONVERT. The /CONVERT compiler option and OPTIONS/CONVERT affect all unit numbers used by the program, while logical names and OPEN (CONVERT=) affect specific unit numbers. The following source code shows how to code the OPEN statement to read unformatted CRAY numeric data from unit 15, which might be processed and possibly written in little endian format to unit 20: OPEN (CONVERT='CRAY', FILE='graph3.dat', FORM='UNFORMATTED', 1 UNIT=15) ... OPEN (FILE='graph3_native.dat', FORM='UNFORMATTED', UNIT=20)
10 – DEFAULTFILE
Indicates a default file specification string. It takes the following form: DEFAULTFILE = ce ce Is a character expression. This specifier supplies a value to the RMS default file specification string for the missing components of a file specification. If you do not specify the DEFAULTFILE keyword, Fortran uses the default value 'FORnnn.DAT', where nnn is the unit number with leading zeros. The default file pathname string is used primarily when accepting file specifications interactively. File specifications known to a user program are normally completely specified in the FILE keyword. You can specify default values for any one of the following file specification components: node, device, directory, file name, file type, and file version number. When you specify any of the above components in the FILE keyword, they override those values specified in the DEFAULTFILE keyword. The following example uses the file name supplied by the user and the default file specification supplied by the DEFAULTFILE keyword to define the file specification for an existing file: TYPE *, 'ENTER NAME OF DOCUMENT' ACCEPT *, DOC OPEN (UNIT=1, FILE=DOC, DEFAULTFILE='[ARCHIVE].TXT', 1 STATUS='OLD')
11 – DELIM
Indicates what characters (if any) are used to delimit character constants in list-directed and namelist output. It takes the following form: DELIM = del del Is a character expression with one of the following values: 'APOSTROPHE' Indicates that apostrophes delimit character constants. All internal apostrophes are doubled. 'QUOTE' Indicates that quotation marks delimit character constants. All internal quotation marks are doubled. 'NONE' Indicates that character constants have no delimiters. No internal apostrophes or quotation marks are doubled. This is the default. DELIM is only allowed for files connected for formatted data transfer; it is ignored during input.
12 – DISPOSE
Indicates the status of the file after the unit is closed. It takes one of the following forms: DISP = dis DISPOSE = dis dis Is a character expression with one of the following values: 'KEEP' or 'SAVE' Retain the file after the unit is closed. (*DEFAULT FOR ALL BUT SCRATCH FILES*) 'DELETE' Delete the file after the unit is closed. (*DEFAULT FOR SCRATCH FILES*) 'PRINT' Submit the file as a print job and retain it. Use this value only with sequential files. 'PRINT/DELETE' Submit the file as a print job and then delete it. Use this value only with sequential files. 'SUBMIT' Submit the file as a batch job and retain it. 'SUBMIT/DELETE' Submit the file as a batch job and then delete it. The disposition specified in a CLOSE statement supersedes the disposition specified in the OPEN statement, except that a file opened as a scratch file cannot be saved, printed, or submitted, nor can a file opened for read-only access be deleted.
13 – ERR
Identifies a branch target statement that receives control if an error occurs. It takes the following form: ERR = s s Is the label of an executable statement ERR applies only to the OPEN statement in which it is specified, and not in subsequent I/O operations on the unit. If an error occurs, no file is opened or created. However, you can use IOSTAT in subsequent I/O statements to perform a similar function.
14 – EXTENDSIZE
Indicates the number of blocks by which to extend a disk file (extent) when additional storage space is needed. It takes the following form: EXTENDSIZE = e e Is a numeric expression. The space used to extend a file is contiguous if possible. Otherwise, noncontiguous space is used. The default is the system default for the device.
15 – FILE
Indicates the name of the file to be connected to the unit. It takes the following form: FILE = name name Is a character or numeric expression. The "name" can be any pathname (or specification) allowed by the operating system. (See the appropriate manual in the OpenVMS operating system documentation set.) Any trailing blanks in the name are ignored. If the following conditions occur: o FILE is omitted o The unit is not connected to a file o STATUS='SCRATCH' is not specified then VSI Fortran generates a file name in the form FORnnn.DAT, where "nnn" is the logical unit number (with leading zeros, if necessary). If the file name is stored in a numeric scalar or array, the name must consist of ASCII characters terminated by an ASCII null character (zero byte). However, if it is stored in a character scalar or array, it must not contain a zero byte.
16 – FORM
Indicates whether the file is being connected for formatted, unformatted, or binary data transfer. It takes the following form: FORM = ft ft Is a character expression with one of the following values: 'FORMATTED' Formatted *DEFAULT FOR SEQUENTIAL ACCESS* 'UNFORMATTED' Unformatted *DEFAULT FOR KEYED AND DIRECT ACCESS* 'BINARY' Binary
17 – INITIALSIZE
Indicates the number of blocks in the initial storage allocation (extent) for a disk file. It takes the following form: INITIALSIZE = e e Is a numeric expression. If you do not specify INITIALSIZE or if you specify zero, no initial allocation is made. The system attempts to allocate contiguous space for INITIALSIZE. If not enough contiguous space is available, noncontiguous space is allocated.
18 – IOSTAT
Designates a variable to store a value indicating the status of a data transfer operation. It takes the following form: IOSTAT = ios ios Is a scalar default integer variable. If no error exists, "ios" is defined as zero. If an error exists, "ios" is defined as a positive integer. IOSTAT applies only to the OPEN statement in which it appears and not to subsequent I/O operations on the logical unit that is opened. However, you can use the IOSTAT parameter in subsequent I/O statements to perform a similar function. Secondary operating system messages do not display when IOSTAT is specified. To display these messages, remove IOSTAT or use a platform-specific method such as a VMS condition handler. (For more information, see the HP Fortran for OpenVMS User Manual.)
19 – KEY
Defines the access keys for records in an indexed file. It takes the following form: KEY = (kspec[,kspec]...) kspec Takes the following form: e1:e2[:dt[:dr]] e1 Is the position of the first byte of the key in the record. e2 Is the position of the last byte of the key in the record. dt Is the data type of the key: CHARACTER (*DEFAULT*) or INTEGER. dr Is the direction of the key: ASCENDING (*DEFAULT*) or DESCENDING. The length of the key must not exceed 255 bytes. The first byte position of the key must be at least 1 and the last byte position must not exceed the length of the record. If the key type is INTEGER, the key length must be either 2 or 4. Defining Primary and Alternate Keys: You must define at least one key in an indexed file. This is the primary key (the default key). It usually has a unique value for each record. You can also define alternate keys. RMS allows up to 254 alternate keys. If a file requires more keys than the OPEN statement limit, you must create it from another language or with the File Definition Language (FDL). Specifying and Referencing Keys: You must specify the KEY parameter when creating an indexed file. However, you do not have to respecify it when opening an existing file because key attributes are permanent aspects of the file. These attributes include key definitions and reference numbers for subsequent I/O operations. However, if you use the KEY parameter for an existing file, your specification must be identical to the established key attributes. Subsequent I/O operations use a reference number, called the key-of-reference number, to identify a particular key. You do not specify this number; it is determined by the key's position in the specification list: the primary key is key-of-reference number 0; the first alternate key is key-of-reference number 1, and so forth.
20 – MAXREC
Indicates the maximum number of records that can be transferred from or to a direct access file while the file is connected. It takes the following form: MAXREC = mr mr Is an numeric expression. The default is the maximum allowed (2**32-1).
21 – NAME
NAME is a nonstandard synonym for FILE. (See OPEN FILE.)
22 – NOSPANBLOCKS
NOSPANBLOCKS Specifies that records are not to cross disk block boundaries. If a record exceeds the size of a physical block, an error occurs.
23 – ORGANIZATION
Indicates the internal organization of the file. It takes the following form: ORGANIZATION = org org Is a character expression with one of the following values: 'SEQUENTIAL' Records are stored in the order that they are written. Access mode must be sequential, append, or direct (fixed-length records only). (*DEFAULT FOR NEW FILES*) 'RELATIVE' Records are stored in numbered positions. Access mode must be direct or sequential. 'INDEXED' Records are stored according to the values of their keys. Access mode must be indexed or sequential. The default for an existing file is its current organization.
24 – PAD
Indicates whether a formatted input record is padded with blanks when an input list and format specification requires more data than the record contains. It takes the following form: PAD = pd pd Is a character expression with one of the following values: 'YES' Indicates the record will be padded with blanks when necessary (the default). 'NO' Indicates the record will not be padded with blanks. The input record must contain the data required by the input list and format specification. This behavior is different from FORTRAN 77, which never pads short records with blanks. For example, consider the following: READ (5,'(I5)') J If you enter 123 followed by a carriage return, FORTRAN 77 will turn the I5 into an I3 and J will be assigned 123. However, VSI Fortran pads the 123 with 2 blanks unless you explicitly open the unit with PAD='NO'. You can override blank padding by explicitly specifying the BN edit descriptor. The PAD specifier is ignored during output.
25 – POSITION
Indicates the position of a file connected for sequential access. It takes the following form: POSITION = pos pos Is a character expression with one of the following values: 'ASIS' Indicates the file position is unchanged if the file exists and is already connected. The position is unspecified if the file exists but is not connected. This is the default. 'REWIND' Indicates the file is positioned at its initial point. 'APPEND' Indicates the file is positioned at its terminal point (or before its end-of-file record, if any).) A new file (whether specified as new explicitly or by default) is always positioned at its initial point.
26 – READONLY
READONLY Prohibits WRITE access to the file. Enables users with READ access to access the file. READONLY is similar to specifying ACTION='READ', but READONLY prevents deletion of the file if it is closed with STATUS='DELETE' in effect. Default file access privileges are READWRITE, which can cause run-time I/O errors if the file protection does not permit write access. The READONLY specifier has no effect on the protection specified for a file. Its main purpose is to allow a file to be read simultaneously by two or more programs. For example, use READONLY if you wish to open a file so you can read it, but you also want others to be able to read the same file while you have it open.
27 – RECL
Indicates the length of logical records in a file connected for direct or keyed access, or the maximum length of a record in a file connected for sequential access. It takes the following form: RECL = rl rl Is an numeric expression. If necessary, the value is converted to integer data type before use. If the file is connected for formatted data transfer, the value must be expressed in bytes (characters). Otherwise, the value is expressed in 4-byte units (longwords). If the file is connected for unformatted data transfer, the value can be expressed in bytes if compiler option /ASSUME=BYTERECL is specified. The "rl" value is the length for record data only. It does not include space for control information, such as two segment control bytes (if present) or the bytes that RMS requires for maintaining record length and deleted record control information. The length specified is interpreted depending on the type of records in the connected file, as follows: o For segmented records, RECL indicates the maximum length for any segment (not including the two segment control bytes). o For fixed-length records, RECL indicates the size of each record. o For variable-length or stream records, RECL specifies the size of the buffer that will be allocated to hold records read or written. Specifying RECL for stream records (STREAM, STREAMCR or STREAMLF) is required if the longest record length in the file exceeds the default RECL value. Errors occur under the following conditions: o If your program attempts to write to an existing file a record that is longer than the logical record length o If you are opening an existing file that contains fixed-length records or has relative organization and you specify a value for RECL that is different from the actual length of the records in the file The following table lists the maximum values that can be specified for "rl" for disk files that use the fixed-length record format: Sequential formatted 32767 bytes Sequential unformatted 8191 longwords Relative formatted 32255 bytes Relative unformatted 8063 longwords Indexed formatted 32224 bytes Indexed unformatted 8056 longwords Tape formatted 9999 bytes Tape unformatted 2499 longwords For other record formats and device types, the record size limit may be less, as described in the OpenVMS Record Management Services Reference Manual. You must specify RECL when opening new files (STATUS='NEW', 'UNKNOWN, or 'SCRATCH') and when one or more of the following conditions exists: o The file is opened for direct access (ACCESS='DIRECT'). o The record format is fixed length (RECORDTYPE='FIXED'). o The file organization is relative or indexed (ORGANIZATION='RELATIVE' or 'INDEXED'). The default value depends on the setting of the RECORDTYPE specifier, as follows: RECORDTYPE value RECL value ---------------- ----------------------------------------- 'FIXED' None; value must be explicitly specified. All other types 133 bytes (for formatted records) 511 longwords (for unformatted records)
28 – RECORDSIZE
RECORDSIZE is the nonstandard synonym for RECL (see OPEN RECL).
29 – RECORDTYPE
Indicates the type of records in a file. It takes the following form: RECORDTYPE = typ typ Is a character expression with one of the following values: 'FIXED' All records are one size. Short records are padded with blanks (formatted files) or zeros (unformatted files). 'VARIABLE' Records can vary in length. 'SEGMENTED' A record consists of one or more variable length records which may exist in different physical blocks. Valid only for unformatted, sequential files with sequential access. 'STREAM' Data is not grouped into records and contains no control information. 'STREAM_CR' Variable-length records whose length is indicated by carriage-returns embedded in the data. 'STREAM_LF' Variable-length records whose length is indicated by line-feeds (new lines) embedded in the data. When you open a file, default record types are as follows: +-------------------------------------+---------------------+ | File Type | Default Record Type | +-------------------------------------+---------------------+ | Relative or indexed files | 'FIXED' | | Direct access sequential files | 'FIXED' | | Formatted sequential access files | 'VARIABLE' | | Unformatted sequential access files | 'SEGMENTED' | +-------------------------------------+---------------------+ A segmented record is a logical record consisting of one or more variable-length records (segments). The logical record can span several physical records. Only unformatted sequential-access files with sequential organization can have segmented records; 'SEGMENTED' must not be specified for any other file type. Files containing segmented records can be accessed only by unformatted sequential data transfer statements. You cannot use an unformatted READ statement to access such a file, unless you specify RECORDTYPE='SEGMENTED' in the OPEN statement. Normally, if you do not use the RECORDTYPE specifier when you are accessing an existing file, the record type of the file is used. However, if the file is an unformatted sequential-access file with sequential organization and variable-length records, the default record type is 'SEGMENTED'. If you use the RECORDTYPE specifier when you are accessing an existing file, the type that you specify must match the type of the existing file. If an output statement does not specify a full record for a file containing fixed-length records, the following occurs: o In formatted files, the record is filled with blanks o In unformatted files, the record is filled with zeros
30 – SHARED
SHARED Specifies that the file can be accessed by more than one user at the same time. For more information on file sharing, see the HP Fortran for OpenVMS User Manual.
31 – STATUS
Indicates the status of a file when it is opened. It takes the following form: STATUS = sta sta Is a character expression with one of the following values: 'OLD' Open an existing file. 'NEW' Create a new file; if the file already exists an error occurs. 'SCRATCH' Create a new file and delete it when the file is closed. 'REPLACE' Replace the file with another. If the file to be replaced exists, it is deleted and a new file is created with the same name. If the file to be replaced does not exist, a new file is created and its status changes to 'OLD'. 'UNKNOWN' Open the file as OLD; if it does not exist, then open the file as NEW. The default is 'UNKNOWN'. However, if you implicitly open a file using WRITE or you specify compiler option /NOF77 (or OPTIONS /NOF77), the default value is 'NEW'. If you implicitly open a file using READ, the default is 'OLD'. Scratch files (STATUS='SCRATCH') are created on the user's default disk (SYS$DISK) and are not placed in a directory or given a name that is externally visible. To indicate a different device, use the FILE specifier. NOTE The STATUS parameter is also used in CLOSE statements to specify the status of a file after the file is closed. However, in CLOSE statements the STATUS values are the same as those listed for the DISPOSE specifier (see OPEN DISPOSE).
32 – TYPE
TYPE is a nonstandard synonym for STATUS (see OPEN STATUS).
33 – UNIT
Indicates the logical unit to which a file is to be connected. It takes the following form: [UNIT=] u u Is a numeric expression The unit specification must appear in the parameter list, unless the unit specifier is the first element in the list. The logical unit may already be connected to a file when an OPEN statement is executed. If this file is not the same as the one to be opened, the OPEN statement executes as if a CLOSE statement had executed just before it. If the file to be opened is already connected to the unit or if the file specifier (FILE keyword) is not included in the OPEN statement, only the blank specifier (BLANK keyword) can have a value different from the one currently in effect. The position of the file is unaffected.
34 – USEROPEN
Indicates a user-written external function that controls the opening of the file. It takes the following form: USEROPEN = func func Is the symbolic name of the USEROPEN function. The function must be declared in a previous EXTERNAL statement; if it is typed, it must be INTEGER*4.