Expand Includes Utility

2
ce18-18-0-11
2
The Expand Include utility program is functionally stable.
Broadcom Support
will answer questions and diagnose and correct defects, in accordance with the Broadcom Support Policies. However, we will not provide any additional modifications that alter the syntax logic to accommodate specific customer implementations.
The Expand Includes utility is a batch function that expands CA Panvalet ++INCLUDE or CA Librarian -INC statements and, optionally, COBOL COPY statements.
  • If you are a CA Panvalet user and have converted your source management functions to
    CA Endevor
    , use this utility to expand ++INCLUDE statements that are embedded in existing application source code.
  • If you are a CA Librarian user and have converted your source management functions to
    CA Endevor
    , use this utility to expand -INC statements that are embedded in existing application source code.
  • If you use COBOL and have COPY statements embedded in the application source code, use this utility to expand those statements.
The Expand Includes utility writes the expanded code to either a sequential data set or a partitioned data set member.
If you use CA Librarian to expand your COBOL COPY statements, you may use the Expand Includes utility to expand the COPY statements. The Expand Includes utility also supports the REPLACING/BY keyword. For more information, see Processing Methods for Replacing Phrases
If the SUPPRESS keyword is found, then processing of the COPY statement is bypassed, and the COPY statement is written to the destination file as-is.
The Expand Includes utility does not support the CA Librarian SEQ1,SEQ2 option on the -INC statement. The SEQ1,SEQ2 option provides a range of sequence numbers from the INCLUDE member to be included in the output file. The Expand Includes utility always includes the entire member.
The Expand Includes utility performs the following steps:
  1. The utility reads the source file.
  2. For each source record:
    1. The utility searches for ++INCLUDE, -INC, or COPY statements.
    2. If an ++INCLUDE, -INC, or COPY statement is found, the utility searches the ENXINCnn libraries for a member name.
    3. If a member name is found, the utility incorporates the source file into the output file.
    After reading all source records, the utility stops processing when the end of the file is reached.
Example: Using the Expand Includes Utility
The following scenario is typical of why you use the Expand Includes utility:
You have a COBOL program with source that contains CA Panvalet ++INCLUDE statements or CA Librarian -INC statements. You want to use the source as is, and you do not want to go into the source file to change the ++INCLUDE or -INC statements to COPY statements.
In this situation, you would place the utility in the COBOL compile procedure, before the compile step, to expand references to the CA Panvalet or CA Librarian members in the source code.
COPY Statement Examples
While expanding a COPY member, the Expand Includes utility replaces complete strings as requested in the COPY statement. For example, see the following statement:
COPY DEF REPLACING DOG-HAS-FLEAS BY CAT-WITH-HAT.
If the original text contains:
88 DOG-HAS-FLEAS VALUE 'Y'.
the output would contain:
88 CAT-WITH-HAT VALUE 'Y'.
In order for the Expand Includes utility to replace a portion of a string, the replacing string in the COPY statement must contain, at minimum, the first word of the string followed by a hyphen (-) as a delimiter. Suppose you wanted to replace the original text above with this string:
COPY DEF REPLACING DOG- BY CAT-
If the original text contains:
88 DOG-HAS-FLEAS VALUE 'Y'.
the output would contain:
88 CAT-HAS-FLEAS VALUE 'Y'.
Similarly, suppose you want to replace the original text with this string:
COPY DEF REPLACING DOG-HAS- BY CAT-WITH-
If the original text contains:
88 DOG-HAS-FLEAS VALUE 'Y'.
the output would contain:
88 CAT-WITH-FLEAS VALUE 'Y'.
If the replacing clause contains quotes around strings, the search will be for the presence of quotes around a string. For example:
01 HEADER-RECORD3 COPY PAPHDR3 REPLACING '02' by '03'
If the input contains:
02 LITERAL-A PIC X(5) VALUE 'GREEN'. 02 LITERAL-B PIC X(5) VALUE '02'.
The output would contain:
02 LITERAL-A PIC X(5) VALUE 'GREEN'. 02 LITERAL-B PIC X(5) VALUE '03'.
If the COPY statement contains a level number and group name, the following rules are observed:
Rule 1--
If the format of the COPY statement line is:
0x DATA-NAME-1 COPY ABC ...
AND the format of the first non-comment line in the copied member is:
0x DATA-NAME-2 ...
THEN the DATA-NAME-2 would be replaced with DATA-NAME-1 in the output:
0x DATA-NAME-1 ...
Rule 2--
If the format of the COPY statement line is:
0x DATA-NAME-1 COPY ABC ...
AND the format of the first non-comment line in the copied member is:
0y DATA-NAME-2 ... (0x is different from 0y)
THEN a new line will be written to the output containing just DATA-NAME-1, followed by the line from the copy member:
0x DATA-NAME-1. 0y DATA-NAME-2 ...
Rule 3--
If the COPY statement contains a procedure label, AND the format of the COPY statement is:
PROCEDURE-LABEL. COPY MNO.
THEN a line will first be written to the output containing just procedure label:
PROCEDURE-LABEL.
Expand Includes Utility Processing Modes
The Expand Includes utility executes in one of two modes:
  • Default Location mode, which is the default processing mode. In this mode, the source data set, or input file, is identified by the ENXIN DD statement and the destination data set, or output file, is identified by the ENXOUT DD statement.
  • Control Statement mode. In this mode, the utility is controlled by a set of EXPAND INCLUDES requests that are specified in the ENXSCLIN DD statement.
The utility determines the processing mode by the presence of the ENXSCLIN DD statement in the JCL. If the ENXSCLIN DD statement is allocated in the JCL, the utility executes using Control Statement mode. Otherwise, the utility executes in Default Location mode.
Expand Includes Utility Input and Output Data Sets
The attributes of the source and destination data sets used in the Expand Includes utility are as follows:
  • The data sets can be either sequential or partitioned.
  • The record format can be either fixed or variable.
  • The record length of the destination data set should be at least as large as the record length of the source data set and at least as large as the largest record length of the INCLUDE data sets. If either of these conditions is not met, a caution message is issued and the output records may be truncated.
The ENXIN and ENXOUT DD data sets can be only sequential, partitioned, or CONWRITE resultant members within processors. You cannot use CA Librarian or CA Panvalet data sets as input to the Expand Includes utility.
Processing Methods for Replacing Phrases
The Expand and Replace utility can use the following methods to process the REPLACING phrases on LIBRARIAN -INC or COBOL COPY statements:
  • Librarian CCOPY -- Using this method, the expansion is processed as follows:
    • Each operand of the Replacing phrase is considered a word.
    • When scanning for a match, the matching string must be separated from other strings with spaces.
    • When strings are enclosed in quotes, the quotes are are included in the scan.
  • VSCOBOL COPY -- Using this method, the expansion is processed as follows:
    • Each operand of the replacing phrase is considered a string.
    • When scanning for a match, any matching string is processed.
    • When strings are enclosed in quotes, the quotes are removed before scanning.
  • COBOL II COPY -- Using this method, the expansion is processed as follows:
    • The expansion is processed the same as the COBOL II compiler processes COBOL II COPY replacing syntax.
Select Processing Method for Replacing Phrases
You can specify which processing method the Expand and Replace utility is to use to process the REPLACING phrases on LIBRARIAN -INC or COBOL COPY statements. Select one of the following expansion methods for the REPLACING phrases:
  • Librarian CCOPY
    This is the default, but it is also selected by including a EN$CCOPY DD statement in the execution JCL.
  • VSCOBOL COPY
    To select this method, include a EN$COBOL DD statement in the execution JCL.
  • COBOL II COPY
    To select this method, enable the option COPY_COBOL2_REPLACE on in the ENCOPTBL options table.
Expand Includes Utility Operating Considerations
Consider the following when using the Expand Includes utility:
  • Checking the
    CA Endevor
    Defaults Table - During initialization, the Expand Includes utility checks the
    CA Endevor
    Defaults Table to determine whether CA Librarian or CA Panvalet support is active. The LIBENV= parameter indicates whether support is active and, if so, for which application. If neither CA Librarian nor CA Panvalet is active, the utility issues an error message and terminates immediately.
  • Embedding and Looping INCLUDE Statements - The Expand Includes utility expands embedded INCLUDE statements. An embedded INCLUDE statement occurs when a member expanded by an ++INCLUDE, -INC, or COPY statement contains another ++INCLUDE, -INC, or COPY statement.
    The utility also detects looping INCLUDE statements. A looping INCLUDE statement occurs when one member includes another member which, in turn, includes the first member. In this situation, the utility issues an error message and immediately stops processing.
  • Superset Support - The Expand Includes utility provides support for CA Panvalet Supersets as follows:
    1. If the INCLUDE Library is a CA Panvalet data set, the utility provides full superset support.
    2. If the INCLUDE library is a partitioned data set, the utility provides limited support. The utility ignores the superset name and expands only the member name. For example, assume the source program contains the following statement:
    ++INCLUDE superset.member1
    The Expand Includes utility expands the statement only by looking for member1 in the INCLUDE libraries.
  • Security - The Expand Includes utility does not perform any security checking. The utility relies on your site's system (RACF, CA Top Secret, CA ACF2) to enforce data set access.
  • Monitoring Components in the Expand Includes Utility - When using the Expand Includes utility in a processor, both CA Librarian and CA Panvalet components have the ability to collect component data for expand include utility or CONWRITE. Component monitoring is also available using CONWRITE with PARM='EXPINCL(y)'.
How the Expand Includes Utility Identifies the INCLUDE Member
As the Expand Includes utility reads each record, it looks for the appropriate INCLUDE indicator. The INCLUDE indicator is the character string that indicates that a member should be included in the output file.
  • For CA Panvalet, the indicator is ++INCLUDE.
  • For CA Librarian, the indicator is -INC.
The utility checks the LIBENV= parameter in the
CA Endevor
Defaults Table to determine which indicator to look for.
The Expand Includes utility also looks for COBOL COPY statements, if the EXPANDCOPY parameter was specified in the JCL PARM= statement or if the OPTIONS EXPAND COPY STATEMENTS clause was specified in the EXPAND INCLUDES request.
INCLUDE Statement Source File Format
The format of the source file for INCLUDE statements follows the standard format for CA Panvalet and CA Librarian files. The member name is on the same line as the ++INCLUDE statement or the -INC statement.
The format for COBOL COPY statements is similar. The member name must be on the same line as the word COPY.
How the Expand Includes Utility Works with CA Panvalet Files
If the Expand Includes utility is working with CA Panvalet, the utility searches for the ++INCLUDE statement in column 8. The entire ++INCLUDE statement must be specified on one line.
If the member name specified on the ++INCLUDE or COPY statement is invalid or cannot be found in any of the INCLUDE libraries, the utility writes the invalid record to the destination file. The utility then issues a caution message and continues to process the source file.
How the Expand Includes Utility Works with CA Librarian Files
If the Expand Includes utility is working with CA Librarian, the utility searches for the -INC statement in column 1. The entire -INC statement must be specified on one line.
If the member name specified on the -INC or COPY statement is invalid or cannot be found in any of the INCLUDE libraries, the utility issues an error message and terminates processing.
Remember that the Expand Includes utility does not support the CA Librarian SEQ1,SEQ2 option on the -INC statement. The utility always includes the entire member.
How the Expand Includes Utility Works with COBOL COPY Statements
If the Expand Includes utility is to expand COBOL COPY statements, the COPY statement must be located in columns 8 through 72, inclusive. Commented COPY statements will not be expanded.
If the member name specified for the COPY statement is invalid or cannot be found in the INCLUDE libraries, the Expand Includes utility ignores the error. The COPY statement is written as is to the destination file. The error will most likely be detected by the compiler program.
For examples of rules and formats, see COPY Statement Examples.
How the Expand Includes Utility Specifies INCLUDE Libraries
The Expand Includes utility resolves ++INCLUDE, -INC, and, optionally, COPY statements by searching for the specified member in a set of libraries. These libraries, referred to as INCLUDE libraries, can be partitioned, CA Panvalet, or CA Librarian data sets.
The libraries are identified by the following JCL statement:
ENXINCnn DD
nn
can be a two digit number between 00-99 inclusive, or two alphabetic characters in the following series:
  • AA-AZ
  • BA-BZ
  • CA-CZ
  • DA-DZ
To resolve ++INCLUDE, -INC, or COPY statements, the utility searches up to 204 INCLUDE libraries.100 in numerical sequence followed by 104 in alphabetical sequence.
In the ENXINCnn DD statement, the execution JCL must include at least one valid ENXINCnn DD statement. In addition, the ENXINCnn DD statement cannot specify a concatenated data set. Finally, the ENXINCnn DD statements can contain a combination of partitioned and CA Panvalet or CA Librarian data sets.
How the INCLUDE Library is Searched
The INCLUDE libraries are searched in numeric sequence first and then the AA-DZ alphabetical sequence, no matter in which order they are specified in the JCL. That is, the library named in statement ENXINC00 is always searched before the library named in statement ENXINC01, even if the ENXINC01 statement appears first in the JCL.
You do not need to begin the sequence numbers with 00 nor must you have a complete sequence. For example, you can specify the following DD statements ENXINC04, ENXINC01, ENXINCBC in the JCL. The Expand Includes utility searches the library named in statement ENXINC01 first, then the library named in ENXINC04, then the library named in ENXINCBC.
Partitioned Data Sets
Use the following guidelines when an INCLUDE library is a partitioned data set:
  • The data set members must be uncompressed and unencrypted.
  • The member name specified on the ++INCLUDE and -INC statements can be no longer than eight characters. If the INCLUDE member name is greater than eight characters, the Expand Includes utility truncates the name and issues a warning.
Default Location Processing Mode
The Expand Includes utility executes in Default Location mode when the ENXSCLIN DD statement has not been allocated in the JCL. The input and output files are identified by fixed DD names as follows:
  • ENXIN DD specifies the source data set.
  • ENXOUT DD specifies the destination data set.
Both DD statements can refer to a sequential data set, a partitioned data set, or a partitioned data set with an explicit member name.
Default Location mode is the default processing mode.
Example: Default Location Processing Mode JCL
The JCL that executes the Expand Includes utility in Default Location mode can be found in member ENBXDLM1, in the JCL library iprfx.iqual.CSIQJCL.
You must specify a member name if you are using a partitioned data set--and that member name must be explicit (that is, no wildcard). If the input file is a partitioned data set but an explicit member has not been provided in the ENXIN DD statement, the utility checks the PARM= statement for a member name.
If the execution JCL contains a PARM= statement that specifies a member name and a member name is also included in the ENXIN DD statement, the utility ignores the member specified on the PARM= statement.
If a member name is not specified anywhere, you receive an error message.
ENXIN and ENXOUT DD Statements
The Expand Includes utility uses the following rules when processing the ENXIN and ENXOUT DD statements:
If
Then
ENXIN DD is a sequential data set
ENXOUT DD must be sequential or partitioned data set with an explicit member name.
ENXIN DD is a sequential data set and ENXOUT DD is a partitioned data set without an explicit member name
You receive an error message.
ENXIN DD is a partitioned data set and the member is identified in the PARM= statement or in the ENXIN DD statement
ENXOUT DD can be either a sequential or partitioned data set.
ENXOUT DD is a partitioned data set and an explicit member name is not provided on that DD statement
The utility creates a member with the same name as the input member. The utility always replaces the destination member.
ENXIN DD is a partitioned data set with no member specified, and no member is named in the PARM= statement
You receive an error message.
ENXIN DD is a partitioned data set with an explicit member name and the PARM= statement contains a member name
The PARM= member name is ignored.
Control Statement Mode
Control Statement mode is activated only if the ENXSCLIN DD statement is allocated in the execution JCL. The Expand Includes SCL statement identifies the source and destination files that will be processed.
For more information about the Expand Includes SCL, see Expand Includes SCL.
The JCL that executes the Expand Includes utility in Control Statement mode can be found in member ENBXCSM1, in the JCL library iprfx.iqual.CSIQJCL.
How the Control Statement Mode Processes Members
Control statement mode allows you to process multiple members, or files, in a single execution. You can do this in one of three ways:
  • Specify multiple EXPAND INCLUDES actions in the ENXSCLIN DD statement.
  • Specify a wildcarded member name in the FROM DSNAME MEMBER clause in the EXPAND INCLUDES action.
  • Use a combination of the previous two methods.
If the execution JCL contains a PARM= statement that specifies a member name, in addition to the control statements in the ENXSCLIN DD statement, the utility ignores the member specified on the PARM= statement and issues a warning message.
How Expand Includes Input SCL is Validated
CA Endevor
validates the input SCL (EXPAND INCLUDES actions). If no errors are detected, all statements are processed and the Expand Includes Execution Report and Expand Includes Summary Report are produced.
If errors are found in the SCL,
CA Endevor
continues parsing the statements, but does not process them. Results of the validation process are presented on the Expand Includes Control Statement Summary Report.
JCL Parameter
The JCL PARM= statement is used for two purposes:
  • To identify the member to be processed by the Expand Includes utility
  • To tell the Expand Includes utility to expand COBOL COPY statements
You are required to code this parameter.
PARM= Parameter
The PARM= parameter appears as follows in the JCL:
PARM='ENBX1000member'
If you want to expand COBOL COPY statements, type the parameter as follows:
PARM='ENBX1000member,EXPANDCOPY'
The EXPANDCOPY portion of the parameter tells the Expand Includes utility to expand any COBOL COPY statements found in the specified member.
Specifying a member in the PARM= parameter is optional. In the previous example, the member to be processed is included. If you want to expand COPY statements but do not want to specify a member, type the parameter shown as follows:
PARM='ENBX1000,EXPANDCOPY'
Note that you must type the leading comma in the parameter even if you do not specify a member name.
Member Name
The variable member in the PARM= parameter specifies the name of the member to be processed. The member name can be no longer than eight characters in length and must be explicit--you cannot wildcard this value. Use only the following characters in the member name:
A-Z, 0-9, $, @, #
If the PARM= parameter is coded and the ENXSCLIN DD statement is present in the JCL, the member name in the PARM= parameter is ignored.
If you are working with a partitioned data set in Default Location mode, you can specify a member name in one of two places: the PARM= parameter or the ENXIN DD statement. If you do not enter a member name in the PARM= statement, you must specify the name in the ENXIN DD statement. If you do not specify a member name in either place, you receive an error message. If you are working with a sequential data set in Default Location mode, you do not need to enter a member name.
Expand Includes SCL
This section explains the EXPAND INCLUDES statement that is used to process a member from a partitioned data set.
You can enter as many EXPAND INCLUDES statements as necessary. These statements are specified in the ENXSCLIN DD statement.
The Expand Includes utility parses and validates all requests before it begins executing them. If there is a syntax error in any request or an error is found validating a request, none of the statements are executed. The utility attempts to parse all of the control statements before terminating, however.
When the requests have been successfully parsed, the utility executes them. Requests are executed as long as the highest return code is less than or equal to 12.
If a member name is specified on the PARM= parameter and you have allocated the ENXSCLIN DD statement, the Expand Includes utility ignores the member name in the PARM= statement.
Expand Includes Syntax
The Expand Includes syntax is shown as follows:
????EXPand INClude??FROm????DDName??
ddname
???????????????????????????????????????????????????????? ??DSName??
dsname
???????????????????? ??MEMber??
name
?? ???TO????DDName??
ddname
??????????????????????????????????????????????????????????????????????????? ??DSName??
dsname
???????????????????? ??MEMber??
name
?? ??????????????????????????????????????????????????????.??????????????????????????????????????????? ??OPTions??¤????????????????????
?
??
?
??
?
??
??
???¤?? ??EXPand COPy????
?
??
?
??
?
??
?
??? ? ??STAtement?? ? ??REPlace MEMber??????????????
Each clause in the syntax is described in the following sections.
For more information about syntax conventions, see SCL Reference.
EXPAND INCLUDES Clause
The EXPAND INCLUDES clause is the first clause in the statement. The following describes this clause:
  • EXPAND INCLUDES
    The name of the action. You must code this clause.
FROM Clause
The FROM clause identifies the input, or source, data set. This clause is required. Specify either a DDNAME or a DSNAME, but not both. The following table explains the FROM clause:
  • FROM DDNAME ddname
    Identifies the source data set by DD name. Specify the name of a preallocated DD statement.
  • FROM DSNAME dsname
    Identifies the source data set by data set name. Specify the name of an existing data set, using standard
    CA Endevor
    naming conventions. If the data set name contains embedded periods, enclose the name in quotation marks.
    The data set referred to must be either sequential or partitioned. The data set record format can be either fixed or variable.
  • MEMBER name
    Identifies the member(s) to be processed from a partitioned data set. This clause is required.
    The member name must meet the following specifications:
    • The member name can be no longer than eight characters. You can use a wildcard.
    • The MEMBER clause applies only if the input data set specified in the FROM DSNAME clause is a partitioned data set. If the data set specified is sequential, the MEMBER clause is ignored and a warning message issued.
    • If the member name is fully specified, the member must exist in the input data set. If the member name is wildcarded, at least one member matching the wildcard criteria must exist in the input data set. If the explicit member does not exist, or no matches can be found, you will receive an error message.
TO Clause
The TO clause identifies the output, or destination, data set. This clause is required. Specify either a DDNAME or a DSNAME, but not both. The following table explains the TO clause:
  • TO DDNAME ddname
    Identifies the destination data set by DD name. Specify the name of a preallocated DD statement.
  • TO DSNAME dsname
    Identifies the destination data set by data set name. Specify the name of an existing data set, using standard
    CA Endevor
    naming conventions. If the data set name contains embedded periods, enclose the name in quotation marks.
    The data set referred to must be either sequential or partitioned. The data set record format can be either fixed or variable. The record length must be at least as long as the record length of the input data set and at least as large as the INCLUDE libraries associated with the ENXINCnn DD statements. If the data set record length is not large enough for either condition, the Expand Includes utility truncates the output records and issues a caution message.
  • MEMBER name
    Identifies the name of the output member. This clause is optional.
    The member name must meet the following specifications:
    • The member name can be no longer than eight characters and cannot be wildcarded.
    • The MEMBER clause applies only if the output data set specified in the TO DSNAME clause is a partitioned data set and if the input data set is either a sequential data set or a partitioned data set with an explicit member name (that is, not wildcarded). If the input data set is a partitioned data set and the MEMBER clause contains a wildcarded member name, you will receive an error message.
    • If the FROM DSNAME MEMBER clause contains a wildcarded member name or if the FROM DSNAME is a partitioned data set and the FROM MEMBER clause is not specified, the TO MEMBER clause cannot be specified. You cannot rename multiple output members. In this situation, you will receive an error message.
OPTIONS Clauses
The Expand Includes syntax contains two optional clauses:
  • EXPAND COPY [STATEMENTS]
    Tells the Expand Includes utility to expand COBOL COPY statements. This clause is an alternative to coding the EXPANDCOPY parameter in the JCL.
    If you do not code this clause but do include the EXPANDCOPY parameter on the JCL PARM= statement, the utility will expand the COBOL COPY statements.
  • REPLACE MEMBER
    Tells the Expand Includes utility to replace an existing member in the output data set. This clause applies only to partitioned data sets. If the destination data set is a sequential data set, this clause is ignored.
    If this clause is not specified and the member being created currently exists in the output data set, the EXPAND INCLUDES action fails for that member. Processing continues for other members associated with the request.
Expand Includes Utility Reports
The Expand Includes utility generates three reports as part of its normal processing:
  • Control Statement Summary
    Shows the control statements that were provided in the ENXSCLIN DD statement and identifies any parser or statement validation errors.
  • Execution Report
    Contains information about the execution of each request.
    • If the utility is executing in Default Location mode, the report contains information about the single request.
    • If the utility is executing in Control Statement mode, the utility generates detailed information about each EXPAND INCLUDES request.
  • Expand Includes Summary Report
    Summarizes each request processed. The summary indicates the member name, the return code, the number of INCLUDE members, and the number of lines expanded.
These reports are written to the ENXMSGS1 DD statement. If the execution JCL includes an ENXMSGS2 DD statement, the utility writes the Expand Includes Summary Report to that file.
Expand Includes Control Statement Summary Report
The Expand Includes Control Statement Summary shows the control statements provided in the ENXSCLIN DD statement, and whether there are any parser or validation errors. This report is generated only if the program is executing in Control Statement mode.
Expand Includes Execution Report
The Expand Includes Execution Report contains execution information for each request.
Expand Includes Summary Report
The Expand Includes Summary Report provides the following information for each request (in either mode):
  • Statement Number
    The statement number associated with the EXPAND INCLUDES action. If the utility is running in Default Location mode, the statement number is always 1.
  • Data Set Name
    The name of the input data set.
  • Member Name
    The name of the input member. This field is blank if the input file is a sequential data set.
  • Return Code
    The return code associated with the EXPAND INCLUDES request for the data set or member.
  • Number of Include Members
    The number of ++INCLUDE, -INC, or COPY members that were expanded.
  • Number of Lines Expanded
    The number of lines added to the output file from the expanded ++INCLUDE, -INC, or COPY members.