diff options
Diffstat (limited to 'kernel/io.rv')
| -rw-r--r-- | kernel/io.rv | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/kernel/io.rv b/kernel/io.rv new file mode 100644 index 0000000..68b7039 --- /dev/null +++ b/kernel/io.rv @@ -0,0 +1,37 @@ +# stdio stuff + +global io = { + open = fn(self, path, mode) do + if mode == "w" do fs:store(path, "") end + let offset = 0 + if mode == "a" do + const size = fs:size(path) + if size > 0 do offset = size end + end + return { path = path, offset = offset } + end, + + read = fn(self, handle, count) do + const data = fs:read_bytes(handle.path, handle.offset, count) + handle.offset += data:len() + return data + end, + + read_all = fn(self, handle) 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, + + write = fn(self, handle, data) do + fs:write_at(handle.path, handle.offset, data) + handle.offset += data:len() + return data:len() + end, + + seek = fn(self, handle, offset) do handle.offset = offset end, + tell = fn(self, handle) handle.offset, + close = fn(self, handle) :nil, +} |
