Nesting COPYBOOKS in COBOL is a bit of a trick. In general
you may nest copybooks only if they do not
contain the REPLACING
phrase and do not cause recursion.
Suppose you had the following two copybooks:
COPYBOOK ABC
01 :A:-VAR-A1 PIC X.
01 :A:-VAR-A2 PIC X.
COPY XYZ REPLACING ==:A:== BY ==B==.
and
COBPYOOK XYZ
01 :A:-VAR-X1 PIC X.
01 :A:-VAR-X2 PIC X.
The nesting in COPYBOOK ABC is not allowed because it contains a REPLACING
phrase.
However, you can do the following. Drop RELACING
from COPYBOOK ABC so
it becomes:
COPYBOOK ABC
01 :A:-VAR-A1 PIC X.
01 :A:-VAR-A2 PIC X.
COPY XYZ.
Now include COPYBOOK ABC into your source program as follows:
REPLACE ==:A:== BY ==B==.
COPY ABC.
REPLACE OFF.
The REPLACE
directive causes all occurances of :A:
to
be replaced by B
until a REPLACE OFF
directive is encountered, and these
replacements occur after all COPY
directives have been actioned. The net
result of the above statements would be:
01 B-VAR-A1 PIC X. <== from ABC
01 B-VAR-A2 PIC X. <== from ABC
01 B-VAR-X1 PIC X. <== Nested copy of XYZ from ABC
01 B-VAR-X2 PIC X. <== Nested copy of XYZ from ABC
This is the only 'legal' way of performing replacements to nested copybooks
in COBOL that I am aware of.