Using handler local variables of caller

Ken Ray kray at sonsothunder.com
Thu May 3 15:25:34 EDT 2012


On May 1, 2012, at 9:03 PM, Dar Scott wrote:

> Hi, Mark!
> 
> You hit the nail on the head.
> 
> You work with desktop externals, right?  They don't have this limitation.  Since iOS externals do have the limitation, I'm not going to go that way.
> 
> Here is a goofy solution:
> 
> function darzCommand
> 	get 123
> 	return "put " & it & " into it"
> end darzCommand

Trevor had a great (although sneaky) solution, posted a couple of years back (thank you, Scripter's Scrapbook!):

He wanted to run a custom handler and have it set the value of "it" independently from "the result". The example he wanted to make work was:

   GrabSomeWebData
   put the result into theError

   if theError is empty then
      -- 'it' contains the data from the web
   end if

To do this, he has a special handler that "GrabSomeWebData" would call that uses the debugcontext to work its magic (I've shortened some of his global names for clarity in email):

   private command _SetValueOfItInCaller pValue
      global gTempStorageForHandlerLocalVar

      ## Store value in global
      put pValue into gTempStorage

      ## Store current debugcontext (debugger uses this)
      put the debugcontext into theContext

      ## the executionContexts is the list of handlers in the chain.
      ## This handler would be line -1.
      ## The handler that called this handler is -2.
      ## The handler that you want to set "it" in is -3
      set the debugcontext to line -3 of the executioncontexts

      ## Make the global gTempStorage available 
      ## within context of handler we want to set "it" in. Then set it to the 
      ## global var
      debugdo "global gTempStorage;put gTempStorage into it"

      ## restore debugcontext
      set the debugcontext to theContext

      ## cleanup
      delete global gTempStorage
   end _SetValueOfItInCaller

I haven't tested it in LC 5.x, but I don't think anything's changed that would prevent it from working,

Ken Ray
Sons of Thunder Software, Inc.
Email: kray at sonsothunder.com
Web Site: http://www.sonsothunder.com/	




More information about the use-livecode mailing list