mirror of
https://frontier.innolan.net/rainlance/amiga-tz.git
synced 2025-11-21 19:59:27 +00:00
67 lines
1.5 KiB
C
67 lines
1.5 KiB
C
//--------------------------------------------------------------------------//
|
|
// This file is in the public domain. //
|
|
//--------------------------------------------------------------------------//
|
|
|
|
#include "time_header.h"
|
|
#include <devices/timer.h>
|
|
|
|
struct Device* TimerBase;
|
|
struct MsgPort* TimerPort;
|
|
struct timerequest* TimeRequest;
|
|
|
|
int CreateTimer()
|
|
{
|
|
int error;
|
|
|
|
TimerPort = CreateMsgPort();
|
|
if (TimerPort == NULL) {
|
|
return 1;
|
|
}
|
|
|
|
TimeRequest = (struct timerequest*)CreateIORequest(
|
|
TimerPort,
|
|
sizeof(struct timerequest)
|
|
);
|
|
|
|
if (TimeRequest == NULL) {
|
|
DeleteMsgPort(TimerPort);
|
|
return 2;
|
|
}
|
|
|
|
error = OpenDevice(
|
|
(STRPTR)TIMERNAME,
|
|
UNIT_MICROHZ,
|
|
(struct IORequest*)TimeRequest,
|
|
0
|
|
);
|
|
|
|
if (error != 0)
|
|
{
|
|
DeleteIORequest((struct IORequest*)TimeRequest);
|
|
DeleteMsgPort(TimerPort);
|
|
return 3;
|
|
}
|
|
|
|
TimerBase = (struct Device*)TimeRequest->tr_node.io_Device;
|
|
return 0;
|
|
}
|
|
|
|
void DeleteTimer()
|
|
{
|
|
if (TimeRequest != NULL) {
|
|
if (!CheckIO((struct IORequest*)TimeRequest)) {
|
|
WaitIO((struct IORequest*)TimeRequest);
|
|
}
|
|
|
|
CloseDevice((struct IORequest*)TimeRequest);
|
|
DeleteIORequest((struct IORequest*)TimeRequest);
|
|
|
|
TimeRequest = NULL;
|
|
}
|
|
|
|
if (TimerPort != NULL) {
|
|
DeleteMsgPort(TimerPort);
|
|
TimerPort = NULL;
|
|
}
|
|
}
|