dillon@PAVEPAWS.BERKELEY.EDU (Matt Dillon) (05/11/86)
I am currently attempting to impliment Ctl-C in my shell, and am
having some problems with exception handling. (Please do not tell me
to use the provided break-checking routines, they do not do enough)
The problem is, there are exactly 3 pages in all my manuals which
describe exception handling.
* I get my task structure w/ FindTask(NULL);
* I clear signals with SetSignal(0L, SIGBREAKF_CTRL_C)
* I set task->tc_ExceptCode to my exception handler.
* I turn on exception processing w/
SetExcept(SIGBREAKF_CTRL_C,SIGBREAKF_CTRL_C)
my exception handling routine is:
exception()
{
++some_global_variable;
return (SIGBREAKF_CTRL_C);
}
(A) When I SetExcept(), I IMMEDIATELY get an exception. Why? there are no
pending signals because I cleared the signal mask.
(B) Several things are unclear
What should exception() return in D0? The manual says something
like 'return what was in D0 originally, which is a mask of the exceptions
which have occured'. It isn't explicit enough.
The Manual says that it pushes all the registers et all... so I
don't have to (thus I used a C exception handler). right?
Can I longjump() out of the exception handler?
Who clears the signal flag and when?
Who clears the exception flag and when?
(C) There seems to be a problem
The exception mask contains bits set (before I change anything)
sometimes, other times there is nothing.
The ExceptCode vector already contains something... FC2A98. What
does this routine do (since I'm basically overiding it)?
-----------------------------
Also, I want to be able to pass a Ctl-C signal on to commands currently
being executed. How does CLI do this?
Thanks,
-Matt