  | 
		
HP COBOL Reference Manual
 
 
6.2.6.1 Conventions for Resolving Program-Name References
The PROGRAM-ID paragraph of the Identification Division declares the
program-name; a user-defined word to identify the program.
Only the CALL and CANCEL statements and the END PROGRAM header can
reference a program-name.
 
A run unit can contain multiple programs with duplicated
program-names. However, when two programs have duplicate
program-names, one of the two programs must directly or
indirectly be contained within a separately compiled program that does
not contain the program with the duplicated program-name.
 
The following rules regulate the scope of program-name:
 
  - Within a run unit, any separately compiled program can reference
  any other separately compiled program.
  
 - If a program-name does not have the COMMON attribute and
  it is contained directly within another program, the contained program
  can be referenced only by statements included in the directly
  containing program. 
 For example, in the run unit consisting of the
  three separately compiled programs illustrated in Example 6-3,
  Example 6-4, and Example 6-5:
  
    - MAIN-PROGRAM (See (1) in Example 6-3) directly
    contains program PROG-NAME-A (3) and indirectly contains
    PROG-NAME-B (5), PROG-NAME-C (6), PROG-NAME-D
    (7), and PROG-NAME-F (9).
    
 - PROG-NAME-B (See (11) in Example 6-4.)
    
 - PROG-NAME-E (See (12) in Example 6-5.)
  
  
     The CALL "PROG-NAME-B" statement in PROG-NAME-A (See
    (4) in Example 6-3.) references PROG-NAME-B
    (5) in the same separately compiled program (MAIN-PROGRAM)
    because PROG-NAME-B (5) is directly contained in
    PROG-NAME-A. All other CALL "PROG-NAME-B" statements
    ((2) and (8) and (10) in
    Example 6-3 and (13) in Example 6-5) all reference
    PROG-NAME-B (11) in Example 6-4, the second separately
    compiled program.
  
 
  
    | Example 6-3 Separately Compiled Program 1 | 
   
  
    
       
      
  IDENTIFICATION DIVISION.
  PROGRAM-ID. MAIN-PROGRAM. (1)
  .
  .
  .
       CALL "PROG-NAME-B".  (2)
  .
  .
  .
  IDENTIFICATION DIVISION.
  PROGRAM-ID. PROG-NAME-A.  (3)
  .
  .
  .
       CALL "PROG-NAME-B".  (4)
  .
  .
  .
  IDENTIFICATION DIVISION.
  PROGRAM-ID. PROG-NAME-B.  (5)
  .
  .
  .
  IDENTIFICATION DIVISION.
  PROGRAM-ID. PROG-NAME-C.  (6)
  .
  .
  .
  IDENTIFICATION DIVISION.
  PROGRAM-ID. PROG-NAME-D.  (7)
  .
  .
  .
       CALL "PROG-NAME-B".  (8)
  .
  .
  .
  END PROGRAM PROG-NAME-D.
  END PROGRAM PROG-NAME-C.
  END PROGRAM PROG-NAME-B.
  .
  .
  .
  IDENTIFICATION DIVISION.
  PROGRAM-ID. PROG-NAME-F.  (9)
  .
  .
  .
       CALL "PROG-NAME-B".  (10)
  .
  .
  .
  END PROGRAM PROG-NAME-F.
  END PROGRAM PROG-NAME-A.
  END PROGRAM MAIN-PROGRAM.
 |   
 
  
    | Example 6-4 Separately Compiled Program 2 | 
   
  
    
       
      
  IDENTIFICATION DIVISION.
  PROGRAM-ID. PROG-NAME-B.  (11)
  .
  .
  .
 
 |   
 
  
    | Example 6-5 Separately Compiled Program 3 | 
   
  
    
       
      
  IDENTIFICATION DIVISION.
  PROGRAM-ID. PROG-NAME-E.  (12)
  .
  .
  .
       CALL "PROG-NAME-B".  (13)
  .
  .
  .
 |   
  - If a program-name has the COMMON attribute and it is
  contained directly within another program, the contained program can be
  referenced only by the following:
  
    - Statements in the directly containing program
    
 - Statements in any programs, directly or indirectly contained within
    the directly containing program, except statements in the program with
    the COMMON attribute and in any program it directly or indirectly
    contains
  
  
     For example, in the run unit consisting of the three separately
    compiled programs illustrated in Example 6-6, Example 6-7, and
    Example 6-8:
  
    - MAIN-PROGRAM (see (1) in Example 6-6) directly
    contains PROG-NAME-A (3), and indirectly contains
    PROG-NAME-B (IS COMMON) (5), PROG-NAME-C (6),
    PROG-NAME-D (7), PROG-NAME-F (9), and
    PROG-NAME-G (11).
    
 - PROG-NAME-B (See (13) in Example 6-7.)
    
 - PROG-NAME-E (See (14) in Example 6-8.)
  
  
     The CALL "PROG-NAME-B" statement in PROG-NAME-A (See
     in Example 6-6) references PROG-NAME-B IS
    COMMON (5) because it is directly contained in PROG-NAME-A.
    The CALL "PROG-NAME-B" statement in PROG-NAME-F (See
    (10) in Example 6-6) references PROG-NAME-B IS COMMON
    (5) because PROG-NAME-F is directly contained in
    PROG-NAME-A. The CALL "PROG-NAME-B" statement in PROG-NAME-G
    (See (12) in Example 6-6) references PROG-NAME-B IS COMMON
    (5) because PROG-NAME-G is indirectly contained in
    PROG-NAME-A. The remaining CALL "PROG-NAME-B" statements
    ((2) and (8) in MAIN-PROGRAM and
    (15) in PROG-NAME-E) all reference the separately compiled
    program, PROG-NAME-B (13).
  
 
  
    | Example 6-6 Separately Compiled Program 1 | 
   
  
    
       
      
  IDENTIFICATION DIVISION.
  PROGRAM-ID. MAIN-PROGRAM. (1)
  .
  .
  .
       CALL "PROG-NAME-B".  (2)
  .
  .
  .
  IDENTIFICATION DIVISION.
  PROGRAM-ID. PROG-NAME-A.  (3)
  .
  .
  .
       CALL "PROG-NAME-B".  (4)
  .
  .
  .
  IDENTIFICATION DIVISION.
  PROGRAM-ID. PROG-NAME-B IS COMMON. (5)
  .
  .
  .
  IDENTIFICATION DIVISION.
  PROGRAM-ID. PROG-NAME-C.  (6)
  .
  .
  .
  IDENTIFICATION DIVISION.
  PROGRAM-ID. PROG-NAME-D.  (7)
  .
  .
  .
       CALL "PROG-NAME-B".  (8)
  .
  .
  .
  END PROGRAM PROG-NAME-D.
  END PROGRAM PROG-NAME-C.
  END PROGRAM PROG-NAME-B.
  .
  .
  .
  IDENTIFICATION DIVISION.
  PROGRAM-ID. PROG-NAME-F.  (9)
  .
  .
  .
       CALL "PROG-NAME-B".  (10)
  .
  .
  .
  IDENTIFICATION DIVISION.
  PROGRAM-ID. PROG-NAME-G.  (11)
  .
  .
  .
       CALL "PROG-NAME-B".  (12)
  .
  .
  .
  END PROGRAM PROG-NAME-G.
  END PROGRAM PROG-NAME-F.
  END PROGRAM PROG-NAME-A.
  END PROGRAM MAIN-PROGRAM.
 |   
 
  
    | Example 6-7 Separately Compiled Program 2 | 
   
  
    
       
      
  IDENTIFICATION DIVISION.
  PROGRAM-ID. PROG-NAME-B.  (13)
  .
  .
  .
 
 |   
 
  
    | Example 6-8 Separately Compiled Program 3 | 
   
  
    
       
      
  IDENTIFICATION DIVISION.
  PROGRAM-ID. PROG-NAME-E.  (14)
  .
  .
  .
       CALL "PROG-NAME-B".  (15)
  .
  .
  .
 |   
  
  
		
	
 
  
      |