home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / texinfo-3.7-src.tgz / tar.out / fsf / texinfo / info / signals.h < prev    next >
C/C++ Source or Header  |  1996-09-28  |  3KB  |  90 lines

  1. /* signals.h -- Header to include system dependent signal definitions. */
  2.  
  3. /* This file is part of GNU Info, a program for reading online documentation
  4.    stored in Info format.
  5.  
  6.    Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc.
  7.  
  8.    This program is free software; you can redistribute it and/or modify
  9.    it under the terms of the GNU General Public License as published by
  10.    the Free Software Foundation; either version 2, or (at your option)
  11.    any later version.
  12.  
  13.    This program is distributed in the hope that it will be useful,
  14.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.    GNU General Public License for more details.
  17.  
  18.    You should have received a copy of the GNU General Public License
  19.    along with this program; if not, write to the Free Software
  20.    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  21.  
  22.    Written by Brian Fox (bfox@ai.mit.edu). */
  23.  
  24. #if !defined (_SIGNALS_H_)
  25. #define _SIGNALS_H_
  26.  
  27. #include <signal.h>
  28.  
  29. #if !defined (HAVE_SIGPROCMASK) && !defined (sigmask)
  30. #  define sigmask(x) (1 << ((x)-1))
  31. #endif /* !HAVE_SIGPROCMASK && !sigmask */
  32.  
  33. #if !defined (HAVE_SIGPROCMASK)
  34. #  if !defined (SIG_BLOCK)
  35. #    define SIG_UNBLOCK 1
  36. #    define SIG_BLOCK   2
  37. #    define SIG_SETMASK 3
  38. #  endif /* SIG_BLOCK */
  39.  
  40. /* Type of a signal set. */
  41. #  define sigset_t int
  42.  
  43. /* Make SET have no signals in it. */
  44. #  define sigemptyset(set) (*(set) = (sigset_t)0x0)
  45.  
  46. /* Make SET have the full range of signal specifications possible. */
  47. #  define sigfillset(set) (*(set) = (sigset_t)0xffffffffff)
  48.  
  49. /* Add SIG to the contents of SET. */
  50. #  define sigaddset(set, sig) *(set) |= sigmask (sig)
  51.  
  52. /* Delete SIG from the contents of SET. */
  53. #  define sigdelset(set, sig) *(set) &= ~(sigmask (sig))
  54.  
  55. /* Tell if SET contains SIG. */
  56. #  define sigismember(set, sig) (*(set) & (sigmask (sig)))
  57.  
  58. /* Suspend the process until the reception of one of the signals
  59.    not present in SET. */
  60. #  define sigsuspend(set) sigpause (*(set))
  61. #endif /* !HAVE_SIGPROCMASK */
  62.  
  63. #if defined (HAVE_SIGPROCMASK) || defined (HAVE_SIGSETMASK)
  64. /* These definitions are used both in POSIX and non-POSIX implementations. */
  65.  
  66. #define BLOCK_SIGNAL(sig) \
  67.   do { \
  68.     sigset_t nvar, ovar; \
  69.     sigemptyset (&nvar); \
  70.     sigemptyset (&ovar); \
  71.     sigaddset (&nvar, sig); \
  72.     sigprocmask (SIG_BLOCK, &nvar, &ovar); \
  73.   } while (0)
  74.  
  75. #define UNBLOCK_SIGNAL(sig) \
  76.   do { \
  77.     sigset_t nvar, ovar; \
  78.     sigemptyset (&ovar); \
  79.     sigemptyset (&nvar); \
  80.     sigaddset (&nvar, sig); \
  81.     sigprocmask (SIG_UNBLOCK, &nvar, &ovar); \
  82.   } while (0)
  83.  
  84. #else /* !HAVE_SIGPROCMASK && !HAVE_SIGSETMASK */
  85. #  define BLOCK_SIGNAL(sig)
  86. #  define UNBLOCK_SIGNAL(sig)
  87. #endif /* !HAVE_SIGPROCMASK && !HAVE_SIGSETMASK */
  88.  
  89. #endif /* !_SIGNALS_H_ */
  90.