[project @ 1998-03-12 08:56:24 by sof]
authorsof <unknown>
Thu, 12 Mar 1998 08:56:32 +0000 (08:56 +0000)
committersof <unknown>
Thu, 12 Mar 1998 08:56:32 +0000 (08:56 +0000)
Added IOExts.openFileEx + IOExts.IOModeEx

ghc/docs/libraries/libs.sgml
ghc/lib/exts/IOExts.lhs
ghc/lib/std/PrelHandle.lhs

index 8869e9f..1b1a4a0 100644 (file)
@@ -184,6 +184,10 @@ References (aka mutable variables) and mutable arrays (but no form of
 mutable byte arrays)
 
 <item>
+<tt/openFileEx/ extends the standard <tr/openFile/ action with support
+for opening binary files.
+
+<item>
 <tt/performGC/ triggers an immediate garbage collection
 
 <item>
@@ -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
index 51ef0fc..52ecb16 100644 (file)
@@ -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}
+
index a597284..bfb5aff 100644 (file)
@@ -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