| DEFINE FUNCTIONfunction-name | 
| [return-data-definition] | 
| [function-data-definition] | 
| statement... | 
| END-FUNCTION | 
This document covers the following topics:
For explanations of the symbols used in the syntax diagram, see Syntax Symbols.
Related Statement: DEFINE
                                PROTOTYPE 
               
The DEFINE FUNCTION statement is used to define a
                            function which is stored as a Natural object of the type function. A function
                            object may contain only one DEFINE FUNCTION statement.
               
The DEFINE FUNCTION statement defines the function
                            name, the parameters, the local and application-independent variables, the
                            function result and the statements forming the operation logic. These
                            statements are executed when the function is called.
               
For further information, see the following sections in the Programming Guide:
Natural object type Function
| Syntax Element | Description | 
|---|---|
| function-name | Function Name:   
 You may not use the same function name twice in one library. | 
| return-data-definition | Return Data Definition
                                                     Clause: For details on this clause, see Return Data Definition. | 
| function-data-definition | Function Data Definition
                                                     Clause: For details on this clause, see Function Data Definition. | 
| statement... | Statement(s) to be Executed: Defines the operation section which is executed when the function is called. It forms the function logic. | 
| END-FUNCTION | End of DEFINE FUNCTION
                                                     Statement: The Natural reserved word  | 
| RETURNS[variable-name] | 
 | (format-length[/array-definition]) | 
 | [ BY VALUE] | |||||
| [(array-definition)] HANDLE OF | 
 | 
 | |||||||
| ( | 
 | A | 
 | [/array-definition]) | DYNAMIC | ||||
| U | |||||||||
| B | |||||||||
The return-data-definition
                              clause defines the format/length and, if applicable, the array structure of the
                              result value returned by the function. 
               
Syntax Element Description:
| Syntax Element | Description | 
|---|---|
| variable-name | Return Value Name: Optionally, you may specify a name which is used to access the return field within the function coding. If no such name is specified, the function name is used instead. | 
| 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  | 
| HANDLE OFdialog-element-type | Dialog Element Type: The type of dialog element. Its possible values are the
                                                    values 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. | 
| BY VALUE | BY VALUE Option: If  The format/length of the "receiving" field is either 
 For data transfer compatibility the rules outlined in Rules for Arithmetic Assignment and Data Transfer in the Programming Guide apply. If  | 
| DEFINE DATA | ||||||||||
| 
 | PARAMETER | 
 | 
 | 
 | 
 | |||||
| 
 | LOCAL | 
 | USING | 
 | 
 | 
 | 
 | 
 | ||
| local-data-definition   | ||||||||||
| [ INDEPENDENTaiv-data-definition ] | ||||||||||
| END-DEFINE | ||||||||||
The
                              function-data-definition clause defines
                              the parameters which are to be provided when the function is called, and the
                              data fields used by the function, such as local and application-independent
                              variables. A global data area (GDA) cannot be referenced inside the function
                              definition. 
               
Syntax Element Description:
| Syntax Element | Description | 
|---|---|
| PARAMETER USING
                                                  parameter-data-area | PDA Name: Specify the name of the parameter data area (PDA) that contains data elements which are used as parameters in a function call. See also Defining Parameter Data
                                                    in the  | 
| PARAMETER
                                                     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  | 
| LOCAL USING
                                                  local-data-area | LDA Name: Specify the name of the local data area (LDA) to be referenced. See also Defining Local Data in
                                                    the  | 
| LOCAL USING
                                                  parameter-data-area | PDA Name: Specify the name of a parameter data area (PDA). Note: See also Defining Local Data in
                                                    the  | 
| LOCAL
                                                  local-data-definition | Local Data Definition: For information on how to define elements or fields
                                                    within the statement itself, that is, without using an LDA or PDA, see the
                                                    section Local Data
                                                       Definition in the  | 
| INDEPENDENT
                                                  aiv-data-definition | AIV Data Definition: Can be used to define a single or multiple application-independent variables (AIVs). See Defining
                                                       Application-Independent Variables in the  | 
| END-DEFINE | End of Clause: The Natural reserved word  | 
** Example 'DFUEX1': DEFINE FUNCTION                                    
************************************************************************
DEFINE FUNCTION F#FIRST-CHAR                                                   
  RETURNS #RESULT (A1)                                                
  DEFINE DATA PARAMETER                                                 
    1 #PARM (A10)                                                       
  END-DEFINE                                                            
  /*                                                                    
  #RESULT := #PARM        /* First character as return value.     
END-FUNCTION                                                            
*                                                                       
END 
                         The function F#FIRST-CHAR is used in the example
                              program DPTEX2 in library SYSEXSYN. See
                              Examples
                              in the DEFINE PROTOTYPE statement description. 
               
** Example 'DFUEX2': DEFINE FUNCTION                                    
************************************************************************
DEFINE FUNCTION F#FACTOR                                                  
  RETURNS (I2/1:3)                                                      
  DEFINE DATA PARAMETER                                                 
    1 #VALUE (I2)                                                       
  END-DEFINE                                                            
  /*                                                                    
  F#FACTOR(1) := #VALUE * 1                                                
  F#FACTOR(2) := #VALUE * 2                                                
  F#FACTOR(3) := #VALUE * 3                                                
  /*                                                                    
END-FUNCTION                                                            
*                                                                       
END 
                         The function F#FACTOR is used in the example program
                              DPTEX1 in library SYSEXSYN. See
                              Examples
                              in the DEFINE PROTOTYPE statement description.