Not sure quite how these changed seeing as they're to go shortly I just want to clear...
[reactos.git] / reactos / include / crtdll / signal.h
1 /*
2 * signal.h
3 *
4 * A way to set handlers for exceptional conditions (also known as signals).
5 *
6 * This file is part of the Mingw32 package.
7 *
8 * Contributors:
9 * Created by Colin Peters <colin@bird.fu.is.saga-u.ac.jp>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 * $Revision: 1.3 $
22 * $Author: robd $
23 * $Date: 2002/11/24 18:09:56 $
24 *
25 */
26 /* added some extra signal constants */
27 #ifndef _SIGNAL_H_
28 #define _SIGNAL_H_
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33
34 /*
35 * The prototypes (below) are the easy part. The hard part is figuring
36 * out what signals are available and what numbers they are assigned
37 * along with appropriate values of SIG_DFL and SIG_IGN.
38 */
39
40 /*
41 * A pointer to a signal handler function. A signal handler takes a
42 * single int, which is the signal it handles.
43 */
44 typedef void (*_p_sig_fn_t)(int nSig);
45
46 /*
47 * These are special values of signal handler pointers which are
48 * used to send a signal to the default handler (SIG_DFL), ignore
49 * the signal (SIG_IGN), or indicate an error return (SIG_ERR).
50 */
51 #define SIG_DFL ((_p_sig_fn_t) 0)
52 #define SIG_IGN ((_p_sig_fn_t) 1)
53 #define SIG_ERR ((_p_sig_fn_t) -1)
54
55 /*
56 * The actual signal values. Using other values with signal
57 * produces a SIG_ERR return value.
58 *
59 * NOTE: SIGINT is produced when the user presses Ctrl-C.
60 * SIGILL has not been tested.
61 * SIGFPE doesn't seem to work?
62 * SIGSEGV does not catch writing to a NULL pointer (that shuts down
63 * your app; can you say "segmentation violation core dump"?).
64 * SIGTERM comes from what kind of termination request exactly?
65 * SIGBREAK is indeed produced by pressing Ctrl-Break.
66 * SIGABRT is produced by calling abort.
67 * TODO: The above results may be related to not installing an appropriate
68 * structured exception handling frame. Results may be better if I ever
69 * manage to get the SEH stuff down.
70 */
71 #define SIGINT 2 /* Interactive attention */
72 #define SIGILL 4 /* Illegal instruction */
73 #define SIGFPE 8 /* Floating point error */
74 #define SIGSEGV 11 /* Segmentation violation */
75 #define SIGTERM 15 /* Termination request */
76 #define SIGBREAK 21 /* Control-break */
77 #define SIGABRT 22 /* Abnormal termination (abort) */
78
79 #define SIGALRM 293
80 #define SIGHUP 294
81 /* SIGINT is ansi */
82 #define SIGKILL 296
83 #define SIGPIPE 297
84 #define SIGQUIT 298
85 #define SIGUSR1 299
86 #define SIGUSR2 300
87
88 #define SIGNOFP 301
89 #define SIGTRAP 302
90 #define SIGTIMR 303 /* Internal for setitimer (SIGALRM, SIGPROF) */
91 #define SIGPROF 304
92 #define SIGMAX 320
93
94 /*
95 * Call signal to set the signal handler for signal sig to the
96 * function pointed to by handler. Returns a pointer to the
97 * previous handler, or SIG_ERR if an error occurs. Initially
98 * unhandled signals defined above will return SIG_DFL.
99 */
100 _p_sig_fn_t signal(int sig, _p_sig_fn_t func);
101
102 /*
103 * Raise the signal indicated by sig. Returns non-zero on success.
104 */
105 int raise (int sig);
106
107 #ifdef __cplusplus
108 }
109 #endif
110
111 #endif