/* timer.c */

/* Subroutines for timed events */
#include "copyright.h"

#include <stdio.h>
#include <ctype.h>
#include <fcntl.h>
#include <string.h>
#ifdef XENIX
#include <sys/signal.h>
#else
#include <signal.h>
#endif				/* xenix */

#include "config.h"
#include "db.h"
#include "interface.h"
#include "match.h"
#include "externs.h"
static int alarm_triggered = 0;
extern char ccom[BUFFER_LEN];

void alarm_handler()
{
  alarm_triggered = 1;
  signal(SIGALRM, (void *) alarm_handler);
}

void init_timer()
{
  signal(SIGALRM, (void *) alarm_handler);
  signal(SIGHUP, (void *) alarm_handler);
  alarm(1);
}

void dispatch()
{
/*  void do_garbage(); */
  /* this routine can be used to poll from interface.c */
  if (!alarm_triggered)
    return;
  alarm_triggered = 0;
  do_second();
  /* Free list reconstruction */
#ifdef DESTROY
  {
    static int ticks = FIXUP_INTERVAL;
    if (!ticks--) {
      ticks = FIXUP_INTERVAL;
      strcpy(ccom, "dbck");
      do_dbck(GOD);
    }
  }
#endif
  /* Database dump routines */
  {
    static int ticks = DUMP_INTERVAL;
    extern void fork_and_dump();
    
    if (!ticks--) {
      ticks = DUMP_INTERVAL;
      strcpy(ccom, "dump");
      fork_and_dump();
    }
  }
#ifdef RWHO_SEND
  {
    static int ticks = RWHO_INTERVAL;
    if(!ticks--) {
      ticks = RWHO_INTERVAL;
      strcpy(ccom, "update_rwho");
      rwho_update();
    }
  }
#endif
  /* reset alarm */
  alarm(1);
}