home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume25 / tcsh-6.01 / part03 / tc.sig.h < prev    next >
C/C++ Source or Header  |  1991-12-19  |  6KB  |  194 lines

  1. /* $Header: /home/hyperion/mu/christos/src/sys/tcsh-6.01/RCS/tc.sig.h,v 3.5 1991/11/26 04:41:23 christos Exp $ */
  2. /*
  3.  * tc.sig.h: Signal handling
  4.  *
  5.  */
  6. /*-
  7.  * Copyright (c) 1980, 1991 The Regents of the University of California.
  8.  * All rights reserved.
  9.  *
  10.  * Redistribution and use in source and binary forms, with or without
  11.  * modification, are permitted provided that the following conditions
  12.  * are met:
  13.  * 1. Redistributions of source code must retain the above copyright
  14.  *    notice, this list of conditions and the following disclaimer.
  15.  * 2. Redistributions in binary form must reproduce the above copyright
  16.  *    notice, this list of conditions and the following disclaimer in the
  17.  *    documentation and/or other materials provided with the distribution.
  18.  * 3. All advertising materials mentioning features or use of this software
  19.  *    must display the following acknowledgement:
  20.  *    This product includes software developed by the University of
  21.  *    California, Berkeley and its contributors.
  22.  * 4. Neither the name of the University nor the names of its contributors
  23.  *    may be used to endorse or promote products derived from this software
  24.  *    without specific prior written permission.
  25.  *
  26.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  27.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  28.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  29.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  30.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  31.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  32.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  33.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  34.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  35.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  36.  * SUCH DAMAGE.
  37.  */
  38. #ifndef _h_tc_sig
  39. #define _h_tc_sig
  40.  
  41. #if (SVID > 0) || defined(BSD4_4)
  42. # include <signal.h>
  43. # ifndef SIGCHLD
  44. #  define SIGCHLD SIGCLD
  45. # endif                /* SIGCHLD */
  46. #else                /* SVID == 0 */
  47. # include <sys/signal.h>
  48. #endif                /* SVID > 0 */
  49.  
  50. #ifdef sun
  51. # define SAVESIGVEC
  52. #endif
  53.  
  54. #if SVID > 0 && SVID < 3 && !defined(BSDSIGS)
  55. /*
  56.  * If we have unreliable signals...
  57.  */
  58. # define UNRELSIG
  59. #endif /* SVID > 0 && SVID < 3 && !BSDSIGS */
  60.  
  61. #ifdef BSDSIGS
  62. /*
  63.  * sigvec is not the same everywhere
  64.  */
  65. # if defined(_SEQUENT_) || (defined(_POSIX_SOURCE) && !defined(hpux))
  66. #  define HAVE_SIGVEC
  67. #  define mysigvec(a, b, c)    sigaction(a, b, c)
  68. typedef struct sigaction sigvec_t;
  69. #  define sv_handler sa_handler
  70. #  define sv_flags sa_flags
  71. # endif    /* _SEQUENT || (_POSIX_SOURCE && !hpux) */
  72.  
  73. # ifdef hpux
  74. #  define HAVE_SIGVEC
  75. #  define mysigvec(a, b, c)    sigvector(a, b, c)
  76. typedef struct sigvec sigvec_t;
  77. #  define NEEDsignal
  78. # endif    /* hpux */
  79.  
  80. # ifndef HAVE_SIGVEC
  81. #  define mysigvec(a, b, c)    sigvec(a, b, c)
  82. typedef struct sigvec sigvec_t;
  83. # endif    /* HAVE_SIGVEC */
  84.  
  85. # undef HAVE_SIGVEC
  86. #endif /* BSDSIGS */
  87.  
  88. #if SVID > 0
  89. # ifdef BSDJOBS
  90. /* here I assume that systems that have bsdjobs implement the
  91.  * the setpgrp call correctly. Otherwise defining this would
  92.  * work, but it would kill the world, because all the setpgrp
  93.  * code is the the part defined when BSDJOBS are defined
  94.  * NOTE: we don't want killpg(a, b) == kill(-getpgrp(a), b)
  95.  * cause process a might be already dead and getpgrp would fail
  96.  */
  97. #  define killpg(a, b) kill(-(a), (b))
  98. # else
  99. /* this is the poor man's version of killpg()! Just kill the
  100.  * current process and don't worry about the rest. Someday
  101.  * I hope I get to fix that.
  102.  */
  103. #  define killpg(a, b) kill((a), (b))
  104. # endif    /* BSDJOBS */
  105. #endif /* SVID > 0 */
  106.  
  107. #ifdef _MINIX
  108. #include <signal.h>
  109. #  define killpg(a, b) kill((a), (b))
  110. #endif /* _MINIX */
  111.  
  112. #ifdef BSDSIGS
  113. /*
  114.  * For 4.2bsd signals.
  115.  */
  116. # ifdef sigmask
  117. #  undef sigmask
  118. # endif                /* sigmask */
  119. # define    sigmask(s)    (1 << ((s)-1))
  120. # ifdef _SEQUENT_
  121. #  define     sigpause(a)    bsd_sigpause(a)
  122. #  define     signal(a, b)    sigset(a, b)
  123. # else /* _SEQUENT_ */
  124. #  define    sighold(s)    sigblock(sigmask(s))
  125. #  define    sigignore(s)    signal(s, SIG_IGN)
  126. #  define     sigset(s, a)    signal(s, a)
  127. # endif    /* _SEQUENT_ */
  128. # ifdef aiws
  129. #  define     sigrelse(a)    sigsetmask(sigblock(0) & ~sigmask(a))
  130. #  undef    killpg
  131. #  define     killpg(a, b)    kill(-getpgrp(a), b)
  132. #  define    NEEDsignal
  133. # endif    /* aiws */
  134. #endif /* BSDSIGS */
  135.  
  136.  
  137. /*
  138.  * We choose a define for the window signal if it exists..
  139.  */
  140. #ifdef SIGWINCH
  141. # define SIG_WINDOW SIGWINCH
  142. #else
  143. # ifdef SIGWINDOW
  144. #  define SIG_WINDOW SIGWINDOW
  145. # endif    /* SIGWINDOW */
  146. #endif /* SIGWINCH */
  147.  
  148. #if defined(convex) || defined(__convex__)
  149. # ifdef notdef
  150. /* Does not seem to work right... Christos */
  151. #  define SIGSYNCH       0 
  152. # endif
  153. # ifdef SIGSYNCH
  154. #  define SYNCHMASK     (sigmask(SIGCHLD)|sigmask(SIGSYNCH))
  155. # else
  156. #  define SYNCHMASK     (sigmask(SIGCHLD))
  157. # endif
  158. extern sigret_t synch_handler();
  159. #endif /* convex || __convex__ */
  160.  
  161. #ifdef SAVESIGVEC
  162. # define NSIGSAVED 7
  163.  /*
  164.   * These are not inline for speed. gcc -traditional -O on the sparc ignores
  165.   * the fact that vfork() corrupts the registers. Calling a routine is not
  166.   * nice, since it can make the compiler put some things that we want saved
  167.   * into registers                 - christos
  168.   */
  169. # define savesigvec(sv)                        \
  170.    (mysigvec(SIGINT,  (sigvec_t *) 0, &(sv)[0]),        \
  171.     mysigvec(SIGQUIT, (sigvec_t *) 0, &(sv)[1]),        \
  172.     mysigvec(SIGTSTP, (sigvec_t *) 0, &(sv)[2]),        \
  173.     mysigvec(SIGTTIN, (sigvec_t *) 0, &(sv)[3]),        \
  174.     mysigvec(SIGTTOU, (sigvec_t *) 0, &(sv)[4]),        \
  175.     mysigvec(SIGTERM, (sigvec_t *) 0, &(sv)[5]),        \
  176.     mysigvec(SIGHUP,  (sigvec_t *) 0, &(sv)[6]),        \
  177.     sigblock(sigmask(SIGINT) | sigmask(SIGQUIT) |         \
  178.         sigmask(SIGTSTP) | sigmask(SIGTTIN) |         \
  179.         sigmask(SIGTTOU) | sigmask(SIGTERM) |        \
  180.         sigmask(SIGHUP)))
  181.  
  182. # define restoresigvec(sv, sm)                    \
  183.     (void) (mysigvec(SIGINT,  &(sv)[0], (sigvec_t *) 0),    \
  184.         mysigvec(SIGQUIT, &(sv)[1], (sigvec_t *) 0),    \
  185.         mysigvec(SIGTSTP, &(sv)[2], (sigvec_t *) 0),    \
  186.         mysigvec(SIGTTIN, &(sv)[3], (sigvec_t *) 0),    \
  187.         mysigvec(SIGTTOU, &(sv)[4], (sigvec_t *) 0),    \
  188.         mysigvec(SIGTERM, &(sv)[5], (sigvec_t *) 0),    \
  189.         mysigvec(SIGHUP,  &(sv)[6], (sigvec_t *) 0),    \
  190.         sigsetmask(sm))
  191. # endif                /* SAVESIGVEC */
  192.  
  193. #endif                /* _h_tc_sig */
  194.