[project @ 2002-07-15 16:02:11 by simonmar]
[ghc-base.git] / System / Environment.hs
index 6b7c570..c20d7d7 100644 (file)
@@ -1,22 +1,20 @@
 -----------------------------------------------------------------------------
--- 
+-- |
 -- Module      :  System.Environment
 -- 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
 -- Portability :  portable
 --
--- $Id: Environment.hs,v 1.3 2001/12/21 15:07:26 simonmar Exp $
---
 -- Miscellaneous information about the system environment.
 --
 -----------------------------------------------------------------------------
 
 module System.Environment
     ( 
-    , getArgs      -- :: IO [String]
+      getArgs      -- :: IO [String]
     , getProgName   -- :: IO String
     , getEnv        -- :: String -> IO String
   ) where
@@ -25,6 +23,7 @@ import Prelude
 
 import Foreign
 import Foreign.C
+import Control.Monad
 
 #ifdef __GLASGOW_HASKELL__
 import GHC.IOBase
@@ -46,12 +45,19 @@ getArgs =
    peekArray (p - 1) (advancePtr argv 1) >>= mapM peekCString
 
    
-foreign import "getProgArgv" unsafe 
+foreign import ccall unsafe "getProgArgv"
   getProgArgv :: Ptr CInt -> Ptr (Ptr CString) -> IO ()
 
--- Computation `getProgName' returns the name of the program
--- as it was invoked.
+{-|
+Computation 'getProgName' returns the name of the program as it was
+invoked.
 
+However, this is hard-to-impossible to implement on some non-Unix
+OSes, so instead, for maximum portability, we just return the leafname
+of the program as invoked. Even then there are some differences
+between platforms: on Windows, for example, a program invoked as foo
+is probably really @FOO.EXE@, and that is what 'getProgName' will return.
+-}
 getProgName :: IO String
 getProgName = 
   alloca $ \ p_argc ->
@@ -96,5 +102,5 @@ getEnv name =
         else ioException (IOError Nothing NoSuchThing "getEnv"
                          "no environment variable" (Just name))
 
-foreign import ccall "getenv" unsafe 
+foreign import ccall unsafe "getenv"
    c_getenv :: CString -> IO (Ptr CChar)