--:Minify:-- local kernel=... local apis=kernel.apis local main=apis.term local native=apis.peripheral local sides = {"top", "bottom", "left", "right", "front", "back"} local function getType(name) if native.isPresent(name) then return native.getType(name) end for n = 1, #sides do local side = sides[n] if native.hasType(side, "peripheral_hub") and native.call(side, "isPresentRemote", name) then return native.call(side, "getTypeRemote", name) end end return nil end local function getNames() local names = {} for n = 1, #sides do local side = sides[n] if native.isPresent(side) then table.insert(names, side) end if native.hasType(side, "peripheral_hub") then local hubSides = native.call(side, "getConnectedSides") for _, hubSide in ipairs(hubSides) do table.insert(names, hubSide) end end end return names end local function wrapPeripheral(name) if native.isPresent(name) then return wrapPeripheral(name) end for n = 1, #sides do local side = sides[n] if native.hasType(side, "peripheral_hub") and native.call(side, "isPresentRemote", name) then return native.call(side, "wrapRemote", name) end end return nil end local colors={ [0]=0x000000, -- #000000 0xFFFFFF, -- #FFFFFF 0xFF0000, -- #FF0000 0x00FF00, -- #00FF00 0x0000FF, -- #0000FF 0x00FFFF, -- #00FFFF 0xFF00FF, -- #FF00FF 0xFFFF00, -- #FFFF00 0xFF6D00, -- #FF6D00 0x6DFF55, -- #6DFF55 0x24FFFF, -- #24FFFF 0x924900, -- #924900 0x6D6D55, -- #6D6D55 0xDBDBAA, -- #DBDBAA 0x6D00FF, -- #6D00FF 0xB6FF00 -- #B6FF00 } local icolors={ [0x1] =0, -- #000000 [0x2] =1, -- #FFFFFF [0x4] =2, -- #FF0000 [0x8] =3, -- #00FF00 [0x10] =4, -- #0000FF [0x20] =5, -- #00FFFF [0x40] =6, -- #FF00FF [0x80] =7, -- #FFFF00 [0x100] =8, -- #FF6D00 [0x200] =9, -- #6DFF55 [0x400] =10, -- #24FFFF [0x800] =11, -- #924900 [0x1000] =12, -- #6D6D55 [0x2000] =13, -- #DBDBAA [0x4000] =14, -- #6D00FF [0x8000] =15 -- #B6FF00 } local function write(text, term) local x, y = term.getCursorPos() local w, h = term.getSize() for i = 1, #text do local c = text:sub(i, i) if c == "\n" then y = y + 1 x = 1 elseif c == "\t" then local tabSize = 4 local spaces = tabSize - ((x - 1) % tabSize) term.write(string.rep(" ", spaces)) x = x + spaces elseif c == "\b" then if x > 1 then x = x - 1 term.setCursorPos(x, y) term.write(" ") term.setCursorPos(x, y) end else if x <= w and y <= h then term.setCursorPos(x, y) term.write(c) x = x + 1 end end -- Handle wrapping if we go past right edge if x > w then x = 1 y = y + 1 end -- Handle scrolling if we go past bottom if y-1 > h then term.scroll(1) y = h term.setCursorPos(x, y) end end term.setCursorPos(x, y) end local function newTTY(term) local ret={} function ret.print(text) write(text.."\n", term) end function ret.printInline(text) write(text, term) end function ret.clear() term.clear() term.setCursorPos(1,1) end function ret.setCursorPos(x,y) term.setCursorPos(x,y) end function ret.getCursorPos() return term.getCursorPos() end function ret.getSize() return term.getSize() end function ret.setBackgroundColor(color) term.setBackgroundColor(colors[color]) end function ret.setTextColor(color) term.setTextColor(colors[color]) end function ret.getBackgroundColor() return icolors[term.getBackgroundColor()] end function ret.getTextColor() return icolors[term.getTextColor()] end return ret end kernel.tty.register("tty0", newTTY(main)) for _, name in ipairs(getNames()) do local t = getType(name) if t == "monitor" then local monitorTerm = wrapPeripheral(name) monitorTerm.setTextScale(0.5) kernel.tty.register(name, newTTY(monitorTerm)) end end