diff --git a/WEGA/contrib/lcc/lib/libc/port/gen/ssignal.c b/WEGA/contrib/lcc/lib/libc/port/gen/ssignal.c new file mode 100644 index 0000000..36a1500 --- /dev/null +++ b/WEGA/contrib/lcc/lib/libc/port/gen/ssignal.c @@ -0,0 +1,46 @@ +/* + * ssignal, gsignal: software signals + */ +#include + +/* Highest allowable user signal number */ +#define MAXSIG 16 + +/* Lowest allowable signal number (lowest user number is always 1) */ +#define MINSIG (-4) + +/* Table of signal values */ +static int (*sigs[MAXSIG-MINSIG+1])(); + +int +(*ssignal(sig, fn))() +int sig; +register int (*fn)(); +{ + register int (*savefn)(); + + if(sig >= MINSIG && sig <= MAXSIG) { + savefn = sigs[sig-MINSIG]; + sigs[sig-MINSIG] = fn; + } else + savefn = SIG_DFL; + + return(savefn); +} + +int +gsignal(sig) +register int sig; +{ + register int (*sigfn)(); + + if(sig < MINSIG || sig > MAXSIG || + (sigfn = sigs[sig-MINSIG]) == SIG_DFL) + return(0); + else if(sigfn == SIG_IGN) + return(1); + else { + sigs[sig-MINSIG] = SIG_DFL; + return((*sigfn)(sig)); + } +}