8 #include <exec/types.h>
9 #include <utility/tagitem.h>
11 #include <proto/exec.h>
12 #include <proto/intuition.h>
13 #include <proto/utility.h>
20 struct MsgPort *port = IExec->AllocSysObjectTags(ASOT_PORT, TAG_END);
26 struct TimeRequest *req = IExec->AllocSysObjectTags(ASOT_IOREQUEST,
27 ASOIOR_Size, sizeof(struct TimeRequest),
28 ASOIOR_ReplyPort, port,
33 IExec->FreeSysObject(ASOT_PORT, port);
37 int8 deverr = IExec->OpenDevice("timer.device", UNIT_MICROHZ,
40 if (deverr != IOERR_SUCCESS)
42 IExec->FreeSysObject(ASOT_IOREQUEST, req);
43 IExec->FreeSysObject(ASOT_PORT, port);
52 CloseTimer(struct TimeRequest *req)
56 struct MsgPort *port = req->Request.io_Message.mn_ReplyPort;
58 IExec->CloseDevice(&req->Request);
59 IExec->FreeSysObject(ASOT_IOREQUEST, req);
60 IExec->FreeSysObject(ASOT_PORT, port);
66 uint32 WaitTimeout(uint32 signalmask , int timeout)
69 struct TimeRequest *req = NULL;
78 timermask = 1L << req->Request.io_Message.mn_ReplyPort->mp_SigBit;
80 req->Request.io_Command = TR_ADDREQUEST;
81 req->Time.Seconds = 0;
82 req->Time.Microseconds = timeout;
84 IExec->SendIO(&req->Request);
88 uint32 waitmask = timermask | signalmask | SIGBREAKF_CTRL_C;
90 uint32 sigmask = IExec->Wait(waitmask);
94 IExec->AbortIO(&req->Request);
95 IExec->WaitIO(&req->Request);
99 /* remove the timer mask bit */
101 return sigmask & (~timermask );
106 MODULE = Amiga::Exec PACKAGE = Amiga::Exec
111 uint32 _Wait(signalmask,timeout)
115 RETVAL = WaitTimeout(signalmask,timeout);