-- |
-- Module : System.Time
-- Copyright : (c) The University of Glasgow 2001
--- License : BSD-style (see the file libraries/core/LICENSE)
+-- License : BSD-style (see the file libraries/base/LICENSE)
--
-- Maintainer : libraries@haskell.org
-- Stability : provisional
) where
-#ifndef __HUGS__
+#ifdef __GLASGOW_HASKELL__
#include "HsBase.h"
#endif
+#ifdef __NHC__
+#include <time.h>
+#define HAVE_TM_ZONE 1
+import Ix
+#endif
+
import Prelude
import Data.Ix
cal = toUTCTime (TOD (c_sec + sec_diff) (c_psec + psec))
-- FIXME! ^^^^
new_mon = fromEnum (ctMonth cal) + r_mon
- (month', yr_diff)
+ month' = fst tmp
+ yr_diff = snd tmp
+ tmp
| new_mon < 0 = (toEnum (12 + new_mon), (-1))
| new_mon > 11 = (toEnum (new_mon `mod` 12), 1)
| otherwise = (toEnum new_mon, 0)
# endif /* ! HAVE_TZNAME */
-- Get the offset in secs from UTC, if (struct tm) doesn't supply it. */
-# if HAVE_ALTZONE
+# if HAVE_DECL_ALTZONE
foreign import ccall "&altzone" altzone :: Ptr CTime
foreign import ccall "&timezone" timezone :: Ptr CTime
gmtoff x = do
dst <- (#peek struct tm,tm_isdst) x
tz <- if dst then peek altzone else peek timezone
return (-fromIntegral tz)
-# else /* ! HAVE_ALTZONE */
+# else /* ! HAVE_DECL_ALTZONE */
#if !defined(mingw32_TARGET_OS)
-foreign import ccall unsafe "timezone" timezone :: Ptr CLong
+foreign import ccall "&timezone" timezone :: Ptr CLong
#endif
-- Assume that DST offset is 1 hour ...
-- This module assumes the interpretation of tm_gmtoff, i.e., offsets
-- are > 0 East of the Prime Meridian, so flip the sign.
return (- (if dst then (fromIntegral tz - 3600) else tz))
-# endif /* ! HAVE_ALTZONE */
+# endif /* ! HAVE_DECL_ALTZONE */
#endif /* ! HAVE_TM_ZONE */
#endif /* ! __HUGS__ */
clockToCalendarTime_static :: (Ptr CTime -> IO (Ptr CTm)) -> Bool -> ClockTime
-> IO CalendarTime
clockToCalendarTime_static fun is_utc (TOD secs psec) = do
- withObject (fromIntegral secs :: CTime) $ \ p_timer -> do
+ with (fromIntegral secs :: CTime) $ \ p_timer -> do
p_tm <- fun p_timer -- can't fail, according to POSIX
clockToCalendarTime_aux is_utc p_tm psec
clockToCalendarTime_reentrant :: (Ptr CTime -> Ptr CTm -> IO ()) -> Bool -> ClockTime
-> IO CalendarTime
clockToCalendarTime_reentrant fun is_utc (TOD secs psec) = do
- withObject (fromIntegral secs :: CTime) $ \ p_timer -> do
+ with (fromIntegral secs :: CTime) $ \ p_timer -> do
allocaBytes (#const sizeof(struct tm)) $ \ p_tm -> do
fun p_timer p_tm
clockToCalendarTime_aux is_utc p_tm psec
toClockTime :: CalendarTime -> ClockTime
#ifdef __HUGS__
toClockTime (CalendarTime yr mon mday hour min sec psec
- _wday _yday _tzname tz isdst) =
+ _wday _yday _tzname tz _isdst) =
unsafePerformIO $ do
- s <- toClockTimePrim (yr-1900) (fromEnum mon) mday
- hour min sec
- tz (if isdst then 1 else 0)
+ s <- toClockTimePrim (yr-1900) (fromEnum mon) mday hour min sec tz
return (TOD (fromIntegral s) psec)
#else /* ! __HUGS__ */
toClockTime (CalendarTime year mon mday hour min sec psec