All pastes #1531753 Raw Edit

pikhq

public text v1 · immutable
#1531753 ·published 2009-08-16 19:43 UTC
rendered paste body
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()