Document revision date: 15 July 2002 | |
Previous | Contents | Index |
RMS sets the completion status code (STS) field together with the
success or failure status codes for a record operation before returning
control to your program. For an asynchronous operation that has been
initiated but not yet completed, this field is 0. When the operation is
complete, the field is updated with the completion status. See
Chapter 2 for additional details about signaling RMS status codes.
Potential error codes for specific operations are listed with their
descriptions in Part 3.
7.23 RAB$L_STV Field
The completion status value (STV) field communicates additional completion information to your program, on the basis of the type of operation and the contents of the completion status code field. For additional information on the RAB$L_STS and RAB$L_STV fields, see Part 1.
The RAB$L_STV field can be accessed using alternate symbolic offsets;
RAB$W_STV0 is the location of the first word and RAB$W_STV2 is the
location of the second word within RAB$L_STV.
7.24 RAB$B_TMO Field
The timeout (TMO) field indicates the maximum number of seconds, in the range 0 to 255, that RMS should wait for an operation to conclude. If the operation does not conclude within the specified timeout period, RMS returns an error status code.
To use this field, you must also specify the RAB$V_TMO record-processing option.
For a Get service using a terminal device, this value specifies the number of seconds to wait between the characters being typed. If you specify 0 along with RAB$V_TMO, the current contents of the type-ahead buffer are returned.
When you use a wait-on-record lock (RAB$V_WAT) with a Get, Find, or Put service, this value specifies the maximum number of seconds for RMS to wait for the record to become available.
Note that if the RAB$B_TMO field contains a value of 0 and RAB$V_TMO is set when you invoke either a Get or Put service to a mailbox device, the operation terminates immediately, rather than waiting for another process. For example, if you invoke the Put service to a mailbox device with the RAB$B_TMO field clear, the Put service does not wait for the receiving process to get the record.
This field corresponds to the FDL attribute CONNECT TIMEOUT_PERIOD and
it is not supported for DECnet for OpenVMS operations.
7.25 RAB$L_UBF Field
The user record buffer address (UBF) field indicates the location of a record or block buffer.
When you invoke the Get service, RMS takes control of the record buffer and can modify it. RMS returns the record size and only guarantees the contents from where it accessed the record to the completion of the record. |
When you invoke a Get service, this field must contain the buffer
address, regardless of the record transfer mode (locate or move). This
option also applies when you invoke the Read service for block I/O.
However, a Put or Write service never needs a user buffer.
7.26 RAB$W_USZ Field
The user record buffer size (USZ) field indicates the length (1 through 65,535 bytes) of the user record buffer (RAB$L_UBF).
The user record buffer should be large enough to contain the largest record in the file. If the buffer is not large enough to accommodate a record obtained by a Get service operation, RMS moves as much of the record as possible into the buffer and returns a warning status code.
The value in this field specifies the transfer length, in bytes, for
block I/O operations with a Read service and for a Get service to UDF
(undefined) format sequential files.
7.27 RAB$L_XAB Field
The extended attribute block address (XAB) field contains the symbolic address of a XAB control block that you want to use when performing an operation such as a Get service for a terminal device. A value of 0 (the default) indicates no XABs for this record stream.
For certain record operations, you can associate XABs with a RAB to convey additional attributes about an operation. (See Section 1.2.2 for the description of a XAB.)
On an Alpha system, the 64-bit record access block (RAB64) is an extension of the RAB (described in Chapter 7) that allows OpenVMS Alpha users to use 64-bit addresses for the following I/O buffers:
RAB64 has fields corresponding to all the RAB fields, plus seven
additional fields to accommodate 64-bit addressing.
8.1 Summary of Fields
The additional fields in the extended RAB64 data structure are summarized at the beginning of Table 8-1 and are described in this chapter. All the other RAB64 fields are exactly like their RAB counterparts described in Chapter 7, unless noted otherwise in this chapter.
Table 8-1 gives the symbolic offset, the size, the RAB cross-reference, and a brief description for each RAB64 field.
Field Offset | Size (Bytes) |
RAB Cross-Reference | Description |
---|---|---|---|
Alpha-Only RAB64 Fields Described in this Chapter1: | |||
RAB64$Q_CTX | 8 | None | User context (64-bit) |
RAB64$PQ_KBF | 8 | None | Key buffer 64-bit address |
RAB64$PQ_RBF | 8 | None | Record buffer 64-bit address |
RAB64$PQ_RHB | 8 | None | Record header buffer 64-bit address |
RAB64$Q_RSZ | 8 | None | Record buffer size |
RAB64$PQ_UBF | 8 | None | User record buffer 64-bit address |
RAB64$Q_USZ | 8 | None | User record buffer size |
RAB64 Fields Equivalent to RAB Fields Described in Chapter 7: | |||
RAB64$B_BID 2 | 1 | See RAB$B_BID in Section 7.2 | Block identifier |
RAB64$L_BKT | 4 | See RAB$L_BKT in Section 7.3 | Bucket code |
RAB64$B_BLN 3 | 1 | See RAB$B_BLN in Section 7.4 | Block length |
RAB64$L_CTX | 4 | See RAB$L_CTX in Section 7.5 | User context |
RAB64$L_FAB | 4 | See RAB$L_FAB in Section 7.6 | File access block address |
RAB64$W_ISI 4 | 2 | See RAB$W_ISI in Section 7.7 | Internal stream identifier |
RAB64$L_KBF | 4 | See RAB$L_KBF in Section 7.8 | Key buffer address |
RAB64$B_KRF | 1 | See RAB$B_KRF in Section 7.9 | Key of reference |
RAB64$B_KSZ | 1 | See RAB$B_KSZ in Section 7.10 | Key size |
RAB64$B_MBC | 1 | See RAB$B_MBC in Section 7.11 | Multiblock count |
RAB64$B_MBF | 1 | See RAB$B_MBF in Section 7.12 | Multibuffer count |
RAB64$L_PBF | 4 | See RAB$L_PBF in Section 7.13 | Prompt buffer address |
RAB64$B_PSZ | 1 | See RAB$B_PSZ in Section 7.14 | Prompt buffer size |
RAB64$B_RAC | 1 | See RAB$B_RAC in Section 7.15 | Record access mode |
RAB64$L_RBF | 4 | See RAB$L_RBF in Section 7.16 | Record buffer address |
RAB64$W_RFA | 6 | See RAB$W_RFA in Section 7.17 | Record file address |
RAB64$L_RHB | 4 | See RAB$L_RHB in Section 7.18 | Record header buffer address |
RAB64$L_ROP | 4 | See RAB$L_ROP in Section 7.19 | Record-processing options |
RAB64$W_ROP_2 | 2 | See RAB$W_ROP_2 in Section 7.20 | Extended record-processing options |
RAB64$W_RSZ | 2 | See RAB$W_RSZ in Section 7.21 | Record buffer size |
RAB64$L_STS 4 | 4 | See RAB$L_STS in Section 7.22 | Completion status code |
RAB64$L_STV 4 | 4 | See RAB$L_STV in Section 7.23 | Status value |
RAB64$W_STV0 5 | 2 | See RAB$L_STV in Section 7.23 | Low-order word status value |
RAB64$W_STV2 5 | 2 | See RAB$L_STV in Section 7.23 | High-order word status value |
RAB64$B_TMO | 1 | See RAB$B_TMO in Section 7.24 | Timeout period |
RAB64$L_UBF | 4 | See RAB$L_UBF in Section 7.25 | User record buffer address |
RAB64$W_USZ | 2 | See RAB$W_USZ in Section 7.26 | User record buffer size |
RAB64$L_XAB | 4 | See RAB$L_XAB in Section 7.27 | Next XAB address |
The RAB64 $PQ_ fields can hold either 64-bit addresses or 32-bit addresses sign-extended to 64-bits. Therefore, you can use these fields in all applications whether or not you are using 64-bit addresses.
If your application already uses RAB fields, only minimal source code changes are required to use 64-bit RMS support. The RAB64 64-bit counterpart to a 32-bit address field is used only if the following two conditions exist:
Because the RAB64 is an upwardly compatible version of the RAB, RMS allows you to use the RAB64 wherever you can use a RAB. For example, a RAB64 can be used in place of a RAB as the first argument passed to any of the RMS record or block I/O services.
While RMS allows you to use the RAB64 wherever you can use a RAB, some source languages may impose other restrictions. Consult the documentation for your source language for more information.
DECnet for OpenVMS support for RAB64 fields is identical to support described for RAB fields in Chapter 7.
The format and arguments of the $RAB64 macro and the $RAB64_STORE macro
are described in Appendix A.
8.2 RAB64$Q_CTX Field
This Alpha-only, 8-byte field is a 64-bit extension of the user context
field and serves the same purpose as RAB$L_CTX (see Section 7.5 for
details). The only difference between these fields, other than size, is
that there is no corresponding FDL attribute for RAB64$Q_CTX.
8.3 RAB64$PQ_KBF Field
This Alpha-only, 8-byte field is a key buffer 64-bit address field that serves the same purpose as RAB$L_KBF (see Section 7.8 for details). This field can hold either a 64-bit address or a 32-bit address sign-extended to 64 bits.
To use this field: | Put a -1 in this field: | Use this size field: |
---|---|---|
RAB64$PQ_KBF | RAB64$L_KBF | RAB64$B_KSZ |
This Alpha-only, 8-byte field is a record buffer 64-bit address field that serves the same purpose as RAB$L_RBF (see Section 7.16 for details). This field can hold either a 64-bit address or a 32-bit address sign-extended to 64 bits.
To use this field: | Put a -1 in this field: | Use this size field: | Put a 0 in this field: |
---|---|---|---|
RAB64$PQ_RBF | RAB64$L_RBF | RAB64$Q_RSZ | RAB64$W_RSZ |
For most record I/O service requests, there is an RMS internal buffer
between the device and the user's data buffer. The one exception occurs
with the RMS service $PUT. If the device is a unit record device and it
is not being accessed over the network, RMS passes the address of the
user record buffer to the $QIO system service. If you inappropriately
specify a record buffer allocated in 64-bit address space for a $PUT
service to a unit record device that does not support 64-bit address
space (for example, a terminal), the $QIO service returns error status
SS$_NOT64DEVFUNC. RMS returns error status RMS$_SYS with
SS$_NOT64DEVFUNC as the secondary status value in RAB64$L_STV.
8.5 RAB64$PQ_RHB Field
This Alpha-only, 8-byte field is a record header buffer 64-bit address field that serves the same purpose as RAB$L_RHB (see Section 7.18 for details). This field can hold either a 64-bit address or a 32-bit address sign-extended to 64 bits.
To use this field: | Put a -1 in this field: | Use this size field: |
---|---|---|
RAB64$PQ_RHB | RAB64$L_RHB | FAB$B_FSZ |
This Alpha-only, 8-byte field is an extended record size field that serves the same purpose as RAB$W_RSZ (see Section 7.21 for details). Use this field whenever you use the RAB64$PQ_RBF field.
The buffer size maximum for the RMS block I/O service $WRITE has been increased from 65535 bytes to 2**31-1 bytes for OpenVMS Alpha users, with two exceptions:
This Alpha-only, 8-byte field is a user record buffer 64-bit address field that serves the same purpose as RAB$L_UBF (see Section 7.25 for details). This field can hold either a 64-bit address or a 32-bit address sign-extended to 64 bits.
To use this field: | Put a -1 in this field: | Use this size field: | Put a 0 in this field: |
---|---|---|---|
RAB64$PQ_UBF | RAB64$L_UBF | RAB64$Q_USZ | RAB64$W_USZ |
This Alpha-only, 8-byte field is an extended user record buffer size field that serves the same purpose as RAB$W_USZ (see Section 7.26 for details). Use this field whenever you use the RAB64$PQ_UBF field.
The buffer size maximum for the RMS block I/O service $READ has been increased from 65535 bytes to 2**31-1 bytes for OpenVMS Alpha users, with one exception:
Previous | Next | Contents | Index |
privacy and legal statement | ||
4523PRO_013.HTML |