#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <err.h>
#include "../lpi.h"

void establish_sighandlers(void);
void sighandler(int signo);

extern struct sig sigs[];       // defined in ../defs.c
extern int NSIGS;               // defined in ../defs.c

int
main(int argc, char *argv[])
{
    printf("PID=%ld\n", (long) getpid());
    establish_sighandlers();

    while (1)
        pause();

    exit(EXIT_SUCCESS);
}

void
sig_handler(int signo)
{
    for (int i = 0; i < NSIGS; i++)
        if (sigs[i].no == signo) {
            printf("cought signal %s (%d)\n", sigs[i].name, sigs[i].no);
            return;
        }

    printf("cought a signal but name?\n");
}

void
establish_sighandlers(void)
{
    for (int i = 0; i < NSIGS; i++)
        if (signal(sigs[i].no, sig_handler) == SIG_ERR)
            warn("signal - %s", sigs[i].name);
}
