Trim imports
[ghc-hetmet.git] / glafp-utils / nofib-analyse / Printf.lhs
index 1fdc8c9..33b5290 100644 (file)
@@ -1,13 +1,17 @@
 -----------------------------------------------------------------------------
--- $Id: Printf.lhs,v 1.1 1999/11/12 11:54:17 simonmar Exp $
+-- $Id: Printf.lhs,v 1.5 2002/03/14 17:09:46 simonmar Exp $
 
--- (c) Simon Marlow 1997-1999
+-- (c) Simon Marlow 1997-2001
 -----------------------------------------------------------------------------
 
 > module Printf (showFloat, showFloat') where
 
-> import GlaExts
-> import PrelPack (unpackCString)
+> import Foreign
+> import CTypes
+> import CTypesISO
+> import CString
+> import IOExts
+> import ByteArray
 
 > showFloat 
 >      :: Bool                         -- Always print decimal point
 > bUFSIZE = 512 :: Int
 
 > showFloat alt left sign blank zero width prec num =
->      unsafePerformPrimIO ( do
->              buf <- _ccall_ malloc bUFSIZE :: IO Addr
->              _ccall_ snprintf buf bUFSIZE format num
+>      unsafePerformIO $ do
+
+#if __GLASGOW_HASKELL__ < 500
+
+>              buf <- malloc bUFSIZE
+>              snprintf buf (fromIntegral bUFSIZE) (packString format) 
+>                      (realToFrac num)
 >              let s = unpackCString buf
 >              length s `seq` -- urk! need to force the string before we
 >                             -- free the buffer.  A better solution would
 >                             -- be to use foreign objects and finalisers,
 >                             -- but that's just too heavyweight.
->                _ccall_ free buf
+>                 free buf
 >              return s
->      )
->      
+
+#else
+
+>              allocaBytes bUFSIZE $ \buf ->
+>                withCString format $ \cformat -> do
+>                  snprintf buf (fromIntegral bUFSIZE) cformat
+>                      (realToFrac num)
+>                  peekCString buf
+
+#endif
+
 >  where
 >      format = '%' :
 >              if_bool alt   "#" ++
 
 > if_maybe Nothing  f = []
 > if_maybe (Just s) f = f s
+
+#if __GLASGOW_HASKELL__ < 500
+
+> type PackedString = ByteArray Int
+> foreign import unsafe snprintf :: Addr -> CSize -> PackedString -> Double -> IO ()
+
+#else
+
+> foreign import unsafe snprintf :: CString -> CSize -> CString -> Double -> IO ()
+
+#endif