EXIT

Use the EXIT option to provide user-supplied modules in place of various compiler functions.

For compiler input, use the INEXIT and LIBEXIT suboptions to provide modules in place of SYSIN and SYSLIB (or copy library), respectively. For compiler output, use the PRTEXIT suboption to provide a module in place of SYSPRINT.

To provide a module that will be called for each SYSADATA record immediately after the record has been written out to the file, use the ADEXIT suboption.

To customize compiler messages (change their severity or suppress them, including converting FIPS (FLAGSTD) messages to diagnostic messages to which you assign a severity), use the MSGEXIT suboption. The module that you provide to customize the messages will be called each time the compiler issues a diagnostic message or a FIPS message.

EXIT option syntax

Read syntax diagramSkip visual syntax diagramNOEXITEXIT(INEXIT(str1,mod1)NOINEXITLIBEXIT(str2,mod2)NOLIBEXITPRTEXIT(str3,mod3)NOPRTEXITADEXIT(str4,mod4)NOADEXITMSGEXIT(str5,mod5)NOMSGEXIT)

Default is: NOEXIT

Abbreviations are: NOEX|EX(INX|NOINX, LIBX|NOLIBX, PRTX|NOPRTX, ADX|NOADX, MSGX|NOMSGX)

You can specify the suboptions in any order, and can separate them by either commas or spaces. If you specify both the positive and negative form of a suboption, the form specified last takes effect. If you specify the same suboption more than once, the last one specified takes effect.

If you specify the EXIT option without specifying at least one suboption, NOEXIT will be in effect.

You can specify the EXIT option only at invocation in the JCL PARM field (under TSO/E, in a command argument) or at installation time. Do not specify the EXIT option in a PROCESS (CBL) statement.

INEXIT(['str1',]mod1)
The compiler reads source code from a user-supplied program object (where mod1 is the module name) instead of SYSIN.
LIBEXIT(['str2',]mod2)
The compiler obtains copybooks from a user-supplied program object (where mod2 is the module name) instead of library-name or SYSLIB. For use with either COPY or BASIS statements.
PRTEXIT(['str3',]mod3)
The compiler passes printer-destined output to the user-supplied program object (where mod3 is the module name) instead of SYSPRINT.
ADEXIT(['str4',]mod4)
The compiler passes the SYSADATA output to the user-supplied program object (where mod4 is the module name).
MSGEXIT(['str5',]mod5)
The compiler passes the message number, and passes the default severity of a compiler diagnostic message, or the category (as a numeric code) of a FIPS compiler message, to the user-supplied program object (where mod5 is the module name).

The names mod1, mod2, mod3, mod4, and mod5 can refer to the same module.

The suboptions str1, str2, str3, str4, and str5 are character strings that are passed to the program object. These strings are optional. They can be up to 64 characters in length, and you must enclose them in a pair of apostrophes (' '). You can use any character in the strings, but any included apostrophes must be doubled ("). Lowercase characters are folded to uppercase.

If one of str1, str2, str3, str4, or str5 is specified, that string is passed to the appropriate user-exit module in the following format, where LL is a halfword (on a halfword boundary) that contains the length of the string.

LL string

Example: MSGEXIT user exit

Compiler exit modules that are specified on the EXIT option can be implemented either in an assembler language or in a high-level programming language such as COBOL. However, when exits are written in a Language Environment® conforming programming language or Language Environment conforming assembler language, the exit must be reentrant.

The Enterprise COBOL compiler automatically manages a preinitialized Language Environment at compile time, and calls compiler exits within this environment. Therefore, the following rules apply:
  • Compiler exits are run as subprograms instead of main programs.
  • Compiler exits must not include logic for explicitly initializing or terminating Language Environment. In particular, exits must not use the RTEREUS runtime option, the IGZERRE callable service, or the CEEPIPI callable service for environment management.
  • Compiler exits must not use the STOP RUN statement.