annotate src/syssignal.h @ 5773:94a6b8fbd56e

Use a face, show more context around open parenthesis, #'blink-matching-open lisp/ChangeLog addition: 2013-12-17 Aidan Kehoe <kehoea@parhasard.net> * simple.el (blink-matching-open): When showing the opening parenthesis in the minibiffer, use the isearch face for it, in case there are multiple parentheses in the text shown. When writing moderately involved macros, it's often not enough just to show the backquote context before the parenthesis (e.g. @,.`). Skip over that when searching for useful context in the same way we skip over space and tab. * simple.el (message): * simple.el (lmessage): If there are no ARGS, don't call #'format. This allows extent information to be passed through to the minibuffer. It's probably better still to update #'format to preserve extent info.
author Aidan Kehoe <kehoea@parhasard.net>
date Tue, 17 Dec 2013 20:49:52 +0200
parents 308d34e9f07d
children 574f0cded429
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 /* syssignal.h - System-dependent definitions for signals.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Copyright (C) 1992, 1993 Free Software Foundation, Inc.
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 771
diff changeset
3 Copyright (C) 1996 Ben Wing.
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 771
diff changeset
4
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 4759
diff changeset
7 XEmacs is free software: you can redistribute it and/or modify it
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 4759
diff changeset
9 Free Software Foundation, either version 3 of the License, or (at your
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 4759
diff changeset
10 option) any later version.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 XEmacs is distributed in the hope that it will be useful, but WITHOUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 4759
diff changeset
18 along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 /* Synched up with: FSF 19.30. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
22 #ifndef INCLUDED_syssignal_h_
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
23 #define INCLUDED_syssignal_h_
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 /* In the old world, one could not #include <signal.h> here. The party line
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 was that that header should always be #included before <config.h>, because
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 some configuration files (like s/hpux.h) indicate that SIGIO doesn't work
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 by #undef-ing SIGIO, and if this file #includes <signal.h>, then that will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 re-#define SIGIO and confuse things.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 This was, however, a completely fucked up state of affairs, because on some
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 systems it's necessary for the s/m files to #define things in order to get
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 <signal.h> to provide the right typedefs, etc. And it's generally a broken
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 concept for <config.h> to not be the very very first file included.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 So instead of #undef'ing SIGIO in the various s/m files, I've changed them
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 to define BROKEN_SIGIO instead, then we (syssignal.h) do an #undef SIGIO
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 at the end, after including signal.h. Therefore, it's important that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 <signal.h> not be included after "syssignal.h", but that's the normal state:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 nothing should be directly including <signal.h> these days.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 -- jwz, 29-nov-93
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 #include <signal.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 #include <errno.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 /* SIGPOLL is the SVR4 signal. Those systems generally define
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 SIGIO as an alias for SIGPOLL, but just in case ... */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 #if defined (BROKEN_SIGIO)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 # if defined (SIGIO) && defined (SIGPOLL)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 # if SIGIO == SIGPOLL
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 # undef SIGIO
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 # undef SIGPOLL
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 # else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 # undef SIGIO
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 # endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 # endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 #else /* Not BROKEN_SIGIO */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 # if !defined (SIGIO) && defined (SIGPOLL)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 # define SIGIO SIGPOLL
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 # endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 /* Define SIGCHLD as an alias for SIGCLD. There are many conditionals
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 testing SIGCHLD. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 #if defined (SIGCLD) && !defined (SIGCHLD)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 # define SIGCHLD SIGCLD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 #endif /* SIGCHLD */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 #ifdef BROKEN_SIGCHLD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 #undef SIGCHLD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 #ifdef SIGCHLD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 #define EMACS_BLOCK_SIGCHLD EMACS_BLOCK_SIGNAL (SIGCHLD)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 #define EMACS_UNBLOCK_SIGCHLD EMACS_UNBLOCK_SIGNAL (SIGCHLD)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 #define EMACS_BLOCK_SIGCHLD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 #define EMACS_UNBLOCK_SIGCHLD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 /* According to W.R. Stevens __Advanced Programming in the Unix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 Environment__, there are four different paradigms for handling
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 signals. We use autoconf to tell us which one applies.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 Note that on some systems, more than one paradigm is implemented
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 (typically, the POSIX sigaction/sigprocmask and either the older
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 SYSV or BSD way). In such a case, we prefer the POSIX way.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
91 We used to say this:
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
92
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
93 [[ NOTE: We use EMACS_* macros for most signal operations, but
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 just signal() for the standard signal-setting operation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 Perhaps we should change this to EMACS_SIGNAL(), but that runs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 the risk of someone forgetting this convention and calling
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
97 signal() directly. ]]
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
98
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
99 But current policy is to avoid playing with macros as much as
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
100 possible, since in the long run it really just ends up creating
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
101 unmaintainable code -- someone newly reading the code is never
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
102 going to realize exactly which calls are redirected, and on
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
103 which systems, and where the redirection occurs.
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
104
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
105 Possibly we should use the new "qxe" convention.
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
106 */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 814
diff changeset
108 typedef RETSIGTYPE (XCDECL * signal_handler_t) (int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 #if defined (HAVE_SIGPROCMASK)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 /* The POSIX way (sigaction, sigprocmask, sigpending, sigsuspend) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
114 signal_handler_t qxe_reliable_signal (int signal_number,
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
115 signal_handler_t action);
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
116
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
117 #define EMACS_SIGNAL qxe_reliable_signal
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 #define EMACS_BLOCK_SIGNAL(sig) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 sigset_t ES_mask; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 sigemptyset (&ES_mask); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 sigaddset (&ES_mask, sig); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 sigprocmask (SIG_BLOCK, &ES_mask, NULL); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 #define EMACS_UNBLOCK_SIGNAL(sig) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 sigset_t ES_mask; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 sigemptyset (&ES_mask); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 sigaddset (&ES_mask, sig); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 sigprocmask (SIG_UNBLOCK, &ES_mask, NULL); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 #define EMACS_UNBLOCK_ALL_SIGNALS() do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 sigset_t ES_mask; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 sigemptyset (&ES_mask); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 sigprocmask (SIG_SETMASK, &ES_mask, NULL); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 #define EMACS_WAIT_FOR_SIGNAL(sig) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 sigset_t ES_mask; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 sigprocmask (0, NULL, &ES_mask); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 sigdelset (&ES_mask, sig); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 sigsuspend (&ES_mask); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 #define EMACS_REESTABLISH_SIGNAL(sig, handler)
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 978
diff changeset
147 #define SIG_ARG_MAYBE_UNUSED(decl) UNUSED (decl)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 #elif defined (HAVE_SIGBLOCK)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 /* The older BSD way (signal/sigvec, sigblock, sigsetmask, sigpause) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 /* It's OK to use signal() here directly. No unreliable signal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 problems. However, we use sigvec() because it allows us to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 request interruptible I/O. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
157 #define EMACS_SIGNAL qxe_reliable_signal
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 /* Is it necessary to define sigmask like this? */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 #ifndef sigmask
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 # define sigmask(no) (1L << ((no) - 1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 #define EMACS_BLOCK_SIGNAL(sig) sigblock (sigmask (sig))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 #define EMACS_UNBLOCK_SIGNAL(sig) sigsetmask (sigblock (0) & ~sigmask (sig))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 #define EMACS_UNBLOCK_ALL_SIGNALS() sigsetmask (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 #define EMACS_WAIT_FOR_SIGNAL(sig) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 int ES_mask = sigblock (0); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 sigpause (ES_mask & ~sigmask (sig)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 #define EMACS_REESTABLISH_SIGNAL(sig, handler)
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 978
diff changeset
173 #define SIG_ARG_MAYBE_UNUSED(decl) UNUSED (decl)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 #elif defined (HAVE_SIGHOLD)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 /* The older SYSV way (signal/sigset, sighold, sigrelse, sigignore,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 sigpause) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
180 #define EMACS_SIGNAL sigset
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 #define EMACS_BLOCK_SIGNAL(sig) sighold (sig)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 #define EMACS_UNBLOCK_SIGNAL(sig) sigrelse (sig)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 /* #### There's not really any simple way to implement this.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 Since EMACS_UNBLOCK_ALL_SIGNALS() is only called once (at startup),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 it's probably OK to just ignore it. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 #define EMACS_UNBLOCK_ALL_SIGNALS() 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 #define EMACS_WAIT_FOR_SIGNAL(sig) sigpause (sig)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 #define EMACS_REESTABLISH_SIGNAL(sig, handler)
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 978
diff changeset
189 #define SIG_ARG_MAYBE_UNUSED(decl) UNUSED (decl)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
191 #elif defined (WIN32_NATIVE)
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
192
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
193 /* MS Windows signal emulation (in turns emulates the sigset/sighold
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
194 paradigm) */
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
195
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
196 #define EMACS_SIGNAL mswindows_sigset
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
197 #define EMACS_BLOCK_SIGNAL(sig) mswindows_sighold (sig)
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
198 #define EMACS_UNBLOCK_SIGNAL(sig) mswindows_sigrelse (sig)
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
199 /* #### There's not really any simple way to implement this.
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
200 Since EMACS_UNBLOCK_ALL_SIGNALS() is only called once (at startup),
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
201 it's probably OK to just ignore it. */
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
202 #define EMACS_UNBLOCK_ALL_SIGNALS() 0
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
203 #define EMACS_WAIT_FOR_SIGNAL(sig) mswindows_sigpause (sig)
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
204 #define EMACS_REESTABLISH_SIGNAL(sig, handler)
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 978
diff changeset
205 #define SIG_ARG_MAYBE_UNUSED(decl) UNUSED (decl)
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
206
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
207 /* Defines that we need that aren't in the standard signal.h */
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
208 #define SIGHUP 1 /* Hang up */
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
209 #define SIGQUIT 3 /* Quit process */
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
210 #define SIGKILL 9 /* Die, die die */
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
211 #define SIGALRM 14 /* Alarm */
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
212 #define SIGPROF 29 /* Profiling timer exp */
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
213
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 /* The oldest SYSV way (signal only; unreliable signals) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 /* Old USG systems don't really have signal blocking.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 We indicate this by not defining EMACS_BLOCK_SIGNAL or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 EMACS_WAIT_FOR_SIGNAL. */
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
221 #define EMACS_SIGNAL signal
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 #define EMACS_UNBLOCK_SIGNAL(sig) 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 #define EMACS_UNBLOCK_ALL_SIGNALS() 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 #define EMACS_REESTABLISH_SIGNAL(sig, handler) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 int old_errno = errno; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 signal (sig, handler); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 errno = old_errno; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 } while (0)
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 978
diff changeset
230 #define SIG_ARG_MAYBE_UNUSED(decl) decl
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 /* Under SYSV, setting a signal handler for SIGCLD causes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 SIGCLD to immediately be sent if there any unwaited processes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 out there. This means that the SIGCLD handler *must* call
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 wait() to reap the status of all processes -- it cannot
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 simply set a flag and then reestablish the handler, because
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 it will get called again, infinitely. We only need to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 worry about this on systems where signals need to be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 reestablished (SYSV Release 2 and earlier). */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 #define OBNOXIOUS_SYSV_SIGCLD_BEHAVIOR
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
242 #endif /* different signalling methods */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 /* On bsd, [man says] kill does not accept a negative number to kill a pgrp.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 Must do that using the killpg call. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
246 #ifdef HAVE_KILLPG
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
247 #define EMACS_KILLPG(pid, signo) killpg (pid, signo)
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 771
diff changeset
248 #elif defined (WIN32_NATIVE)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 771
diff changeset
249 #define EMACS_KILLPG(pid, signo) should never be called
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 #else
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
251 #define EMACS_KILLPG(pid, signo) kill (-(pid), signo)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 #ifndef NSIG
978
13e47461d509 [xemacs-hg @ 2002-08-29 19:45:20 by james]
james
parents: 872
diff changeset
255 # ifdef USG5_4
13e47461d509 [xemacs-hg @ 2002-08-29 19:45:20 by james]
james
parents: 872
diff changeset
256 /* Some SVr4s don't define NSIG in sys/signal.h for ANSI environments;
13e47461d509 [xemacs-hg @ 2002-08-29 19:45:20 by james]
james
parents: 872
diff changeset
257 * instead, there's a system variable _sys_nsig. Unfortunately, we need the
13e47461d509 [xemacs-hg @ 2002-08-29 19:45:20 by james]
james
parents: 872
diff changeset
258 * constant to dimension an array. So wire in the appropriate value here.
13e47461d509 [xemacs-hg @ 2002-08-29 19:45:20 by james]
james
parents: 872
diff changeset
259 */
13e47461d509 [xemacs-hg @ 2002-08-29 19:45:20 by james]
james
parents: 872
diff changeset
260 # define NSIG 32
13e47461d509 [xemacs-hg @ 2002-08-29 19:45:20 by james]
james
parents: 872
diff changeset
261 # else
13e47461d509 [xemacs-hg @ 2002-08-29 19:45:20 by james]
james
parents: 872
diff changeset
262 # define NSIG (SIGUSR2+1) /* guess how many elements are in sys_siglist... */
13e47461d509 [xemacs-hg @ 2002-08-29 19:45:20 by james]
james
parents: 872
diff changeset
263 # endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265
2651
3580ae2ce979 [xemacs-hg @ 2005-03-11 11:18:44 by malcolmp]
malcolmp
parents: 2286
diff changeset
266 /* HAVE_DECL_SYS_SIGLIST is determined by configure. On Linux, it seems,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 configure incorrectly fails to find it, so s/linux.h defines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 HAVE_SYS_SIGLIST. */
2655
4769b9c268eb [xemacs-hg @ 2005-03-12 11:00:20 by malcolmp]
malcolmp
parents: 2651
diff changeset
269 #if (!defined(HAVE_DECL_SYS_SIGLIST) || !HAVE_DECL_SYS_SIGLIST ) && !defined (HAVE_SYS_SIGLIST)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
270 extern const char *sys_siglist[];
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 #ifdef SIGDANGER
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 SIGTYPE memory_warning_signal (int sig);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
277 #if defined (WIN32_NATIVE) || defined (CYGWIN_BROKEN_SIGNALS)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
278 typedef void (__cdecl *mswindows_sighandler) (int);
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
279
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
280 /* Prototypes for signal functions, see win32.c */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
281 int mswindows_sighold (int nsig);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
282 int mswindows_sigrelse (int nsig);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
283 int mswindows_sigpause (int nsig);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
284 int mswindows_raise (int nsig);
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
285 mswindows_sighandler mswindows_sigset (int sig, mswindows_sighandler handler);
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
286
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
287 #endif /* defined (WIN32_NATIVE) || defined (CYGWIN_BROKEN_SIGNALS) */
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
288
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
289 signal_handler_t set_timeout_signal (int signal_number,
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
290 signal_handler_t action);
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
291
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
293 #endif /* INCLUDED_syssignal_h_ */