The specifications for input and output parameters are:
A variable of an arbitrary level from the LINKAGE section or PROCEDURE DIVISION USING is classified as an input parameter if one or more of its bits are used for reading before writing.
A system variable (field of DFHEIB/DFHEIBLK structures) is classified as an input parameter if the Create CICS Program option is turned off and the variable is used for writing before reading.
A variable of an arbitrary level from the LINKAGE section or PROCEDURE DIVISION USING is classified as an output parameter if it is modified during component execution.
A system variable (a field of DFHEIB/DFHEIBLK structures) is classified as an output parameter if the Create CICS Program option is turned off and the variable is modified during component execution.
If a PERFORM statement can be executed more than once (as in the case of a loop), then a flag variable (named BRE-INIT-COPY-FLAG-[<n>] of the type PIC 9 VALUE 0 is created in the WORKING-STORAGE section, and the parameter is copied into the corresponding variable only the first time this PERFORM statement is executed.
Variables of any level (rather than only 01-level structures together with all their fields) can act as parameters. This allows exclusion of unnecessary parameters, making the resulting programs more compact and clear.
For each operator for which a parameter list is generated, the following transformations are applied to the entire list: