|
- local gpus,screens,ttyn = {}, {}, 0
- local function scan()
- local w,di = pcall(computer.getDeviceInfo)
- if w then
- for a,t in pairs(component.list()) do
- if t == "gpu" then
- gpus[a] = gpus[a] or {false, tonumber(di[a].capacity)}
- elseif t == "screen" then
- screens[a] = screens[a] or {false, tonumber(di[a].capacity)}
- end
- end
- else
- dprint("no getDevInfo")
- for a,t in pairs(component.list()) do
- if t == "gpu" then
- gpus[a] = gpus[a] or {false, 8000}
- elseif t == "screen" then
- screens[a] = screens[a] or {false, 8000}
- end
- end
- end
- end
- local function nextScreen(n)
- local rt = {}
- for k,v in pairs(screens) do
- if not v[1] then
- rt[v[2]] = rt[v[2]] or k
- end
- end
- return rt[n] or rt[8000] or rt[2000] or rt[600]
- end
- local function allocate()
- for k,v in pairs(gpus) do
- dprint(k)
- local sA = nextScreen(v[2])
- if v[1] == false and sA then
- local r,w = vtemu(k,sA)
- devfs.register("tty"..tostring(ttyn), function() return r,w,function() end end)
- gpus[k][1] = true
- screens[sA][1] = true
- ttyn = ttyn + 1
- end
- end
- end
- scan()
- allocate()
- dprint("screens ready")
- while true do
- coroutine.yield()
- end
|