#include <signal.h>
static struct sigaction ecl_sigint_handler;
static struct sigaction ecl_sigbus_handler;
static struct sigaction ecl_sigsegv_handler;
static struct sigaction sage_sigint_handler;
static struct sigaction sage_sigbus_handler;
static struct sigaction sage_sigsegv_handler;
inline void set_ecl_signal_handler()
{
sigaction(SIGINT, &ecl_sigint_handler, &sage_sigint_handler);
sigaction(SIGBUS, &ecl_sigbus_handler, &sage_sigbus_handler);
sigaction(SIGSEGV, &ecl_sigsegv_handler, &sage_sigsegv_handler);
}
inline void unset_ecl_signal_handler()
{
sigaction(SIGINT, &sage_sigint_handler, NULL);
sigaction(SIGBUS, &sage_sigbus_handler, NULL);
sigaction(SIGSEGV, &sage_sigsegv_handler, NULL);
}
#define ecl_sig_on() \
(sig_on() && (set_ecl_signal_handler() , 1))
inline void ecl_sig_off()
{
unset_ecl_signal_handler();
sig_off();
}
inline mpz_t* ecl_mpz_from_bignum(cl_object obj)
{
return obj->big.big_num;
}
cl_object ecl_bignum_from_mpz(mpz_t* num)
{
cl_object z = _ecl_big_register0();
mpz_set(ecl_mpz_from_bignum(z),num);
return _ecl_big_register_copy(z);
}