mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-19 17:59:32 -06:00
Founding the newly structured GF2.0 cvs archive.
This commit is contained in:
71
src/GF/System/Arch.hs
Normal file
71
src/GF/System/Arch.hs
Normal file
@@ -0,0 +1,71 @@
|
||||
module Arch (
|
||||
myStdGen, prCPU, selectLater, modifiedFiles, ModTime, getModTime,getNowTime,
|
||||
welcomeArch, fetchCommand) where
|
||||
|
||||
import Time
|
||||
import Random
|
||||
import CPUTime
|
||||
import Monad (filterM)
|
||||
import Directory
|
||||
import Readline
|
||||
|
||||
---- 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 cpu = do
|
||||
cpu' <- getCPUTime
|
||||
putStrLn (show ((cpu' - cpu) `div` 1000000000) ++ " msec")
|
||||
return cpu'
|
||||
|
||||
welcomeArch = "This is the system compiled with ghc."
|
||||
|
||||
fetchCommand :: String -> IO (String)
|
||||
fetchCommand s = do
|
||||
res <- readline s
|
||||
case res of
|
||||
Nothing -> return "q"
|
||||
Just s -> do addHistory s
|
||||
return s
|
||||
|
||||
-- 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 as modified also if it has not been read yet
|
||||
|
||||
modifiedFiles :: [(FilePath,ModTime)] -> [FilePath] -> IO [FilePath]
|
||||
modifiedFiles ofs fs = print (map fst ofs) >> filterM isModified fs where
|
||||
isModified file = case lookup file ofs of
|
||||
Just to -> do
|
||||
t <- getModTime file
|
||||
return $ to < t
|
||||
_ -> return True
|
||||
|
||||
type ModTime = ClockTime
|
||||
|
||||
getModTime :: FilePath -> IO ModTime
|
||||
getModTime = getModificationTime
|
||||
|
||||
getNowTime :: IO ModTime
|
||||
getNowTime = getClockTime
|
||||
Reference in New Issue
Block a user