--- /dev/null
+/* $Id$ */
+
+/* raise( int )
+
+ This file is part of the Public Domain C Library (PDCLib).
+ Permission is granted to use, modify, and / or redistribute at will.
+*/
+
+#include <signal.h>
+
+#ifndef REGTEST
+
+extern void (*_PDCLIB_sigabrt)( int );
+extern void (*_PDCLIB_sigfpe)( int );
+extern void (*_PDCLIB_sigill)( int );
+extern void (*_PDCLIB_sigint)( int );
+extern void (*_PDCLIB_sigsegv)( int );
+extern void (*_PDCLIB_sigterm)( int );
+
+int raise( int sig )
+{
+ switch ( sig )
+ {
+ case SIGABRT:
+ _PDCLIB_sigabrt( sig );
+ break;
+ case SIGFPE:
+ _PDCLIB_sigfpe( sig );
+ break;
+ case SIGILL:
+ _PDCLIB_sigill( sig );
+ break;
+ case SIGINT:
+ _PDCLIB_sigint( sig );
+ break;
+ case SIGSEGV:
+ _PDCLIB_sigsegv( sig );
+ break;
+ case SIGTERM:
+ _PDCLIB_sigterm( sig );
+ break;
+ default:
+ /* TODO: Implement. */
+ break;
+ }
+ /* TODO: Implement. */
+ return 0;
+}
+
+#endif
+
+#ifdef TEST
+#include <_PDCLIB_test.h>
+
+int main( void )
+{
+ TESTCASE( NO_TESTDRIVER );
+ return TEST_RESULTS;
+}
+#endif
--- /dev/null
+/* $Id$ */
+
+/* signal( int sig, void (*func)( int ) )
+
+ This file is part of the Public Domain C Library (PDCLib).
+ Permission is granted to use, modify, and / or redistribute at will.
+*/
+
+#include <signal.h>
+
+#ifndef REGTEST
+
+#include <stdlib.h>
+
+static void default_handler( int sig )
+{
+ /* TODO: Implement error message */
+ exit( EXIT_FAILURE );
+}
+
+void (*_PDCLIB_sigabrt)( int ) = default_handler;
+void (*_PDCLIB_sigfpe)( int ) = default_handler;
+void (*_PDCLIB_sigill)( int ) = default_handler;
+void (*_PDCLIB_sigint)( int ) = default_handler;
+void (*_PDCLIB_sigsegv)( int ) = default_handler;
+void (*_PDCLIB_sigterm)( int ) = default_handler;
+
+void (*signal( int sig, void (*func)( int ) ) )( int )
+{
+ void (*oldhandler)( int );
+ switch ( sig )
+ {
+ case SIGABRT:
+ oldhandler = _PDCLIB_sigabrt;
+ _PDCLIB_sigabrt = func;
+ break;
+ case SIGFPE:
+ oldhandler = _PDCLIB_sigfpe;
+ _PDCLIB_sigfpe = func;
+ break;
+ case SIGILL:
+ oldhandler = _PDCLIB_sigill;
+ _PDCLIB_sigill = func;
+ break;
+ case SIGINT:
+ oldhandler = _PDCLIB_sigint;
+ _PDCLIB_sigint = func;
+ break;
+ case SIGSEGV:
+ oldhandler = _PDCLIB_sigsegv;
+ _PDCLIB_sigsegv = func;
+ break;
+ case SIGTERM:
+ oldhandler = _PDCLIB_sigterm;
+ _PDCLIB_sigterm = func;
+ break;
+ default:
+ /* TODO: Implement. */
+ break;
+ }
+ return oldhandler;
+}
+
+#endif
+
+#ifdef TEST
+#include <_PDCLIB_test.h>
+
+int main( void )
+{
+ TESTCASE( NO_TESTDRIVER );
+ return TEST_RESULTS;
+}
+#endif
--- /dev/null
+/* $Id$ */
+
+/* Signal handling <string.h>
+
+ This file is part of the Public Domain C Library (PDCLib).
+ Permission is granted to use, modify, and / or redistribute at will.
+*/
+
+#ifndef _PDCLIB_SIGNAL_H
+#define _PDCLIB_SIGNAL_H _PDCLIB_SIGNAL_H
+
+#ifndef _PDCLIB_CONFIG_H
+#define _PDCLIB_CONFIG_H _PDCLIB_CONFIG_H
+#include <_PDCLIB_config.h>
+#endif
+
+typedef _PDCLIB_sig_atomic sig_atomic_t;
+
+#define SIG_DFL _PDCLIB_SIG_DFL
+#define SIG_ERR _PDCLIB_SIG_ERR
+#define SIG_IGN _PDCLIB_SIG_IGN
+
+#define SIGABRT _PDCLIB_SIGABRT
+#define SIGFPE _PDCLIB_SIGFPE
+#define SIGILL _PDCLIB_SIGILL
+#define SIGINT _PDCLIB_SIGINT
+#define SIGSEGV _PDCLIB_SIGSEGV
+#define SIGTERM _PDCLIB_SIGTERM
+
+/* Returns the value of func for the most recent successful call to signal()
+ for the signal sig. Returns SIG_ERR and sets errno to a positive value
+ otherwise.
+*/
+void (*signal( int sig, void (*func)( int ) ) )( int );
+
+/* Returns zero if successful, nonzero otherwise. */
+int raise( int sig );
+
+#endif
*/
#define _PDCLIB_UNGETCBUFSIZE 1
+/* Signals ------------------------------------------------------------------ */
+
+/* A word on signals, to the people using PDCLib in their OS projects.
+
+ The way they are defined by the C standard severely limits their usefulness,
+ to the point where a library implementation need not interface with the OS'
+ signals at all (which is what the PDCLib example implementation does).
+ (Other issues include, for example, that signal handlers are not re-entrant.)
+
+ Thus, it is strongly discouraged to try bolting on a signal handling infra-
+ structure onto <signal.h>. Since C's signal handling is so limited to begin
+ with, and code using it is pretty much non-portable anyway, it would be
+ smarter to keep <signal.h> in the barely functional state it is in, and
+ instead create a better, OS-specific API.
+
+ That being said, the below signals require to be defined to a positive int
+ value. I took what my Linux box defined them to; if you have to change them,
+ and what value to change them *to*, depends heavily on your environment and
+ what you are expecting <signal.h> to accomplish (see above).
+*/
+#define _PDCLIB_SIGABRT 6
+#define _PDCLIB_SIGFPE 8
+#define _PDCLIB_SIGILL 4
+#define _PDCLIB_SIGINT 2
+#define _PDCLIB_SIGSEGV 11
+#define _PDCLIB_SIGTERM 15
+
+/* The following should be defined to pointer values that could NEVER point to
+ a valid function. (They are used as special arguments to signal().) Again, I
+ took the values of my Linux box, which should be as good as any other value.
+*/
+#define _PDCLIB_SIG_DFL (void (*)( int ))0
+#define _PDCLIB_SIG_ERR (void (*)( int ))-1
+#define _PDCLIB_SIG_IGN (void (*)( int ))1
+
*/
#define _PDCLIB_UNGETCBUFSIZE 1
+/* Signals ------------------------------------------------------------------ */
+
+/* A word on signals, to the people using PDCLib in their OS projects.
+
+ The way they are defined by the C standard severely limits their usefulness,
+ to the point where a library implementation need not interface with the OS'
+ signals at all (which is what the PDCLib example implementation does).
+ (Other issues include, for example, that signal handlers are not re-entrant.)
+
+ Thus, it is strongly discouraged to try bolting on a signal handling infra-
+ structure onto <signal.h>. Since C's signal handling is so limited to begin
+ with, and code using it is pretty much non-portable anyway, it would be
+ smarter to keep <signal.h> in the barely functional state it is in, and
+ instead create a better, OS-specific API.
+
+ That being said, the below signals require to be defined to a positive int
+ value. I took what my Linux box defined them to; if you have to change them,
+ and what value to change them *to*, depends heavily on your environment and
+ what you are expecting <signal.h> to accomplish (see above).
+*/
+#define _PDCLIB_SIGABRT 6
+#define _PDCLIB_SIGFPE 8
+#define _PDCLIB_SIGILL 4
+#define _PDCLIB_SIGINT 2
+#define _PDCLIB_SIGSEGV 11
+#define _PDCLIB_SIGTERM 15
+
+/* The following should be defined to pointer values that could NEVER point to
+ a valid function. (They are used as special arguments to signal().) Again, I
+ took the values of my Linux box, which should be as good as any other value.
+*/
+#define _PDCLIB_SIG_DFL (void (*)( int ))0
+#define _PDCLIB_SIG_ERR (void (*)( int ))-1
+#define _PDCLIB_SIG_IGN (void (*)( int ))1
+
#define _PDCLIB_UNGETCBUFSIZE 1
typedef long wint_t;
+
+/* Signals ------------------------------------------------------------------ */
+
+/* A word on signals, to the people using PDCLib in their OS projects.
+
+ The way they are defined by the C standard severely limits their usefulness,
+ to the point where a library implementation need not interface with the OS'
+ signals at all (which is what the PDCLib example implementation does).
+ (Other issues include, for example, that signal handlers are not re-entrant.)
+
+ Thus, it is strongly discouraged to try bolting on a signal handling infra-
+ structure onto <signal.h>. Since C's signal handling is so limited to begin
+ with, and code using it is pretty much non-portable anyway, it would be
+ smarter to keep <signal.h> in the barely functional state it is in, and
+ instead create a better, OS-specific API.
+
+ That being said, the below signals require to be defined to a positive int
+ value. I took what my Linux box defined them to; if you have to change them,
+ and what value to change them *to*, depends heavily on your environment and
+ what you are expecting <signal.h> to accomplish (see above).
+*/
+#define _PDCLIB_SIGABRT 6
+#define _PDCLIB_SIGFPE 8
+#define _PDCLIB_SIGILL 4
+#define _PDCLIB_SIGINT 2
+#define _PDCLIB_SIGSEGV 11
+#define _PDCLIB_SIGTERM 15
+
+/* The following should be defined to pointer values that could NEVER point to
+ a valid function. (They are used as special arguments to signal().) Again, I
+ took the values of my Linux box, which should be as good as any other value.
+*/
+#define _PDCLIB_SIG_DFL (void (*)( int ))0
+#define _PDCLIB_SIG_ERR (void (*)( int ))-1
+#define _PDCLIB_SIG_IGN (void (*)( int ))1
+