+ /* handle SIGINT differently since it is the only
+ asychronous interrupt we handle */
+ if( signo == SIGINT) {
+ if( ++sigintcnt == 1)
+ { /* if this is the first interrupt, we just set a flag
+ which will be checked in qfuncl and eval. This will
+ allow us to handle these interrupts when we are
+ ready.
+ */
+ exception = TRUE;
+ /*putchar('A');*/
+ fflush(stdout);
+ sigstruck &= ~(1 << signo);
+ return;
+ }
+ else if (sigintcnt == 2)
+ { /* the setting of exception was ignored, we better
+ make sure that all calls from compiled code
+ go through qlinker
+ */
+ signal(SIGINT,SIG_IGN); /* this may take a while, dont allow ints*/
+ clrtt(0);
+ /*putchar('B');*/
+ fflush(stdout);
+ signal(SIGINT,siginth); /* ok to interrupt again */
+ sigstruck &= ~(1 << signo);
+ return;
+ }
+ else {
+ /*putchar('C');*/
+ fflush(stdout);
+ }
+ }
+
+ sigcall(signo);