home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / zip / gnu / mntlib16.lzh / MNTLIB16 / SIGNAL.C < prev    next >
C/C++ Source or Header  |  1993-07-29  |  1KB  |  55 lines

  1. /* signal() for MiNT; written by ERS, placed in the public domain */
  2.  
  3. #include <errno.h>
  4. #include <osbind.h>
  5. #include <mintbind.h>
  6. #include <signal.h>
  7.  
  8. /* vector of signal handlers (for TOS) */
  9. __Sigfunc _sig_handler[NSIG];
  10.  
  11. /* vector giving which signals are currently blocked from delivery (for TOS) */
  12. long _sigmask;
  13.  
  14. /* vector giving an indication of which signals are currently pending (for TOS) */
  15. long _sigpending;
  16.  
  17. __Sigfunc
  18. signal(sig, func)
  19.     int sig;
  20.     __Sigfunc func;
  21. {
  22.     long old;
  23.     extern int __mint;
  24.     __Sigfunc oldfunc;
  25.  
  26.     if (__mint == 0) {
  27.         if (sig < 0 || sig >= NSIG) {
  28.             errno = ERANGE;
  29.             return SIG_ERR;
  30.         }
  31.         oldfunc = _sig_handler[sig];
  32.         _sig_handler[sig] = func;
  33.         return oldfunc;
  34.     }
  35.  
  36.     old = Psignal((short)sig, (long)func);
  37.     if (old < 0) {
  38.         errno = -old;
  39.         return SIG_ERR;
  40.     }
  41.     return (__Sigfunc) old;
  42. }
  43.  
  44. /* initialize signal handlers (for dumped applications) */
  45.  
  46. void
  47. _init_signal()
  48. {
  49.     int i;
  50.  
  51.     for (i = 0; i < NSIG; i++)
  52.         _sig_handler[i] = SIG_DFL;
  53.     _sigpending = _sigmask = 0;
  54. }
  55.