home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
019.lha
/
Aterm
/
Timer.c
< prev
next >
Wrap
C/C++ Source or Header
|
1986-11-10
|
3KB
|
124 lines
/* Timer.c */
/*
* Functions to invoke the Amiga timer:
*
* External Functions:
*
* OpenTimer, CloseTimer, StartTimer, TimerExpired, GetTimerSigBit
*
* Maintenance Notes:
* 05Jul86 - Created by Jeff Lydiatt, Vancouver, Canada.
*/
#include <exec/types.h>
#include <exec/nodes.h>
#include <exec/lists.h>
#include <exec/ports.h>
#include <exec/tasks.h>
#include <exec/io.h>
#include <devices/timer.h>
#include <functions.h>
static struct timerequest TimerIO;
static struct MsgPort *TimerPort = NULL;
static BOOL timerON;
static BOOL timerExpired;
/*-------------------------------------------------------------*/
/* OpenTimer: return TRUE if timer opened OK */
/*-------------------------------------------------------------*/
BOOL OpenTimer()
{
register struct timerequest *t = &TimerIO;
register struct MsgPort *port;
timerON = FALSE;
timerExpired = TRUE;
if ( TimerPort != NULL )
return TRUE;
if ( (port = CreatePort("Timer Port", 0L)) == NULL )
return FALSE;
else
TimerPort = port;
if (OpenDevice(TIMERNAME, UNIT_VBLANK, t, 0L) != 0)
{
DeletePort( port );
TimerPort = NULL;
return FALSE;
}
return TRUE;
}
/*-------------------------------------------------------------*/
/* CloseTimer: All Done with the timer. */
/*-------------------------------------------------------------*/
void CloseTimer()
{
register struct timerequest *t = &TimerIO;
if ( timerON )
AbortIO( t );
CloseDevice( t );
DeletePort( TimerPort );
TimerPort = NULL;
}
/*-------------------------------------------------------------*/
/* GetTimerSigBit: return Timer signal bit */
/*-------------------------------------------------------------*/
int GetTimerSigBit()
{
return TimerPort->mp_SigBit;
}
/*-------------------------------------------------------------*/
/* StartTimer: launch the timer. */
/*-------------------------------------------------------------*/
void StartTimer(seconds, micros)
ULONG seconds, micros;
{
register struct timerequest *t = &TimerIO;
if ( timerON )
{
AbortIO( t );
(void) GetMsg( TimerPort );
timerON = FALSE;
timerExpired = TRUE;
}
t->tr_time.tv_secs = seconds;
t->tr_time.tv_micro = micros;
t->tr_node.io_Command = TR_ADDREQUEST;
t->tr_node.io_Flags = IOF_QUICK;
t->tr_node.io_Error = 0;
t->tr_node.io_Message.mn_ReplyPort = TimerPort;
SendIO( t );
timerExpired = FALSE;
timerON = TRUE;
}
/*-------------------------------------------------------------*/
/* TimerExpired: returns TRUE if timer expired. */
/*-------------------------------------------------------------*/
BOOL TimerExpired()
{
if ( timerON && ( CheckIO( &TimerIO.tr_node ) == NULL) )
return FALSE;
(void)GetMsg( TimerPort );
timerExpired = TRUE;
timerON = FALSE;
return timerExpired;
}