Mercurial > hg > rlgwebd
view termemu-keys.js @ 174:dc12ba30d559
Fix further crashes when following dgamelaunch games.
The crashes apparently resulted from reading a ttyrec header and
then trying to read the data chunk before dgamelaunch produced it.
When the data chunk did become available, it would be read by the
header function.
The simplest solution was to store the position for reading the
ttyrec file in the DGLSession, and to leave it unchanged if anything
unexpected occurs when reading.
author | John "Elwin" Edwards |
---|---|
date | Mon, 12 Jan 2015 17:10:35 +0000 |
parents | 6cfaf6d202be |
children |
line wrap: on
line source
/* termemu-keys.js: some key-handling code common to both drivers. */ /* ASCII values of keys 0-9. */ var numShifts = [41, 33, 64, 35, 36, 37, 94, 38, 42, 40]; var keyHexCodes = { init: function () { this[13] = ["0d", "0d"]; // return this[32] = ["20", "20"]; // space this[9] = ["09", "09"]; // tab this[192] = ["60", "7e"]; // backtick, tilde this[219] = ["5b", "7b"]; // open bracket, open brace this[221] = ["5d", "7d"]; // close bracket, close brace this[220] = ["5c", "7c"]; // backslash, pipe this[59] = ["3b", "3a"]; // semicolon, colon this[186] = ["3b", "3a"]; // semicolon, colon (Chrome) this[222] = ["27", "22"]; // single quote, double quote this[188] = ["2c", "3c"]; // comma, less than this[190] = ["2e", "3e"]; // period, right angle this[191] = ["2f", "3f"]; // slash, question mark this[61] = ["3d", "2b"]; // equal, plus this[187] = ["3d", "2b"]; // equal, plus (Chrome) this[109] = ["2d", "5f"]; // subtract, underscore (maybe on numpad) this[173] = ["2d", "5f"]; // subtract, underscore (maybe not on numpad) this[189] = ["2d", "5f"]; // subtract, underscore (Chrome) this[8] = ["08", "08"]; // backspace this[46] = ["1b5b337e", "1b5b337e"]; // delete this[27] = ["1b", "1b"]; // escape this[33] = ["1b5b357e", "1b5b357e"]; // page up this[34] = ["1b5b367e", "1b5b367e"]; // page down this[12] = ["1b5b45", "1b5b45"]; // Clear key = numpad 5 (Firefox) this.appCursor(false); this.appKeypad(false); }, /* Multi-char control sequences! Neat! */ appCursor: function (on) { /* Aren't special keys vile? */ if (on) { this[37] = ["1b4f44", "1b4f44"]; // left arror this[39] = ["1b4f43", "1b4f43"]; // right arrow this[38] = ["1b4f41", "1b4f41"]; // up arrow this[40] = ["1b4f42", "1b4f42"]; // down arrow this[35] = ["1b4f46", "1b4f46"]; // end this[36] = ["1b4f48", "1b4f48"]; // home } else { this[37] = ["1b5b44", "1b5b44"]; // left arror this[39] = ["1b5b43", "1b5b43"]; // right arrow this[38] = ["1b5b41", "1b5b41"]; // up arrow this[40] = ["1b5b42", "1b5b42"]; // down arrow this[35] = ["1b5b46", "1b5b46"]; // end this[36] = ["1b5b48", "1b5b48"]; // home } }, appKeypad: function (on) { /* In theory, these should produce either numerals or the k[a-c][1-3] * sequences. Since we can't count on the terminfo description actually * containing those sequences, pretend they're just arrow keys etc. */ this[97] = ["1b4f46", "1b4f46"]; this[98] = ["1b4f42", "1b4f42"]; this[99] = ["1b5b367e", "1b5b367e"]; this[100] = ["1b4f44", "1b4f44"]; this[101] = ["1b5b45", "1b5b45"]; this[102] = ["1b4f43", "1b4f43"]; this[103] = ["1b4f48", "1b4f48"]; this[104] = ["1b4f41", "1b4f41"]; this[105] = ["1b5b357e", "1b5b357e"]; return; } };