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