How do I abort a handler in OS X???
Ben Rubinstein
benr_mc at cogapp.com
Tue Jun 27 05:48:58 EDT 2006
On 26/6/06 22:05, Jim Carwardine wrote:
> Yes, that's my problem... Cmd-period didn't work... And there appears to be
> no substitution remedy. I was developing a script and wanted to test a
> piece of logic inside a repeat loop so I put in an answer variable line as I
> always do. Then I got an answer dialogue with each iteration of about 1500
> iterations which was impossible when I couldn't abort the handler. BTW
> cmd/s doesn't work either... Jim
Hi Jim,
I don't think there's any problem with cmd-period in OS-X; but there is, and
always has been, a problem that cmd-period doesn't work if you've got a modal
dialog in the way.
The problem is that the modal dialog (which of course in Rev is really another
stack, with its own event loop) exists in another thread or "execution layer"
(I don't know technically how its implemented, I'm just trying to express how
it behaves.) So cmd-period works perfectly well as an interrupt; but if the
answer dialog is up, you're just interrupting that, and since it wasn't doing
anything anyway, nothing happens. Then you click OK, and you're back in the
stuck loop. If you were really, unfeasibly, quick, you could click OK and
then type cmd-period to the underlying stack before it throws up the next
answer dialog, and then you'd stop it OK. But typically in this situation,
Rev is too fast for you.
This applies as much to Windows and OS 9 as OS X; however, you do have a
couple more chances saving your data on the Mac, see below.
I've got into this situation many times, typically I have some data-processing
loop, and I think that I'd like to know if some situation that should never
occur does so. So I put in a "just in case" alert, click the button - and
then it turns out that due either to my misunderstanding, or erroneous coding,
the test fires on every one of 10,000 lines.
If I remember, I put in a 'hold down shift' emergency exit to escape from
loops like this. Increasingly, I've tried to train myself to put in
breakpoint for that situation, instead of or just after the "answer" call.
But of course from time to time I forget and get bit again.
Once when I was working on a shell that was to host a variety of data
processing scripts, I took a copy of the Rev answer stack, and modified it to
include a button that would do "exit to top" as a kind of emergency stop
button. It's so cool that in Rev you can do this... but unfortunately, it
didn't solve it. Just like cmd-period, "exit to top" when executed from
inside the modal dialog affected only that 'layer'. There seend as far as I
could tell to be no way to really halt the underlying script; it's suspended
when the modal dialog is invoked; but regardless of what happens while the
modal dialog is open, once closed the underlying script is resumed.
I set off a correspondence on the improve list, wait, let me see... just over
four years ago!... on exactly this topic, but we never found a good solution.
Unfortunately, this was before Bugzilla had been opened to the users, and so
nothing was entered anywhere persistent that might help.
So much for deep background. No doubt you've force-quit by now anyway. But
for future use:
a) cmd-period works in general just as well in OS-9 as in OS-X. But there's
no way to abort a script when an answer dialog is showing, unless you coded
for the possibility (ie 'answer xxx with "Stop" or "Continue"/if it = "Stop"
then exit to top).
b) I keep an applescript file handy called "Rev Saviours". It has a variety
of useful expressions in it which I uncomment and try when I'm in a situation
like this.
The one that helps here looks like this:
tell application "Revolution"
do script "close stack \"Answer Dialog\" ; save topStack()"
end tell
You'll still be stuck in your loop - but your stack has been saved, so as long
as you weren't worried about data in variables, you can force-quit with an
easy heart.
c) If you do have to resort to force-quit, make sure that you can see your
stack when you do it. In some situations on OS X, when Rev is force-quit it
briefly offers to save your stack - if you immediately click the button, it
really does do so.
Ben Rubinstein | Email: benr_mc at cogapp.com
Cognitive Applications Ltd | Phone: +44 (0)1273-821600
http://www.cogapp.com | Fax : +44 (0)1273-728866
More information about the use-livecode
mailing list