local ffi = require("ffi")
local vkeys = require("vkeys")
local RsKeyCode = {
[1000] = "rsESC",
[1001] = "rsF1",
[1002] = "rsF2",
[1003] = "rsF3",
[1004] = "rsF4",
[1005] = "rsF5",
[1006] = "rsF6",
[1007] = "rsF7",
[1008] = "rsF8",
[1009] = "rsF9",
[1010] = "rsF10",
[1011] = "rsF11",
[1012] = "rsF12",
[1013] = "rsINSERT",
[1014] = "rsDEL",
[1015] = "rsHOME",
[1016] = "rsEND",
[1017] = "rsPGUP",
[1018] = "rsPGDN",
[1019] = "rsUP",
[1020] = "rsDOWN",
[1021] = "rsLEFT",
[1022] = "rsRIGHT",
[1023] = "rsDIV",
[1024] = "rsMUL",
[1025] = "rsADD",
[1026] = "rsSUB",
[1027] = "rsEXTDEL",
[1028] = "rsEXT_END",
[1029] = "rsEXTDOWN",
[1030] = "rsEXTPGDN",
[1031] = "rsEXTLEFT",
[1032] = "rsNUM5",
[1033] = "rsNUMLOCK",
[1034] = "rsEXTRIGHT",
[1035] = "rsEXTHOME",
[1036] = "rsEXTUP",
[1037] = "rsEXTPGUP",
[1038] = "rsEXTINSERT",
[1039] = "rsENTER",
[1040] = "rsSCROLL",
[1041] = "rsPAUSE",
[1042] = "rsBACK",
[1043] = "rsTAB",
[1044] = "rsCAPSLOCK",
[1045] = "rsEXTENTER",
[1046] = "rsLSHIFT",
[1047] = "rsRSHIFT",
[1048] = "rsSHIFT",
[1049] = "rsLCTRL",
[1050] = "rsRCTRL",
[1051] = "rsLMENU",
[1052] = "rsRMENU",
[1053] = "rsLWIN",
[1054] = "rsRWIN",
[1055] = "rsAPPS",
[1056] = "rsNULL"
}
ffi.cdef [[
typedef struct CControllerKey {
unsigned int keyCode;
unsigned int priority;
} CControllerKey;
typedef struct CControllerAction {
CControllerKey keys[4];
} CControllerAction;
]]
local CControllerConfigManager = 0xB70198
local CInputEvents__EventName = CControllerConfigManager + 0x224
local CInputEvents__Event = CControllerConfigManager + 0xB70
for i = 0, 58 do
local offset_name = i * 0x28
local offset_event = i * 0x20
local name = ffi.cast("char*", CInputEvents__EventName + offset_name)
local action = ffi.cast("CControllerAction*", CInputEvents__Event + offset_event)
print(ffi.string(name))
for j = 0, 3 do
local keyCode = action.keys[j].keyCode
print(RsKeyCode[keyCode] or vkeys.id_to_name(keyCode), keyCode, action.keys[j].priority)
end
print()
end