Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local w,h = term.getSize()
- local states = { down = "5", up = "e"}
- --Reverse lookup table
- local keyR = { }
- for k,v in pairs(keys) do
- keyR[v] = k
- end
- local key_list = {}
- local bgcol = "0"
- local tcol = "f"
- local pressCol = "5"
- local logg = { }
- local mouse = {
- [1] = { xdiff = 1; pressed = false };
- [2] = { xdiff = 3; pressed = false };
- [3] = { xdiff = 2; pressed = false };
- }
- local keyboard = {
- {
- [1] = { name = "~", id = 41, col = "8" };
- [12] = { name = "-", id = 12, col = "8" };
- [13] = { name = "=", id = 13, col = "8" };
- [14] = { name = "bsp", id = 14, col = "7" };
- [15] = { name = "I", id = 200, col = "7" };
- [16] = { name = string.char(18), id = 199, col = "7" };
- [17] = { name = string.char(30), id = 201, col = "7" };
- };
- {
- [1] = { name = "tb", id = 15, col = "7" } ;
- [12] = { name = "[", id = 26, col = "8" };
- [13] = { name = "]", id = 27, col = "8" };
- [14] = { name = "\\ ", id = 28, col = "8" };
- [15] = { name = "D", id = 211, col = "7" };
- [16] = { name = "E", id = 207, col = "7" };
- [17] = { name = string.char(31), id = 209, col = "7" };
- };
- {
- [1] = { name = "cap", id = 58, col = "7" };
- [11] = { name = ";"; id = 39, col = "8" };
- [12] = { name = "'"; id = 40, col = "8" };
- [13] = { name = "rtn"; id = 28, col = "7" };
- [14] = { name = " "; id = -1; col = "0" };
- };
- {
- [1] = { name = "lsft"; id = 42, col = "7" };
- [8] = { name = ","; id = 51; col = "8" };
- [9] = { name = "."; id = 52; col = "8" };
- [10] = { name = "/"; id = 53; col = "8" };
- [11] = { name = "rsft"; id = 54; col = "7" };
- [12] = { name = " "; id = -1; col = "0" };
- [13] = { name = string.char(24); id = 200; col = "7" };
- [14] = { name = " "; id = -1; col = "0" };
- };
- {
- [1] = { name = "Ct"; id = 29; col = "7" };
- [2] = { name = " "; id = -1; col = "0" };
- [3] = { name = "Al"; id = 56; col = "7" };
- [4] = { name = " space "; id = 57; col = "8" };
- [5] = { name = "Al"; id = 184; col = "7" };
- [6] = { name = " "; id = -1; col = "0" };
- [7] = { name = "Ct"; id = 157; col = "7" };
- [8] = { name = string.char(27); id = 203; col = "7" };
- [9] = { name = string.char(25); id = 208; col = "7" };
- [10] = { name = string.char(26); id = 205; col = "7" };
- };
- }
- for i=2,11 do table.insert(keyboard[1], i, {name = ""..((i-1)%10), id = i, col = "8" }) end
- for i=16,25 do table.insert(keyboard[2], i-14, {name = keyR[i], id = i, col = "8"}) end
- for i=30,38 do table.insert(keyboard[3], i-28, {name = keyR[i], id = i, col = "8"}) end
- for i=44,50 do table.insert(keyboard[4], i-42, {name = keyR[i], id = i, col = "8"}) end
- for _,rows in ipairs(keyboard) do
- print("ROW:"..tostring(rows))
- for _,key in ipairs(rows) do
- assert(key.id, "\""..key.name.."\"")
- key_list[key.id] = key
- end
- end
- local function drawKey(x, y, val)
- term.setCursorPos(x-1, y-1)
- keycol = val.col
- if val.pressed then keycol = pressCol end
- term.blit(
- string.char(159)..(string.char(143)):rep(#val.name),
- bgcol:rep(#val.name + 1),
- keycol:rep(#val.name + 1))
- term.setCursorPos(x-1, y)
- term.blit(string.char(149)..val.name,
- bgcol..tcol:rep(#val.name),
- keycol:rep(#val.name + 1))
- end
- local function addToLog(id, p1)
- table.insert(logg, id..":"..p1)
- if #logg > 19 then table.remove(logg, 1) end
- end
- local function drawMouseButton(x, y, pressed)
- term.setCursorPos(x, y)
- term.blit(string.char(149), "8", pressed and pressCol or "7")
- end
- local function drawKeyboard()
- for ind, row in ipairs(keyboard) do
- gx = 3
- for _, key in ipairs(row) do
- drawKey(gx,2 + (ind*2),key)
- gx = gx + 1 + #key.name
- end
- end
- term.setCursorPos(2, 13)
- --local q = string.char(133)..(string.char(143)):rep(34).
- local q = (string.char(143)):rep(36)..string.char(133)
- term.blit(q, ("0"):rep(#q), ("f"):rep(#q))
- for i = 3, 12 do
- term.setCursorPos(1 + #q, i)
- term.blit(string.char(149), "0", "f")
- end
- end
- local function drawMouse()
- local x,y = 6, 15
- for i,mb in ipairs(mouse) do
- drawMouseButton(x + mb.xdiff, y, mb.pressed)
- end
- term.setCursorPos(x + 4, y)
- term.blit(string.char(149), "8", "f")
- term.setCursorPos(x + 1, y+1)
- term.blit(" "..string.char(149), "fff8", "888f")
- term.setCursorPos(x + 1, y+2)
- term.blit(string.char(144).." "..string.char(133), "f888", "888f")
- end
- local function drawLog()
- for y, v in ipairs(logg) do
- term.setCursorPos(w - 12, y)
- term.write(v..(#v >= 12 and "" or string.rep(" ",13-#v)))
- end
- end
- --REPORTING AREA
- local function run()
- while true do
- local id, p1 = os.pullEvent()
- if id == "key" then
- if not key_list[p1] then break end
- key_list[p1].pressed = true
- drawKeyboard()
- elseif id == "key_up" then
- key_list[p1].pressed = false
- drawKeyboard()
- elseif id == "mouse_click" then
- mouse[p1].pressed = true
- drawMouse()
- elseif id == "mouse_up" then
- mouse[p1].pressed = false
- drawMouse()
- end
- addToLog(id, p1)
- drawLog()
- end
- end
- term.clear()
- drawKeyboard()
- drawMouse()
- run()
- shell.run("clear")
Advertisement
Add Comment
Please, Sign In to add comment