summaryrefslogtreecommitdiff
path: root/ghc/tests/lib/IO/hGetPosn001.hs
blob: f8726b577df9c10dd2794858ccec3518bdea43ee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
-- !!! Test file positioning

module Main(main) where

import IO
import Monad

import Directory (removeFile, doesFileExist)

main = do
  hIn <- openFile "hGetPosn001.in" ReadMode
  hSetBinaryMode hIn True
  f <- doesFileExist "hGetPosn001.out"
  when f (removeFile "hGetPosn001.out")
  hOut <- openFile "hGetPosn001.out" ReadWriteMode
  hSetBinaryMode hOut True
  bof <- hGetPosn hIn
  copy hIn hOut
  hSetPosn bof
  copy hIn hOut
  hSeek hOut AbsoluteSeek 0
  stuff <- hGetContents hOut
  putStr stuff

copy :: Handle -> Handle -> IO ()
copy hIn hOut =
    try (hGetChar hIn) >>=
    either (\ err -> if isEOFError err then return () else error "copy")
	   ( \ x -> hPutChar hOut x >> copy hIn hOut)