VMS Help
EDT Routines, FILEIO
*Conan The Librarian (sorry for the slow response - running on an old VAX)
|
|
The user-supplied FILEIO routine performs file I/O functions.
Call it by specifying it as an argument in the EDT$EDIT routine.
It cannot be called independently.
Format
FILEIO code ,stream ,record ,rhb
OpenVMS usage:cond_value
type: longword (unsigned)
access: write only
mechanism: by value
A status code that your FILEIO routine returns to EDT$EDIT. The
fileio argument is a longword containing the status code. The
only failure code that is normally returned is RMS$_EOF from
a GET call. All other OpenVMS RMS errors are signaled, not
returned. The RMS signal should include the file name and both
longwords of the RMS status. Any errors detected with the FILEIO
routine can be indicated by setting status to an error code.
That special error code will be returned to the program by the
EDT$EDIT routine. There is a special status value EDT$_NONSTDFIL
for nonstandard file opening.
Condition values are returned in R0.
code
OpenVMS usage:longword_unsigned
type: longword (unsigned)
access: read only
mechanism: by reference
A code from EDT that specifies what function the FILEIO routine
is to perform. The code argument is the address of a longword
integer containing this code. Following are the valid function
codes:
Function Code Description
EDT$K_OPEN_INPUT The record argument names a file to be
opened for input. The rhb argument is the
default file name.
EDT$K_OPEN_OUTPUT_SEQ The record argument names a file to be
opened for output as a sequenced file. The
rhb argument is the default file name.
EDT$K_OPEN_OUTPUT_ The record argument names a file to be
NOSEQ opened for output. The rhb argument is the
default file name.
EDT$K_OPEN_IN_OUT The record argument names a file to be
opened for both input and output. The rhb
argument is the default file name.
EDT$K_GET The record argument is to be filled with
data from the next record of the file.
If the file has record prefixes, rhb is
filled with the record prefix. If the
file has no record prefixes, rhb is not
written. When you attempt to read past the
end of file, status is set to RMS$_EOF.
EDT$K_PUT The data in the record argument is to be
written to the file as its next record. If
the file has record prefixes, the record
prefix is taken from the rhb argument. For
a file opened for both input and output,
EDT$K_PUT is valid only at the end of the
file, indicating that the record is to be
appended to the file.
EDT$K_CLOSE_DEL The file is to be closed and then deleted.
The record and rhb arguments are not used
in the call.
EDT$K_CLOSE The file is to be closed. The record and
rhb arguments are not used in the call.
stream
OpenVMS usage:longword_unsigned
type: longword (unsigned)
access: read only
mechanism: by reference
A code from EDT that indicates which file is being used. The
stream argument is the address of a longword integer containing
the code. Following are the valid codes:
Function Code Description
EDT$K_COMMAND_ The command file.
FILE
EDT$K_INPUT_FILE The primary input file.
EDT$K_INCLUDE_ The secondary input file. Such a file is
FILE opened in response to an INCLUDE command. It
is closed when the INCLUDE command is complete
and will be reused for subsequent INCLUDE
commands.
EDT$K_JOURNAL_ The journal file. If bit 0 of the options is
FILE set, it is opened for both input and output
and is read completely. Otherwise, it is
opened for output only. After it is read
or opened for output only, it is used for
writing. On a successful termination of the
editing session, the journal file is closed
and deleted. EXIT/SAVE and QUIT/SAVE close the
journal file without deleting it.
EDT$K_OUTPUT_FILE The primary output file. It is not opened
until you enter the EXIT command.
EDT$K_WRITE_FILE The secondary output file. Such a file is
opened in response to a WRITE or PRINT
command. It is closed when the command is
complete and will be reused for subsequent
WRITE or PRINT commands.
record
OpenVMS usage:char_string
type: character-coded text string
access: modify
mechanism: by descriptor
Text record passed by descriptor from EDT to the user-supplied
FILEIO routine; the code argument determines how the record
argument is used. The record argument is the address of a
descriptor pointing to this argument. When the code argument
starts with EDT$K_OPEN, the record is a file name. When the code
argument is EDT$K_GET, the record is a place to store the record
that was read from the file. For code argument EDT$K_PUT, the
record is a place to find the record to be written to the file.
This argument is not used if the code argument starts with EDT$K_
CLOSE.
Note that for EDT$K_GET, EDT uses a dynamic or varying string
descriptor; otherwise, EDT has no way of knowing the length of
the record being read. EDT uses only string descriptors that can
be handled by the Run-Time Library routine STR$COPY_DX.
rhb
OpenVMS usage:char_string
type: character-coded text string
access: modify
mechanism: by descriptor
Text record passed by descriptor from EDT to the user-supplied
FILEIO routine; the code argument determines how the rhb argument
is used. When the code argument starts with EDT$K_OPEN, the rhb
argument is the default file name. When the code is EDT$K_GET
and the file has record prefixes, the prefixes are put in this
argument. When the code is EDT$K_PUT and the file has record
prefixes, the prefixes are taken from this argument. Like the
record argument, EDT uses a dynamic or varying string descriptor
for EDT$K_GET and uses only string descriptors that can be
handled by the Run-Time Library routine STR$COPY_DX.
If you do not need to intercept any file I/O, you can use the
entry point EDT$FILEIO for this argument or you can omit it. If
you need to intercept only some file I/O, call the EDT$FILEIO
routine for the other cases.
When you use EDT$FILEIO as a value for the fileio argument, files
are opened as follows:
o The record argument is always the RMS file name.
o The rhb argument is always the RMS default file name.
o There is no related name for the input file.
o The related name for the output file is the input file with
OFP (output file parse). EDT passes the input file name, the
output file name, or the name from the EXIT command in the
record argument.
o The related name for the journal file is the input file name
with the OFP RMS bit set.
o The related name for the INCLUDE file is the input file name
with the OFP set. This is unusual because the file is being
opened for input.
EDT contains support for VFC files. Normally, EDT will zero the
length of the RHB field if the file is not a VFC file. However,
when the user supplies the FILEIO routines, they are responsible
for performing this operation.
EDT checks for a VFC file with the following algorithm:
IF FAB$B_RFM = FAB$C_VFC
AND FAB$B_RAT <> FAB$M_PRN
THEN
VFC file
ELSE
not VFC file, zero out RHB descriptor length field.
4 - Condition Values Returned
|
SS$_NORMAL Normal successful completion.
EDT$_NONSTDFIL File is not in standard text format.
RMS$_EOF End of file on a GET.
[legal]
[privacy]
[GNU]
[policy]
[netiquette]
[sponsors]
[FAQ]
Polarhome, production since 1999.
Member of Polarhome portal.