Be aware that any routine declared with PROCEDURE only allows access to the global variables it knows to all called routines (see also The keyword instruction EXPOSE).
Example:
i = 4 k = 3 j = 2 say "Value of i at program start is " || i say "Now calling MyProc1 from the main function ..." call MyProc1 say " Value of i after call of MyProc1 is " || i say "Now calling MyProc2 from the main function ..." call MyProc2 say "Value of i after call of MyProc2 is " || i exit 0 MyProc1: PROCEDURE expose k j say " Now calling MyProc2 from within the function myProc1 ..." i = 0 call MyProc2 RETURN MyProc2: PROCEDURE expose i say " MyProg2 starts ..." say " Value of i in MyProc 2 is " || i /* This is the global variable i if MyProc2 */ /* is called from the main function -- but: */ /* This is a local variable if MyProc2 is */ /* called from MyProc1! */ i = i + 2 say " Value of i in MyProc 2 changed to " || i say " ... MyProg2 ends." RETURN
Note: If you want to use a label with CALL and SIGNAL you cannot use the keyword PROCEDURE!