|
- do
- local tG,ttyn = {}, 0
-
- local function checkUnused(addr) -- returns false if a screen *addr* is already allocated to a GPU
- for k,v in pairs(tG) do
- if v == addr then
- return false
- end
- end
- return true
- end
- local function findNextDisplay() -- finds the next available screen, or nil if there are no available screens
- for a,_ in component.list("screen") do
- if checkUnused(a) then
- return a
- end
- end
- return nil
- end
-
- for file in ipairs(fs.list("/boot/cfg/disp/")) do -- allows files in /boot/cfg/disp with filenames as GPU addresses to bind to specific screens
- if component.proxy(file) then
- local f = io.open("/boot/cfg/disp/"..file)
- if f then
- local sA = file:read()
- if checkUnused(sA) then
- tG[file] = sA
- end
- f:close()
- end
- end
- end
-
- for a,_ in component.list("gpu") do -- allocate a screen to every unused GPU
- tG[a] = findNextDisplay()
- end
-
- for gpu,screen in pairs(tG) do
- dprint(gpu,screen)
- local r,w = vtemu(gpu,screen)
- iofs.register("tty"..tostring(ttyn),function() return r,w,function() w("\27[2J\27[H") end end)
- local f = io.open("/iofs/tty"..tostring(ttyn),"rw")
- fd[f.fd].t = "t"
- ttyn = ttyn + 1
- end
- do
- iofs.register("syslog",function() return function() return "" end, function(msg) syslog(msg,nil,tTasks[cPid].n) end, function() return true end end)
- end
- if #fd < 1 then
- io.open("/iofs/syslog","rw")
- end
- end
|