Contents | Index | < Browse | Browse >

	PASSING ARGUMENTS :
 ===================================================================

 Arguments can be passed by the following commands :

  GUILOAD   to xONLOAD or xONRELOAD
  GUIOPEN   to xONOPEN
  GUICLOSE  to xONCLOSE
  GUIQUIT   to xONQUIT
  GOSUB     to xROUTINE

 The way this is done is by declaring the arguments in the command's
 command line, like so

 > GUILOAD guis:MyGui Arg0 Arg1... Arg5
    - or -
 > GOSUB   MyGui MyRoutine My_Arg My_Other_Arg

 Up to 6 arguments may be passed.
 Inside the event they call, these arguments can be accessed in either 
 of two ways :

 1. As normal Variables (if defined in the Event's definition).

    If declared in the event's definition, they'll be automatically
    converted to variables. For example :

    >  xONLOAD  Var1 Var2

    If you were to call this event with :

    >  GUILOAD  MyGui.gc SomeText "Some more text"

    then when MyGui.gc loads, there would be 2 variables created :
    - "Var1"  which would contain the word "SomeText" and 
    - "Var2"  which would contain "Some more text"

    You can also pass variables:
    >  gui/myvar = "Some text"
    >  GOSUB MyGui.gc RoutineName $gui/myvar

    If you pass variables you should use the variable's *full* path 
    (as is done above) to avoid confusion.

 2. As internal variables $$ARG.0 to $$ARG.5
      
    Note that even if you define variables in the event's definition as
    above, they'll still be available as $$ARG.xx also. 

    Another internal variable: $$ARG.TOT will (always) contain the actual 
    number of arguments passed. 

 The RETURN command
 -------------------------
 The above events (xONLOAD, xROUTINE etc) can also RETURN arguments via 
 the RETURN command.

 > RETURN  Arg0 Arg1... Arg5

 The arguments can be accessed (when they return to the routine that
 called the event) as internal variables $$RET.0 to $$RET.5.
 $$RET.TOT will contain the actual number of arguments returned.

 - Example :

 xBUTTON 10 10 60 12 Test
   var = "This is a test"
   GoSub MyGui routine1 $var
   ; We only pass "var" as an argument here. We could have had up to 6 args.
   ; the routine will return one argument to us (also could have been 6)
   ; which we just print..
   say 'Return returned $$RET.0n'

 xROUTINE routine1 MyVar
   ; here variable "MyVar" will contain $var (i.e. "This is a test")
   ; Note that $$ARG.0 will also contain the same thing.
   say '$MyVar is the same as $$ARG.0n"
   ; now we return something...
   Return "Thank you.."

   --------------------------------------------------------------------
	** WARNING :

 - If you want to pass a variable you should give the variable's full 
   path (i.e. RETURN MyGui/MyVariable), since it may be in another
   gui which may not have you in it's varpath.

	** WARNING 2:

 - You can not pass an $$ARG.0 type of internal variable you receive 
   as an argument to an other routine/xonload etc. :

   > GOSUB mygui myroutine $$ARG.0         <-* is WRONG!

   That's because when Gui4Cli attempts to translate the variable when
   it gets to the routine, it will find variable $$ARG.0 containing
   $$ARG.0 and it will go into a wild loop trying to translate it..

   This loop will time out after 100 rounds (i.e. the default depth of
   variables within variables that you can have) and the error will
   be reported.

   There are no such problems if you use the definition in the event's
   command line, so use that instead.