/* hosts/amiga/signal_rr.c ** ** Just the exception catcher -- it needs registerized args (-mRR) which ** are not used elsewhere. ** ** 28-Feb-93 [lars] Done for DICE 2.07.53 */ #include <exec/types.h> #ifdef INCLUDE_VERSION #include <dos/dos.h> #else #include <libraries/dos.h> #endif #include "nsignal.h" extern __stkargs ULONG SetSignal(unsigned long newSignals, unsigned long signalSet); /*-----------------------------------------------------------------------*/ extern ULONG sys_signal_alarm, /* The system-signal-masks */ sys_signal_hup, sys_signal_usr; extern void (*handler_hup) (void), (*handler_alarm) (void), (*handler_usr) (void); /*----------------------------------------------------------------------- ** ULONG catch_exception (ULONG mask) ** ** Called by the OS if the task gets an exception, this dispatch to ** the appropriate signal-function. ** Note that the std-raise() also removes the handler, so our functions ** are called manually. */ __regargs __geta4 ULONG catch_exception(__D0 ULONG mask) { /* Handle our special exceptions */ if (mask & sys_signal_alarm) (*handler_alarm) (); if (mask & sys_signal_hup) (*handler_hup) (); if (mask & sys_signal_usr) (*handler_usr) (); /* Stop select() anyway */ SetSignal(EXT_SIGINT, EXT_SIGINT); return mask; } /*************************************************************************/