diff options
Diffstat (limited to 'src/compiler/GF/System')
| -rw-r--r-- | src/compiler/GF/System/Console.hs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/compiler/GF/System/Console.hs b/src/compiler/GF/System/Console.hs new file mode 100644 index 000000000..ea901d55d --- /dev/null +++ b/src/compiler/GF/System/Console.hs @@ -0,0 +1,42 @@ +{-# LANGUAGE CPP #-} +module GF.System.Console(setConsoleEncoding,changeConsoleEncoding) where +import System.IO +#ifdef mingw32_HOST_OS +import System.Win32.Console +import System.Win32.NLS +#endif + +setConsoleEncoding = +#ifdef mingw32_HOST_OS + do codepage <- getACP + setCP codepage + setEncoding ("CP"++show codepage) +#endif + return () :: IO () + +changeConsoleEncoding code = + do +#ifdef mingw32_HOST_OS + maybe (return ()) setCP (readCP code) +#endif + setEncoding code + +setEncoding code = + do enc <- mkTextEncoding code + hSetEncoding stdin enc + hSetEncoding stdout enc + hSetEncoding stderr enc + +#ifdef mingw32_HOST_OS +setCP codepage = + do setConsoleCP codepage + setConsoleOutputCP codepage + +readCP code = + case code of + 'C':'P':c -> case reads c of + [(cp,"")] -> Just cp + _ -> Nothing + "UTF-8" -> Just 65001 + _ -> Nothing +#endif |
