OC-MultICE/modules/drivers/tty.lua

42 lines
1.1 KiB
Lua

function tty(gA,sA,sI,fg,bg)
local gP,cx,cy,bg,fg = component.proxy(gA),1,1,bg or 0x000000, fg or 0xffffff
gP.bind(sA)
local sx, sy = gP.getResolution()
gP.setResolution(sx,sy)
gP.setForeground(fg)
gP.setBackground(bg)
gP.fill(1,1,sx,sy," ")
local function cv()
if cx > sx then cx,cy=1,cy+1 end
if cx < 1 then cx,cy=sx,cy-1 end
if cy < 1 then cx,cy=1,1 end
if cy > sy then gP.copy(1,2,sx,sy-1,0,-1) gP.fill(1,sy,sx,1," ") cx,cy=1,sy end
end
local function wl(str)
for c in str:gmatch(".") do
if c == "\n" then cx,cy=1,cy+1
elseif c == "\r" then cx=1
elseif c == "\f" then cx=1 cy=1 gP.fill(1, 1, sx, sy, " ")
elseif c == "\t" then cx=(cx+4-((cx+4)%4))+1
elseif c == "\127" then cx=cx-1 gP.set(cx,cy," ")
else gP.set(cx,cy,c) cx=cx+1
end cv()
end
end
s("tty["..TS(sI).."]: "..gA:sub(1,8)..","..sA:sub(1,8),function()
while true do
eT = ev
if eT[1] == "display" and eT[3] == sI then
wl(tostring(eT[2]))
local cc,fg,bg=gP.get(cx,cy)
gP.setForeground(bg)
gP.setBackground(fg)
gP.set(cx,cy,cc)
gP.setForeground(fg)
gP.setBackground(bg)
end
C.yield()
end
end)
end