Control cards can be read with one of the following options:
Option |
Description |
C |
Control statements. |
D |
Dependency INCLUDE statements. |
I |
INCLUDE statements. |
X |
Executable OBJ code (or LOAD/NCAL) data. |
These options control what is written to the output file MDHFLAT. The use of this output file is optional and you can pass the original input into the linker.
INCLUDES for non-dependency files are always copied to MDHFLAT as they are essential for link processing. For example:
INCLUDE OBJ(MODULE)
INCLUDE NCAL(MODULE)
INCLUDE LOAD(MODULE)
INCLUDES for dependency files are not generally needed by the linker once all the real INCLUDES that they contain have been flattened out. However, you can request them as follows:
-pd0: does not include dependency includes.
-pd1: (default) includes dependency includes.
For example:
INCLUDE DEP(MYDEPS)
INCLUDE OBJ(MYDEPS)
The nature of the include is decided by the data that the member contains. A member that has no executable code, but does have other INCLUDE statements, is considered to be a dependency file.
Other control cards may be encountered and you can optionally include them in the output:
-pc0: does not output control cards.
-pc1: (default) outputs control cards
Example:
NAME FOOBAR(R)
There are three methods that you can use to handle modules that mix executable (OBJ) records with control statements:
-px0: does not output the OBJ code, but continues scanning for embedded control cards (if the PDS is FB-80).
-px1: outputs the OBJ data directly into MDHFLAT. This produces ’instream’ OBJ records for the linker.
-px2: (default) when an x record is encountered, stops scanning for includes, and marks this as a non-dependency file.
You can optionally output the INCLUDE line before or after the data that the included file contains. If the control statements refer to particular modules, ordering is important, and -po1 (the default) is recommended. For example, some control statements refer to the CSECT that comes next in the data stream.
-po0: uses the recursive order (depth first). The body will be expanded first.
-po1: (default) uses the normal order. The INCLUDE line comes before the body.
Examples:
Content of the file MODA:
A-START
INCLUDE OBJ(MODB)
A-END
Content of the file MODB:
B-START
INCLUDE OBJ(MODC)
B-END
Content of the file MODC:
C-START
C-END
Content of MDHFLAT using -po0:
A-START
B-START
C-START
C-END
INCLUDE OBJ(MODC)
B-END
INCLUDE OBJ(MODB)
A-END
INCLUDE OBJ(MODA)
Content of MDHFLAT using -po1:
INCLUDE OBJ(MODA)
A-START
INCLUDE OBJ(MODB)
B-START
INCLUDE OBJ(MODC)
C-START
C-END
B-END
A-END