forked from izaya/OC-PsychOS2
46 lines
968 B
Lua
46 lines
968 B
Lua
function vtemu(gpua,scra)
|
|
local gpu,scr = component.proxy(gpua),component.proxy(scra)
|
|
gpu.bind(scra)
|
|
local write = vt100emu(gpu)
|
|
local kba = {}
|
|
for k,v in ipairs(scr.getKeyboards()) do
|
|
kba[v]=true
|
|
end
|
|
local buf = ""
|
|
os.spawn(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
|
|
write("\8 \8")
|
|
buf = buf:sub(1,-2)
|
|
end
|
|
elseif ch > 0 then
|
|
write(string.char(ch))
|
|
buf = buf .. string.char(ch)
|
|
end
|
|
end
|
|
end
|
|
end,"keyboard daemon for "..gpua:sub(1,8)..":"..scra:sub(1,8))
|
|
local function read(n)
|
|
n = n or "\n"
|
|
local rdata = ""
|
|
if type(n) == "number" then
|
|
rdata = buf:sub(1,n)
|
|
return rdata
|
|
else
|
|
if n == "*a" then
|
|
rdata = buf
|
|
buf = ""
|
|
return rdata
|
|
end
|
|
local pr,po = buf:match("(.-)"..n.."(.*)")
|
|
buf = po or buf
|
|
return pr
|
|
end
|
|
end
|
|
return read,write
|
|
end
|