From 74cd7228b2a5bc0f8a8073d6f802261649867137 Mon Sep 17 00:00:00 2001 From: sof Date: Thu, 12 Mar 1998 08:56:32 +0000 Subject: [PATCH] [project @ 1998-03-12 08:56:24 by sof] Added IOExts.openFileEx + IOExts.IOModeEx --- ghc/docs/libraries/libs.sgml | 10 ++++++++++ ghc/lib/exts/IOExts.lhs | 5 +++++ ghc/lib/std/PrelHandle.lhs | 21 +++++++++++++++++++-- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/ghc/docs/libraries/libs.sgml b/ghc/docs/libraries/libs.sgml index 8869e9f..1b1a4a0 100644 --- a/ghc/docs/libraries/libs.sgml +++ b/ghc/docs/libraries/libs.sgml @@ -184,6 +184,10 @@ References (aka mutable variables) and mutable arrays (but no form of mutable byte arrays) + @@ -248,6 +252,12 @@ writeIOArray :: Ix ix => IOArray ix elt -> ix -> elt -> IO () freezeIOArray :: Ix ix => IOArray ix elt -> IO (Array ix elt) instance Eq (IOArray ix elt) +openFileEx :: FilePath -> IOModeEx -> IO Handle +data IOModeEx = BinaryMode IO.IOMode | TextMode IO.IOMode +instance Eq IOModeEx +instance Read IOModeEx +instance Show IOModeEx + performGC :: IO () trace :: String -> a -> a unsafePtrEq :: a -> a -> Bool diff --git a/ghc/lib/exts/IOExts.lhs b/ghc/lib/exts/IOExts.lhs index 51ef0fc..52ecb16 100644 --- a/ghc/lib/exts/IOExts.lhs +++ b/ghc/lib/exts/IOExts.lhs @@ -25,6 +25,9 @@ module IOExts , readIOArray , writeIOArray , freezeIOArray + + , openFileEx + , IOModeEx(..) , trace , performGC @@ -36,6 +39,7 @@ module IOExts \begin{code} import PrelBase import PrelIOBase +import PrelHandle ( openFileEx, IOModeEx(..) ) import PrelST import PrelUnsafe import PrelArr @@ -84,3 +88,4 @@ writeIOArray (IOArray arr) ix elt = stToIO (writeArray arr ix elt) freezeIOArray (IOArray arr) = stToIO (freezeArray arr) \end{code} + diff --git a/ghc/lib/std/PrelHandle.lhs b/ghc/lib/std/PrelHandle.lhs index a597284..bfb5aff 100644 --- a/ghc/lib/std/PrelHandle.lhs +++ b/ghc/lib/std/PrelHandle.lhs @@ -186,9 +186,17 @@ stderr = unsafePerformIO (do data IOMode = ReadMode | WriteMode | AppendMode | ReadWriteMode deriving (Eq, Ord, Ix, Enum, Read, Show) +data IOModeEx + = BinaryMode IOMode + | TextMode IOMode + deriving (Eq, Read, Show) + openFile :: FilePath -> IOMode -> IO Handle +openFile fp im = openFileEx fp (TextMode im) + +openFileEx :: FilePath -> IOModeEx -> IO Handle -openFile f m = do +openFileEx f m = do ptr <- _ccall_ openFile f m' if ptr /= ``NULL'' then do #ifndef __PARALLEL_HASKELL__ @@ -208,13 +216,22 @@ openFile f m = do _ -> ioError fail improved_error where + imo = case m of + BinaryMode imo -> imo + TextMode imo -> imo + m' = case m of + BinaryMode _ -> imo' ++ "b" + TextMode imo -> imo' + + imo' = + case imo of ReadMode -> "r" WriteMode -> "w" AppendMode -> "a" ReadWriteMode -> "r+" - htype = case m of + htype = case imo of ReadMode -> ReadHandle WriteMode -> WriteHandle AppendMode -> AppendHandle -- 1.7.10.4