diff options
| author | aarne <aarne@cs.chalmers.se> | 2008-05-21 09:26:44 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2008-05-21 09:26:44 +0000 |
| commit | 055c0d0d5a5bb0dc75904fe53df7f2e4f5732a8f (patch) | |
| tree | 0e63fb68c69c8f6ad0f78893c63420f0a3600e1c /src-3.0/GF/System/Arch.hs | |
| parent | 915a1de71783ab8446b1af9e72c7ba7dfbc12d3f (diff) | |
GF/src is now for 2.9, and the new sources are in src-3.0 - keep it this way until the release of GF 3
Diffstat (limited to 'src-3.0/GF/System/Arch.hs')
| -rw-r--r-- | src-3.0/GF/System/Arch.hs | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src-3.0/GF/System/Arch.hs b/src-3.0/GF/System/Arch.hs new file mode 100644 index 000000000..c0dac3644 --- /dev/null +++ b/src-3.0/GF/System/Arch.hs @@ -0,0 +1,90 @@ +---------------------------------------------------------------------- +-- | +-- Module : Arch +-- Maintainer : AR +-- Stability : (stable) +-- Portability : (portable) +-- +-- > CVS $Date: 2005/05/10 14:55:01 $ +-- > CVS $Author: bringert $ +-- > CVS $Revision: 1.8 $ +-- +-- architecture\/compiler dependent definitions for unix\/hbc +----------------------------------------------------------------------------- + +module GF.System.Arch ( + myStdGen, prCPU, selectLater, modifiedFiles, ModTime, getModTime,getNowTime, + welcomeArch, fetchCommand, laterModTime) where + +import System.Time +import System.Random +import System.CPUTime +import Control.Monad (filterM) +import System.Directory + +import GF.System.Readline (fetchCommand) + +---- import qualified UnicodeF as U --(fudlogueWrite) + +-- architecture/compiler dependent definitions for unix/hbc + +myStdGen :: Int -> IO StdGen --- +--- myStdGen _ = newStdGen --- gives always the same result +myStdGen int0 = do + t0 <- getClockTime + cal <- toCalendarTime t0 + let int = int0 + ctSec cal + fromInteger (div (ctPicosec cal) 10000000) + return $ mkStdGen int + +prCPU :: Integer -> IO Integer +prCPU cpu = do + cpu' <- getCPUTime + putStrLn (show ((cpu' - cpu) `div` 1000000000) ++ " msec") + return cpu' + +welcomeArch :: String +welcomeArch = "This is the system compiled with ghc." + +-- | selects the one with the later modification time of two +selectLater :: FilePath -> FilePath -> IO FilePath +selectLater x y = do + ex <- doesFileExist x + if not ex + then return y --- which may not exist + else do + ey <- doesFileExist y + if not ey + then return x + else do + tx <- getModificationTime x + ty <- getModificationTime y + return $ if tx < ty then y else x + +-- | a file is considered modified also if it has not been read yet +-- +-- new 23\/2\/2004: the environment ofs has just module names +modifiedFiles :: [(FilePath,ModTime)] -> [FilePath] -> IO [FilePath] +modifiedFiles ofs fs = do + filterM isModified fs + where + isModified file = case lookup (justModName file) ofs of + Just to -> do + t <- getModificationTime file + return $ to < t + _ -> return True + + justModName = + reverse . takeWhile (/='/') . tail . dropWhile (/='.') . reverse + +type ModTime = ClockTime + +laterModTime :: ModTime -> ModTime -> Bool +laterModTime = (>) + +getModTime :: FilePath -> IO (Maybe ModTime) +getModTime f = do + b <- doesFileExist f + if b then (getModificationTime f >>= return . Just) else return Nothing + +getNowTime :: IO ModTime +getNowTime = getClockTime |
