[add support for getArgs and getProgName to ghc backend.
John Meacham <john@repetae.net>**20061206075718] hunk ./lib/base/Prelude/IO.hs 49
-        case ch of
-            -1 -> return []
-            _ -> do
-                xs <- unsafeInterleaveIO getContents'
-                return (cwintToChar ch:xs)
+        if ch == -1 then return [] else  do
+            xs <- unsafeInterleaveIO getContents'
+            return (cwintToChar ch:xs)
hunk ./lib/base/Prelude/IO.hs 60
-                case ch of
-                    -1 -> c_fclose file >> return []
-                    _ -> do
+                if ch == -1 then c_fclose file >> return [] else do
hunk ./lib/base/System.hs 10
+import Foreign.Marshal.Alloc
hunk ./lib/base/System.hs 13
+import qualified Jhc.Options
hunk ./lib/base/System.hs 34
+getProgName = case Jhc.Options.target of
+    Jhc.Options.GhcHs -> ghc_getProgName
+    _ -> peek jhc_progname >>= peekCString
hunk ./lib/base/System.hs 38
-getProgName = peek jhc_progname >>= peekCString
-getArgs = do
-    argc <- peek jhc_argc
-    argv <- peek jhc_argv
-    let f n = peekElemOff argv n >>= peekCString
-    mapM f [0 .. fromIntegral argc - 1]
+getArgs = case Jhc.Options.target of
+    Jhc.Options.GhcHs -> ghc_getArgs
+    _ -> do
+        argc <- peek jhc_argc
+        argv <- peek jhc_argv
+        let f n = peekElemOff argv n >>= peekCString
+        mapM f [0 .. fromIntegral argc - 1]
hunk ./lib/base/System.hs 55
-foreign import ccall "exit" c_exit :: Int -> IO ()
-foreign import ccall "system" c_system :: CString -> IO CInt
-foreign import ccall "stdlib.h getenv" c_getenv :: Ptr CChar -> IO (Ptr CChar)
+foreign import unsafe ccall "exit" c_exit :: Int -> IO ()
+foreign import unsafe ccall "system" c_system :: CString -> IO CInt
+foreign import unsafe ccall "stdlib.h getenv" c_getenv :: Ptr CChar -> IO (Ptr CChar)
hunk ./lib/base/System.hs 63
+ghc_getArgs :: IO [String]
+ghc_getArgs =
+    alloca $ \ p_argc ->
+    alloca $ \ p_argv -> do
+        getProgArgv p_argc p_argv
+        p    <- peek p_argc
+        argv <- peek p_argv
+        let f n = peekElemOff argv n >>= peekCString
+        mapM f [1 .. fromIntegral p - 1]
+
+
+foreign import unsafe ccall "getProgArgv"
+  getProgArgv :: Ptr CInt -> Ptr (Ptr CString) -> IO ()
+
+ghc_getProgName :: IO String
+ghc_getProgName =
+  alloca $ \ p_argc ->
+  alloca $ \ p_argv -> do
+     getProgArgv p_argc p_argv
+     argv <- peek p_argv
+     peekElemOff argv 0 >>= peekCString
+
+