by Jon Ripley, October 2007
When writing a macro it is often useful to be able to determine whether it is being run as the main program or if it has been CALLed. Making this distinction allows more flexibility when writing macros.
To determine whether the currently executing code is running as the main program or as a called module you can use either of the following methods.
Called% = NOT(!384>=PAGE AND !384<=TOP)
P%=0 ON ERROR P%=!408:ON ERROR OFF IF P%=0 ERROR Called%=NOT(P%>=PAGE AND P% <=TOP)
Both methods set Called% to TRUE if the program was run using “CALL “filename”” and FALSE if the program is running as the main program.
Note: The code for both methods is unsuitable for refactoring into a subroutine and must be called in-line to guarantee correct results; the code will fail in the case where a subroutine with the same name is present in the main program because the main program has precedence.