Writing your exit

File Manager 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 FMN0POPT. 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 File Manager, either by a STEPLIB DD statement, or in LINKLIST, or LPALIST. If File Manager 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 FMN.SFMNSAM1. They are:
FMNIOXEA
Sample HLASM exit
FMNIOXEC
Sample COBOL exit
FMNIOXEP
Sample PL/I exit
FMNIOXHF
Sample HLASM exit using HFS
Copybooks providing the I/O exit control blocks for COBOL, PL/I, and HLASM are distributed in the File Manager macro library, FMN.SFMNMAC1. They are:
FMNIOXCB
Control block for HLASM programs
FMNIOXCC
Control block for COBOL programs
FMNIOXCP
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 File Manager I/O exit does not support 24-bit addressing mode.
  2. File Manager supports an exit written in any supported release of COBOL and PL/I.
  3. File Manager 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, FMNIOXCC, level-88 values are defined.
  4. File Manager also processes HFS files as simulated QSAM files. For more information about File Manager and HFS files, refer to section Using UNIX System Services and the Hierarchical File System in the File Manager for z/OS 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.