redid the io system almost entirely, including more commenting

This commit is contained in:
Izaya 2019-01-08 18:02:39 +11:00
parent d9cc184f84
commit 2ddf1f1ca2

View File

@ -1,28 +1,65 @@
_G.fd,_G.io = {},{}
do do
function io.write(d) _G.fd,_G.io = {},{}
fd[tTasks[cPid].t or 1].w(d) function io.write(d) -- writes *d* to stdout
fd[os.getenv("t") or 1].write(d)
end end
function io.read(d,b) function io.read(d,b) -- reads *d* from stdin, until something is returned, or the thing returned equals *b*
local r = "" local r = ""
repeat repeat
r=fd[tTasks[cPid].t or 1].r(d) r=fd[os.getenv("t") or 1].read(d)
coroutine.yield() coroutine.yield()
until r or b until r or b
return r return r
end end
function print(...) function print(...) -- outputs its arguments to stdout, separated by newlines
for k,v in pairs({...}) do for k,v in pairs({...}) do
io.write(tostring(v).."\n") io.write(tostring(v).."\n")
end end
end end
local function fdw(f,d)
local ts = {} fd[f.fd].write(d)
for a,_ in component.list("screen") do
ts[#ts+1] = a
end end
for a,_ in component.list("gpu") do local function fdr(f,d)
local r,w = vtemu(a,table.remove(ts,1)) return fd[f.fd].read(d)
fd[#fd+1] = {["r"]=r,["w"]=w,["t"]="t"} end
local function fdc(f)
fd[f.fd].close()
fd[f.fd] = nil
end
local function newfd()
local nfd=#fd+1
fd[nfd] = {}
return nfd,fd[nfd]
end
function io.open(f,m) -- opens file *f* with mode *m*
local t={["close"]=fdc}
if type(f) == "string" then
local e,fobj=fs.open(f,m)
if not e then return false, fobj end
if fobj then
local fdi,nfd = newfd()
f=fdi
if fobj.write then
function nfd.write(d)
fobj:write(d)
end
elseif fobj.read then
function nfd.read(d)
return fobj:read(d)
end
end
function nfd.close()
fobj:close()
end
end
end
if fd[f].read then
t.read = fdr
end
if fd[f].write then
t.write = fdw
end
t.fd = f
return t
end end
end end