module file
intrude import stream
-intrude import string
+intrude import ropes
import string_search
import time
#include <unistd.h>
`}
-redef class Object
-# Simple I/O
-
- # Print `objects` on the standard output (`stdout`).
- protected fun printn(objects: Object...)
- do
- stdout.write(objects.to_s)
- end
-
- # Print an `object` on the standard output (`stdout`) and add a newline.
- protected fun print(object: Object)
- do
- stdout.write(object.to_s)
- stdout.write("\n")
- end
-
- # Read a character from the standard input (`stdin`).
- protected fun getc: Char
- do
- return stdin.read_char.ascii
- end
-
- # Read a line from the standard input (`stdin`).
- protected fun gets: String
- do
- return stdin.read_line
- end
-
- # Return the working (current) directory
- protected fun getcwd: String do return file_getcwd.to_s
- private fun file_getcwd: NativeString is extern "string_NativeString_NativeString_file_getcwd_0"
-end
-
# File Abstract Stream
abstract class FStream
super IOS
redef fun write(s)
do
assert _writable
- write_native(s.to_cstring, s.length)
+ if s isa FlatText then
+ write_native(s.to_cstring, s.length)
+ else
+ for i in s.substrings do write_native(i.to_cstring, i.length)
+ end
end
redef fun is_writable do return _writable
class Stdin
super IFStream
+ super PollableIStream
+
private init do
_file = new NativeFile.native_stdin
path = "/dev/stdin"
prepare_buffer(1)
end
- # Is these something to read? (non blocking)
- # FIXME: should be generalized
- fun poll_in: Bool is extern "file_stdin_poll_in"
+ redef fun poll_in: Bool is extern "file_stdin_poll_in"
end
class Stdout
new native_stderr is extern "file_NativeFileCapable_NativeFileCapable_native_stderr_0"
end
-# Standard input.
-fun stdin: Stdin do return once new Stdin
+redef class Sys
+
+ # Standard input
+ var stdin: PollableIStream protected writable = new Stdin
+
+ # Standard output
+ var stdout: OStream protected writable = new Stdout
+
+ # Standard output for errors
+ var stderr: OStream protected writable = new Stderr
+
+end
-# Standard output.
-fun stdout: OFStream do return once new Stdout
+# Print `objects` on the standard output (`stdout`).
+protected fun printn(objects: Object...)
+do
+ sys.stdout.write(objects.to_s)
+end
+
+# Print an `object` on the standard output (`stdout`) and add a newline.
+protected fun print(object: Object)
+do
+ sys.stdout.write(object.to_s)
+ sys.stdout.write("\n")
+end
+
+# Read a character from the standard input (`stdin`).
+protected fun getc: Char
+do
+ return sys.stdin.read_char.ascii
+end
+
+# Read a line from the standard input (`stdin`).
+protected fun gets: String
+do
+ return sys.stdin.read_line
+end
-# Standard output for error.
-fun stderr: OFStream do return once new Stderr
+# Return the working (current) directory
+protected fun getcwd: String do return file_getcwd.to_s
+private fun file_getcwd: NativeString is extern "string_NativeString_NativeString_file_getcwd_0"