forked from izaya/OC-PsychOS2
117 lines
2.1 KiB
Lua
117 lines
2.1 KiB
Lua
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
|