[project @ 2001-05-21 14:09:52 by sewardj]
[ghc-hetmet.git] / ghc / tests / lib / IOExts / hTell001.hs
1 -- !!! Testing hGetPosn and hSetPosn
2 module Main(main) where
3
4 import IO
5 import IOExts
6
7 getPosnAndPrint h = do
8   x <- hTell h
9   v <- hGetChar h
10   putStrLn ("At position: " ++ show x ++ ", found: " ++ show v)
11   return x
12
13 recordDoAndRepos h a = do
14   x <- getPosnAndPrint h
15   a 
16   hSeek h AbsoluteSeek x
17   getPosnAndPrint h
18   return ()
19
20 recordDoAndRepos2 h a = do
21   x <- getPosnAndPrint h
22   a 
23   hSeek h AbsoluteSeek x
24   getPosnAndPrint h
25   return ()
26
27 recordDoAndRepos3 h a = do
28   x <- getPosnAndPrint h
29   a 
30   hSeek h SeekFromEnd (negate (x + 1))
31   getPosnAndPrint h
32   return ()
33
34 file = "hTell001.hs"
35
36 main :: IO ()
37 main = do
38   h  <- openFile file ReadMode
39   recordDoAndRepos h $
40    recordDoAndRepos h $
41     recordDoAndRepos h $
42      recordDoAndRepos h $
43       recordDoAndRepos h $
44        putStrLn ""
45   hClose h
46   putStrLn ""
47   h  <- openFileEx file (BinaryMode ReadMode)
48   recordDoAndRepos h $
49    recordDoAndRepos h $
50     recordDoAndRepos h $
51      recordDoAndRepos h $
52       recordDoAndRepos h $
53        putStrLn ""
54   hClose h
55   putStrLn "\nUsing hSeek/AbsoluteSeek: "
56   h  <- openFile file ReadMode
57   recordDoAndRepos2 h $
58    recordDoAndRepos2 h $
59     recordDoAndRepos2 h $
60      recordDoAndRepos2 h $
61       recordDoAndRepos2 h $
62        putStrLn ""
63
64   hClose h
65   putStrLn "\nUsing hSeek/SeekFromEnd: "
66   putStrLn "(Don't worry if you're seeing differing numbers here, it might be down to '\\n' vs '\\r\\n')"
67   h  <- openFile file ReadMode
68   recordDoAndRepos3 h $
69    recordDoAndRepos3 h $
70     recordDoAndRepos3 h $
71      recordDoAndRepos3 h $
72       recordDoAndRepos3 h $
73        putStrLn ""