# stdio stuff global io = { fn open(self, path, mode) -> { path: string, offset: num } do if mode == "w" do fs:store(path, "") end let offset = 0 if mode == "a" do const size = fs:size(path) if (size > 0) offset = size end return { path = path, offset = offset } end, fn read(self, handle, count) -> string do const data = fs:read_bytes(handle.path, handle.offset, count) handle.offset += data:len() return data end, fn read_all(self, handle) -> string do const size = fs:size(handle.path) if (size <= handle.offset) return "" const data = fs:read_bytes(handle.path, handle.offset, size - handle.offset) handle.offset += data:len() return data end, fn write(self, handle, data) -> num do fs:write_at(handle.path, handle.offset, data) handle.offset += data:len() return data:len() end, fn seek(self, handle, offset) do handle.offset = offset end, fn tell(self, handle) -> num do return handle.offset end, fn close(self, handle) :nil, }