From b5bf276e9c82505038f4269a77ba3c6e201438bb Mon Sep 17 00:00:00 2001 From: hallgren Date: Fri, 5 Oct 2012 12:54:49 +0000 Subject: Factor out code for setting the console encoding Moved similar low-level code blocks in Main and GFI for setting the console encoding to the new module GF.System.Console. --- src/compiler/GF/System/Console.hs | 42 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/compiler/GF/System/Console.hs (limited to 'src/compiler/GF/System') 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 -- cgit v1.2.3