summaryrefslogtreecommitdiff
path: root/gnu/egcs/libf2c/libF77/setsig.c
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/egcs/libf2c/libF77/setsig.c')
-rw-r--r--gnu/egcs/libf2c/libF77/setsig.c101
1 files changed, 101 insertions, 0 deletions
diff --git a/gnu/egcs/libf2c/libF77/setsig.c b/gnu/egcs/libf2c/libF77/setsig.c
new file mode 100644
index 00000000000..8fde2fa27e8
--- /dev/null
+++ b/gnu/egcs/libf2c/libF77/setsig.c
@@ -0,0 +1,101 @@
+/* Set up the signal behavior. */
+
+#include <stdio.h>
+#include "signal1.h"
+
+#ifndef SIGIOT
+#ifdef SIGABRT
+#define SIGIOT SIGABRT
+#endif
+#endif
+
+#ifndef KR_headers
+#undef VOID
+#include <stdlib.h>
+#endif
+
+#ifndef VOID
+#define VOID void
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef KR_headers
+extern VOID sig_die();
+#define Int /* int */
+#else
+extern void sig_die(char*, int);
+#define Int int
+#endif
+
+static VOID sigfdie(Sigarg)
+{
+Use_Sigarg;
+sig_die("Floating Exception", 1);
+}
+
+
+static VOID sigidie(Sigarg)
+{
+Use_Sigarg;
+sig_die("IOT Trap", 1);
+}
+
+#ifdef SIGQUIT
+static VOID sigqdie(Sigarg)
+{
+Use_Sigarg;
+sig_die("Quit signal", 1);
+}
+#endif
+
+
+static VOID sigindie(Sigarg)
+{
+Use_Sigarg;
+sig_die("Interrupt", 0);
+}
+
+static VOID sigtdie(Sigarg)
+{
+Use_Sigarg;
+sig_die("Killed", 0);
+}
+
+#ifdef SIGTRAP
+static VOID sigtrdie(Sigarg)
+{
+Use_Sigarg;
+sig_die("Trace trap", 1);
+}
+#endif
+
+
+#ifdef __cplusplus
+ }
+#endif
+
+ void
+f_setsig()
+{
+signal1(SIGFPE, sigfdie); /* ignore underflow, enable overflow */
+#ifdef SIGIOT
+signal1(SIGIOT, sigidie);
+#endif
+#ifdef SIGTRAP
+signal1(SIGTRAP, sigtrdie);
+#endif
+#ifdef SIGQUIT
+if(signal1(SIGQUIT,sigqdie) == SIG_IGN)
+ signal1(SIGQUIT, SIG_IGN);
+#endif
+if(signal1(SIGINT, sigindie) == SIG_IGN)
+ signal1(SIGINT, SIG_IGN);
+signal1(SIGTERM,sigtdie);
+
+#ifdef pdp11
+ ldfps(01200); /* detect overflow as an exception */
+#endif
+}