| 
 | |||||
| 
 | |||||
| 
 | 
This document covers the following topics:
For explanations of the symbols used in the syntax diagram, see Syntax Symbols.
Related Statement: DEFINE
                                FUNCTION
The DEFINE PROTOTYPE statement is used to specify the
                            properties for calling a
                            function
                            including the following: 
               
the parameters to be passed in the function call,
the result value to be returned by the function call, and
whether the function is called with the function name defined in
                                      the DEFINE FUNCTION
                                      statement, or with an alphanumeric variable that contains the function
                                      name.
                     
This information is used to resolve a function call within a Natural object at compile time.
A DEFINE PROTOTYPE statement is only needed for a
                            function call if any of the following is true:
               
The specified function name is an alphanumeric variable which contains the name of the function to be called at execution time.
An
                                      (IR=)
                                      clause is not specified in the
                                      function
                                         call and a cataloged object of the called function is not
                                      available.
                     
The parameters provided in the function call are to be validated and the cataloged object of the called function is not available.
The DEFINE PROTOTYPE statement can be included in a
                            copycode object if the function is to be called from multiple objects.
               
For further information, see the following sections in the Programming Guide:
Natural object type Function
| Syntax Element | Description | 
|---|---|
| [VARIABLE]
                                                prototype-name | Prototype Name: 
 
 | 
| UNKNOWN | UNKNOWN Option: The keyword  | 
| return-data-definition | See Return Data Definition below. | 
| parameter-definition | See Parameter Definition below. | 
| same-as-clause | See SAME AS Clause below. | 
| USING FUNCTION
                                                [DEFINITION [OF]]
                                                function-name | USING FUNCTION
                                                     Clause: function-nameis the name of an existing cataloged object of the type function. The
                                             parameters and the result field definitions of this function are used to
                                             resolve the function call. | 
| END-PROTOTYPE | End of DEFINE PROTOTYPE
                                                     Statement: The Natural reserved word  | 
| RETURNS[variable-name] | 
 | (format-length [/array-definition]) | 
 | |||||
| [(array-definition)] HANDLE OF OBJECT | ||||||||
| ( | 
 | A | 
 | [/array-definition]) | DYNAMIC | |||
| U  | ||||||||
| B  | ||||||||
The return-data-definition
                              clause defines the format/length and, if applicable, the array structure of the
                              return value.
               
When no return data definition is specified, a
                              function
                                 call can only be used within a statement if an explicit
                              (IR=)
                              clause is provided. If such a clause is missing, the function can only be
                              called as a statement, but not in place of an operand within a statement. 
               
Syntax Element Description:
| Syntax Element | Description | 
|---|---|
| variable-name | Return Value Name: The optional
                                                     | 
| format-length | Format/Length Definition: The format and length of the result field. For information on format/length definition of user-defined variables, see Format and Length of User-Defined Variables in the Programming Guide. | 
| array-definition | Array Dimension
                                                       Definition: With
                                                     For further information, see
                                                    Array Dimension
                                                       Definition in the description of the  | 
| HANDLE OF
                                                  OBJECT | Handle of Object: Used in conjunction with NaturalX. For further information, see NaturalX in the Programming Guide. | 
| A,UorB | Data Type: Alphanumeric (A), Unicode (U) or binary (B) for a dynamic result. | 
| DYNAMIC | Dynamic Variable: The function result may be defined as
                                                     For information on processing dynamic variables, see Introduction to Dynamic Variables and Fields in the Programming Guide. | 
| DEFINE DATA | ||||||||
| 
 | PARAMETER UNKNOWN | 
 | ||||||
| 
 | PARAMETER | 
 | USINGparameter-data-area | 
 | 
 | |||
| parameter-data-definition ... | ... | |||||||
| END-DEFINE | ||||||||
The parameter-definition
                              clause defines the
                              parameters
                              which are to be provided in a
                              function
                                 call. This definition layout is checked against the parameters given
                              in a function call. If this clause is omitted, this declares the function as
                              free of parameters. In this case, every attempt to provide parameters in the
                              function call is rejected. 
               
The identifiers used to name the parameter fields have no meaning.
                              They are just there to have a syntax structure similar to the DEFINE DATA
                                 PARAMETER syntax.
               
Syntax Element Description:
| Syntax Element | Description | 
|---|---|
| PARAMETER
                                                  UNKNOWN | UNKNOWN Option: With this option, no parameter is specified and the parameter check in the function call is disabled. As a consequence, any number of parameters in the function call will be accepted. | 
| USING
                                                  parameter-data-area | PDA Name: The name of the
                                                     See also Defining Parameter Data
                                                    in the  | 
| parameter-data-definition | Parameter Data Definition: Instead of defining a parameter data area, parameter data can also be defined directly within a function call. See also Parameter Data
                                                       Definition in the  | 
| END-DEFINE | End of Clause: The Natural reserved word  | 
| SAME AS[PROTOTYPE] | prototype-name | |
With the SAME AS clause you can use the parameter and
                              result field definitions of another prototype which has been defined before in
                              the same Natural object.
               
This is a prototype definition for a function named
                              F#FACTOR where the
                              prototype-name corresponds to the
                              function-name
                              specified in the referenced DEFINE
                                    FUNCTION statement. The result returned by the function is of
                              format (I2/1:3), and a single parameter of format (I2) is required. 
               
** Example 'DPTEX1': DEFINE PROTOTYPE and function call                 
************************************************************************
DEFINE DATA LOCAL  
  1 #NUM (I2)
END-DEFINE                                                              
*
DEFINE PROTOTYPE F#FACTOR                                         
  RETURNS (I2/1:3)                                                      
  DEFINE DATA PARAMETER                                                 
    1 #VALUE (I2)                                                       
  END-DEFINE                                                            
END-PROTOTYPE                                                           
*                                                                       
#NUM := 3                                                              
*   
WRITE 'Function call:' F#FACTOR(<#NUM>)(*) 
*                                                                       
END 
                         The function F#FACTOR is defined in the example
                              function DFUEX2 in library SYSEXSYN. See
                              Examples
                              in the DEFINE FUNCTION statement description. 
               
DPTEX1:
               Function call: 3 6 9
Due to the keyword VARIABLE, this prototype specifies
                              a function call where the referenced
                              prototype-name is an alphanumeric
                              variable which contains the function name at execution time.
               
** Example 'DPTEX2': DEFINE PROTOTYPE and function call
************************************************************************
DEFINE DATA LOCAL  
  1 #NAME (A20) 
  1 #TEXT (A10)
END-DEFINE                                                     
*  
DEFINE PROTOTYPE VARIABLE #NAME 
  RETURNS #RETURN (A1)          
  DEFINE DATA PARAMETER         
    1 #IN (A10)                                                
  END-DEFINE                    
END-PROTOTYPE                   
*                                                              
#NAME := 'F#FIRST-CHAR'                                        
#TEXT := 'ABCDEFGHIJ'                                          
*                                                              
WRITE 'First character:' #NAME(<#TEXT>)
*
END 
                         The function F#FIRST-CHAR is defined in the example
                              function DFUEX1 in library SYSEXSYN. See
                              Examples
                              in the DEFINE FUNCTION statement description. 
               
DPTEX2:
               First character: A