\begin{code}
#ifdef __HUGS__
+sizeof_int :: Int
+sizeof_int = 4
+
getCPUTime :: IO Integer
getCPUTime = do
marr <- primNewByteArray (sizeof_int * 4)
- rc <- getCPUTime marr
+ rc <- primGetCPUTime marr
if rc /= 0 then do
x0 <- primReadIntArray marr 0
x1 <- primReadIntArray marr 1
#else
getCPUTime :: IO Integer
-getCPUTime =
- stToIO (newIntArray ((0::Int),3)) >>= \ marr ->
- stToIO (unsafeFreezeByteArray marr) >>= \ barr@(ByteArray _ _ frozen#) ->
- primGetCPUTime barr >>= \ rc ->
+getCPUTime = do
+ marr <- stToIO (newIntArray ((0::Int),3))
+ barr <- stToIO (unsafeFreezeByteArray marr)
+ rc <- primGetCPUTime barr
if rc /= 0 then
+ case barr of
+ ByteArray _ _ frozen# -> -- avoid bounds checking
return ((fromIntegral (I# (indexIntArray# frozen# 0#)) * 1000000000 +
fromIntegral (I# (indexIntArray# frozen# 1#)) +
fromIntegral (I# (indexIntArray# frozen# 2#)) * 1000000000 +
fromIntegral (I# (indexIntArray# frozen# 3#))) * 1000)
- else
+ else
ioError (IOError Nothing UnsupportedOperation
"getCPUTime"
"can't get CPU time")
-
#endif
cpuTimePrecision :: Integer
\end{code}
\begin{code}
-sizeof_int :: Int
-sizeof_int = 4
-
foreign import "libHS_cbits" "getCPUTime" unsafe primGetCPUTime :: ByteArray Int -> IO Int
foreign import "libHS_cbits" "clockTicks" clockTicks :: IO Int
type CHAR_STAR_STAR = Addr -- this is all a HACK
type CHAR_STAR = Addr
-unpackArgv :: CHAR_STAR_STAR -> Int -> [String] -- argv[1 .. argc-1]
-unpackProgName :: CHAR_STAR_STAR -> String -- argv[0]
-
+unpackArgv :: CHAR_STAR_STAR -> Int -> [String] -- argv[1 .. argc-1]
unpackArgv argv argc = unpack 1
where
- unpack :: Int -> [String]
- unpack n
- = if (n >= argc)
- then ([] :: [String])
- else case (indexAddrOffAddr argv n) of { item ->
- unpackCString item : unpack (n + 1) }
+ unpack :: Int -> [String]
+ unpack n
+ | n >= argc = []
+ | otherwise =
+ case (indexAddrOffAddr argv n) of
+ item -> unpackCString item : unpack (n + 1)
+unpackProgName :: CHAR_STAR_STAR -> String -- argv[0]
unpackProgName argv
= case (indexAddrOffAddr argv 0) of { prog ->
de_slash [] (unpackCString prog) }