home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / unix / src / timers.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-17  |  1.5 KB  |  73 lines

  1. #include "amiga.h"
  2. #include "devices.h"
  3. #include "timers.h"
  4.  
  5. struct timeinfo *_alloc_timer(void)
  6. {
  7.   struct timeinfo *timer = AllocMem(sizeof(struct timeinfo), 0);
  8.  
  9.   if (!timer) return 0;
  10.   timer->sent = FALSE;
  11.   timer->io = (struct timerequest *)
  12.     _device_open("timer.device", UNIT_VBLANK, 0L, 0L, 0, sizeof(struct timerequest));
  13.   if (!timer->io)
  14.     {
  15.       FreeMem(timer, sizeof(struct timeinfo));
  16.       return 0;
  17.     }
  18.   return timer;
  19. }
  20.  
  21. void _free_timer(struct timeinfo *timer)
  22. {
  23.   if (timer)
  24.     {
  25.       _timer_abort(timer);
  26.       _device_close(timer->io);
  27.       FreeMem(timer, sizeof(struct timeinfo));
  28.     }
  29. }
  30.  
  31. void _timer_abort(struct timeinfo *timer)
  32. {
  33.   if (timer->sent)
  34.     {
  35.       AbortIO(timer->io);
  36.       WaitIO(timer->io);
  37.       /* Clear timer io signal */
  38.       /*SetSignal(0, timer_sig(timer));*/
  39.       timer->sent = FALSE;
  40.     }
  41. }
  42.  
  43. ULONG _timer_sig(struct timeinfo *timer)
  44. {
  45.   return 1UL << timer->io->tr_node.io_Message.mn_ReplyPort->mp_SigBit;
  46. }
  47.  
  48. void _timer_start(struct timeinfo *timer, int secs, int micros)
  49. /* _timer_start(timer, 0) stops a timer */
  50. {
  51.   _timer_abort(timer);
  52.   if (secs || micros)
  53.     {
  54.       timer->io->tr_time.tv_secs = secs;
  55.       timer->io->tr_time.tv_micro = micros;
  56.       timer->io->tr_node.io_Command = TR_ADDREQUEST;
  57.       SendIO(timer->io);
  58.       timer->sent = TRUE;
  59.     }
  60. }
  61.  
  62. int _timer_expired(struct timeinfo *timer)
  63. /* A non-started timer is defined to not have expired */
  64. {
  65.   if (timer->sent && CheckIO(timer->io))
  66.     {
  67.       WaitIO(timer->io);
  68.       timer->sent = FALSE;
  69.       return TRUE;
  70.     }
  71.   return FALSE;
  72. }
  73.