| 
                                           
                            
  |  
                                      
                         
                                           
                            
  |  
                                      
                        
                                            |  
                                      
                        
                                           
                            
  |  
                                    
                     ||||||||||
| 
                                           
                            
  |  
                                      
                        
                                           
                            
  |  
                                      
                         
                                              M |  
                                      
                        
                                           
                            
  |  
                                      
                        
                                           
                            
  |  
                                    
                     |||||||||
                                            CALLNAT 
                                              operand1 |  
                                      
                         [USING]
                         |  
                                      
                        operand2 |  (AD= 
                         |  
                                      
                         
                                              O |  
                                      
                        ) | ||||||||
 
                                              A |  
                                      
                        |||||||||||||
                                            nX |  
                                      
                        |||||||||||||
This document covers the following topics:
For an explanation of the symbols used in the syntax diagram, see Syntax Symbols.
Related Statements: CALL | CALL FILE |
                          CALL LOOP |
                          DEFINE SUBROUTINE |
                          ESCAPE |
                          FETCH |
                          PERFORM
Belongs to Function Group: Invoking Programs and Routines
The CALLNAT statement is used to invoke a Natural
                            subprogram for execution. (A Natural subprogram can only be invoked via a
                            CALLNAT statement; it cannot be executed by itself.)
               
When the CALLNAT statement is executed, the execution
                            of the invoking object (that is, the object containing the CALLNAT
                            statement) will be suspended and the invoked subprogram will be executed. The
                            execution of the subprogram continues until either its END
                            statement is reached or processing of the subprogram is stopped by an
                            ESCAPE ROUTINE
                            statement being executed. In either case, processing of the invoking object
                            will then continue with the statement following the CALLNAT
                            statement.
               
Notes:
Operand Definition Table:
| Operand | Possible Structure | Possible Formats | Referencing Permitted | Dynamic Definition | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1 | 
                                        
                                        
                        C | S | A | yes | no | |||||||||||||||
operand2 | 
                                        
                                        
                        C | S | A | G | A | U | N | P | I | F | B | D | T | L | C | G | O | yes | yes | |
Syntax Element Description:
| Syntax Element | Description | |
|---|---|---|
                                             
                                             operand1 |  
                                        
                         
                                             
                            Subprogram to be Invoked:  
                                             
                           As  The subprogram name may contain an ampersand (&); at
                                                  execution time, this character will be replaced by the one-character code
                                                  corresponding to the current value of the system variable
                                                    |  
                                      
                     |
                                             
                                             operand2 |  
                                        
                         
                                             
                             Parameters:  
                                             
                           If parameters are passed to the subprogram, the structure
                                                  of the parameter list must be defined in a  By default, the parameters are passed by
                                                     reference, that is, the data are transferred via address parameters, the
                                                  parameter values themselves are not moved. However, it is also possible to pass
                                                  parameters by value, that is, pass the actual parameter values. To do
                                                  so, you define these fields in the  
 Note: For both ways of passing parameters, the following applies: If a group is specified as
                                                   In the parameter data area of the invoked subprogram, a
                                                  redefinition of groups is only permitted within a  If an array is passed, its number of dimensions and
                                                  occurrences in the subprogram's parameter data area must be the same as in the
                                                   Note: When the option
                                                    |  
                                      
                     |
 AD= |  
                                        
                         
                                             
                             Attribute Definition:  
                                             
                           If   |  
                                      
                     |
                                             AD=O |  
                                        
                         
                                             
                            Non-modifiable, see session parameter
                                                   Note:  |  
                                      
                     |
                                                AD=M |  
                                        
                         
                                             
                            Modifiable, see session parameter
                                                   This is the default setting.  |  
                                      
                     |
                                                AD=A |  
                                        
                        Input only, see session parameter
                                             AD=A.
                                             
                         |  
                                      
                     |
If
                                             operand2 is a constant,
                                             AD cannot
                                             be explicitly specified. For constants AD=O always
                                             applies.
                         |  
                                      
                     ||
                                             nX |  
                                        
                         
                                             
                            Parameters to be Skipped:  
                                             
                           With the notation
                                                   A parameter that is to be skipped must be defined with the
                                                  keyword   |  
                                      
                     |
Dynamic variables may be passed as parameters to a called program
                            object (CALLNAT, PERFORM). A call by reference is
                            possible because the value space of a dynamic variable is contiguous. A call by
                            value causes an assignment with the variable definition of the caller as the
                            source operand and the parameter definition as the destination operand. In
                            addition, a call by value result causes the movement to change to the opposite
                            direction. When using a call-by-reference, both definitions must be
                            DYNAMIC. If only one of
                            them is DYNAMIC, a runtime error is raised. In case of a call by
                            value (result) all combinations are possible.
               
The following table illustrates the valid combinations of statically and dynamically defined variables of the caller, and statically and dynamically defined parameters concerning the parameter transfer.
operand2 of caller
                         | 
                                          
                                          
                        Parameter definition | |
| Static | Dynamic | |
| Static | yes | no | 
| Dynamic | no | yes | 
The formats of the dynamic variables A or B must match.
operand2 of caller
                         | 
                                          
                                          
                        Parameter definition | |
| Static | Dynamic | |
| Static | yes | yes | 
| Dynamic | yes | yes | 
Note:
 When using static/dynamic or dynamic/static definitions, a
                                 value truncation may occur according to the data transfer rules of the
                                 appropriate assignments.
                  
** Example 'CNTEX1': CALLNAT ************************************************************************ DEFINE DATA LOCAL 1 #FIELD1 (N6) 1 #FIELD2 (A20) 1 #FIELD3 (A10) END-DEFINE * CALLNAT 'CNTEX1N' #FIELD1 (AD=M) #FIELD2 (AD=O) #FIELD3 'P4 TEXT' * WRITE '=' #FIELD1 '=' #FIELD2 '=' #FIELD3 * END
** Example 'CNTEX1N': CALLNAT (called by CNTEX1) ************************************************************************ DEFINE DATA PARAMETER 1 #FIELDA (N6) 1 #FIELDB (A20) 1 #FIELDC (A10) 1 #FIELDD (A7) END-DEFINE * * #FIELDA := 4711 * #FIELDB := 'HALLO' * #FIELDC := 'ABC' * WRITE '=' #FIELDA '=' #FIELDB '=' #FIELDC '=' #FIELDD * END
** Example 'CNTEX2': CALLNAT ************************************************************************ DEFINE DATA LOCAL 1 #ARRAY1 (N4/1:10,1:10) 1 #NUM (N2) END-DEFINE * * CALLNAT 'CNTEX2N' #ARRAY1 (2:5,*) * FOR #NUM 1 TO 10 WRITE #NUM #ARRAY1(#NUM,1:10) END-FOR * END
** Example 'CNTEX2N': CALLNAT (called by CNTEX2) ************************************************************************ DEFINE DATA PARAMETER 1 #ARRAY (N4/1:4,1:10) LOCAL 1 I (I2) END-DEFINE * * FOR I 1 10 #ARRAY(1,I) := I #ARRAY(2,I) := 100 + I #ARRAY(3,I) := 200 + I #ARRAY(4,I) := 300 + I END-FOR * END