Supported exit programming languages

User exits can be written in REXX or in any language that permits a standard OS parameter list (R1 pointing to an array of full words) to be received on entry to the load module:
REXX user exits
REXX user exits must be available via the HFZEXEC DDname. Data sets for this DDname can be provided in the DataSets option (see DataSets), or be specified through JCL DD statements in your job.

Modifiable parameter list values are always truncated to their defined field width on return from a user exit. Values that are shorter are delimited by adding a null character (X'00').

SYSPRINT type output from REXX EXECs, such as REXX messages and output from SAY or TRACE instructions, is suppressed by Z Abend Investigator unless diagnostic tracing (see Diagnostic tracing for details) is active. If you require messages to be written by REXX EXECs regardless of whether diagnostic tracing is active, use the HFZWTO command instead (see HFZWTO command for details).

While developing new REXX exits, it is recommended to use HFZTRACE in order to discover any problems that would otherwise not be externally visible.

Since a TSO/E REXX environment is not available to REXX user exits, the use of "Address TSO" commands is not supported. For information about what is supported, see z/OS® TSO/E REXX Reference, chapter "Using REXX in different address spaces", section "Writing execs that run in Non-TSO/E address spaces".

Load module exits
Load module exits must be available via the standard MVS™ search path and cannot contain an LE main routine (C main() function or PL/I PROC OPTIONS(MAIN)) as they are executed under an existing LE enclave by the HFZDA subtask.
To assist with the writing of load module exits, Z Abend Investigator provides the following parameter list data area mapping members in the samples data set:
Note: Due to COBOL language restrictions, all underscores ('_') in parameter list field names have been substituted by dashes ('-').

Load module exits can be either reentrant or non-reentrant and should be link-edited RMODE(ANY). They are invoked in AMODE(31).