2 Copyright © 1995-2011, 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 <proto/locale.h>
14 #include <exec/types.h>
15 #include <devices/timer.h>
16 #include <aros/symbolsets.h>
17 #include <aros/debug.h>
18 #include <libraries/locale.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 /* FIXME: set tz->tz_dsttime */
116 tz
->tz_dsttime
= DST_NONE
;
123 struct Device
*TimerBase
;
125 static int __init_timerbase(void)
127 __timeport
.mp_Node
.ln_Type
= NT_MSGPORT
;
128 __timeport
.mp_Node
.ln_Pri
= 0;
129 __timeport
.mp_Node
.ln_Name
= NULL
;
130 __timeport
.mp_Flags
= PA_IGNORE
;
131 __timeport
.mp_SigTask
= FindTask(NULL
);
132 __timeport
.mp_SigBit
= 0;
133 NEWLIST(&__timeport
.mp_MsgList
);
135 __timereq
.tr_node
.io_Message
.mn_Node
.ln_Type
= NT_MESSAGE
;
136 __timereq
.tr_node
.io_Message
.mn_Node
.ln_Pri
= 0;
137 __timereq
.tr_node
.io_Message
.mn_Node
.ln_Name
= NULL
;
138 __timereq
.tr_node
.io_Message
.mn_ReplyPort
= &__timeport
;
139 __timereq
.tr_node
.io_Message
.mn_Length
= sizeof (__timereq
);
141 struct Locale
*locale
= OpenLocale(NULL
);
144 __gmtoffset
= locale
->loc_GMTOffset
;
156 (struct IORequest
*)&__timereq
,
163 TimerBase
= (struct Device
*)__timereq
.tr_node
.io_Device
;
173 static void __exit_timerbase(void)
175 if (TimerBase
!= NULL
)
176 CloseDevice((struct IORequest
*)&__timereq
);
179 ADD2OPENLIB(__init_timerbase
, 0);
180 ADD2CLOSELIB(__exit_timerbase
, 0);