blob: 5fb963fecb862b7f36bea70283b77ca4a30201db (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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
|