From the aforementioned article by ART:
MACROS
Mach3 uses the Cypress VB engine to accept scripts and user macros. This is done
by a Macro thread, which responds whenever it sees that a CString variable "Macro"
has been set. Any script macro requested is first held till all movement stops and the
ring buffer is empty, then the macro command in translated to the proper file which is
then loaded and the text placed in the Macro variable. This has a maximum of 65000
characters. When the variable contains a text input, the Macro thread will
automatically run that script, then empty the variable, and the program will continue.
This is why a macro cannot call another macro. The threader only looks to one
variable for text and there is no secondary storage for another script. The code is a bit
weak there and will likely be strengthened over time as it’s a complex connection to
get just right. When a script is loaded certain constants are loaded with it such as
Sleep , the names of the signals, ( INPUT1 , OUTPUT1 ..ect. ),and the scripts may
avail themselves of those constant declarations.