forked from Hyperion/HyperionOS
42 lines
1.1 KiB
Plaintext
42 lines
1.1 KiB
Plaintext
--:Minify:--
|
|
local kernel=...
|
|
local io = {}
|
|
kernel.io=io
|
|
io.eventq={}
|
|
|
|
function io.pushEvent(queue, ...)
|
|
queue=tostring(queue)
|
|
if not io.eventq[queue] then
|
|
io.eventq[queue]={}
|
|
end
|
|
io.eventq[queue][#io.eventq[queue]+1]={...}
|
|
end
|
|
|
|
function io.bind(queue)
|
|
queue=tostring(queue)
|
|
kernel.currentTask.eventq=queue
|
|
end
|
|
|
|
function io.pullEvent()
|
|
if io.eventq[kernel.currentTask.eventq] then
|
|
if #io.eventq[kernel.currentTask.eventq]==1 then
|
|
local event = table.remove(io.eventq[kernel.currentTask.eventq] or {}, 1)
|
|
io.eventq[kernel.currentTask.eventq]=nil
|
|
return table.unpack(event)
|
|
end
|
|
local event = table.remove(io.eventq[kernel.currentTask.eventq] or {}, 1)
|
|
if not event then return end
|
|
return table.unpack(event)
|
|
end
|
|
end
|
|
|
|
function io.getBoundQueue()
|
|
return kernel.currentTask.eventq
|
|
end
|
|
|
|
kernel.syscalls["IO_pushEvent"]=io.pushEvent
|
|
kernel.syscalls["IO_pullEvent"]=io.pullEvent
|
|
kernel.syscalls["IO_bind"]=io.bind
|
|
kernel.syscalls["IO_getBoundQueue"]=io.getBoundQueue
|
|
|
|
kernel.log("IO pipeline initialized") |