|
- 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 and buf:len() > 0 then
- write("\8 \8")
- buf = buf:sub(1,-2)
- 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
|