home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_disks
/
200-299
/
ff236.lzh
/
DiskHandler
/
timer.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-08-09
|
3KB
|
98 lines
/* Timer.c - Timer support routines */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* |_o_o|\\ Copyright (c) 1987 The Software Distillery. All Rights Reserved */
/* |. o.| || This program may not be distributed without the permission of */
/* | . | || the author. BBS: */
/* | o | || John Toebes Dave Baker (919)-471-6436 */
/* | . |// */
/* ====== */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include "handler.h"
int OpenTimer(global)
GLOBAL global;
{
int error;
/* assumes that a msg port has been allocated */
if ((global->timerpkt = (struct TimerPacket *)
CreateExtIO(global->port, sizeof(struct TimerPacket)))== NULL)
return(1);
global->timerpkt->tm_req.tr_node.io_Message.mn_Node.ln_Name =
(char *)&(global->timerpkt->tm_pkt);
global->timerpkt->tm_pkt.dp_Link =
&(global->timerpkt->tm_req.tr_node.io_Message);
global->timerpkt->tm_pkt.dp_Port = global->port;
if ((global->systimepkt = (struct timerequest *)
CreateExtIO(global->port, sizeof(struct timerequest)))== NULL)
return(1);
error = OpenDevice(TIMERNAME, UNIT_MICROHZ,
(struct IORequest *)&(global->timerpkt->tm_req), 0);
/* Fill in the packet we will use for getting the system time */
global->systimepkt->tr_node.io_Device =
global->timerpkt->tm_req.tr_node.io_Device;
global->systimepkt->tr_node.io_Unit =
global->timerpkt->tm_req.tr_node.io_Unit;
return(error);
}
void GetDateStamp(global, date)
GLOBAL global;
struct DateStamp *date;
{
register struct timerequest *tr = global->systimepkt;
tr->tr_node.io_Command = TR_GETSYSTIME;
tr->tr_node.io_Flags = IOF_QUICK;
DoIO((struct IORequest *)tr);
MakeDateStamp(&tr->tr_time, date);
}
void CloseTimer(global)
GLOBAL global;
{
if (global->timerpkt != NULL)
{
CloseDevice((struct IORequest *)&(global->timerpkt->tm_req));
DeleteExtIO((struct IORequest *)global->timerpkt);
global->timerpkt = NULL;
}
if (global->systimepkt != NULL)
{
DeleteExtIO((struct IORequest *)global->systimepkt);
global->systimepkt = NULL;
}
}
void PostTimerReq (global)
GLOBAL global;
{
/* Fill in the timer packet values */
/* that is the fields required for the timer device timerequest struct */
/* and the necessary fields of the DosPacket struct */
/* nothing like using 35 meg of store to accomplish a simple task */
/* oh well ! this is a 68K machine right ? */
/* some of them get trampled on so fill them all */
if (global->timerpkt != NULL)
{
global->timerpkt->tm_req.tr_node.io_Command = TR_ADDREQUEST;
global->timerpkt->tm_req.tr_time.tv_secs = 2;
global->timerpkt->tm_req.tr_time.tv_micro = 0;
global->timerpkt->tm_pkt.dp_Type = ACTION_TIMER;
/* Async IO so we don't sleep here for the msg */
SendIO((struct IORequest *)&global->timerpkt->tm_req);
}
}