Don't call ReadArgs() if started from WB.
[tangerine.git] / compiler / alib / timedelay.c
blob464f9efca8e699b16c0cda4598ab86ccb950c3f3
1 /*
2 Copyright © 1995-2001, The AROS Development Team. All rights reserved.
3 $Id$
5 Desc: TimeDelay() - wait a specified time.
6 Lang: english
7 */
10 #include <exec/types.h>
11 #include <aros/asmcall.h>
12 #include <devices/timer.h>
13 #include <exec/tasks.h>
14 #include <proto/exec.h>
16 /*****************************************************************************
18 NAME */
19 AROS_UFH3(ULONG, TimeDelay,
21 /* SYNOPSIS */
22 AROS_UFHA(LONG, Unit, D0),
23 AROS_UFHA(ULONG, Seconds, D1),
24 AROS_UFHA(ULONG, MicroSeconds, D2))
26 /* FUNCTION
27 TimeDelay() waits for the specified period of time before returning
28 to the caller.
30 INPUTS
31 Unit - The timer.device unit to use for this command.
32 Seconds - The number of seconds to wait.
33 MicroSeconds - The number of microseconds to wait.
35 RESULT
36 Zero if everything went ok, non-zero if there was a problem.
38 NOTES
39 If this function fails, the most likely reasons are:
40 - invalid timer.device unit numbers
42 This function uses the SIGF_SINGLE signal, strange things can
43 happen if you are waiting on this signal when you call this
44 function. Basically: Don't use it and call this function.
46 EXAMPLE
48 BUGS
50 SEE ALSO
51 timer/TR_ADDREQUEST
53 INTERNALS
55 HISTORY
57 ******************************************************************************/
59 AROS_USERFUNC_INIT
60 AROS_GET_SYSBASE_OK
62 struct timerequest tr;
63 struct MsgPort mp;
64 UBYTE error = 0;
66 /* Create a message port */
67 mp.mp_Node.ln_Type = NT_MSGPORT;
68 mp.mp_Node.ln_Pri = 0;
69 mp.mp_Node.ln_Name = NULL;
70 mp.mp_Flags = PA_SIGNAL;
71 mp.mp_SigTask = FindTask(NULL);
72 mp.mp_SigBit = SIGB_SINGLE;
73 NEWLIST(&mp.mp_MsgList);
75 tr.tr_node.io_Message.mn_Node.ln_Type = NT_MESSAGE;
76 tr.tr_node.io_Message.mn_Node.ln_Pri = 0;
77 tr.tr_node.io_Message.mn_Node.ln_Name = NULL;
78 tr.tr_node.io_Message.mn_ReplyPort = &mp;
79 tr.tr_node.io_Message.mn_Length = sizeof(struct timerequest);
81 SetSignal(0, SIGF_SINGLE);
83 if(OpenDevice("timer.device", Unit, (struct IORequest *)&tr, 0) == 0)
85 tr.tr_node.io_Command = TR_ADDREQUEST;
86 tr.tr_node.io_Flags = 0;
87 tr.tr_time.tv_secs = Seconds;
88 tr.tr_time.tv_micro = MicroSeconds;
90 DoIO((struct IORequest *)&tr);
92 CloseDevice((struct IORequest *)&tr);
93 error = 1;
96 return error;
98 AROS_USERFUNC_EXIT
100 } /* TimeDelay() */