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

  1. /* signal blocking stuff for MiNT */
  2.  
  3. #include <signal.h>
  4. #include <errno.h>
  5. #include <mintbind.h>
  6. #include <unistd.h>
  7.  
  8. extern int __mint;
  9. extern long _sigpending, _sigmask;
  10.  
  11. /* checksigs: for TOS: this checks to see if we just unmasked any
  12.  * pending signals
  13.  */
  14. static void
  15. checksigs()
  16. {
  17.     register int sig;
  18.     register long send;
  19.  
  20.     if (send = (_sigpending & ~_sigmask)) {
  21.         for (sig = 0; sig < NSIG; sig++) {
  22.             if (send & (1L << sig))
  23.                 kill(0, sig);
  24.         }
  25.     }
  26. }
  27.  
  28. long
  29. sigsetmask(mask)
  30.     long mask;
  31. {
  32.     register long omask;
  33.  
  34.     if (__mint)
  35.         return Psigsetmask(mask);
  36.  
  37.     omask = _sigmask;
  38.     _sigmask = mask;
  39.     checksigs(_sigmask);
  40.     return omask;
  41. }
  42.  
  43. long
  44. sigblock(mask)
  45.     long mask;
  46. {
  47.     register long omask;
  48.  
  49.     if (__mint)
  50.         return Psigblock(mask);
  51.  
  52.     omask = _sigmask;
  53.     _sigmask |= mask;
  54.     return omask;
  55. }
  56.