27 lines
573 B
Lua
27 lines
573 B
Lua
|
|
local function queueBit(gate, bit)
|
|
table.insert(gate.queueBits, 1, bit)
|
|
end
|
|
|
|
return function(gate, argv)
|
|
if argv[1]=="\\:" then argv[1] = ";" end
|
|
|
|
local keycode = keyboard_keyToCode[argv[1]] or keyboard_keyToCode["invalid"]
|
|
local status = keyboard_strToBool[argv[2]]
|
|
|
|
local code = keycode+(status and 128 or 0)
|
|
|
|
if #gate.queueBits > 1024 then return end
|
|
|
|
queueBit(gate, 1)
|
|
for bitidx = 1, 8 do
|
|
local val = bit.band(code, 0x80)
|
|
queueBit(gate, val)
|
|
|
|
code = bit.lshift(code, 1)
|
|
end
|
|
queueBit(gate, 0)
|
|
|
|
Gate.queue(gate, 0)
|
|
end
|