Last active
December 20, 2018 12:57
-
-
Save myfreeer/ee3492ce1e0080a06333aff19f70d2be to your computer and use it in GitHub Desktop.
command.h generating script for https://github.com/myfreeer/sendinput
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let crctable = function() { | |
let c = 0, | |
table = typeof Int32Array !== 'undefined' ? new Int32Array(256) : new Array(256); | |
for (let n = 0; n !== 256; ++n) { | |
c = n; | |
for (let x = 0; x < 8; x++) { | |
c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1; | |
} | |
table[n] = c; | |
} | |
return table; | |
}(); | |
function crc32_bstr(bstr, seed) { | |
let C = seed ^ -1, | |
L = bstr.length - 1, | |
i; | |
for (i = 0; i < L;) { | |
C = C >>> 8 ^ crctable[(C ^ bstr.charCodeAt(i++)) & 0xFF]; | |
C = C >>> 8 ^ crctable[(C ^ bstr.charCodeAt(i++)) & 0xFF]; | |
} | |
if (i === L) C = C >>> 8 ^ crctable[(C ^ bstr.charCodeAt(i)) & 0xFF]; | |
return C ^ -1; | |
} | |
var obj = {}; | |
fetch('https://raw.githubusercontent.com/myfreeer/sendinput/master/command.h').then(res=>res.text()).then(str=>{ | |
var ar = str.split('\n'); | |
let arr = []; | |
for (let i of ar) { | |
let m = i.match(/case ([0-9]+)L: \/\/ ?([0-9A-Z]+)/); | |
if (m&&m[1]&&m[2]) | |
if(crc32_bstr(m[2])>>>0 == Number(m[1])) | |
arr.push(m[2]); | |
let n = i.match(/return (VK_[0-9A-Z]+);/) | |
if(n&&n[1]){ | |
obj[n[1]]=arr; | |
arr = []; | |
} | |
} | |
return JSON.stringify(obj); | |
}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var obj = { | |
"VK_BACK": ["BACKSPACE", "BS", "BKSP"], | |
"VK_SPACE": ["SPACE"], | |
"VK_TAB": ["TAB"], | |
"VK_CLEAR": ["CLEAR"], | |
"VK_RETURN": ["ENTER"], | |
"VK_SHIFT": ["SHIFT"], | |
"VK_CONTROL": ["CTRL"], | |
"VK_MENU": ["ALT"], | |
"VK_PAUSE": ["PAUSE"], | |
"VK_CAPITAL": ["CAPS", "CAPSLOCK"], | |
"VK_ESCAPE": ["ESC"], | |
"VK_PRIOR": ["PAGEUP", "PGUP"], | |
"VK_NEXT": ["PAGEDOWN", "PGDN"], | |
"VK_END": ["END"], | |
"VK_HOME": ["HOME"], | |
"VK_LEFT": ["LEFTARROW", "LEFT"], | |
"VK_UP": ["UPARROW", "UP"], | |
"VK_RIGHT": ["RIGHTARROW", "RIGHT"], | |
"VK_DOWN": ["DOWNARROW", "DOWN"], | |
"VK_SELECT": ["SELECT"], | |
"VK_PRINT": ["PRINT"], | |
"VK_EXECUTE": ["EXECUTE"], | |
"VK_SNAPSHOT": ["PRINTSCREEN", "PRTSC"], | |
"VK_INSERT": ["INS", "INSERT"], | |
"VK_DELETE": ["DEL", "DELETE"], | |
"VK_HELP": ["HELP"], | |
"VK_NUMLOCK": ["NUM", "NUMLOCK"], | |
"VK_SCROLL": ["SCROLLLOCK"], | |
"VK_LWIN": ["LEFTWINDOWS", "LWIN"], | |
"VK_RWIN": ["RIGHTWINDOWS", "RWIN"], | |
"VK_APPS": ["APPLICATIONS"], | |
"VK_SLEEP": ["COMPUTERSLEEP"], | |
"VK_MULTIPLY": ["MULTIPLY"], | |
"VK_ADD": ["ADD"], | |
"VK_SEPARATOR": ["SEPARATOR"], | |
"VK_SUBTRACT": ["SUBTRACT"], | |
"VK_DECIMAL": ["DECIMAL"], | |
"VK_DIVIDE": ["DIVIDE"], | |
"VK_NUMPAD0": ["NUM0", "NUMPAD0"], | |
"VK_NUMPAD1": ["NUM1", "NUMPAD1"], | |
"VK_NUMPAD2": ["NUM2", "NUMPAD2"], | |
"VK_NUMPAD3": ["NUM3", "NUMPAD3"], | |
"VK_NUMPAD4": ["NUM4", "NUMPAD4"], | |
"VK_NUMPAD5": ["NUM5", "NUMPAD5"], | |
"VK_NUMPAD6": ["NUM6", "NUMPAD6"], | |
"VK_NUMPAD7": ["NUM7", "NUMPAD7"], | |
"VK_NUMPAD8": ["NUM8", "NUMPAD8"], | |
"VK_NUMPAD9": ["NUM9", "NUMPAD9"], | |
"VK_F1": ["F1"], | |
"VK_F2": ["F2"], | |
"VK_F3": ["F3"], | |
"VK_F4": ["F4"], | |
"VK_F5": ["F5"], | |
"VK_F6": ["F6"], | |
"VK_F7": ["F7"], | |
"VK_F8": ["F8"], | |
"VK_F9": ["F9"], | |
"VK_F10": ["F10"], | |
"VK_F11": ["F11"], | |
"VK_F12": ["F12"], | |
"VK_F13": ["F13"], | |
"VK_F14": ["F14"], | |
"VK_F15": ["F15"], | |
"VK_F16": ["F16"], | |
"VK_F17": ["F17"], | |
"VK_F18": ["F18"], | |
"VK_F19": ["F19"], | |
"VK_F20": ["F20"], | |
"VK_F21": ["F21"], | |
"VK_F22": ["F22"], | |
"VK_F23": ["F23"], | |
"VK_F24": ["F24"], | |
"VK_LSHIFT": ["LEFTSHIFT", "LSHIFT"], | |
"VK_RSHIFT": ["RIGHTSHIFT", "RSHIFT"], | |
"VK_LCONTROL": ["LEFTCONTROL", "LCTRL"], | |
"VK_RCONTROL": ["RIGHTCONTROL", "RCTRL"], | |
"VK_LMENU": ["LEFTMENU", "LMENU", "LALT"], | |
"VK_RMENU": ["RIGHTMENU", "RMENU", "RALT"], | |
"VK_PROCESSKEY": ["IMEPROCESS"], | |
"VK_LBUTTON": ["LBUTTON"], | |
"VK_RBUTTON": ["RBUTTON"], | |
"VK_CANCEL": ["CANCEL"], | |
"VK_MBUTTON": ["MBUTTON"], | |
"VK_XBUTTON1": ["XBUTTON1"], | |
"VK_XBUTTON2": ["XBUTTON2"], | |
"VK_BROWSER_BACK": ["BROWSERBACK"], | |
"VK_BROWSER_FORWARD": ["BROWSERFORWARD"], | |
"VK_BROWSER_REFRESH": ["BROWSERREFRESH"], | |
"VK_BROWSER_STOP": ["BROWSERSTOP"], | |
"VK_BROWSER_SEARCH": ["BROWSERSEARCH"], | |
"VK_BROWSER_FAVORITES": ["BROWSERFAVORITES"], | |
"VK_BROWSER_HOME": ["BROWSERHOME"], | |
"VK_VOLUME_MUTE": ["VOLUMEMUTE", 'MUTE'], | |
"VK_VOLUME_DOWN": ["VOLUMEDOWN",'VDOWN'], | |
"VK_VOLUME_UP": ["VOLUMEUP",'VUP'], | |
"VK_MEDIA_NEXT_TRACK": ["MEDIANEXTTRACK"], | |
"VK_MEDIA_PREV_TRACK": ["MEDIAPREVTRACK"], | |
"VK_MEDIA_STOP": ["MEDIASTOP",'MSTOP'], | |
"VK_MEDIA_PLAY_PAUSE": ["MEDIAPLAYPAUSE",'MPLAY'], | |
"VK_LAUNCH_MAIL": ["LAUNCHMAIL"], | |
"VK_LAUNCH_MEDIA_SELECT": ["LAUNCHMEDIASELECT"] | |
}; | |
var str = ''; | |
let crctable = function() { | |
let c = 0, | |
table = typeof Int32Array !== 'undefined' ? new Int32Array(256) : new Array(256); | |
for (let n = 0; n !== 256; ++n) { | |
c = n; | |
for (let x = 0; x < 8; x++) { | |
c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1; | |
} | |
table[n] = c; | |
} | |
return table; | |
}(); | |
function crc32_bstr(bstr, seed) { | |
let C = seed ^ -1, | |
L = bstr.length - 1, | |
i; | |
for (i = 0; i < L;) { | |
C = C >>> 8 ^ crctable[(C ^ bstr.charCodeAt(i++)) & 0xFF]; | |
C = C >>> 8 ^ crctable[(C ^ bstr.charCodeAt(i++)) & 0xFF]; | |
} | |
if (i === L) C = C >>> 8 ^ crctable[(C ^ bstr.charCodeAt(i)) & 0xFF]; | |
return C ^ -1; | |
} | |
for (let i in obj) {for (let j of obj[i]) str +=` case ${crc32_bstr(j)>>>0}U: // ${j} | |
`; | |
str +=` return ${i}; | |
` | |
} | |
str = `#include <stdint.h> | |
static WORD ParseCommand(const uint32_t hash) { | |
switch (hash) { | |
` + str + ` } | |
return FALSE; | |
}`; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment