C.__fopen = C.libc("fopen", C.pointer, [[C.pointer, C.pointer]]); C.__fputs = C.libc("fputs", C.int, [[ C.pointer, C.pointer ]]); C.__fread = C.libc("fread", C.pointer, [[ C.pointer, C.pointer, C.pointer, C.pointer ]]); C.__getline = C.libc("getline", C.pointer, [[ C.pointer, C.pointer, C.pointer ]]); C.__fclose = C.libc("fclose", C.int, [[C.pointer]]); C.__printf = C.libc("printf", C.int, [[C.pointer, C.pointer]]); var Handle = Object : [ write = (x as String) { Abstract() } read = (x as String) { Abstract() } close = () { Abstract() } ]; var File = Handle : [ this (file as String, type as String) { var c_file = C.calloc(file.length() + 1) var c_type = C.calloc(type.length() + 1) C.set c_file file C.set c_type type this.filepointer = C.__fopen([[c_file, c_type]]) C.free c_file C.free c_type } filepointer = Null as CPointer write = (x as String) { var c_x = C.calloc(x.length() + 1) C.set c_x x var ret = C.__fputs([[c_x, this.filepointer]]) as NativeInteger C.free c_x return ret }; read = (x as NativeInteger) { Stdout.write "A\n" var c_data = C.calloc(x + 1) Stdout.write "A\n" var read_length = C.__fread([[ c_data, C.sizeof(C.uchar), x, this.filepointer]]) as NativeInteger Stdout.write "A\n" var ret = C.get(c_data, read_length) Stdout.write "A\n" C.free c_data Stdout.write "A\n" return ret } readLine = () { Abstract() } close = () { var ret = C.__fclose([[this.filepointer]]) as NativeInteger this.filepointer = Null as CPointer return ret } ]; var Stdout = Handle : [ write = (x as String) { var s = "%s" var c_s = C.calloc(s.length() + 1) var c_x = C.calloc(x.length() + 1) C.set c_s s C.set c_x x var ret = C.__printf([[c_s, c_x]]) as NativeInteger C.free c_s C.free c_x return ret }; ]; Stdout.write "Hello, world!\n" var f = new File("foo", "r") var s = f.read(2) Stdout.write (s) f.close()