Using handler local variables of caller

Dar Scott dsc at swcp.com
Thu May 3 16:15:00 EDT 2012


Thanks, Ray!  That is just what I wanted!  

I do need to come up with a growth plan for when a future version of LiveCode does break it.  (And maybe by then I'll have my script filter working.)

Dar


On May 3, 2012, at 1:25 PM, Ken Ray wrote:

> 
> 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/	
> 
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode





More information about the Use-livecode mailing list