[project @ 2004-06-12 12:13:12 by panne]
[ghc-base.git] / System / Time.hsc
index ac89d41..4da0867 100644 (file)
@@ -2,7 +2,7 @@
 -- |
 -- 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
@@ -96,10 +96,16 @@ module System.Time
 
      ) 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
@@ -251,7 +257,9 @@ addToClockTime (TimeDiff year mon day hour min sec psec)
          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)
@@ -352,7 +360,7 @@ gmtoff x = do
 # 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 ...
@@ -427,14 +435,14 @@ throwAwayReturnPointer fun x y = fun x y >> return ()
 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