
Hello Ryan, Saturday, December 29, 2007, 7:14:25 AM, you wrote:
Is it possible to have unbuffered character IO under Windows XP?
I have this problem as well and would love to hear if there is an answer.
once i had a hard day trying to figure out how to to the same in Unix. in Windows, it was easy for me :))) now my program contains: -- |Ask decryption password using hidden input ask_decryption_password = syncUI $ do withoutEcho $ do putStr "\n Enter decryption password:" hFlush stdout getHiddenLine -- |Input line not echoing it to the screen getHiddenLine = go "" where go s = do c <- getHiddenChar case c of '\r' -> do putStrLn ""; return s '\n' -> do putStrLn ""; return s c -> go (s++[c]) -- please note that FREEARC_WIN is specific to my program #ifdef FREEARC_WIN -- |Switch console into the hidden input mode withoutEcho = id -- |Input char without echoing it getHiddenChar = liftM (chr.fromEnum) c_getch foreign import ccall unsafe "conio.h getch" c_getch :: IO CChar #else -- |Input char without echoing it getHiddenChar = getChar -- |Switch console into the hidden input mode withoutEcho action = do let setAttr attr = setTerminalAttributes stdInput attr Immediately disableEcho = do origAttr <- getTerminalAttributes stdInput setAttr$ origAttr.$ flip withMode ProcessInput .$ flip withoutMode EnableEcho .$ flip withMode KeyboardInterrupts .$ flip withoutMode IgnoreBreak .$ flip withMode InterruptOnBreak return origAttr -- bracketCtrlBreak disableEcho setAttr (\_ -> action) #endif -- Best regards, Bulat mailto:Bulat.Ziganshin@gmail.com