forked from izaya/OC-PsychOS2
83 lines
1.6 KiB
Lua
83 lines
1.6 KiB
Lua
do
|
|
io = {}
|
|
|
|
function io.type(fh)
|
|
if type(fh) ~= "table" then return nil end
|
|
if fh.state == "open" then
|
|
return "file"
|
|
elseif fh.state == "closed" then
|
|
return "closed file"
|
|
end
|
|
return nil
|
|
end
|
|
|
|
function io.read(buf, n)
|
|
n = n or buf
|
|
buf = buf or io.input()
|
|
print("bread",type(buf),n)
|
|
if not buf.aread then return nil end
|
|
if not buf.abmode then
|
|
buffer.write(buf,buf.fh:read(buf.m - buf.b:len()))
|
|
end
|
|
local rv = buffer.read(buf,n)
|
|
buffer.write(buf,buf.fh:read(buf.m - buf.b:len()))
|
|
return rv
|
|
end
|
|
function io.write(buf, d)
|
|
d = d or buf
|
|
buf = buf or io.output()
|
|
print("bwrite",type(buf),d)
|
|
if not buf.awrite then return nil end
|
|
if buf.b:len() + d:len() > buf.m then
|
|
buf.fh:write(buffer.read(buf,buf.m))
|
|
end
|
|
local rv = buffer.write(buf,d)
|
|
if not buf.abmode then
|
|
buf.fh:write(buffer.read(buf,buf.m))
|
|
end
|
|
return rv
|
|
end
|
|
|
|
function io.close(fh)
|
|
fh.fh.close()
|
|
fh.state = "closed"
|
|
end
|
|
|
|
function io.flush()
|
|
end
|
|
|
|
function io.open(fname,mode)
|
|
mode=mode or "r"
|
|
local buf = buffer.new()
|
|
buf.fh, er = fs.open(fname,mode)
|
|
if not buf.fh then
|
|
error(er)
|
|
end
|
|
buf.state = "open"
|
|
buf.aread = mode:match("r")
|
|
buf.awrite = mode:match("w") or mode:match("a")
|
|
setmetatable(buf,{__index=io})
|
|
return buf
|
|
end
|
|
|
|
function print(...)
|
|
for k,v in ipairs({...}) do
|
|
io.write(string.format("%s\n",tostring(v)))
|
|
end
|
|
end
|
|
|
|
io.stdin = io.open("/dev/null")
|
|
io.stdout = io.open("/dev/null","w")
|
|
|
|
function io.input(fname)
|
|
if not fname then return os.getenv("STDIN") or io.stdin end
|
|
os.setenv("STDIN",io.open(fname))
|
|
end
|
|
|
|
function io.output(fname)
|
|
if not fname then return os.getenv("STDOUT") or io.stdout end
|
|
os.setenv("STDOUT",io.open(fname,"w"))
|
|
end
|
|
|
|
end
|