Skip to content

Instantly share code, notes, and snippets.

@myfreeer
Last active December 20, 2018 12:57
Show Gist options
  • Save myfreeer/ee3492ce1e0080a06333aff19f70d2be to your computer and use it in GitHub Desktop.
Save myfreeer/ee3492ce1e0080a06333aff19f70d2be to your computer and use it in GitHub Desktop.
command.h generating script for https://github.com/myfreeer/sendinput
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);
});
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