zVSAM V2 - Addenda
This document describes Macro parameters and control blocks used in the zVSAM V2 implementation.
zACB description
The zACB is the internal structure (control block, object) that constitutes the ACB.
The structure and layout of the zACB are not formally part of the interface and may change in future releases. Therefore the zACB layout for zVSAM V1 is not included and the zACB layout for zVSAM V2 is shown here only for the sake of completeness. Direct access to subfields in the zACB is discouraged. Use SHOWCB ACB, TESTCB ACB and/or MODCB ACB to inspect, test, and/or modify the zACB's content. Accessing subfields of the zACB directly may adversely impact portability of your programs.
| Label | Equate | Designation | Remarks |
|---|---|---|---|
| IHAACB | DSECT | ||
| IFGACB | DSECT | Synonym of IFGACB | |
| ACBEYE | CL4 | Eye catcher | |
| ACBZACB | =C'zACB' | Fixed value | |
| ACBID | XL1 | Identifier | |
| ACBIDVAL | =X'A0' | ACB | |
| ACBSTYP | XL1 | Subtype | |
| ACBSTYPE | XL1 | Synonym of ACBSTYP | |
| ACBTYPE | XL1 | Synonym of ACBSTYP | |
| ACBVSAM | =X'10' | VSAM ACB | |
| ACBLENG | H | Length of this ACB in bytes | |
| ACBLENG2 | Synonym of ACBLENG | ||
| ACBLEN | Synonym of ACBLENG | ||
| ACBLEN2 | Synonym of ACBLENG | ||
| ACBDDNM | CL8 | Name of host variable holding cluster name | |
| ACBDDNAM | Synonym of ACBDDNM | ||
| ACBMACRF | ACBMACR1 + ACBMACR2 | ||
| ACBMACR1 | BL1 | Option bits | |
| ACBKEY | =X'80' | Indexed access by logical key | |
| ACBMACR1_KEY | Synonym of ACBKEY | ||
| ACBADDR | =X'40' | Non-indexed access by address | |
| ACBADD | Synonym of ACBADDR | ||
| ACBMACR1_ADR | Synonym of ACBADDR | ||
| ACBCNV | =X'20' | Reserved | |
| ACBMACR1_CNV | Synonym of ACBCNV | ||
| ACBSEQ | =X'10' | Sequential access | |
| ACBMACR1_SEQ | Synonym of ACBSEQ | ||
| ACBDIR | =X'08' | Direct access | |
| ACBMACR1_DIR | Synonym of ACBDIR | ||
| ACBIN | =X'04' | Get allowed | |
| ACBMACR1_IN | Synonym of ACBIN | ||
| ACBGET | Synonym of ACBIN | ||
| ACNOUT | =X'02' | Get / Put / Erase allowed | |
| ACBMACR1_OUT | Synonym of ACBOUT | ||
| ACBPUT | Synonym of ACBOUT | ||
| ACBUBF | =X'01' | Reserved | |
| ACBMACR1_UBF | Synonym of ACBUBF | ||
| ACBMACR2 | BL1 | More option bits | |
| ACBSKP | =X'10' | Skip-sequential access | |
| ACBMACR2_SKP | Synonym of ACBSKP | ||
| ACBRST | =X'04' | Dataset Reset opn open | |
| ACBMACR2_RST | Synonym of ACBRST | ||
| ACBAIX | =X'01' | Access through AIX | |
| ACBMACR2_AIX | Synonym of ACBAIX | ||
| ACBAIXP | Synonym of ACBAIX | ||
| ACBMACR3 | BL1 | Additional option bits | |
| ACBNLW | =X'80' | Reserved | |
| ACBLSR | =X'40' | Reserved | |
| ACBMACR3_LSR | Synonym of ACBLSR | ||
| ACBGSR | =X'20' | Reserved | |
| ACBMACR3_GSR | Synonym of ACBGSR | ||
| ACBDFR | =X'08' | Deferred writes allowed | |
| ACBMACR3_DFR | Synonym of ACBDFR | ||
| ACBSIS | =X'04' | Sequential insert strategy | |
| ACBMACR3_SIS | Synonym of ACBSIS | ||
| ACBMODE | =X'01' | Buffers allowed above the line | |
| ACBMACR4 | BL1 | Reserved | |
| ACBBUFND | XL2 | Nr of data buffers | |
| ACBBUFNI | XL2 | Nr of index buffers | |
| ACBBUFSP | F | Max buffer space in bytes | |
| ACBLRECL | XL2 | Record length | |
| ACBPASSW | A | Password pointer | |
| ACBEXLST | A | EXLST ptr | |
| ACBUEL | Synonym of ACBEXLST | ||
| ACBINFLG | ACBINFL1 + ACBINFL2 | ||
| ACBINFL | Synonym of ACBINFLG | ||
| ACBINFL1 | BL1 | Indicator flags | |
| ACBCAT | =X'10' | Reserved | |
| ACBINFL2 | BL1 | More indicator flags | |
| ACBSWARN | =X'80' | Suppress open warning | |
| ACBSHROP | =X'03' | Reserved | |
| ACBSHR02 | =X'02' | Reserved | |
| ACBSHR01 | =X'01' | Reserved | |
| ACBOFLGS | BL1 | Open / Close flags | |
| ACBR31B | =X'80' | 31-bit addressing for buffers | |
| ACBR31C | =X'40' | 31-bit addressing for control blocks | |
| ACBEOV | =X'20' | Reserved | |
| ACBOPEN | =X'10' | ACB currently open | |
| ACBDSERR | =X'08' | Error – ACB must be closed | |
| ACBRECOV | =X'04' | Open for recovery | |
| ACBEXFG | =X'02' | Off when user exit in progress | |
| ACBLOCK | Synonym of ACBEXFG | ||
| ACBIOSFG | =X'01' | Open / close in progress | |
| ACBBUSY | Synonym of ACBIOSFG | ||
| ACBERFLG | BL1 | Error flags | |
| ACBOALR | =X'04' | Already opened / closed | |
| ACBCALR | Synonym of ACBOALR | ||
| ACBBSTNO | XL1 | Reserved | |
| ACBSTRNO | XL1 | Reserved | |
| ACBSHRP | XL1 | Reserved | |
| ACBVER | XL1 | zACB layout version | |
| ACBV2 | =X'02' | zACB V2 version | |
| ---------- | -------------- | ------------- | ----------------------------------------------------------------- |
| ACBPFX | AL4 | Prefix Block in buffer | |
| ACBXPFX | AL4 | Prefix Block of index; zeroes if no index open | |
| ACBBUFD | AL4 | Address of data buffers | |
| ACBBUFI | AL4 | Address of index buffers | |
| ACBDTYPE | X | Type of dataset opened | |
| ACB_PATH | EQU X'80' | Path | |
| ACB_AIX | EQU X'20' | Aix | |
| ACB_BASE | EQU X'10' | Base | |
| ---------- | -------------- | ------------- | ----------------------------------------------------------------- |
| used for alignment | |||
| ACBEND | EQU * | ||
| ACB_LEN | EQU | ACBEND-IHAACB |
[!NOTE] Fields ACBPFX through ACBDTYPE are dataset-level fields and do not belong in the zACB, which is intended for cluster-level information. These fields need to be moved to another structure.
CBMR description
The structure and layout of the CBMR are not formally part of the interface and may change in future releases. Therefore the CBMR layout is shown here only for the sake of completeness. Direct access to subfields in the CBMR is discouraged. Use SHOWCB, TESTCB and/or MODCB to inspect, test, and/or modify the content of an ACB, EXLST, or RPL. Use the appropriate MF= parameter on any of these macros to modify and/or use a CBMR.
The CBMR consists of three parts: a header, a body, and a tail. The header has a fixed layout. The body consists of request-dependent fields and a list of verb codes. The tail contains all the data fields that go with the verb codes. Data fields can be 0, 4, or 8 bytes in length.
- Verb codes X'00'-X'5F' have a zero-length data field (i.e. no data field).
- Verb codes '60'-X'DF' have a 4-byte data field.
- Verb codes X'E0'-X'FF' have an 8-byte data field.
- For valid verb values and their data field lengths, please refer to the relevant CBMR body chapter.
All data fields in the tail are allocated consecutively, in the same order as the verbs that define their meaning.
Direct access to subfields in the CBMR is discouraged. Use SHOWCB, TESTCB and/or MODCB to inspect,
test, and/or modify the content of an ACB, EXLST, or RPL. Use the appropriate MF= parameter on any of
these macros to modify and/or use a CBMR.
CBMR – header
The CBMR header identifies the type: ACB, EXLST, or RPL and GENCB, MODCB, SHOWCB or TESTCB.
It also has details of any work area(s) needed and a count of verbs in CBMRVRBS.
| Label | Equate | Designation | Remarks |
|---|---|---|---|
| CBMR | DSECT | ||
| CBMREYE | CL4 | Eye catcher | |
| CBMRCBMR | =C'CBMR' | Fixed value | |
| CBMRREQ | XL1 | Request type | |
| CBMRTEST | =X'80' | TESTCB request | |
| CBMRSHOW | =X'40' | SHOWCB request | |
| CBMRMOD | =X'20' | MODCB request | |
| CBMRGEN | =X'10' | GENCB request | |
| - | =X'08' | Reserved | |
| CBMRRPL | =X'04' | RPL request | |
| CBMRXLST | =X'02' | EXLST request | |
| CBMRACB | =X'01' | ACB request | |
| CBMRRMOD | XL1 | Request modifier | |
| - | =X'C0' | Reserved | |
| CBMROBJI | =X'20' | Object=Index | |
| CBMROBJD | =X'10' | Object=Data | |
| - | =X'0C' | Reserved | |
| CBMRLOCA | =X'02' | Work area below 2G | |
| CBMRLOCB | =X'01' | Work area below 16M | |
| CBMRVRBS | AL1 | Nr of verbs in body | |
| – | XL1 | Reserved | |
| CBMRWORK | AL4 | Workarea pointer | |
| CBMRWLEN | AL2 | Workarea length | |
| CBMRSIZE | AL2 | CBMR size | |
| CBMRBODY | Depends | List of verb codes | |
| CBMRTAIL | Depends | Data fields |
Remarks:
- CBMRLOCA CBMRLOCB: when both bits are off the CBMR handler will not allocate a work area, rather it will use CBMRWORK/CBMRWLEN instead.
- CBMRVRBS: The number of verbs in the body of the CBMR. This number is always a multiple of 4.
- CBMRSIZE: length in bytes of CBMR header and tail combined. Tail follows header directly
CBMR – body
The length of the CBMR body is determined by the CBMRVRBS field in the CBMR header.
It contains one verb code for each specified parameter.
There is no mapping - the body is always allocated in fullwords.
Unused position are marked with a no-op request verb; they must be set to CBMRNB_NULL (zero).
Applicable verb codes are defined below.
CBMR – tail
The CBMR tail directly follows the CBMR body. It contains a data field of 0, 4 or 8 bytes for each verb coded in the body, in the same sequence.
The starting point of the tail can be found by adding the CBMRVRBS value to the start of the CBMR body at CBMRBODY.
Its length can be calculated from the CBMRSIZE field, by subtracting both the header length and the CBMRVRBS field.
There is no mapping for the tail. Invoking programs must calculate the address of each field to access its contents.
CBMR - body and tail for ACB
The CBMR body for ACB is applicable only when the CBMR header's CBMRACB bit is on.
Its length is determined by the CBMRVRBS fields in the CBMR header. This is always a multiple of 4
to allow word alignment of the tail area that directly follows the body section.
Any unused/unneeded verb bytes should be set to zero, indicating a no-operation.
The tail follows the body directly, but is absent if it has a zero length.
It contains a data field of 0, 4, or 8 bytes for each verb code in the body, in the same sequence.
The starting point of the tail can be found by adding the CBMRVRBS value to the start of the CBMR body at CBMRBODY.
Its length can be deduced form the CBMRSIZE field, by subtracting both the header length and the CBMRVRBS field.
!! Review Note: !! The below table significantly differs from what Melvyn implemented. This is to be revisited after we define the interfaces for GENCB/MODCB/SHOWCB/TESTCB for the ACB.
| Label | Equate | Designation | Remarks |
|---|---|---|---|
| CBMR | DSECT | ||
| CBMRBODY | |||
| CBMRACB_VERBS | XL1 | Verb code, repeats | |
| CBMRACB_NOOP | =X'00' | Filler, no-operation | |
| CBMRACB_ADR | =X'01' | RBA-addressed | |
| CBMRACB_KEY | =X'02' | Key addressed | |
| CBMRACB_CNV | =X'03' | Control Interval | |
| CBMRACB_DFR | =X'04' | Deferred writes | |
| CBMRACB_NDF | =X'05' | Immediate writes | |
| CBMRACB_DIR | =X'06' | Direct | |
| CBMRACB_SEQ | =X'07' | Sequential | |
| CBMRACB_SKP | =X'08' | Skip-sequential | |
| CBMRACB_IN | =X'09' | Input | |
| CBMRACB_OUT | =X'0A' | Output | |
| CBMRACB_NIS | =X'0B' | Normal inserts | |
| CBMRACB_SIS | =X'0C' | Sequential inserts | |
| CBMRACB_NRM | =X'0D' | Normal, non-path | |
| CBMRACB_AIX | =X'0E' | Path | |
| CBMRACB_NRS | =X'0F' | Not reusable | |
| CBMRACB_RST | =X'10' | Reset on open | |
| CBMRACB_NSR | =X'11' | Nonshared resources | |
| CBMRACB_LSR | =X'12' | Local shared resources | |
| CBMRACB_GSR | =X'13' | Global shared resources | |
| CBMRACB_RLS | =X'14' | Record-level sharing | |
| CBMRACB_NUB | =X'15' | No user buffering | |
| CBMRACB_UBF | =X'16' | User buffering | |
| CBMRACB_CFX | =X'17' | Buffers fixed | |
| CBMRACB_NFX | =X'18' | Buffers fixed | |
| CBMRACB_DDN | =X'19' | Share by DDName | |
| CBMRACB_DSN | =X'1A' | Share by DSN | |
| CBMRACB_ICI | =X'1B' | Improved CI processing | |
| CBMRACB_NCI | =X'1C' | Normal CI processing | |
| CBMRACB_LEW | =X'1D' | LSR enqueue wait | |
| CBMRACB_NLW | =X'1E' | No lock wait | |
| CBMRACB_ESDS | =X'20' | Cluster is ESDS | |
| CBMRACB_KSDS | =X'21' | Cluster is KSDS | |
| CBMRACB_LDS | =X'22' | Cluster is LDS | |
| CBMRACB_RRDS | =X'23' | Cluster is RRDS | |
| CBMRACB_REPL | =X'24' | Index is replicated | |
| CBMRACB_SPAN | =X'25' | Spanned | |
| CBMRACB_SSWD | =X'26' | Sequence set with data | |
| CBMRACB_VRRDS | =X'27' | Variable RRDS | |
| CBMRACB_WCK | =X'28' | Write checks | |
| CBMRACB_CMPRS | =X'29' | Compression | |
| CBMRACB_UNQ | =X'2A' | Unique key | |
| CBMRACB_XADDR | =X'2B' | 8-byte RBAs | |
| CBMRACB_OPEN | =X'2C' | ACB is open | |
| CBMRACB_PATH | =X'2D' | ACB uses a path | |
| CBMRACB_BASE | =X'2E' | ACB uses base cluster | |
| CBMRACB_AIX | =X'2F' | ACB uses AIX | |
| CBMR_ACB_VESDS | =X'30' | Variable ESDS | |
| CBMRACB_COPIES | =X'60' | Nr of copies | |
| CMBRACB_ERET | =X'61' | Error return address | |
| CBMRACB_PASSWD | =X'62' | Password pointer | |
| CBMRACB_EXLST | =X'63' | EXLST pointer | |
| CBMRACB_BUFSP | =X'64' | Buffer space | |
| CBMRACB_BUFND | =X'65' | Nr of data buffers | |
| CBMRACB_BUFNI | =X'66' | Nr of index buffers | |
| CBMRACB_STRNO | =X'67' | Parallel threads | |
| CBMRACB_BSTRNO | =X'68' | Nr of strings | |
| CBMRACB_MAREA | =X'69' | Messagearea | |
| CBMRACB_MLEN | =X'6A' | Message area length | |
| CBMRACB_RLSREAD | =X'6B' | RLS/CR/NORD | |
| CBMRACB_SHRPL | =X'6C' | Sharepool number | |
| CBMRACB_ACBLEN | =X'6D' | Length of ACB | |
| CBMRACB_AVSPAC | =X'6E' | Available space | |
| CBMRACB_BFRND | =X'6F' | Buffer found count | |
| CBMRACB_BUFNO | =X'70' | Nr of I/O buffers | |
| CBMRACB_BUFRDS | =X'71' | Buffer read count | |
| CBMRACB_CINV | =X'72' | Block size | |
| CBMRACB_ENDRBA | =X'73' | End RBA | |
| CBMRACB_ERROR | =X'74' | Open/close error code | |
| CBMRACB_FS | =X'75' | Free Space | |
| CBMRACB_HALCRBA | =X'76' | High allocated RBA | |
| CBMRACB_KEYLEN | =X'77' | Key length | |
| CBMRACB_LRECL | =X'78' | (max) record length | |
| CBMRACB_NCIS | =X'79' | Nr of Block splits | |
| CBMRACB_NDELR | =X'7A' | Nr. of deletes | |
| CBMRACB_NEXCP | =X'7B' | Nr of I/O requests | |
| CBMRACB_NEXT | =X'7C' | Nr. of file extents | |
| CBMRACB_NINSR | =X'7D' | Nr of inserts | |
| CBMRACB_NIXL | =X'7E' | Nr of index levels | |
| CBMRACB_NLOGR | =X'7F' | Nr of records | |
| CBMRACB_NRETR | =X'80' | Nr of retrievals | |
| CBMRACB_NSSS | =X'81' | Nr of CA splits | |
| CBMRACB_NUIW | =X'82' | Nr of VSAM writes | |
| CBMRACB_NUPDR | =X'83' | Nr of updates | |
| CBMRACB_RKP | =X'84' | Relative key position | |
| CBMRACB_SDTASZ | =X'85' | Uncompressed data size | |
| CBMRACB_STRMAX | =X'86' | Max. nr of strings | |
| CBMRACB_UIW | =X'87' | User initiated writes | |
| CBMRACB_DDNM | =X'E0' | DDname | |
| CBMRACB_CDTASZ | =X'E1' | Compressed data size | |
| CBMRACB_LEVEL | =X'E2' | zVSAM level | |
| CBMRACB_LOKEY | =X'E3' | Lowest valid key ptr | |
| CBMRACB_RELEASE | =X'E4' | zVSAM level | |
| CBMRACB_STMST | =X'E5' | Last close timestamp | |
| CBMRACB_XAVCSPC | =X'E6' | 8-byte AVCSPAC | |
| CBMRACB_XENDRBA | =X'E7' | 8-byte ENDRBA | |
| CBMRACB_XHALCRBA | =X'E8' | 8-byte HALXRBA |
The validity of verb codes differ per macro. Whether any given verb code is valid is determined by the syntax definition of the GENCB, MODCB, SHOWCB, TESTCB macros. Please refer to the appropriate chapter to check which parameters are supported.
For SHOWCB and TESTCB some keywords are applicable only after open. If they are issued before the ACB has been opened, an error is returned.
Additional notes:
CBMRACB_NRS– TESTCB only, always trueCBMRACB_RST– TESTCB only, always falseCBMRACB_NSR– TESTCB only, always trueCBMRACB_LSR– TESTCB only, always falseCBMRACB_GSR– TESTCB only, always falseCBMRACB_RLS– TESTCB only, always falseCBMRACB_NUB– TESTCB only, always trueCBMRACB_UBF– TESTCB only, always falseCBMRACB_CFX– TESTCB only, always falseCBMRACB_NFX– TESTCB only, always falseCBMRACB_DDN– TESTCB only, always falseCBMRACB_DSN– TESTCB only, always falseCBMRACB_ICI– TESTCB only, always falseCBMRACB_NCI– TESTCB only, always trueCBMRACB_LEW– TESTCB only, always trueCBMRACB_NLW– TESTCB only, always falseCBMRACB_REPL– TESTCB only, always falseCBMRACB_SSWD– TESTCB only, always falseCBMRACB_WCK– TESTCB only, always falseCBMRACB_CMPRS– TESTCB only, always falseCBMRACB_XADDR– TESTCB only, always trueCBMRACB_COPIES– GENCB only. If not specified, the CBMR handler assumes 1.CBMRACB_PASSWD– pointer to a one-byte length field, followed by the passwordCBMRACB_MAREA– TESTCB only, always 0CBMRACB_MLEN– TESTCB only, always 0CBMRACB_SHRPL– TESTCB only, always 0CBMRACB_ENDRBA– ending RBA of the component, derived from ending XLRA.CBMRACB_FS– Nr of free blocks per 100CBMRACB_HALCRBA– High allocated RBA, derived from highest allocated XLRA.CBMRACB_NEXT– for zVSAM the value is always 1.CBMRACB_NSSS– always 0CBMRACB_LEVEL– 4-byte address followed by 4-byte length of level info fieldCBMRACB_LOKEY– 4-byte address followed by 4-byte length of key fieldCBMRACB_RELEASE– 4-byte address followed by 4-byte length of level info field
CBMR - body and tail for EXLST
The CBMR body for EXLST is applicable only when the CBMR header's CBMRXLST bit is on.
Its length is determined by the CBMRVRBS fields in the CBMR header. This is always a multiple of 4
to allow word alignment of the tail area that directly follows the body section.
Any unused/unneeded verb bytes should be set to zero, indicating a no-operation.
The tail follows the body directly, but is absent if it has a zero length.
It contains a data field of 0, 4, or 8 bytes for each verb code in the body, in the same sequence.
The starting point of the tail can be found by adding the CBMRVRBS value to the start of the CBMR body at CBMRBODY.
Its length can be deduced form the CBMRSIZE field, by subtracting both the header length and the CBMRVRBS field.
!! Review Note: !! The below table significantly differs from what Melvyn implemented. This is to be revisited after we define the interfaces for GENCB/MODCB/SHOWCB/TESTCB for the EXLST.
| Label | Equate | Designation | Remarks |
|---|---|---|---|
| CBMR | DSECT | ||
| CBMRBODY | |||
| CBMRXL_VERBS | XL1 | Verb code, repeats | |
| CBMRXL_NOOP | =X'00' | Filler, no-operation | |
| CBMRXL_COPIES | =X'60' | Nr of copies | |
| CMBRXL_ERET | =X'61' | Error return address | |
| CBMRXL_XLSTLEN | =X'6D' | Length of EXLST | |
| CBRMXL_NEODAD | =X'A0' | No EODAD routine | |
| CBMRXL_EODAD | =X'A1' | End-of-data routine | |
| CBMRXL_NEOD_A | =X'A2' | (,A) | |
| CBMRXL_EOD_A | =X'A3' | (address,A) | |
| CBMRXL_NEOD_N | =X'A4' | (,N) | |
| CBMRXL_EOD_N | =X'A5' | (address,N) | |
| CBMRXL_NEOD_L | =X'A8' | (,L) | |
| CBMRXL_EOD_L | =X'A9' | (address,L) | |
| CBMRXL_NEOD_AL | =X'AA' | (,A,L) | |
| CBMRXL_EOD_AL | =X'AB' | (address,A,L) | |
| CBMRXL_NEOD_NL | =X'AC' | (,N,L) | |
| CBMRXL_EOD_NL | =X'AD' | (address,N,L) | |
| CBRMXL_NLERAD | =X'B0' | No LERAD routine | |
| CBMRXL_LERAD | =X'B1' | Logical error routine | |
| CBMRXL_NLER_A | =X'B2' | (,A) | |
| CBMRXL_LER_A | =X'B3' | (address,A) | |
| CBMRXL_NLER_N | =X'B4' | (,N) | |
| CBMRXL_LER_N | =X'B5' | (address,N) | |
| CBMRXL_NLER_L | =X'B8' | (,L) | |
| CBMRXL_LER_L | =X'B9' | (address,L) | |
| CBMRXL_NLER_AL | =X'BA' | (,A,L) | |
| CBMRXL_LER_AL | =X'BB' | (address,A,L) | |
| CBMRXL_NLER_NL | =X'BC' | (,N,L) | |
| CBMRXL_LER_NL | =X'BD' | (address,N,L) | |
| CBRMXL_NSYNAD | =X'C0' | No SYNAD routine | |
| CBMRXL_SYNAD | =X'C1' | Physical error routine | |
| CBMRXL_NSYN_A | =X'C2' | (,A) | |
| CBMRXL_SYN_A | =X'C3' | (address,A) | |
| CBMRXL_NSYN_N | =X'C4' | (,N) | |
| CBMRXL_SYN_N | =X'C5' | (address,N) | |
| CBMRXL_NSYN_L | =X'C8' | (,L) | |
| CBMRXL_SYN_L | =X'C9' | (address,L) | |
| CBMRXL_NSYN_AL | =X'CA' | (,A,L) | |
| CBMRXL_SYN_AL | =X'CB' | (address,A,L) | |
| CBMRXL_NSYN_NL | =X'CC' | (,N,L) | |
| CBMRXL_SYN_NL | =X'CD' | (address,N,L) | |
| CBRMXL_NJRNAD | =X'D0' | No JRNAD routine | |
| CBMRXL_JRNAD | =X'D1' | Journaling routine | |
| CBMRXL_NJRN_A | =X'D2' | (,A) | |
| CBMRXL_JRN_A | =X'D3' | (address,A) | |
| CBMRXL_NJRN_N | =X'D4' | (,N) | |
| CBMRXL_JRN_N | =X'D5' | (address,N) | |
| CBMRXL_NJRN_L | =X'D8' | (,L) | |
| CBMRXL_JRN_L | =X'D9' | (address,L) | |
| CBMRXL_NJRN_AL | =X'DA' | (,A,L) | |
| CBMRXL_JRN_AL | =X'DB' | (address,A,L) | |
| CBMRXL_NJRN_NL | =X'DC' | (,N,L) | |
| CBMRXL_JRN_NL | =X'DD' | (address,N,L) |
The validity of verb codes differ per macro. Whether any given verb code is valid is determined by the syntax definition of the GENCB, MODCB, SHOWCB, TESTCB macros. Please refer to the appropriate chapter to check which parameters are supported.
CBMR - body and tail for RPL
The CBMR body for RPL is applicable only when the CBMR header's CBMRRPL bit is on.
Its length is determined by the CBMRVRBS fields in the CBMR header. This is always a multiple of 4
to allow word alignment of the tail area that directly follows the body section.
Any unused/unneeded verb bytes should be set to zero, indicating a no-operation.
The tail follows the body directly, but is absent if it has a zero length.
It contains a data field of 0, 4, or 8 bytes for each verb code in the body, in the same sequence.
The starting point of the tail can be found by adding the CBMRVRBS value to the start of the CBMR body at CBMRBODY.
Its length can be deduced form the CBMRSIZE field, by subtracting both the header length and the CBMRVRBS field.
!! Review Note: !! The below table significantly differs from what Melvyn implemented. This is to be revisited after we define the interfaces for GENCB/MODCB/SHOWCB/TESTCB for the RPL.
| Label | Equate | Designation | Remarks |
|---|---|---|---|
| CBMR | DSECT | ||
| CBMRBODY | |||
| CBMRRPL_VERBS | XL1 | Verb code, repeats | |
| CBMRRPL_NOOP | =X'00' | Filler, no-operation | |
| CBMRRPL_ADR | =X'01' | RBA-addressed | |
| CBMRRPL_KEY | =X'02' | Key addressed | |
| CBMRRPL_CNV | =X'03' | Control Interval | |
| CBMRRPL_DIR | =X'06' | Direct | |
| CBMRRPL_SEQ | =X'07' | Sequential | |
| CBMRRPL_SKP | =X'08' | Skip-sequential | |
| CBMRRPL_ARD | =X'30' | Argument-determined | |
| CBMRRPL_LRD | =X'31' | Last Record | |
| CBMRRPL_FWD | =X'32' | Forward | |
| CBMRRPL_BWD | =X'33' | Backward | |
| CBMRRPL_ASY | =X'34' | Asynchronous | |
| CBMRRPL_SYN | =X'35' | Synchronous | |
| CBMRRPL_NSP | =X'36' | Next Sequential Position | |
| CBMRRPL_NUP | =X'37' | Not for update | |
| CBMRRPL_UPD | =X'38' | For update | |
| CBMRRPL_KEQ | =X'39' | Exact key match | |
| CBMRRPL_KGE | =X'3A' | Exact match or next greater key | |
| CBMRRPL_FKS | =X'3B' | Full key search | |
| CBMRRPL_GEN | =X'3C' | Generic | |
| CBMRRPL_LOC | =X'3D' | Locate mode | |
| CBMRRPL_MVE | =X'3E' | Move mode | |
| CBMRRPL_PKP | =X'3F' | AIXFLAG=AIXPKP | |
| CBMRRPL_COMPL | =X'40' | IO=COMPLETE | |
| CBMRRPL_COPIES | =X'60' | Nr of copies | |
| CMBRRPL_ERET | =X'61' | Error return address | |
| CBMRRPL_MAREA | =X'69' | Message area | |
| CBMRRPL_MLEN | =X'6A' | Message area length | |
| CBMRRPL_RPLLEN | =X'6D' | Length of ACB | |
| CBMRRPL_KEYLEN | =X'77' | Key length | |
| CBMRRPL_RECLEN | =X'78' | record length | |
| CBMRRPL_ACB | =X'90' | ACB pointer | |
| CBMRRPL_AREA | =X'91' | Record area | |
| CBMRRPL_AREALEN | =X'92' | Area length | |
| CBMRRPL_ARG | =X'93' | Argument pointer | |
| CBMRRPL_ECB | =X'94' | ECB pointer | |
| CBMRRPL_NXTRPL | =X'95' | Next RPL in chain | |
| CBMRRPL_TRANSID | =X'96' | Transaction ID | |
| CBMR_RPL_AIXPC | =X'97' | Nr of AIX pointers | |
| CBMRRPL_FDBK | =X'98' | Feedback code | |
| CBMRRPL_FTNCD | =X'99' | Function code | |
| CBMRRPL_CRBA | =X'9A' | Current RBA | |
| CBMRTPL_XRBA | =X'F0' | 8-byte Current RBA |
The validity of verb codes differ per macro. Whether any given verb code is valid is determined by the syntax definition of the GENCB, MODCB, SHOWCB, TESTCB macros. Please refer to the appropriate chapter to check which parameters are supported.
For SHOWCB and TESTCB some keywords are applicable only when no I/O is in progress. If they are issued before the ECB has been posted, unpredictable results may occur.
Additional notes:
- CBMRRPL_CNV – TESTCB only, always false
- CBMRRPL_TRANSID – Always foxes