forked from izaya/OC-PsychOS2
redid the io system almost entirely, including more commenting
This commit is contained in:
parent
d9cc184f84
commit
2ddf1f1ca2
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user