@@ -503,11 +503,17 @@ do_fread h = prim_fread h
503503fgetc : File -> IO Char
504504fgetc (FHandle h) = return (cast !(mkForeign (FFun "fgetc" [FPtr] FInt) h))
505505
506+fgetc' : File -> IO (Maybe Char)
507+fgetc' (FHandle h)
508+ = do x <- mkForeign (FFun "fgetc" [FPtr] FInt) h
509+ if (x < 0) then return Nothing
510+ else return (Just (cast x))
511+
506512fflush : File -> IO ()
507513fflush (FHandle h) = mkForeign (FFun "fflush" [FPtr] FUnit) h
508514
509515do_popen : String -> String -> IO Ptr
510−do_popen f m = mkForeign (FFun "popen" [FString, FString] FPtr) f m
516+do_popen f m = mkForeign (FFun "do_popen" [FString, FString] FPtr) f m
511517
512518popen : String -> Mode -> IO File
513519popen f m = do ptr <- do_popen f (modeStr m)
@@ -552,6 +558,10 @@ ferror : File -> IO Bool
552558ferror (FHandle h) = do err <- do_ferror h
553559 return (not (err == 0))
554560
561+fpoll : File -> IO Bool
562+fpoll (FHandle h) = do p <- mkForeign (FFun "fpoll" [FPtr] FInt) h
563+ return (p > 0)
564+
555565partial
556566nullPtr : Ptr -> IO Bool
557567nullPtr p = do ok <- mkForeign (FFun "isNull" [FPtr] FInt) p