--: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]=0x0001, -- #000000 0x0002, -- #FFFFFF 0x0004, -- #FF0000 0x0008, -- #00FF00 0x0010, -- #0000FF 0x0020, -- #00FFFF 0x0040, -- #FF00FF 0x0080, -- #FFFF00 0x0100, -- #FF6D00 0x0200, -- #6DFF55 0x0400, -- #24FFFF 0x0800, -- #924900 0x1000, -- #6D6D55 0x2000, -- #DBDBAA 0x4000, -- #6D00FF 0x8000 -- #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