------------------------------------------------------------------------------
--- Library to access parts of the system environment.
---
--- @author Michael Hanus, Bernd Brassel
--- @version August 2007
------------------------------------------------------------------------------
module System(getCPUTime,getElapsedTime,
getArgs,getEnviron,setEnviron,unsetEnviron,
getHostname,getPID,getProgName,
system,exitWith,sleep) where
import Global
--- Returns the current cpu time of the process in milliseconds.
getCPUTime :: IO Int
getCPUTime external
--- Returns the current elapsed time of the process in milliseconds.
getElapsedTime :: IO Int
getElapsedTime external
--- Returns the list of the program's command line arguments.
--- The program name is not included.
getArgs :: IO [String]
getArgs external
--- Returns the value of an environment variable.
--- The empty string is returned for undefined environment variables.
getEnviron :: String -> IO String
getEnviron evar = do
envs <- readGlobal environ
maybe (prim_getEnviron $## evar) return (lookup evar envs)
prim_getEnviron :: String -> IO String
prim_getEnviron external
--- internal state of environment variables set via setEnviron
environ :: Global [(String,String)]
environ = global [] Temporary
--- Set an environment variable to a value.
--- The new value will be passed to subsequent shell commands
--- (see system
) and visible to subsequent calls to
--- getEnviron
(but it is not visible in the environment
--- of the process that started the program execution).
setEnviron :: String -> String -> IO ()
setEnviron evar val = do
envs <- readGlobal environ
writeGlobal environ ((evar,val) : filter ((/=evar) . fst) envs)
--- Removes an environment variable that has been set by
--- setEnviron
.
unsetEnviron :: String -> IO ()
unsetEnviron evar = do
envs <- readGlobal environ
writeGlobal environ (filter ((/=evar) . fst) envs)
--- Returns the hostname of the machine running this process.
getHostname :: IO String
getHostname external
--- Returns the process identifier of the current Curry process.
getPID :: IO Int
getPID external
--- Returns the name of the current program, i.e., the name of the
--- main module currently executed.
getProgName :: IO String
getProgName external
--- Executes a shell command and return with the exit code of the command.
--- An exit status of zero means successful execution.
system :: String -> IO Int
system cmd = do
envs <- readGlobal environ
prim_system $## (concatMap set envs ++ cmd)
where
set (var,val) = "export "++var++"="++val++"; "
prim_system :: String -> IO Int
prim_system external
--- Terminates the execution of the current Curry program
--- and returns the exit code given by the argument.
--- An exit code of zero means successful execution.
exitWith :: Int -> IO _
exitWith exitcode = prim_exitWith $# exitcode
prim_exitWith :: Int -> IO _
prim_exitWith external
--- The evaluation of the action (sleep n) puts the Curry process
--- asleep for n seconds.
sleep :: Int -> IO ()
sleep n = prim_sleep $# n
prim_sleep :: Int -> IO ()
prim_sleep external