#include <signal.h>
#include <setjmp.h>
#include <stdio.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int done = 0;

void loop(int (*fp)(int))
{
  int i;
  for (i = 1; i < 1000 && !done; i++) {
    printf("%d = %d\n", i, (*fp)(i));
    sleep(1);
  }
}

static void sigusr(int sig)
{
  printf("within sigusr: %d\n", sig);
  done = 1;
}

int divide(int i)
{
  return i / (i+10);
}

int main(int argc, char *argv[])
{
  if (signal(SIGUSR1, sigusr) == SIG_ERR) {
    perror("signal");
  }
  loop(divide);
  exit(0);
}
