Writing your exit

Z Data Tools does not supply a default I/O exit. If you plan to use an I/O exit to process your data, you must provide one or more for your installation. You must also set the USEIOX option in HFM0POPT. For information about the USEIOX option, see USEIOX.

Any exit you provide must be in the form of a load module, in any load library available to Z Data Tools, either by a STEPLIB DD statement, or in LINKLIST, or LPALIST. If Z Data Tools attempts to load an exit and is unable to find it, an error message is displayed.

You can write your own exit in any high level language, for example, COBOL, PL/I, or High Level Assembler. Sample exits for COBOL, PL/I, and HLASM are provided in HFM.SHFMSAM1. They are:
HFMIOXEA
Sample HLASM exit
HFMIOXEC
Sample COBOL exit
HFMIOXEP
Sample PL/I exit
HFMIOXHF
Sample HLASM exit using HFS
Copybooks providing the I/O exit control blocks for COBOL, PL/I, and HLASM are distributed in the Z Data Tools macro library, HFM.SHFMMAC1. They are:
HFMIOXCB
Control block for HLASM programs
HFMIOXCC
Control block for COBOL programs
HFMIOXCP
Control block for PL/I programs
These copybooks are described in Exit control block data names. See Using the I/O exit control block for information on how to write your exit using the copybooks, and the processing your exit should perform.
Note:
  1. The Z Data Tools I/O exit does not support 24-bit addressing mode.
  2. Z Data Tools supports an exit written in any supported release of COBOL and PL/I.
  3. Z Data Tools returns general information about the data set, which can be interpreted by your exit routine. Some data in the exit control blocks, (for example, DSORG, RECFM), mimic data used in z/OS® system control blocks. Therefore, for convenience, in the COBOL copybook, HFMIOXCC, level-88 values are defined.
  4. Z Data Tools also processes HFS files as simulated QSAM files. For more information about Z Data Tools and HFS files, refer to section "Using UNIX System Services and the Hierarchical File System" in Z Data Tools User’s Guide and Reference. There are no major differences on the exit routine level. An exit routine will get an address to a path name rather than the data set name in this case, but the way a (simulated) record is processed remains the same.