Structure of a module
A module defines a set of program elements such as functions, report routines, types, constants and variables.
Syntax
[ compiler-options
| import-statement [...]
| schema-statement
| globals-inclusion
| constant-definition [...]
| type-definition [...]
| variable-definition [...]
]
[ MAIN-block ]
[ dialog-block
| function-block
| report-routine
[...] ]
]
- compiler-options are described in OPTIONS (Compilation).
- import-statement imports an external module, see Importing modules.
- schema-statement defines a database schema for the compilation.
- globals-inclusion includes a globals file.
- constant-definition defines constants.
- type-definition defines user types.
- variable-definition defines variables.
- MAIN-block declares the main block of the program.
- dialog-block declares a declarative dialog.
- function-block declares a function.
- report-routine declares a report routine.
Usage
A module defines a set of program elements that can be used by other modules when
defined as PUBLIC
, or to be local to the current module when
defined as PRIVATE
. Program elements are user-defined types,
variables, constants, functions, report routines, and declarative dialogs.
A module can import other modules with the IMPORT FGL
instruction. A module can define functions, reports, module
variables, constants and types, as well as declarative dialogs.
Program modules are written as .4gl source files and are
compiled to .42m files. Compiled modules
(.42m files) can be linked together to create a program.
However, linking is supported for backward compatibility only. The preferred way is
to define module dependencies with the IMPORT FGL
instruction. For
better code re-usability, module elements can be shared by each other by qualifying
module variables, constants, types, and functions with PRIVATE
or
PUBLIC
keywords. PUBLIC
module elements can be
referenced in other modules.
Example
OPTIONS SHORT CIRCUIT
IMPORT FGL cust_data
SCHEMA stores
PRIVATE CONSTANT c_title = "Customer data form"
PUBLIC TYPE t_cust RECORD LIKE customer.*
PRIVATE DEFINE cust_arr DYNAMIC ARRAY OF t_cust
MAIN
...
END MAIN
DIALOG cust_dlg()
INPUT BY NAME cust_rec.*
...
END INPUT
END DIALOG
FUNCTION cust_display()
...
END FUNCTION
FUNCTION cust_input()
...
END FUNCTION
REPORT cust_rep(row)
...
END REPORT