Guest User

state

a guest
Aug 5th, 2016
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.98 KB | None | 0 0
  1. local w,h = term.getSize()
  2. local states = { down = "5", up = "e"}
  3. --Reverse lookup table
  4. local keyR = { }
  5. for k,v in pairs(keys) do
  6.     keyR[v] = k
  7. end
  8.  
  9. local key_list = {}
  10.  
  11. local bgcol = "0"
  12. local tcol = "f"
  13. local pressCol = "5"
  14.  
  15. local logg = { }
  16.  
  17. local mouse = {
  18.     [1] = { xdiff = 1; pressed = false };
  19.     [2] = { xdiff = 3; pressed = false };
  20.     [3] = { xdiff = 2; pressed = false };
  21. }
  22.  
  23. local keyboard = {
  24.     {
  25.         [1] = { name = "~", id = 41, col = "8" };
  26.         [12] = { name = "-", id = 12, col = "8" };
  27.         [13] = { name = "=", id = 13, col = "8" };
  28.         [14] = { name = "bsp", id = 14, col = "7" };
  29.         [15] = { name = "I", id = 200, col = "7" };
  30.         [16] = { name = string.char(18), id = 199, col = "7" };
  31.         [17] = { name = string.char(30), id = 201, col = "7" };
  32.     };
  33.     {
  34.         [1] = { name = "tb", id = 15, col = "7" } ;
  35.         [12] = { name = "[", id = 26, col = "8" };
  36.         [13] = { name = "]", id = 27, col = "8" };
  37.         [14] = { name = "\\ ", id = 28, col = "8" };
  38.         [15] = { name = "D", id = 211, col = "7" };
  39.         [16] = { name = "E", id = 207, col = "7" };
  40.         [17] = { name = string.char(31), id = 209, col = "7" };
  41.     };
  42.     {
  43.         [1] = { name = "cap", id = 58, col = "7" };
  44.         [11] = { name = ";";  id = 39, col = "8" };
  45.         [12] = { name = "'"; id = 40, col = "8" };
  46.         [13] = { name = "rtn"; id = 28, col = "7" };
  47.         [14] = { name = "     "; id = -1; col = "0" };
  48.     };
  49.     {
  50.         [1] = { name = "lsft"; id = 42, col = "7" };
  51.         [8] = { name = ","; id = 51; col = "8" };
  52.         [9] = { name = "."; id = 52; col = "8" };
  53.         [10] = { name = "/"; id = 53; col = "8" };
  54.         [11] = { name = "rsft"; id = 54; col = "7" };
  55.         [12] = { name = " "; id = -1; col = "0" };
  56.         [13] = { name = string.char(24); id = 200; col = "7" };
  57.         [14] = { name = " "; id = -1; col = "0" };
  58.     };
  59.     {
  60.         [1] = { name = "Ct"; id = 29; col = "7" };
  61.         [2] = { name = " "; id = -1; col = "0" };
  62.         [3] = { name = "Al"; id = 56; col = "7" };
  63.         [4] = { name = "    space    "; id = 57; col = "8" };
  64.         [5] = { name = "Al"; id = 184; col = "7" };
  65.         [6] = { name = " "; id = -1; col = "0" };
  66.         [7] = { name = "Ct"; id = 157; col = "7" };
  67.         [8] = { name = string.char(27); id = 203; col = "7" };
  68.         [9] = { name = string.char(25); id = 208; col = "7" };
  69.         [10] = { name = string.char(26); id = 205; col = "7" };
  70.     };
  71. }
  72. for i=2,11 do table.insert(keyboard[1], i, {name = ""..((i-1)%10), id = i, col = "8" }) end
  73. for i=16,25 do table.insert(keyboard[2], i-14, {name = keyR[i], id = i, col = "8"}) end
  74. for i=30,38 do table.insert(keyboard[3], i-28, {name = keyR[i], id = i, col = "8"}) end
  75. for i=44,50 do table.insert(keyboard[4], i-42, {name = keyR[i], id = i, col = "8"}) end
  76.  
  77. for _,rows in ipairs(keyboard) do
  78.     print("ROW:"..tostring(rows))
  79.     for _,key in ipairs(rows) do
  80.         assert(key.id, "\""..key.name.."\"")
  81.         key_list[key.id] = key
  82.     end
  83. end
  84.  
  85. local function drawKey(x, y, val)
  86.     term.setCursorPos(x-1, y-1)
  87.     keycol = val.col
  88.     if val.pressed then keycol = pressCol end
  89.     term.blit(
  90.         string.char(159)..(string.char(143)):rep(#val.name),
  91.         bgcol:rep(#val.name + 1),
  92.         keycol:rep(#val.name + 1))
  93.     term.setCursorPos(x-1, y)
  94.     term.blit(string.char(149)..val.name,
  95.         bgcol..tcol:rep(#val.name),
  96.         keycol:rep(#val.name + 1))
  97. end
  98.  
  99. local function addToLog(id, p1)
  100.     table.insert(logg, id..":"..p1)
  101.     if #logg > 19 then table.remove(logg, 1) end
  102. end
  103.  
  104. local function drawMouseButton(x, y, pressed)
  105.     term.setCursorPos(x, y)
  106.     term.blit(string.char(149), "8", pressed and pressCol or "7")
  107. end
  108.  
  109. local function drawKeyboard()
  110.     for ind, row in ipairs(keyboard) do
  111.         gx = 3
  112.         for _, key in ipairs(row) do
  113.             drawKey(gx,2 + (ind*2),key)
  114.             gx = gx + 1 + #key.name
  115.         end
  116.     end
  117.     term.setCursorPos(2, 13)
  118.     --local q = string.char(133)..(string.char(143)):rep(34).
  119.     local q = (string.char(143)):rep(36)..string.char(133)
  120.     term.blit(q, ("0"):rep(#q), ("f"):rep(#q))
  121.     for i = 3, 12 do
  122.         term.setCursorPos(1 + #q, i)
  123.         term.blit(string.char(149), "0", "f")
  124.     end
  125. end
  126.  
  127. local function drawMouse()
  128.     local x,y = 6, 15
  129.     for i,mb in ipairs(mouse) do
  130.         drawMouseButton(x + mb.xdiff, y, mb.pressed)
  131.     end
  132.     term.setCursorPos(x + 4, y)
  133.     term.blit(string.char(149), "8", "f")
  134.     term.setCursorPos(x + 1, y+1)
  135.     term.blit("   "..string.char(149), "fff8", "888f")
  136.     term.setCursorPos(x + 1, y+2)
  137.     term.blit(string.char(144).."  "..string.char(133), "f888", "888f")
  138. end
  139.  
  140. local function drawLog()
  141.     for y, v in ipairs(logg) do
  142.         term.setCursorPos(w - 12, y)
  143.         term.write(v..(#v >= 12 and "" or string.rep(" ",13-#v)))
  144.     end
  145. end
  146.  
  147. --REPORTING AREA
  148.  
  149. local function run()
  150.   while true do
  151.     local id, p1 = os.pullEvent()
  152.     if id == "key" then
  153.         if not key_list[p1] then break end
  154.         key_list[p1].pressed = true
  155.         drawKeyboard()
  156.     elseif id == "key_up" then
  157.         key_list[p1].pressed = false
  158.         drawKeyboard()
  159.     elseif id == "mouse_click" then
  160.         mouse[p1].pressed = true
  161.         drawMouse()
  162.     elseif id == "mouse_up" then
  163.         mouse[p1].pressed = false
  164.         drawMouse()
  165.     end
  166.     addToLog(id, p1)
  167.     drawLog()
  168.   end
  169. end
  170.  
  171. term.clear()
  172. drawKeyboard()
  173. drawMouse()
  174. run()
  175. shell.run("clear")
Advertisement
Add Comment
Please, Sign In to add comment