[project @ 2000-12-12 17:21:40 by simonmar]
[ghc-hetmet.git] / ghc / tests / io / should_run / io018.stdout
index 18c9dbc..281e7ac 100644 (file)
@@ -1,6 +1,46 @@
 Smoewnst pa ihyu
 Caught EOF
-Smoewnst pa ihyu
+S-m-o e!w!n
 Caught EOF
-Smoewnst pa ihyu
+S-m-o e!w!n!s tT epsat iinhgy uR!s tT epsat iinhgy uRW handles 
+module Main(main) where
+
+import IO
+import IOExts
+import Directory (removeFile, doesFileExist)
+import Monad
+
+-- This test is weird, full marks to whoever dreamt it up!
+
+main :: IO ()
+main = do
+   let username = "io018.inout"
+   f <- doesFileExist username
+   when f (removeFile username)
+   cd <- openFile username ReadWriteMode
+   hSetBinaryMode cd True
+   hSetBuffering stdin NoBuffering
+   hSetBuffering stdout NoBuffering
+   hSetBuffering cd NoBuffering
+   hPutStr cd speakString
+   hSeek cd AbsoluteSeek 0
+   speak cd  `catch` \ err -> if isEOFError err then putStrLn "\nCaught EOF" else ioError err
+   hSeek cd AbsoluteSeek 0
+   hSetBuffering cd LineBuffering
+   speak cd  `catch` \ err -> if isEOFError err then putStrLn "\nCaught EOF" else ioError err
+   hSeek cd AbsoluteSeek 0
+   hSetBuffering cd (BlockBuffering Nothing)
+   speak cd  `catch` \ err -> if isEOFError err then putStrLn "\nCaught EOF" else ioError err
+
+speakString = "Someone wants to speak with you\n"
+
+speak cd = do
+     (do
+        ready <- hReady cd
+        if ready then 
+          hGetChar cd >>= putChar
+        else
+          return ()
+        ready <- hReady stdin
+        if ready then (do { ch <- ge
 Caught EOF