1
0
forked from GitHub/gf-core

Windows fix: the default coding isn't utf8 but the current system codepage. The se command changes the codepage as well as the coding

This commit is contained in:
krasimir
2008-10-25 20:26:48 +00:00
parent e816ae237a
commit 4104b83801

View File

@@ -1,3 +1,4 @@
{-# OPTIONS -cpp #-}
module GFI (mainGFI,mainRunGFI) where
import GF.Command.Interpreter
@@ -29,20 +30,26 @@ import Control.Monad
import Data.Version
import GF.System.Signal
--import System.IO.Error (try)
#ifdef mingw32_HOST_OS
import System.Win32.Console
import System.Win32.NLS
#endif
import Paths_gf
mainRunGFI :: Options -> [FilePath] -> IO ()
mainRunGFI opts files = do
let opts1 = addOptions (modifyFlags (\f -> f{optVerbosity=Quiet})) opts
gfenv <- importInEnv emptyGFEnv opts1 files
gfenv <- emptyGFEnv
gfenv <- importInEnv gfenv opts1 files
loop opts1 gfenv
return ()
mainGFI :: Options -> [FilePath] -> IO ()
mainGFI opts files = do
putStrLn welcome
gfenv <- importInEnv emptyGFEnv opts files
gfenv <- emptyGFEnv
gfenv <- importInEnv gfenv opts files
loop opts gfenv
return ()
@@ -128,7 +135,15 @@ loop opts gfenv0 = do
"ph":_ ->
mapM_ (putStrLn . enc) (reverse (history gfenv0)) >> loopNewCPU gfenv
"se":c:_ -> loopNewCPU $ gfenv {coding = c}
"se":c:_ -> do
#ifdef mingw32_HOST_OS
case c of
'c':'p':c -> case reads c of
[(cp,"")] -> setConsoleCP cp >> setConsoleOutputCP cp
_ -> return ()
_ -> return ()
#endif
loopNewCPU $ gfenv {coding = c}
-- ordinary commands, working on CommandEnv
_ -> do
@@ -191,8 +206,15 @@ data GFEnv = GFEnv {
coding :: String
}
emptyGFEnv :: GFEnv
emptyGFEnv = GFEnv emptyGrammar (mkCommandEnv "utf8" emptyPGF) [] 0 "utf8"
emptyGFEnv :: IO GFEnv
emptyGFEnv = do
#ifdef mingw32_HOST_OS
codepage <- getACP
let coding = "cp"++show codepage
#else
let coding = "utf8"
#endif
return $ GFEnv emptyGrammar (mkCommandEnv coding emptyPGF) [] 0 coding
encode = encodeUnicode . coding
decode = decodeUnicode . coding