// timer6h.c

#include <dos.h>
#include <stdio.h>
#include <bios.h>
#include "extern6h.h"

long get_timer_counter(void);
void set_up_new_timer(void);
void wait(double seconds);
void restore_old_timer(void);
double get_frequency(void);

void interrupt new_timer(), interrupt (far *old_timer)();

unsigned long timer_counter;

// save the old vector, set up new vector, zero out counter
void set_up_new_timer(void)
{
  disable(); // turn off interrupts

  old_timer = getvect(0x1c);

  setvect(0x1c, new_timer);

  timer_counter = 0L;

  enable(); // turn interrupts back on
}

// restore former table entry and rate
void restore_old_timer()
{
  disable();

  setvect(0x1c, old_timer);

  enable();
}

// return the value of the counter to the caller
long get_timer_counter(void)
{
  return timer_counter;
}

// the interrupt handler
interrupt new_timer()
{
  disable();

  timer_counter++;

  enable();
}

// end timer6h.c


