Structure of a module

A program consists of one or several modules. 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.

The declaration order of elements defined in a program module is constrained, you must defined module elements in the following way:
[ compiler-options
| import-statement [...]
| schema-statement
| globals-inclusion
| constant-definition [...]
| user-type-definition [...]
| variable-definition [...]
]

[ MAIN-block ]

[ declared-dialog-block
| function-declaration
| report-declaration
    [...] ]
]
Program modules are written as .4gl source files and a 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 with by qualifying module variables, constants, types and function with PRIVATE or PUBLIC keywords. PUBLIC module elements can be referenced in other modules.
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