The COPY statement copies text or a resource (static data such as a bitmap) into the source program from the specified file
               immediately prior to compilation. The text or resource is 
               		inserted for compilation only and does not permanently replace the COPY statement in the program source. Resources and COPY files
               that are inserted in this way into the object code are loaded from the object file at runtime. If you change the resource
               (such as a bitmap) or the COPY file, you must recompile for the change to be reflected in the object code. 
               	 
            
 
            	 
             The REPLACING phrase allows word and substring substitutions to be made in the inserted text prior to compilation. 
               	 
            
 
            	 
            Note:  This manual entry includes code examples and highlights for first-time users following the General Rules section. 
               	 
            
 
            	 
            
               General Format
 
               		 
               		
                
                  		  Format 1 
                  		
               
 
               		COPY INDEXED library-name [ {IN} path-name ] [ SUPPRESS ]
                            {OF}
[ REPLACING { { old-text BY new-text              } } ... ] .
            { { {LEADING } literal-1 BY {literal-2} } }
            { { {TRAILING}              {SPACE    } } }
            { {                         {SPACES   } } } 
               		 
                  		  Format 2 
                  		
               
 
               		COPY RESOURCE resource-name [ {IN} path-name ] .
                              {COPY RESOURCE resource-name [ {IN} path-name ] .
{OF}} 
               	   
            	 
            
               Syntax Rules
 
               		 
               		
                
                  		  
                  - The COPY statement must be terminated by a period. The period is part of the COPY statement and does not otherwise affect
                     the program. 
                     		  
                  
- library-name must be a nonnumeric literal or user-defined word. 
                     			 path-name must be a nonnumeric literal or a user-defined word. Note that a nonnumeric literal may reference an environment variable
                     by placing a 
                     			 $ in the name, as described in General Rule 2. To preserve the case of 
                     			 library-name and 
                     			 path-name, you must place them within quotation marks, otherwise they will be treated as uppercase by case sensitive operating systems.
                     See COPY Libraries for more information. 
                     		  
                  
- The COPY statement may be used anywhere a separator may occur. It may be placed in Area A or Area B. 
                     		  
                  
- old-text and 
                     			 new-text may be any of the following: 
                     			 
                      
                        				
                        - A series of text words placed between 
                           				  == delimiters. For example 
                           				  ==WORD-1 WORD-2== specifies a two-word sequence. In old-text, at least one word must be specified. In new-text, zero words may be used. 
                           				
                        
- A numeric or nonnumeric literal. 
                           				
                        
-  
                           				  
                           A data name, including qualifiers, subscripts, and reference 
                              				  
                            modification. 
                              				  
                            
- Any single text word. 
                           				
                        
 
- For purposes of the COPY statement, a 
                     			 text word is a contiguous sequence of characters in Area A or Area B that form one of the following: 
                     			 
                      
                        				
                        - A separator, except for: space, a pseudo-text delimiter (“==”), and the opening and closing delimiters for nonnumeric literals.
                           
                           				
                        
- A numeric or nonnumeric literal. 
                           				
                        
- Any of a sequence of characters except comment lines and the word 
                           				  COPY, bounded by separators, which is neither a separator nor a literal. 
                           				
                        
 
- literal-1 and 
                     			 literal-2 are nonnumeric literals. 
                     		  
                  
- The phrases SPACE and SPACES are equivalent. When one of these is used instead of 
                     			 literal-2, 
                     			 literal-1 is deleted and no spaces are actually substituted. 
                     		  
                  
- The format of the COPY file must conform to one of the allowed ACUCOBOL-GT source formats (either terminal or ANSI). This
                     format need not be the same as that used in the rest of the program.
                     		  
                  
- resource-name must be an alphanumeric literal or a user-defined word. A resource name with a hyphen is equivalent to the same name with
                     an underscore in place of the hyphen. For example, 
                     			 MY-FILE is treated as being identical to 
                     			 MY_FILE. To preserve the case of 
                     			 resource-name, you must place it within quotation marks; otherwise, it will be treated as uppercase by case-sensitive operating systems.
                     
                     		  
                  
- COPY statements may be nested in other COPY libraries. Any one of the COPY statements in this structure can include the REPLACING
                     phrase. 
                     			 
                     Depending on the scope of each statement, the REPLACING phrases might affect subsidiary COPY statements. For example, if 
                        				program-a.cbl contains a copy/replace as follows: 
                        			 
                      COPY "program-b.cpy"
   REPLACING ==genericitems== BY ==myitems==. and 
                     			 program-b.cpy contains a nested copy/replace statement:COPY "program-c.cpy"
   REPLACING ==variabledata== BY == specificdata==. The replace performed in 
                        				program-b.cpy by the copy/replace statement in 
                        				program-a.cbl will affect 
                        				program-c.cpy. If you do not want the copy/replace statement in 
                        				program-a.cbl to cascade to 
                        				program-c.cpy, you must add the following statement to 
                        				program-b.cpy, so that the copy/replace performed in 
                        				program-b.cpy will not be performed in 
                        				program-c.cpy. 
                        			 
                      COPY "program-c.cpy"
   REPLACING ==genericitems== BY ==genericitems==. 
  
            	 
            
               General Rules
 
               		 
               		
                
                  		  
                  - library-name and 
                     			 path-name identify a source file to be included at the location of the COPY statement. The text of the source file logically replaces
                     the COPY statement, including the terminating period. The rules for interpreting these names are described in COPY Libraries. The 
                     			 -Ce compile option can be used to specify an alternate default filename extension. See 
                     			 Compatibility Options for more information. 
                     		  
                  
- You may use operating system environment variables in the OF phrase of a COPY statement. To reference an environment variable,
                     place a 
                     			 $ in front of it. For example, if you assign 
                     			 MYLIB to 
                     			 C:\MYFILES\MYLIB, then the statement: 
                     			 COPY "FILE1" OF "$MYLIB"  would use the file 
                        				C:\MYFILES\MYLIB\FILE1. 
                        			 
                      You may use multiple environment variables by preceding each one with a $ symbol. Symbol names may contain alphanumeric characters,
                        hyphens, underscores, and dollar signs. If the symbol name is not found in the environment, it is left unchanged (including
                        the initial $ symbol). Symbols are not processed recursively — if the value of a symbol contains a $, the dollars sign is
                        used literally in the final file name. 
                        			 
                      
- When INDEXED appears after the word COPY, it is ignored by the compiler. It may be included to provide compatibility with
                     some older COBOL dialects. 
                     		  
                  
- If the word SUPPRESS appears after 
                     			 library-name and 
                     			 path-name, the program listing file will not include the contents of the COPY file or any other COPY files that may be nested within.
                     This word provides compatibility with one feature of IBM DOS/VS COBOL. It is not a reserved word in ACUCOBOL-GT and may be
                     used in other contexts as a user-defined name. 
                     		  
                  
- The text of the COPY file is copied unchanged into the source program unless the REPLACING option is used. If the REPLACING
                     option is used, elements of the COPY file that match 
                     			 old-text or 
                     			 literal-1 are replaced by 
                     			 new-text or 
                     			 literal-2. The comparison operation that determines text replacement is done as follows: 
                     			 
                      
                        				
                        - The leftmost library text word that is not a separator comma or semicolon is the first text word used for comparison. Starting
                           with this word, and the first 
                           				  old-text specified, the entire 
                           				  old-text sequence is compared with an equivalent number of contiguous library text words. 
                           				
                        
- old-text matches the library text only if the ordered sequence of text words of 
                           				  old-text is identical to the ordered sequence of library text words. For purposes of matching, a separator semicolon, comma, or space
                           is considered a space, and a sequence of one or more spaces is considered a single space. Also, lower-case characters are
                           considered the same as upper-case characters in all text words except for nonnumeric literals. 
                           				
                        
- If no match occurs, the comparison is repeated for each 
                           				  old-text specified until a match is found or each 
                           				  old-text has been tried. 
                           				
                        
- After all 
                           				  old-text comparisons have been tried and no match has occurred, the leftmost library text word is copied into the source program.
                           The next text word is then considered as the leftmost word and the cycle is repeated. 
                           				
                        
- Whenever a match occurs between the library text and 
                           				  old-text, the corresponding 
                           				  new-text is placed in the source program. The library text word that follows the rightmost word that participated in the match then
                           becomes the new leftmost word for subsequent cycles. 
                           				
                        
- When you are using the LEADING/TRAILING option, the replacement process differs slightly. When a match occurs between library
                           text and 
                           				  literal-1, the only characters replaced by 
                           				  literal-2 are the specific LEADING or TRAILING characters indicated in the COPY statement. These characters can be a substring or a
                           whole word. If a SPACE or SPACES phrase is used, the LEADING or TRAILING characters are deleted. For example, if you have
                           the following COPY library named 
                           				  MYCOPY.CPY: 
                           				      01 dummy-rec.
        03 dummy-number-null    PIC X(10) and you used this COPY statement: 
                              				  
                            COPY "MY-COPY.CPY" REPLACING 
        LEADING "dummy" by "employee"
        TRAILING "null" by SPACES. Then the replacement will result in: 
                              				  
                            01 employee-rec.
        03 employee-number    PIC X(10)
- The comparison cycle continues until the rightmost text word in the library has either participated in a match or has been
                           the leftmost word of a comparison cycle. 
                           				
                        
 
- Comment lines and blank lines occurring in the library or in 
                     			 old-text are ignored for purposes of matching. Comment lines and blank lines occurring in library text that is matched by a REPLACING
                     operand are not copied into the source program. 
                     		  
                  
- Debugging lines may appear within the library text and in 
                     			 old-text. Text words appearing in a debugging line participate in the matching rules as if the line were a normal text line. 
                     		  
                  
- When 
                     			 new-text is copied into the source program, the first word of 
                     			 new-text is copied into the same Area as the leftmost word of the replaced text. Subsequent words of 
                     			 new-text are copied into Area B. 
                     		  
                  
- It is possible to use the REPLACING phrase to replace substrings. This allows you to construct COPY libraries in which several
                     strings have a uniform substring that you plan to modify. 
                     			 
                     For example, the substring 
                        				individual might occur in the COPY library in 
                        				individual-name, 
                        				individual-address, 
                        				individual-state, 
                        				individual-city, 
                        				individual-zip, and 
                        				individual-title. The REPLACING phrase could be used to replace 
                        				individual with specific substrings such as employee, owner, student, teacher, professor, or advisor. 
                        			 
                      To make use of this, delimit the substring that will be replaced in the COPY library with quotes. Then use the standard COPY
                        syntax to replace the quoted substring by another substring. The resulting sequence of characters is re-evaluated by the compiler
                        to make a new string. 
                        			 
                      For example, suppose you have a COPY library (called 
                        				MYLIB) that contains the following: 
                        			 
                      77  MY-'DUMMY'-DATA-ITEM  PIC X(10).
 and you used this COPY statement: 
                        			 
                      COPY "MYLIB" REPLACING =='DUMMY'== BY ==REAL==.
 The text of 
                        				MYLIB is effectively treated as: 
                        			 
                      77  MY-REAL-DATA-ITEM  PIC X(10). You should use hyphens rather than underscores in this instance. In addition to the use of single and double quotes to delimit
                     the substring, the following delimiters are also allowed:==(XYZ)==
==|XYZ|==  (in HP COBOL compatibility mode)
==*XYZ*==
==:XYZ:==
==XYZ*==
==XYZ&==
==XYZ#== 
- resource-name and 
                     			 path-name identify a resource file to be included in the resulting object file. The rules for interpreting these names are described
                     in COPY Libraries. Note that the compiler's 
                     			 COPY path applies to resources (Format 2) as well as to source files (Format 1). 
                     		  
                  
- The effect of a COPY RESOURCE statement is to add 
                     			 resource-name to a list of resources that the compiler embeds into the resulting COBOL object file. The resources are added to the end
                     of the COBOL object in the same order as the corresponding COPY statements. Because the resources are added to the end of
                     the object, the location of the corresponding COPY RESOURCE statement in the COBOL program is irrelevant. Conventionally,
                     COPY RESOURCE statements are placed either in Working-Storage or at the end of the program, but any location is acceptable.
                     
                     		  
                  
- If 
                     			 individual resolves to a COBOL object or library file, the compiler includes this object or library in the resulting object in a manner
                     similar to 
                     			 cblutil -lib. These are not considered resources, but are embedded COBOL objects. Note that we recommend using 
                     			 cblutil -lib to create libraries containing multiple COBOL objects instead of using COPY RESOURCE. There are two advantages to using 
                     			 cblutil. The first is that you do not need to worry about the order in which COBOL objects are compiled (if you use COPY RESOURCE,
                     you must ensure that the copied object is compiled first), and the second is that 
                     			 cblutil also checks for duplicated program names; COPY RESOURCE does not. 
                     		  
                  
  
            	 
            
               Code Examples
 
               		 
               		
               Assume the existence of disk directory CODELIB. In directory CODELIB is file 
                  		  ENROLLREC. The contents of 
                  		  ENROLLREC are: 
                  		
               
 
               		01 ENROLLMENT-RECORD.
   05 STUDENT-NAME PIC X(30).
   05 STUDENT-ADDR PIC X(50).
   05 STUDENT-GPA PIC 99V9.
   05 SID PIC 9(7).
 
               		 
                  		  Code Example 1: 
                  		
               
 
               		IDENTIFICATION DIVISION.
PROGRAM-ID. COPY-EXAMPLE-1.
...
DATA DIVISION.
FILE SECTION.
FD SCIENCE-DEPT-ENROLLMENT-FILE.
COPY ENROLLREC IN "LIBRARY/CODELIB".
...
 
               		Code compiled after COPY substitutions: 
                  		
               
 
               		...
DATA DIVISION.
FILE SECTION.
FD SCIENCE-DEPT-ENROLLMENT-FILE.
01 ENROLLMENT-RECORD.
   05 STUDENT-NAME PIC X(30).
   05 STUDENT-ADDR PIC X(30).
   05 STUDENT-GPA PIC 99V9.
   05 SID PIC 9(7).
...
 
               		 
                  		  Code Example 2: 
                  		
               
 
               		IDENTIFICATION DIVISION.
PROGRAM-ID. COPY-EXAMPLE-2.
...
DATA DIVISION.
  FILE SECTION.
  FD SCIENCE-DEPT-ENROLLMENT-FILE.
  COPY ENROLLREC
     IN "LIBRARY/CODELIB"
        REPLACING ==SID== BY ==STUDENT-ID==,
                  ==9(7)== BY ==9(9)==.
... 
               		Compiled code after COPY/REPLACING substitutions: 
                  		
               
 
               		...
DATA DIVISION.
FILE SECTION.
FD SCIENCE-DEPT-ENROLLMENT-FILE.
01 ENROLLMENT-RECORD.
   05 STUDENT-NAME PIC X(30).
   05 STUDENT-ADDR PIC X(30).
   05 STUDENT-GPA PIC 99V9.
   05 STUDENT-ID PIC 9(9).
...
 
               	   
            	 
            
               Highlights for first-time users
 
               		 
               		
                
                  		  
                  - COPY will always import the entire contents of the named COPY file. 
                     		  
                  
- The REPLACING text does not appear in the listing produced by the ACUCOBOL-GT compiler (-Lo 
                        				filename compiler argument). This is a common source of confusion for users who check the compilation listing file for verification
                     that the replacing action occurred. You can, however, use the 
                     			 -Lp compiler option to create an output file that includes the REPLACING text. See 
                     			 Listing Options in the ACUCOBOL-GT User's Guide for more information.