1
1
mirror of https://git.shadowkat.net/izaya/OC-PsychOS2.git synced 2024-11-14 00:47:00 -05:00
OC-PsychOS2/module/io.lua

65 lines
1.3 KiB
Lua
Raw Normal View History

2018-11-02 12:05:41 -04:00
do
_G.fd,_G.io = {},{}
function io.write(d) -- writes *d* to stdout
fd[os.getenv("t") or 1].write(d)
2018-11-02 12:05:41 -04:00
end
2019-01-08 22:09:57 -05:00
function io.read(d,b) -- reads *d* from stdin, until something is returned, or b is true
2018-11-02 12:05:41 -04:00
local r = ""
repeat
r=fd[os.getenv("t") or 1].read(d)
2018-11-02 12:05:41 -04:00
coroutine.yield()
until r or b
return r
end
function print(...) -- outputs its arguments to stdout, separated by newlines
2018-11-02 12:05:41 -04:00
for k,v in pairs({...}) do
io.write(tostring(v).."\n")
end
end
local function fdw(f,d)
fd[f.fd].write(d)
end
local function fdr(f,d)
return fd[f.fd].read(d)
end
local function fdc(f)
fd[f.fd].close()
fd[f.fd] = nil
2018-11-02 12:05:41 -04:00
end
function io.newfd() -- creates a new file descriptor and returns it plus its ID
local nfd=#fd+1
fd[nfd] = {}
return nfd,fd[nfd]
end
2019-01-09 00:15:31 -05:00
local function fdfile(f,m) -- create a fd from a file
local e,fobj = pcall(fs.open,f,m)
if e and fobj then
local fdi, fdo =io.newfd()
if fobj.read then
function fdo.read(d)
return fobj:read(d)
end
2019-01-09 00:15:31 -05:00
elseif fobj.write then
function fdo.write(d)
return fobj:write(d)
end
end
2019-01-09 00:15:31 -05:00
function fdo.close()
fobj:close()
end
return fdi
end
2019-01-09 00:15:31 -05:00
return false
end
function io.open(f,m) -- opens file or file descriptor *f* with mode *m*
if type(f) == "string" then
f = fdfile(f,m)
end
2019-01-09 00:15:31 -05:00
if fd[f] then
local t = {["close"]=fdc,["read"]=fdr,["write"]=fdw,["fd"]=f,["mode"]=m}
return t
end
2019-01-09 00:15:31 -05:00
return false
2018-11-02 12:05:41 -04:00
end
end