forked from izaya/OC-PsychOS2
accidentally delet'd the wrong file
This commit is contained in:
parent
aaccc053d3
commit
9022bfce78
@ -1,4 +1,4 @@
|
||||
local buffer = {}
|
||||
buffer = {}
|
||||
local metatable = {
|
||||
__index = buffer,
|
||||
__metatable = "file",
|
||||
|
116
module/io.lua
Normal file
116
module/io.lua
Normal file
@ -0,0 +1,116 @@
|
||||
do
|
||||
io = {}
|
||||
|
||||
function io.close(file)
|
||||
return (file or io.output()):close()
|
||||
end
|
||||
|
||||
function io.flush()
|
||||
return io.output():flush()
|
||||
end
|
||||
|
||||
function io.lines(filename, ...)
|
||||
if filename then
|
||||
local file, reason = io.open(filename)
|
||||
if not file then
|
||||
error(reason, 2)
|
||||
end
|
||||
local args = table.pack(...)
|
||||
return function()
|
||||
local result = table.pack(file:read(table.unpack(args, 1, args.n)))
|
||||
if not result[1] then
|
||||
if result[2] then
|
||||
error(result[2], 2)
|
||||
else -- eof
|
||||
file:close()
|
||||
return nil
|
||||
end
|
||||
end
|
||||
return table.unpack(result, 1, result.n)
|
||||
end
|
||||
else
|
||||
return io.input():lines()
|
||||
end
|
||||
end
|
||||
|
||||
function io.open(path, mode)
|
||||
local stream, result = fs.open(path, mode)
|
||||
if stream then
|
||||
return buffer.new(mode, stream)
|
||||
else
|
||||
return nil, result
|
||||
end
|
||||
end
|
||||
|
||||
local fdt = {[0]="STDIN","STDOUT","STDERR"}
|
||||
local function getfh(fd)
|
||||
return os.getenv(fdt[fd] or "FILE"..tostring(fd))
|
||||
end
|
||||
local function setfh(fd,fh)
|
||||
os.setenv(fdt[fd] or "FILE"..tostring(fd),fh)
|
||||
end
|
||||
|
||||
function io.stream(fd,file,mode)
|
||||
checkArg(1,fd,'number')
|
||||
assert(fd>=0,'fd must be >= 0. 0 is input, 1 is stdout, 2 is stderr')
|
||||
if file then
|
||||
if type(file) == "string" then
|
||||
local result, reason = io.open(file, mode)
|
||||
if not result then
|
||||
error(reason, 2)
|
||||
end
|
||||
file = result
|
||||
elseif not io.type(file) then
|
||||
error("bad argument #1 (string or file expected, got " .. type(file) .. ")", 2)
|
||||
end
|
||||
setfh(fd,file)
|
||||
end
|
||||
return getfh(fd)
|
||||
end
|
||||
|
||||
function io.input(file)
|
||||
return io.stream(0, file, 'r')
|
||||
end
|
||||
|
||||
function io.output(file)
|
||||
return io.stream(1, file,'w')
|
||||
end
|
||||
|
||||
function io.error(file)
|
||||
return io.stream(2, file,'w')
|
||||
end
|
||||
|
||||
function io.read(...)
|
||||
return io.input():read(...)
|
||||
end
|
||||
|
||||
function io.tmpfile()
|
||||
local name = os.tmpname()
|
||||
if name then
|
||||
return io.open(name, "a")
|
||||
end
|
||||
end
|
||||
|
||||
function io.type(object)
|
||||
if type(object) == "table" then
|
||||
if getmetatable(object) == "file" then
|
||||
if object.stream.handle then
|
||||
return "file"
|
||||
else
|
||||
return "closed file"
|
||||
end
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
function io.write(...)
|
||||
return io.output():write(...)
|
||||
end
|
||||
|
||||
function print(...)
|
||||
for k,v in ipairs({...}) do
|
||||
io.write(tostring(v).."\n")
|
||||
end
|
||||
end
|
||||
end
|
@ -1,82 +0,0 @@
|
||||
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
|
Loading…
Reference in New Issue
Block a user