X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=System%2FEnvironment.hs;h=4e9efb6e2a6f0aae285c74614512015928f4cc78;hb=ac7c1ba32f1d3d651df2694176fde64c00a2f507;hp=6b7c57075a8c4e07998bb46b9e026968f4446587;hpb=260e7f2ed9a43c6ecf5a556d77817f39ed2893ab;p=ghc-base.git diff --git a/System/Environment.hs b/System/Environment.hs index 6b7c570..4e9efb6 100644 --- a/System/Environment.hs +++ b/System/Environment.hs @@ -1,41 +1,47 @@ ----------------------------------------------------------------------------- --- +-- | -- 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 import Prelude +#ifndef __HUGS__ import Foreign import Foreign.C +import Control.Monad +#endif #ifdef __GLASGOW_HASKELL__ import GHC.IOBase #endif +#ifdef __HUGS__ +import Hugs.System +#endif + -- --------------------------------------------------------------------------- -- getArgs, getProgName, getEnv -- Computation `getArgs' returns a list of the program's command -- line arguments (not including the program name). +#ifndef __HUGS__ getArgs :: IO [String] getArgs = alloca $ \ p_argc -> @@ -46,12 +52,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 +109,6 @@ 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) +#endif /* __HUGS__ */