2 Copyright © 1995-2003, The AROS Development Team. All rights reserved.
5 Query the current time and/or timezone.
8 #include "__arosc_privdata.h"
10 #include <proto/exec.h>
11 #include <proto/dos.h>
12 #include <proto/timer.h>
13 #include <exec/types.h>
14 #include <devices/timer.h>
15 #include <aros/symbolsets.h>
16 #include <aros/debug.h>
23 /*****************************************************************************
36 Return the current time and/or timezone.
39 tv - If this pointer is non-NULL, the current time will be
40 stored here. The structure looks like this:
44 long tv_sec; // seconds
45 long tv_usec; // microseconds
48 tz - If this pointer is non-NULL, the current timezone will be
49 stored here. The structure looks like this:
53 int tz_minuteswest; // minutes west of Greenwich
54 int tz_dsttime; // type of dst correction
57 With daylight savings times defined as follows :
59 DST_NONE // not on dst
60 DST_USA // USA style dst
61 DST_AUST // Australian style dst
62 DST_WET // Western European dst
63 DST_MET // Middle European dst
64 DST_EET // Eastern European dst
66 DST_GB // Great Britain and Eire
69 DST_AUSTALT // Australian style with shift in 1986
71 And the following macros are defined to operate on this :
73 timerisset(tv) - TRUE if tv contains a time
75 timercmp(tv1, tv2, cmp) - Return the result of the
76 comparison "tv1 cmp tv2"
78 timerclear(tv) - Clear the timeval struct
81 The number of seconds.
84 This function must not be used in a shared library or
85 in a threaded application.
90 // Get the current time and print it
91 gettimeofday (&tv, NULL);
93 printf ("Seconds = %ld, uSec = %ld\n", tv->tv_sec, tv->tv_usec);
98 ctime(), asctime(), localtime(), time()
102 ******************************************************************************/
108 /* Adjust with the current timezone, stored in minutes west of GMT */
109 tv
->tv_sec
+= (2922 * 1440 + __gmtoffset
) * 60;
114 tz
->tz_minuteswest
= __gmtoffset
;
115 #warning FIXME: set tz->tz_dsttime
116 tz
->tz_dsttime
= DST_NONE
;
122 static int __init_timerbase(void)
124 __timeport
.mp_Node
.ln_Type
= NT_MSGPORT
;
125 __timeport
.mp_Node
.ln_Pri
= 0;
126 __timeport
.mp_Node
.ln_Name
= NULL
;
127 __timeport
.mp_Flags
= PA_IGNORE
;
128 __timeport
.mp_SigTask
= FindTask(NULL
);
129 __timeport
.mp_SigBit
= 0;
130 NEWLIST(&__timeport
.mp_MsgList
);
132 __timereq
.tr_node
.io_Message
.mn_Node
.ln_Type
= NT_MESSAGE
;
133 __timereq
.tr_node
.io_Message
.mn_Node
.ln_Pri
= 0;
134 __timereq
.tr_node
.io_Message
.mn_Node
.ln_Name
= NULL
;
135 __timereq
.tr_node
.io_Message
.mn_ReplyPort
= &__timeport
;
136 __timereq
.tr_node
.io_Message
.mn_Length
= sizeof (__timereq
);
144 (struct IORequest
*)&__timereq
,
151 TimerBase
= (struct Device
*)__timereq
.tr_node
.io_Device
;
161 static void __exit_timerbase(void)
163 if (TimerBase
!= NULL
)
164 CloseDevice((struct IORequest
*)&__timereq
);
167 ADD2INIT(__init_timerbase
, 0);
168 ADD2EXIT(__exit_timerbase
, 0);