diff --git a/service/getty.lua b/service/getty.lua index 37cc269..5a4325c 100644 --- a/service/getty.lua +++ b/service/getty.lua @@ -1,4 +1,4 @@ -local gpus,screens,ttyn = {}, {}, 0 +local gpus,screens,ttyn,pids = {}, {}, 0, {} local function scan() local w,di = pcall(computer.getDeviceInfo) if w then @@ -29,6 +29,14 @@ local function nextScreen(n) end return rt[n] or rt[8000] or rt[2000] or rt[600] end + +local function spawnShell(fin,fout) + io.input(fin) + io.output(fout) + print(_OSVERSION.." - "..tostring(math.floor(computer.totalMemory()/1024)).."K RAM") + return os.spawnfile("/boot/exec/shell.lua") +end + local function allocate() for k,v in pairs(gpus) do dprint(k) @@ -38,13 +46,22 @@ local function allocate() devfs.register("tty"..tostring(ttyn), function() return r,w,function() end end) gpus[k][1] = true screens[sA][1] = true + pids["tty"..tostring(ttyn)] = {-1} ttyn = ttyn + 1 end end end + scan() allocate() dprint("screens ready") while true do coroutine.yield() + for k,v in pairs(pids) do + if not os.taskInfo(v[1]) then + dprint("Spawning new shell for "..k) + pids[k][1] = spawnShell(v[2] or "/dev/"..k, v[3] or "/dev/"..k) + pids[k][2], pids[k][3] = pids[k][2] or io.input(), pids[k][3] or io.output() + end + end end