Dataset I/O in assembler
This repository provides core I/O services in C, for use in both 31-bit and 64-bit code. The services provide the full set of capabilities that an assembler programmer would have at their disposal. As such, the interfaces tend to have complex structures defining the interface.
The intent of these services are to enable C programmers to use the full capability of the z/OS core I/O services without having to write assembler code, and that these services are available in both 31-bit and 64-bit mode.
For applications that need to perform common I/O operations, the Language Environment C services may be a better option.
- SVC 99: Dynamic Allocation of DCB
- SVC 19: Open a DCB
- SVC 21: STOW (update directory entry for member)
- SVC 20: Close a DCB.
- DCBD Macro: Data Control Block symbolic names.
- DCB BPAM Macro: DCB Macro for BPAM usage
- Dynalloc Macro: Dynamic Allocation of DCB
- OPEN Macro,
- Macro: DYNALLOC aka SVC99.
- BLDL Macro: Read one or more directory entries into virtual storage.
- FIND Macro: Establish the beginning of a data set member using a BLDL list or directory.
- DESERV Macro: Directory Entry Services for PDS and PDSE data sets.
- SMDE Macro: Directory Entry information returned from DESERV GET.
- ISITMGD Macro: Determine if data set is SMS managed and info about a PDSE.
- NOTE Macro: Return the TTRz that can subsequently be used by POINT.
- POINT Macro: Cause the next READ or WRITE to be from the TTRz specified.
- IHAPDS Macro PDSD2 Directory Entry for input to STOW.
- STOW Macro: Modify (Add, Delete, Replace, Change) a member in the directory.
- DECB Macro: Input/Output for the READ and WRITE services.
- GETBUF Macro: Obtain a buffer.
- READ/WRITE
- READ Macro: Read BLOCKs, not records.
- WRITE Macro: Write BLOCKs, not records.
- Non-VSAM I/O Exit Routines: How to process end of data, synchronous error, etc.
- GET/PUT Macros: Get and Put RECORDS, not blocks.
- CLOSE Macro
- I/O
- A connection to a PDSE member provides a temporary version of that member.
- You can not extend a PDSE member, although you can update in place.
- A record must be read before it can be updated.
- When a PDSE member is deleted, all aliases to that member are also deleted.
- When reading a block, the block may not be a complete block (e.g. it is the last block of a dataset). You can determine the length after a CHECK macro is issued.
- When writing a block, the block may not be a complete block (e.g. it is the last block of a dataset). You can specify the length on the WRITE DCBBLKSI.
- The DESERV GET service returns the System Managed Directory Entry (SMDE) for the member requested
- The SMDE includes a section called the SMDE Extended Attributes
- The Extended Attributes has a 2 byte CCSID in it (among other things)
- The STOW service lets you modify member entries, which lets you SET the CCSID (see the IFF function)