summaryrefslogtreecommitdiff
path: root/src/GF
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2007-11-06 17:27:20 +0000
committeraarne <aarne@cs.chalmers.se>2007-11-06 17:27:20 +0000
commit2c4d34af28b31fefe26379bf6301ce9b48fb38dc (patch)
tree9a75142ad188a38b0b490ae2cbfbba595c9700fb /src/GF
parent2b1d5a4d513970308f47c735212cbc253ec40961 (diff)
prompt and CPU time in experimental shell
Diffstat (limited to 'src/GF')
-rw-r--r--src/GF/Devel/GF3.hs29
-rw-r--r--src/GF/Devel/UseIO.hs1
-rw-r--r--src/GF/GFCC/API.hs5
3 files changed, 29 insertions, 6 deletions
diff --git a/src/GF/Devel/GF3.hs b/src/GF/Devel/GF3.hs
index 742feb09a..30bc2f810 100644
--- a/src/GF/Devel/GF3.hs
+++ b/src/GF/Devel/GF3.hs
@@ -5,6 +5,8 @@ import GF.Command.Importing
import GF.Command.Commands
import GF.GFCC.API
+import GF.Devel.UseIO
+import GF.Devel.Arch
import GF.Infra.Option ---- Haskell's option lib
import System (getArgs)
@@ -14,20 +16,27 @@ main = do
putStrLn welcome
xx <- getArgs
env <- importInEnv emptyMultiGrammar xx
- loop env
+ loop (GFEnv env [] 0)
return ()
-loop :: CommandEnv -> IO CommandEnv
-loop env = do
+loop :: GFEnv -> IO GFEnv
+loop gfenv0 = do
+ let env = commandenv gfenv0
+ putStrFlush (prompt env)
s <- getLine
+ let gfenv = gfenv0 {history = s : history gfenv0}
case words s of
- "q":_ -> return env
+ "q":_ -> return gfenv
"i":args -> do
env1 <- importInEnv (multigrammar env) args
- loop env1
+ loopNewCPU $ gfenv {commandenv = env1}
_ -> do
interpretCommandLine env s
- loop env
+ loopNewCPU gfenv
+
+loopNewCPU gfenv = do
+ cpu <- prCPU $ cputime gfenv
+ loop $ gfenv {cputime = cpu}
importInEnv mgr0 xx = do
let (opts,files) = getOptions "-" xx
@@ -42,3 +51,11 @@ welcome = unlines [
"This is GF version 3.0 alpha.",
"Some things may work."
]
+
+prompt env = abstractName (multigrammar env) ++ "> "
+
+data GFEnv = GFEnv {
+ commandenv :: CommandEnv,
+ history :: [String],
+ cputime :: Integer
+ }
diff --git a/src/GF/Devel/UseIO.hs b/src/GF/Devel/UseIO.hs
index bd9f47845..21842724d 100644
--- a/src/GF/Devel/UseIO.hs
+++ b/src/GF/Devel/UseIO.hs
@@ -23,6 +23,7 @@ import System.Directory
import System.IO
import System.IO.Error
import System.Environment
+import System.CPUTime
import Control.Monad
putShow' :: Show a => (c -> a) -> c -> IO ()
diff --git a/src/GF/GFCC/API.hs b/src/GF/GFCC/API.hs
index 2abd0e09b..093d13b97 100644
--- a/src/GF/GFCC/API.hs
+++ b/src/GF/GFCC/API.hs
@@ -112,6 +112,11 @@ readTree _ = pTree
showTree = prExp
+prIdent :: CId -> String
+prIdent (CId s) = s
+
+abstractName mgr = prIdent (absname (gfcc mgr))
+
languages mgr = [l | CId l <- cncnames (gfcc mgr)]
categories mgr = [c | CId c <- Map.keys (cats (abstract (gfcc mgr)))]