home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 019.lha / Aterm / Timer.c < prev    next >
C/C++ Source or Header  |  1986-11-10  |  3KB  |  124 lines

  1. /*  Timer.c */
  2. /*  
  3.  *  Functions to invoke the Amiga timer:
  4.  *  
  5.  *  External Functions:
  6.  *
  7.  *  OpenTimer, CloseTimer, StartTimer, TimerExpired, GetTimerSigBit
  8.  * 
  9.  *  Maintenance Notes:
  10.  *   05Jul86  - Created by Jeff Lydiatt, Vancouver, Canada.
  11.  */
  12.  
  13. #include <exec/types.h>
  14. #include <exec/nodes.h>
  15. #include <exec/lists.h>
  16. #include <exec/ports.h>
  17. #include <exec/tasks.h>
  18. #include <exec/io.h>
  19. #include <devices/timer.h>
  20. #include <functions.h>
  21.  
  22. static struct timerequest TimerIO;
  23. static struct MsgPort    *TimerPort = NULL;
  24. static BOOL timerON;
  25. static BOOL timerExpired;
  26.  
  27. /*-------------------------------------------------------------*/
  28. /*    OpenTimer: return TRUE if timer opened OK           */
  29. /*-------------------------------------------------------------*/
  30.  
  31. BOOL OpenTimer()
  32. {
  33.    register struct timerequest *t = &TimerIO;
  34.    register struct MsgPort *port;
  35.  
  36.    timerON = FALSE;
  37.    timerExpired = TRUE;
  38.    if ( TimerPort != NULL )
  39.       return TRUE;
  40.  
  41.    if ( (port = CreatePort("Timer Port", 0L)) == NULL )
  42.       return FALSE;
  43.    else
  44.       TimerPort = port;
  45.  
  46.    if (OpenDevice(TIMERNAME, UNIT_VBLANK, t, 0L) != 0)
  47.      {
  48.     DeletePort( port );
  49.     TimerPort = NULL;
  50.     return FALSE;
  51.      }
  52.  
  53.    return TRUE;
  54. }
  55.  
  56. /*-------------------------------------------------------------*/
  57. /*    CloseTimer: All Done with the timer.               */
  58. /*-------------------------------------------------------------*/
  59.  
  60. void CloseTimer()
  61. {
  62.    register struct timerequest *t = &TimerIO;
  63.  
  64.    if ( timerON )
  65.       AbortIO( t );
  66.  
  67.    CloseDevice( t );
  68.    DeletePort( TimerPort );
  69.    TimerPort = NULL;
  70. }
  71.  
  72. /*-------------------------------------------------------------*/
  73. /*    GetTimerSigBit: return Timer signal bit               */
  74. /*-------------------------------------------------------------*/
  75.  
  76. int GetTimerSigBit()
  77. {
  78.    return TimerPort->mp_SigBit;
  79. }
  80.  
  81. /*-------------------------------------------------------------*/
  82. /*    StartTimer: launch the timer.                   */
  83. /*-------------------------------------------------------------*/
  84.  
  85. void StartTimer(seconds, micros)
  86. ULONG seconds, micros;
  87. {
  88.    register struct timerequest *t = &TimerIO;
  89.  
  90.    if ( timerON )
  91.      {
  92.     AbortIO( t );
  93.     (void) GetMsg( TimerPort );
  94.     timerON = FALSE;
  95.         timerExpired = TRUE;
  96.      }
  97.  
  98.    t->tr_time.tv_secs = seconds;
  99.    t->tr_time.tv_micro = micros;
  100.    t->tr_node.io_Command = TR_ADDREQUEST;
  101.    t->tr_node.io_Flags = IOF_QUICK;
  102.    t->tr_node.io_Error = 0;
  103.    t->tr_node.io_Message.mn_ReplyPort = TimerPort;
  104.    SendIO( t );
  105.    timerExpired = FALSE;
  106.    timerON = TRUE;
  107. }
  108.  
  109. /*-------------------------------------------------------------*/
  110. /*    TimerExpired: returns TRUE if timer expired.           */
  111. /*-------------------------------------------------------------*/
  112.  
  113. BOOL TimerExpired()
  114. {
  115.    if ( timerON && ( CheckIO( &TimerIO.tr_node ) == NULL) )
  116.       return FALSE;
  117.  
  118.    (void)GetMsg( TimerPort );
  119.    timerExpired = TRUE;
  120.    timerON = FALSE;
  121.  
  122.    return timerExpired;
  123. }
  124.