Operating system for OpenComputers
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

51 řádky
1.1KB

  1. local gpus,screens,ttyn = {}, {}, 0
  2. local function scan()
  3. local w,di = pcall(computer.getDeviceInfo)
  4. if w then
  5. for a,t in pairs(component.list()) do
  6. if t == "gpu" then
  7. gpus[a] = gpus[a] or {false, tonumber(di[a].capacity)}
  8. elseif t == "screen" then
  9. screens[a] = screens[a] or {false, tonumber(di[a].capacity)}
  10. end
  11. end
  12. else
  13. dprint("no getDevInfo")
  14. for a,t in pairs(component.list()) do
  15. if t == "gpu" then
  16. gpus[a] = gpus[a] or {false, 8000}
  17. elseif t == "screen" then
  18. screens[a] = screens[a] or {false, 8000}
  19. end
  20. end
  21. end
  22. end
  23. local function nextScreen(n)
  24. local rt = {}
  25. for k,v in pairs(screens) do
  26. if not v[1] then
  27. rt[v[2]] = rt[v[2]] or k
  28. end
  29. end
  30. return rt[n] or rt[8000] or rt[2000] or rt[600]
  31. end
  32. local function allocate()
  33. for k,v in pairs(gpus) do
  34. dprint(k)
  35. local sA = nextScreen(v[2])
  36. if v[1] == false and sA then
  37. local r,w = vtemu(k,sA)
  38. devfs.register("tty"..tostring(ttyn), function() return r,w,function() end end)
  39. gpus[k][1] = true
  40. screens[sA][1] = true
  41. ttyn = ttyn + 1
  42. end
  43. end
  44. end
  45. scan()
  46. allocate()
  47. dprint("screens ready")
  48. while true do
  49. coroutine.yield()
  50. end