@@ -96,17 +96,33 @@ validFile (FHandle h) = do x <- nullPtr h
96 return (not x)
96 return (not x)
98||| Modes for opening files
98||| Modes for opening files
99−data Mode = Read | Write | ReadWrite
99+data Mode = Read | WriteTruncate | Append | ReadWrite | ReadWriteTruncate | ReadAppend
102+Write = WriteTruncate
103+%deprecate Write "Please use WriteTruncate instead."
105+modeStr : Mode -> String
107+modeStr WriteTruncate = "w"
109+modeStr ReadWrite = "r+"
110+modeStr ReadWriteTruncate = "w+"
111+modeStr ReadAppend = "a+"
101||| Open a file
113||| Open a file
102||| @ f the filename
114||| @ f the filename
103−||| @ m the mode; either Read, Write, or ReadWrite
115+||| @ m the mode; either Read, WriteTruncate, Append, ReadWrite, ReadWriteTruncate, or ReadAppend
105openFile : (f : String) -> (m : Mode) -> IO (Either FileError File)
117openFile : (f : String) -> (m : Mode) -> IO (Either FileError File)
106−openFile f m = fopen f (modeStr m) where
118+openFile f m = fopen f (modeStr m)
107− modeStr Read = "r"
119+
108− modeStr Write = "w"
120+||| Open a file using C11 extended modes.
109− modeStr ReadWrite = "r+"
121+||| @ f the filename
122+||| @ m the mode; either Read, WriteTruncate, Append, ReadWrite, ReadWriteTruncate, or ReadAppend
124+openFileX : (f : String) -> (m : Mode) -> IO (Either FileError File)
125+openFileX f m = fopen f $ modeStr m ++ "x"
112do_fclose : Ptr -> IO ()
128do_fclose : Ptr -> IO ()
@@ -142,10 +158,6 @@ popen f m = do ptr <- do_popen f (modeStr m)
142 then do err <- getFileError
158 then do err <- getFileError
143 return (Left err)
159 return (Left err)
144 else return (Right (FHandle ptr))
160 else return (Right (FHandle ptr))
148− modeStr ReadWrite = "r+"
151pclose : File -> IO ()
163pclose : File -> IO ()