#include "defs.h" #include /* ======== fault handling routines ======== */ #define MAXSIG 16 #define SIGSET 01 #define SIGMOD 02 CHAR trapflg[MAXSIG]; INT mkfault; ERR sigerr; INT fault(sig) REG INT sig; { signal(sig,fault); mkfault |= SIGSET; trapflg[sig] |= SIGSET; } ignsig(n) { REG INT i; IF (signal(i=n,SIG_IGN)!=SIG_IGN) THEN trapflg[i] |= SIGMOD; return(0); ELSE return(1); FI } getsig(n) { REG INT i; IF trapflg[i=n]&SIGMOD ORF ignsig(i)==0 THEN signal(i,fault); FI } stdsigs() { getsig(SIGINT); ignsig(SIGQUIT); getsig(SIGKILL); } oldsigs() { REG INT i=MAXSIG; WHILE i-- DO clrsig(i); OD mkfault=0; } clrsig(i) INT i; { IF trapflg[i]&SIGMOD THEN signal(i,fault); trapflg[i] &= ~SIGMOD; FI } sigchk() { /* if signals then longjmp */ IF mkfault THEN longjmp(sigerr, 1); abend("sigchk jump"); FI }