aboutsummaryrefslogtreecommitdiff
path: root/scripts/picosat-959/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/picosat-959/main.c')
-rw-r--r--scripts/picosat-959/main.c91
1 files changed, 91 insertions, 0 deletions
diff --git a/scripts/picosat-959/main.c b/scripts/picosat-959/main.c
new file mode 100644
index 0000000..61b8ae4
--- /dev/null
+++ b/scripts/picosat-959/main.c
@@ -0,0 +1,91 @@
+#include <signal.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "picosat.h"
+
+int picosat_main (PicoSAT **, int, char **);
+
+static PicoSAT * ps;
+static int catched;
+
+static void (*sig_int_handler);
+static void (*sig_segv_handler);
+static void (*sig_abrt_handler);
+static void (*sig_term_handler);
+#ifndef NALLSIGNALS
+static void (*sig_kill_handler);
+static void (*sig_xcpu_handler);
+static void (*sig_xfsz_handler);
+#endif
+
+static void
+resetsighandlers (void)
+{
+ (void) signal (SIGINT, sig_int_handler);
+ (void) signal (SIGSEGV, sig_segv_handler);
+ (void) signal (SIGABRT, sig_abrt_handler);
+ (void) signal (SIGTERM, sig_term_handler);
+#ifndef NALLSIGNALS
+ (void) signal (SIGKILL, sig_kill_handler);
+ (void) signal (SIGXCPU, sig_xcpu_handler);
+ (void) signal (SIGXFSZ, sig_xfsz_handler);
+#endif
+}
+
+static void
+message (int sig)
+{
+ picosat_message (ps, 1, "");
+ picosat_message (ps, 1, "*** CAUGHT SIGNAL %d ***", sig);
+ picosat_message (ps, 1, "");
+}
+
+static void
+catch (int sig)
+{
+ if (!catched)
+ {
+ message (sig);
+ catched = 1;
+ picosat_stats (ps);
+ message (sig);
+ }
+
+ resetsighandlers ();
+ raise (sig);
+}
+
+static void
+setsighandlers (void)
+{
+ sig_int_handler = signal (SIGINT, catch);
+ sig_segv_handler = signal (SIGSEGV, catch);
+ sig_abrt_handler = signal (SIGABRT, catch);
+ sig_term_handler = signal (SIGTERM, catch);
+#ifndef NALLSIGNALS
+ sig_kill_handler = signal (SIGKILL, catch);
+ sig_xcpu_handler = signal (SIGXCPU, catch);
+ sig_xfsz_handler = signal (SIGXFSZ, catch);
+#endif
+}
+
+int
+main (int argc, char **argv)
+{
+ int res, verbose;
+
+ for (verbose = argc - 1; verbose; verbose--)
+ if (!strcmp (argv[verbose], "-v"))
+ break;
+
+ if (verbose)
+ setsighandlers ();
+
+ res = picosat_main (&ps, argc, argv);
+
+ if (verbose)
+ resetsighandlers ();
+
+ return res;
+}