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

volatile int alarm_happened, ctrl_c_happened;

void handle_alarm(int xxx)
{ alarm_happened=1; }

void handle_ctrl_c(int xxx)
{ ctrl_c_happened=1; }

void main(void)
{ alarm_happened=0;
  ctrl_c_happened=0;
  signal(SIGALRM, handle_alarm);
  signal(SIGINT, handle_ctrl_c);
  alarm(8);
  while (1)
  {
    printf(".");
    fflush(stdout);
    sleep(5);

    if (alarm_happened)
    { printf("ALARM!");
      fflush(stdout);
      alarm_happened=0; }

    if (ctrl_c_happened)
    { printf("INTERRUPT!");
      fflush(stdout);
      ctrl_c_happened=0; } }

  printf("\nAll Done\n"); }