#include <signal.h>
#include <stdio.h>
#include "config.h"
#include "lint.h"
extern int interupted;
static struct sig_disp
{
int sig;
char *name;
} disp[] = {
{SIGHUP, "HUP"},
{SIGINT, "INT"},
{SIGQUIT, "QUIT"},
{SIGTERM, "TERM"},
{SIGUSR1, "USR1"},
{SIGUSR2, "USR2"},
{SIGTSTP, "TSTP"},
{SIGCONT, "CONT"},
{0, "UNKNOWN"},
};
static int pending_signals = 0;
static void sig_handler(int sig)
{
int i;
for (i = 0; disp[i].sig && disp[i].sig != sig; i++) ;
pending_signals |= 1<<(i);
interupted = 1;
#if defined(SYSV) || defined(LINUX)
signal(sig, sig_handler);
#endif
}
void
init_signals()
{
int i;
for (i = 0; disp[i].sig; i++)
signal(disp[i].sig, sig_handler);
}
void
deliver_signals()
{
int i;
for (i = 0; pending_signals; i++)
{
if (pending_signals & (1<<i))
{
pending_signals &= ~(1<<i);
/* deliver the signal */
push_constant_string(disp[i].name);
apply_master_ob(M_EXTERNAL_SIGNAL, 1);
}
}
}