Exploring the NCT Faunc based controller we have now and im trying to get my head around macros. I understand how they work and how to pass an argument though. However while it is probably not something I will use (ever if not often), im interested to know.

When calling a macro from the main program, we use G65 <insert subprogram> and pass arguments through with a letter to correspond to a local variable. You can then call a macro from within the first macro using the same procedure - and so on and so on, layering macro within macro (does anyone do this).
My question is how do you pass an argument from the main program to each layer of macro? Or can it only be done from the layer above calling the macro?

Quick example.
MAIN PROG
G0 X0 Y0 Z0
G1 X100 Y100 Z0
G65 <MACRO1> A20 <----A20 MAKES LOCAL VARIABLE #1=20
G0 X0 Y0
M2

MACRO1 PROG
G1 Z#1
G1 Z0
G65 <MACRO2> B? <---- HOW CAN I CALL B FROM MAIN PROGRAM
M99

MACRO2 PROG
G1 Z#2
G1 Z0
G65 <MACRO3> C? <---- HOW CAN I CALL C FROM MAIN PROGRAM
M99

MACRO3 PROG
G1 Z#3
G1 Z0
M99


One idea i had, though its not really calling the variable and rather passing the argument which sorta defeats the purpose is:

MAIN PROG
#100=40
#101=60
G0 X0 Y0 Z0
G1 X100 Y100 Z0
G65 <MACRO1> A20 <----A20 MAKES LOCAL VARIABLE #1=20
G0 X0 Y0
M2

MACRO1 PROG
G1 Z#1
G1 Z0
G65 <MACRO2> B#100
M99

MACRO2 PROG
G1 Z#2
G1 Z0
G65 <MACRO3> C#101
M99

MACRO3 PROG
G1 Z#3
G1 Z0
M99


in which case you may aswell not pass the argument and rather just use global variables.

Any thoughts or ideas? or can it simply not be done?

Thankyou