do --#include "module/nvt100.lua" function vtemu(gpua,scra) -- creates a process to handle the GPU and screen address combination *gpua*/*scra*. Returns read, write and "close" functions. local gpu = component.proxy(gpua) gpu.bind(scra) local write = vt100emu(gpu) local kba = {} for k,v in ipairs(component.invoke(scra,"getKeyboards")) do kba[v]=true end local buf, lbuf, echo = "", true, true os.spawn(function() dprint(pcall(function() while true do local ty,ka,ch = coroutine.yield() if ty == "key_down" and kba[ka] then if ch == 13 then ch = 10 end if ch == 8 then if buf:len() > 0 then if echo then write("\8 \8") end buf = buf:sub(1,-2) end elseif ch > 0 then if echo then write(string.char(ch)) end buf=buf..string.char(ch) end end end end)) end,string.format("ttyd[%s:%s]",gpua:sub(1,8),scra:sub(1,8))) local function bread(n) local r if lbuf then while not buf:find("\n") do coroutine.yield() end local n = buf:find("\n") r, buf = buf:sub(1,n), buf:sub(n+1) else r = buf buf = "" coroutine.yield() end return r end local function bwrite(d) local ba, lb, ec = write(d) buf = buf .. ba if lb ~= nil then dprint("local buffer mode: "..tostring(lb)) lbuf = lb end if ec ~= nil then dprint("echo mode: "..tostring(ec)) echo = ec end end return bread, bwrite, function() io.write("\27[2J\27[H") end end end