Modules ☆
The mechanism of modules enables sharing variables among some program units.
1. A Module contains public variables, and share variables.
Public variables are shared with the whole module and the program units where the external declaration for that variable is written.
(Note that a program unit is an external procedure or the main program.)
Share variables are shared with the whole module.
2. Example. (Share variables)
On the following program, the numeric variables 'index' and 'stack' defined in the 2030-line are shared with the module 'stack'.
1000 DECLARE EXTERNAL SUB stack.push 1010 DECLARE EXTERNAL FUNCTION stack.pop 1020 CALL push(12) 1030 PRINT pop 1040 END 1050 ! 2000 MODULE stack 2010 PUBLIC SUB push 2020 PUBLIC FUNCTION pop 2030 SHARE NUMERIC index, stack(100) 2040 LET index=0 2100 EXTERNAL SUB push(a) 2110 LET index=index+1 2120 LET stack(index)=a 2130 END SUB 2200 EXTERNAL FUNCTION pop 2210 LET pop=stack(index) 2220 LET index=index-1 2230 END FUNCTION 2240 END MODULE
3. A module consists of the module-body and external procedures.
The module-body can contain public declarations and share declarations.
The module-body shall be executed before the main program.
PUBLIC declarations declares the variables or procedures shared with the program.
PUBLIC NUMERIC numeric_variable, numeric_variable , ...
PUBLIC STRING string_variable, string_variable , ...
PUBLIC FUNCTION function_name, function_name, ...
PUBLIC SUB subprogram_name, subprogram_name, ...
PUBLIC PICTURE picture_name, picture_name, ...
SHARE declarations declare the variables shared within the module.
SHARE NUMERIC numeric_variable, numeric_variable , ...
(channel_numbers are as #1, #2 and so on.)
SHARE STRING string_variable, string_variable , ...
SHARE FUNCTION function_name, function_name, ...
SHARE CHANNEL channel-number, channel_number, ...
For an array declaration, the bounds-declaration is included.
Example.
MODULE m1 PUBLIC NUMERIC a(2,2), b PUBLIC STRING s$(4) SHARE NUMERIC c(10) LET b=pi/4 ………… END MODULE
4. Module-option statement can be written in the module-body.
EXAMPLE.
MODULE OPTION ANGLE DEGREES
Any module option statement is valid through the whole module.
MODULE OPTION ARITHMETIC NATIVE
[note]
(1) OPTION declaration written in a module-body is valid only through the module-body.
(2) Neglecting the standard, MODULE OPTION statements and OPTION statements must be written before any PUBLIC statement or any SHARE statement.
(3) The module-body of a module cannot contain any internal procedure.
5. A Program unit that has references to public-declared procedures or variables must contain the DECLAE EXTERNAL declarations for those references.
DECLARE EXTERNAL NUMERIC module_name.numeric_variable, module_name.numeric_variable, ...
DECLARE EXTERNAL STRING module_name.string_variable, module_name.string_variable, ...
DECLARE EXTERNAL FUNCTION module_name.function_name, module_name.function_name ,…
DECLARE EXTERNAL SUB module_name.subprogram_name, module_name.subprogram_name, ...
DECLARE EXTERNAL PICTURE module_name.picture_name, module_name.picture_name, ...
If an arrays is specified, parenthesis and commas of number of dimension minus 1 follows the array name.
On the program unit that declares external procedures or variables, the procedures or variables can be written with or without module name part.
Example
DECLARE EXTERNAL NUMERIC m1.a(,), m1.b DECLARE EXTERNAL STRING m1.s$() OR i=1 TO UBOUND(s$) PRINT s$(i) NEXT i PRINT m1.a(1,1), m1.b ……… END
For more information about modules, refer to ANSI X3.113a-1989