@@ -500,6 +500,26 @@ partial
500500do_fread : Ptr -> IO String
501501do_fread h = prim_fread h
502502
503+fgetc : File -> IO Char
504+fgetc (FHandle h) = return (cast !(mkForeign (FFun "fgetc" [FPtr] FInt) h))
505+
506+fflush : File -> IO ()
507+fflush (FHandle h) = mkForeign (FFun "fflush" [FPtr] FUnit) h
508+
509+do_popen : String -> String -> IO Ptr
510+do_popen f m = mkForeign (FFun "popen" [FString, FString] FPtr) f m
511+
512+popen : String -> Mode -> IO File
513+popen f m = do ptr <- do_popen f (modeStr m)
514+ return (FHandle ptr)
515+ where
516+ modeStr Read = "r"
517+ modeStr Write = "w"
518+ modeStr ReadWrite = "r+"
519+
520+pclose : File -> IO ()
521+pclose (FHandle h) = mkForeign (FFun "pclose" [FPtr] FUnit) h
522+
503523-- mkForeign (FFun "idris_readStr" [FPtr, FPtr] (FAny String))
504524-- prim__vm h
505525