io = {}

function io.open(path,mode) -- string string -- table -- Open file *path* in *mode*. Returns a buffer object.
 local f,e = fs.open(path, mode)
 if not f then return false, e end
 return buffer.new(mode,f)
end

function io.input(fd) -- table -- table -- Sets the default input stream to *fd* if provided, either as a buffer as a path. Returns the default input stream.
 if type(fd) == "string" then
  fd=io.open(fd,"rbt")
 end
 if fd then
  os.setenv("STDIN",fd)
 end
 return os.getenv("STDIN")
end
function io.output(fd) -- table -- table -- Sets the default output stream to *fd* if provided, either as a buffer as a path. Returns the default output stream.
 if type(fd) == "string" then
  fd=io.open(fd,"wb")
 end
 if fd then
  os.setenv("STDOUT",fd)
 end
 return os.getenv("STDOUT")
end

function io.read(...) -- Reads from the default input stream.
 return io.input():read(...)
end
function io.write(...) -- Writes its arguments to the default output stream.
 io.output():write(...)
end

function print(...) -- Writes each argument to the default output stream, separated by newlines.
 for k,v in ipairs({...}) do
  io.write(tostring(v).."\n")
 end
end