| 1 | // |
|---|
| 2 | // TxWin, Textmode Windowing Library |
|---|
| 3 | // |
|---|
| 4 | // Original code Copyright (c) 1995-2005 Fsys Software and Jan van Wijk |
|---|
| 5 | // |
|---|
| 6 | // ========================================================================== |
|---|
| 7 | // |
|---|
| 8 | // This file contains Original Code and/or Modifications of Original Code as |
|---|
| 9 | // defined in and that are subject to the GNU Lesser General Public License. |
|---|
| 10 | // You may not use this file except in compliance with the License. |
|---|
| 11 | // BY USING THIS FILE YOU AGREE TO ALL TERMS AND CONDITIONS OF THE LICENSE. |
|---|
| 12 | // A copy of the License is provided with the Original Code and Modifications, |
|---|
| 13 | // and is also available at http://www.dfsee.com/txwin/lgpl.htm |
|---|
| 14 | // |
|---|
| 15 | // This library is free software; you can redistribute it and/or modify |
|---|
| 16 | // it under the terms of the GNU Lesser General Public License as published |
|---|
| 17 | // by the Free Software Foundation; either version 2.1 of the License, |
|---|
| 18 | // or (at your option) any later version. |
|---|
| 19 | // |
|---|
| 20 | // This library is distributed in the hope that it will be useful, |
|---|
| 21 | // but WITHOUT ANY WARRANTY; without even the implied warranty of |
|---|
| 22 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
|---|
| 23 | // See the GNU Lesser General Public License for more details. |
|---|
| 24 | // |
|---|
| 25 | // You should have received a copy of the GNU Lesser General Public License |
|---|
| 26 | // along with this library; (lgpl.htm) if not, write to the Free Software |
|---|
| 27 | // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|---|
| 28 | // |
|---|
| 29 | // Questions on TxWin licensing can be directed to: txwin@fsys.nl |
|---|
| 30 | // |
|---|
| 31 | // ========================================================================== |
|---|
| 32 | // |
|---|
| 33 | // Author: J. van Wijk |
|---|
| 34 | // |
|---|
| 35 | // TX keyboard and message handling for text Windows |
|---|
| 36 | // |
|---|
| 37 | // JvW 06-07-1998 Initial version |
|---|
| 38 | // JvW 13-05-1999 Expanded msg-queue to 16-messages (circular buffer) |
|---|
| 39 | // JvW 04-11-2002 Removed getch() usage from KeyEvent (Watcom WIN translate) |
|---|
| 40 | |
|---|
| 41 | #include <txlib.h> // public interface |
|---|
| 42 | #include <txwpriv.h> // private window interface |
|---|
| 43 | |
|---|
| 44 | |
|---|
| 45 | typedef struct txw_acskeystate |
|---|
| 46 | { |
|---|
| 47 | USHORT Std; |
|---|
| 48 | USHORT Shift; |
|---|
| 49 | USHORT Ctrl; |
|---|
| 50 | USHORT Alt; |
|---|
| 51 | } TXW_ACSKEYSTATE; // end of struct "txw_acskeystate" |
|---|
| 52 | |
|---|
| 53 | |
|---|
| 54 | #if defined (WIN32) |
|---|
| 55 | |
|---|
| 56 | static HANDLE winConsole = (HANDLE) TXW_INVALID; |
|---|
| 57 | |
|---|
| 58 | typedef struct txw_key_event // modelled after INPUT_RECORD |
|---|
| 59 | { // but dedicated to keystrokes |
|---|
| 60 | USHORT Type; |
|---|
| 61 | USHORT Fill1; // conform to MS packing ? |
|---|
| 62 | USHORT bKeyDown; |
|---|
| 63 | USHORT wRepeatCount; |
|---|
| 64 | USHORT Fill2; |
|---|
| 65 | USHORT wVirtualKeyCode; |
|---|
| 66 | USHORT wVirtualScanCode; |
|---|
| 67 | USHORT Ascii; |
|---|
| 68 | USHORT KeyState; |
|---|
| 69 | USHORT Fill3; |
|---|
| 70 | } TXW_KEY_EVENT; |
|---|
| 71 | |
|---|
| 72 | typedef struct txw_mou_event // modelled after INPUT_RECORD |
|---|
| 73 | { // but dedicated to mouse info |
|---|
| 74 | USHORT Type; |
|---|
| 75 | USHORT Fill1; // conform to MS packing ? |
|---|
| 76 | short X; |
|---|
| 77 | short Y; |
|---|
| 78 | ULONG Button; |
|---|
| 79 | ULONG KeyState; |
|---|
| 80 | ULONG Flags; |
|---|
| 81 | } TXW_MOU_EVENT; |
|---|
| 82 | |
|---|
| 83 | typedef union txw_event |
|---|
| 84 | { |
|---|
| 85 | USHORT Type; // just the Type |
|---|
| 86 | TXW_MOU_EVENT mou; // complete MOU event |
|---|
| 87 | TXW_KEY_EVENT kbd; // complete KBD event |
|---|
| 88 | } TXW_EVENT; // end of union "txw_event" |
|---|
| 89 | |
|---|
| 90 | |
|---|
| 91 | static TXW_ACSKEYSTATE txw_winkey[] = |
|---|
| 92 | { |
|---|
| 93 | //- Std Shift Ctrl Alt |
|---|
| 94 | |
|---|
| 95 | { 0x000, 0x000, 0x000, 0x000 }, // 0x000 unused :-) |
|---|
| 96 | { 0x001, 0x001, 0x001, 0x001 }, // 0x001 |
|---|
| 97 | { 0x002, 0x002, 0x002, 0x002 }, // 0x002 |
|---|
| 98 | { 0x003, 0x003, 0x003, 0x003 }, // 0x003 |
|---|
| 99 | { 0x004, 0x004, 0x004, 0x004 }, // 0x004 |
|---|
| 100 | { 0x005, 0x005, 0x005, 0x005 }, // 0x005 |
|---|
| 101 | { 0x006, 0x006, 0x006, 0x006 }, // 0x006 |
|---|
| 102 | { 0x007, 0x007, 0x007, 0x007 }, // 0x007 |
|---|
| 103 | { 0x008, 0x008, 0x008, 0x10e }, // 0x008 BACKSPACE |
|---|
| 104 | { 0x009, 0x10f, 0x009, 0x009 }, // 0x009 TAB |
|---|
| 105 | { 0x00a, 0x00a, 0x00a, 0x00a }, // 0x00a |
|---|
| 106 | { 0x00b, 0x00b, 0x00b, 0x00b }, // 0x00b |
|---|
| 107 | { 0x00c, 0x00c, 0x00c, 0x00c }, // 0x00c |
|---|
| 108 | { 0x00d, 0x00d, 0x00a, 0x11c }, // 0x00d ENTER |
|---|
| 109 | { 0x00e, 0x00e, 0x00e, 0x00e }, // 0x00e |
|---|
| 110 | { 0x00f, 0x00f, 0x194, 0x00f }, // 0x00f |
|---|
| 111 | { 0x010, 0x010, 0x010, 0x010 }, // 0x010 |
|---|
| 112 | { 0x011, 0x011, 0x011, 0x011 }, // 0x011 |
|---|
| 113 | { 0x012, 0x012, 0x012, 0x012 }, // 0x012 |
|---|
| 114 | { 0x013, 0x013, 0x013, 0x013 }, // 0x013 |
|---|
| 115 | { 0x014, 0x014, 0x014, 0x014 }, // 0x014 |
|---|
| 116 | { 0x015, 0x015, 0x015, 0x015 }, // 0x015 |
|---|
| 117 | { 0x016, 0x016, 0x016, 0x016 }, // 0x016 |
|---|
| 118 | { 0x017, 0x017, 0x017, 0x017 }, // 0x017 |
|---|
| 119 | { 0x018, 0x018, 0x018, 0x018 }, // 0x018 |
|---|
| 120 | { 0x019, 0x019, 0x019, 0x019 }, // 0x019 |
|---|
| 121 | { 0x01a, 0x01a, 0x01a, 0x01a }, // 0x01a |
|---|
| 122 | { 0x01b, 0x01b, 0x01b, 0x01b }, // 0x01b |
|---|
| 123 | { 0x00d, 0x00d, 0x00a, 0x11c }, // 0x01c PAD ENTER |
|---|
| 124 | { 0x01d, 0x01d, 0x01d, 0x01d }, // 0x01d |
|---|
| 125 | { 0x01e, 0x01e, 0x01e, 0x01e }, // 0x01e |
|---|
| 126 | { 0x01f, 0x01f, 0x01f, 0x01f }, // 0x01f |
|---|
| 127 | { 0x020, 0x020, 0x020, 0x020 }, // 0x020 |
|---|
| 128 | { 0x021, 0x021, 0x021, 0x021 }, // 0x021 |
|---|
| 129 | { 0x022, 0x022, 0x022, 0x022 }, // 0x022 |
|---|
| 130 | { 0x023, 0x023, 0x023, 0x023 }, // 0x023 |
|---|
| 131 | { 0x024, 0x024, 0x024, 0x024 }, // 0x024 |
|---|
| 132 | { 0x025, 0x025, 0x025, 0x025 }, // 0x025 |
|---|
| 133 | { 0x026, 0x026, 0x026, 0x026 }, // 0x026 |
|---|
| 134 | { 0x027, 0x027, 0x027, 0x128 }, // 0x027 ' QUOTE |
|---|
| 135 | { 0x028, 0x028, 0x028, 0x028 }, // 0x028 |
|---|
| 136 | { 0x029, 0x029, 0x029, 0x029 }, // 0x029 |
|---|
| 137 | { 0x02a, 0x02a, 0x02a, 0x02a }, // 0x02a |
|---|
| 138 | { 0x02b, 0x02b, 0x02b, 0x02b }, // 0x02b |
|---|
| 139 | { 0x02c, 0x02c, 0x02c, 0x133 }, // 0x02c , COMMA |
|---|
| 140 | { 0x02d, 0x02d, 0x01f, 0x182 }, // 0x02d - MINUS |
|---|
| 141 | { 0x02e, 0x02e, 0x02e, 0x134 }, // 0x02e . DOT |
|---|
| 142 | { 0x02f, 0x02f, 0x02f, 0x135 }, // 0x02f / SLASH |
|---|
| 143 | { 0x030, 0x030, 0x030, 0x181 }, // 0x030 0 |
|---|
| 144 | { 0x031, 0x031, 0x031, 0x178 }, // 0x031 1 |
|---|
| 145 | { 0x032, 0x032, 0x103, 0x179 }, // 0x032 2 |
|---|
| 146 | { 0x033, 0x033, 0x033, 0x17a }, // 0x033 3 |
|---|
| 147 | { 0x034, 0x034, 0x034, 0x17b }, // 0x034 4 |
|---|
| 148 | { 0x035, 0x035, 0x035, 0x17c }, // 0x035 5 |
|---|
| 149 | { 0x036, 0x036, 0x01e, 0x17d }, // 0x036 6 |
|---|
| 150 | { 0x037, 0x037, 0x037, 0x17e }, // 0x037 7 |
|---|
| 151 | { 0x038, 0x038, 0x038, 0x17f }, // 0x038 8 |
|---|
| 152 | { 0x039, 0x039, 0x039, 0x180 }, // 0x039 9 |
|---|
| 153 | { 0x03a, 0x03a, 0x03a, 0x03a }, // 0x03a |
|---|
| 154 | { 0x13b, 0x154, 0x15e, 0x168 }, // 0x03b F1 |
|---|
| 155 | { 0x13c, 0x155, 0x15f, 0x169 }, // 0x03c F2 |
|---|
| 156 | { 0x13d, 0x156, 0x160, 0x16a }, // 0x03d F3 |
|---|
| 157 | { 0x13e, 0x157, 0x161, 0x16b }, // 0x03e F4 |
|---|
| 158 | { 0x13f, 0x158, 0x162, 0x16c }, // 0x03f F5 |
|---|
| 159 | { 0x140, 0x159, 0x163, 0x16d }, // 0x040 F6 |
|---|
| 160 | { 0x141, 0x15a, 0x164, 0x16e }, // 0x041 F7 |
|---|
| 161 | { 0x142, 0x15b, 0x165, 0x16f }, // 0x042 F8 |
|---|
| 162 | { 0x143, 0x15c, 0x166, 0x170 }, // 0x043 F9 |
|---|
| 163 | { 0x144, 0x15d, 0x167, 0x171 }, // 0x044 F10 |
|---|
| 164 | { 0x045, 0x045, 0x045, 0x045 }, // 0x045 |
|---|
| 165 | { 0x046, 0x046, 0x046, 0x046 }, // 0x046 |
|---|
| 166 | { 0x147, 0x047, 0x177, 0x197 }, // 0x047 HOME |
|---|
| 167 | { 0x148, 0x048, 0x18d, 0x198 }, // 0x048 UP |
|---|
| 168 | { 0x149, 0x049, 0x184, 0x199 }, // 0x049 PGUP |
|---|
| 169 | { 0x04a, 0x04a, 0x04a, 0x04a }, // 0x04a |
|---|
| 170 | { 0x14b, 0x04b, 0x173, 0x19b }, // 0x04b LEFT |
|---|
| 171 | { 0x04c, 0x04c, 0x04c, 0x04c }, // 0x04c |
|---|
| 172 | { 0x14d, 0x04d, 0x174, 0x19d }, // 0x04d RIGHT |
|---|
| 173 | { 0x04e, 0x04e, 0x04e, 0x04e }, // 0x04e |
|---|
| 174 | { 0x14f, 0x04f, 0x175, 0x19f }, // 0x04f END |
|---|
| 175 | { 0x150, 0x050, 0x191, 0x1a0 }, // 0x050 DOWN |
|---|
| 176 | { 0x151, 0x051, 0x176, 0x1a1 }, // 0x051 PGDN |
|---|
| 177 | { 0x152, 0x052, 0x192, 0x1a2 }, // 0x052 INSERT |
|---|
| 178 | { 0x153, 0x053, 0x193, 0x1a3 }, // 0x053 DELETE |
|---|
| 179 | { 0x054, 0x054, 0x054, 0x054 }, // 0x054 |
|---|
| 180 | { 0x055, 0x055, 0x055, 0x055 }, // 0x055 |
|---|
| 181 | { 0x056, 0x056, 0x056, 0x056 }, // 0x056 |
|---|
| 182 | { 0x185, 0x187, 0x189, 0x18b }, // 0x057 F11 |
|---|
| 183 | { 0x186, 0x188, 0x18a, 0x18c }, // 0x058 F12 |
|---|
| 184 | { 0x059, 0x059, 0x059, 0x059 }, // 0x059 |
|---|
| 185 | { 0x05a, 0x05a, 0x05a, 0x05a }, // 0x05a |
|---|
| 186 | { 0x05b, 0x05b, 0x01b, 0x11a }, // 0x05b [ LBRACKET |
|---|
| 187 | { 0x05c, 0x05c, 0x01c, 0x12b }, // 0x05c \ BACKSLASH |
|---|
| 188 | { 0x05d, 0x05d, 0x01d, 0x11b }, // 0x05d ] RBRACKET |
|---|
| 189 | { 0x05e, 0x05e, 0x05e, 0x05e }, // 0x05e |
|---|
| 190 | { 0x05f, 0x05f, 0x05f, 0x05f }, // 0x05f |
|---|
| 191 | { 0x060, 0x060, 0x060, 0x129 }, // 0x060 ` BACKQUOTE |
|---|
| 192 | { 0x061, 0x041, 0x061, 0x11e }, // 0x061 a |
|---|
| 193 | { 0x062, 0x042, 0x062, 0x130 }, // 0x062 b |
|---|
| 194 | { 0x063, 0x043, 0x063, 0x12e }, // 0x063 c |
|---|
| 195 | { 0x064, 0x044, 0x064, 0x120 }, // 0x064 d |
|---|
| 196 | { 0x065, 0x045, 0x065, 0x112 }, // 0x065 e |
|---|
| 197 | { 0x066, 0x046, 0x066, 0x121 }, // 0x066 f |
|---|
| 198 | { 0x067, 0x047, 0x067, 0x122 }, // 0x067 g |
|---|
| 199 | { 0x068, 0x048, 0x068, 0x123 }, // 0x068 h |
|---|
| 200 | { 0x069, 0x049, 0x069, 0x117 }, // 0x069 i |
|---|
| 201 | { 0x06a, 0x04a, 0x06a, 0x124 }, // 0x06a j |
|---|
| 202 | { 0x06b, 0x04b, 0x06b, 0x125 }, // 0x06b k |
|---|
| 203 | { 0x06c, 0x04c, 0x06c, 0x126 }, // 0x06c l |
|---|
| 204 | { 0x06d, 0x04d, 0x06d, 0x132 }, // 0x06d m |
|---|
| 205 | { 0x06e, 0x04e, 0x06e, 0x131 }, // 0x06e n |
|---|
| 206 | { 0x06f, 0x04f, 0x06f, 0x118 }, // 0x06f o |
|---|
| 207 | { 0x070, 0x050, 0x070, 0x119 }, // 0x070 p |
|---|
| 208 | { 0x071, 0x051, 0x071, 0x110 }, // 0x071 q |
|---|
| 209 | { 0x072, 0x052, 0x072, 0x113 }, // 0x072 r |
|---|
| 210 | { 0x073, 0x053, 0x073, 0x11f }, // 0x073 s |
|---|
| 211 | { 0x074, 0x054, 0x074, 0x114 }, // 0x074 t |
|---|
| 212 | { 0x075, 0x055, 0x075, 0x116 }, // 0x075 u |
|---|
| 213 | { 0x076, 0x056, 0x076, 0x12f }, // 0x076 v |
|---|
| 214 | { 0x077, 0x057, 0x077, 0x111 }, // 0x077 w |
|---|
| 215 | { 0x078, 0x058, 0x078, 0x12d }, // 0x078 x |
|---|
| 216 | { 0x079, 0x059, 0x079, 0x115 }, // 0x079 y |
|---|
| 217 | { 0x07a, 0x05a, 0x07a, 0x12c } // 0x07a z |
|---|
| 218 | }; |
|---|
| 219 | |
|---|
| 220 | #define TXW_ACS_TABLE_SIZE 0x7b // Alt/Ctrl/Shift table size |
|---|
| 221 | |
|---|
| 222 | |
|---|
| 223 | // Translate Mouse Wheel event to corresponding TX movement key value |
|---|
| 224 | static ULONG TxWinTranslateWheel // RET translated key value |
|---|
| 225 | ( |
|---|
| 226 | TXW_MOU_EVENT *m // IN mouse event info |
|---|
| 227 | ); |
|---|
| 228 | |
|---|
| 229 | /*****************************************************************************/ |
|---|
| 230 | // Translate Windows Mouse Wheel event to corresponding TX movement key value |
|---|
| 231 | /*****************************************************************************/ |
|---|
| 232 | static ULONG TxWinTranslateWheel // RET translated key value |
|---|
| 233 | ( |
|---|
| 234 | TXW_MOU_EVENT *m // IN mouse event info |
|---|
| 235 | ) |
|---|
| 236 | { |
|---|
| 237 | ULONG key; |
|---|
| 238 | BOOL wdown = ((m->Button & 0xff000000) != 0); |
|---|
| 239 | BOOL shift = ((m->KeyState & TXm_KS_SHIFT) != 0); |
|---|
| 240 | BOOL ctrl = ((m->KeyState & TXm_KS_CTRL) != 0); |
|---|
| 241 | |
|---|
| 242 | if (m->KeyState & TXm_KS_ALT) // left/right movement |
|---|
| 243 | { |
|---|
| 244 | if (ctrl) key = (wdown) ? TXc_RIGHT : TXc_LEFT; |
|---|
| 245 | else key = (wdown) ? TXk_RIGHT : TXk_LEFT; |
|---|
| 246 | } |
|---|
| 247 | else // up/down movement |
|---|
| 248 | { |
|---|
| 249 | if (shift) // move per page |
|---|
| 250 | { |
|---|
| 251 | if (ctrl) key = (wdown) ? TXc_PGDN : TXc_PGUP; |
|---|
| 252 | else key = (wdown) ? TXk_PGDN : TXk_PGUP; |
|---|
| 253 | } |
|---|
| 254 | else // move per line |
|---|
| 255 | { |
|---|
| 256 | if (ctrl) key = (wdown) ? TXc_DOWN : TXc_UP; |
|---|
| 257 | else key = (wdown) ? TXk_DOWN : TXk_UP; |
|---|
| 258 | } |
|---|
| 259 | } |
|---|
| 260 | return (key); |
|---|
| 261 | } // end 'TxWinTranslateWheel' |
|---|
| 262 | /*---------------------------------------------------------------------------*/ |
|---|
| 263 | |
|---|
| 264 | |
|---|
| 265 | #elif defined (LINUX) |
|---|
| 266 | #include <sys/ioctl.h> |
|---|
| 267 | #include <sys/time.h> |
|---|
| 268 | #include <termios.h> |
|---|
| 269 | |
|---|
| 270 | #define TXW_ACS_TABLE_SIZE 0x20 // Alt/Ctrl/Shift table size |
|---|
| 271 | #define TXW_INVKEY ((int) -1) // invalid key index |
|---|
| 272 | |
|---|
| 273 | // implied keyboard shift-state values |
|---|
| 274 | #define TXW_SST_STND 0x00 // use table column 'unshifted' |
|---|
| 275 | #define TXW_SST_SHFT 0x01 // use table column 'shifted' |
|---|
| 276 | #define TXW_SST_ALTK 0x02 // use table column 'alt' |
|---|
| 277 | #define TXW_SST_CTRL 0x04 // use table column 'control' |
|---|
| 278 | #define TXW_SST_KEYB 0x08 // use shiftstate from keyboard |
|---|
| 279 | |
|---|
| 280 | //- Note: shiftstate only available in a real Linux CONSOLE session, no XTERM |
|---|
| 281 | typedef struct txw_linuxkbd |
|---|
| 282 | { |
|---|
| 283 | unsigned char es[6]; // Esc string, except 1st char |
|---|
| 284 | unsigned char base; // base key-value |
|---|
| 285 | unsigned char state; // implied shift-state |
|---|
| 286 | } TXW_LINUXKBD; // end of struct "txw_linuxkbd" |
|---|
| 287 | |
|---|
| 288 | //- For most values, use SST_REAL, using ShiftState(), on unique escape-strings |
|---|
| 289 | //- generated for alt/ctrl/shift special keys, include the state in the table |
|---|
| 290 | |
|---|
| 291 | //- use a second table (like txw_winkey) to resolve 9-bit unique TXW keyvalues |
|---|
| 292 | |
|---|
| 293 | //- ch Index Shiftstate- Single key translates, use (key & 0x0f) and shiftstate |
|---|
| 294 | // 0x00,0x00,TXW_SST_CTRL, // 0x103 TXc_2 |
|---|
| 295 | // 0x09,0x09,TXW_SST_CTRL, // 0x194 TXc_TAB |
|---|
| 296 | // 0x0a,0x0a,TXW_SST_STND, // 0x00d TXk_ENTER |
|---|
| 297 | // 0x0a,0x0a,TXW_SST_CTRL, // 0x00a TXc_ENTER |
|---|
| 298 | // 0x7f,0x0f,TXW_SST_STND, // 0x008 TXk_BACKSPACE |
|---|
| 299 | // 0x7f,0x0f,TXW_SST_CTRL, // 0x07f TXc_BACKSP |
|---|
| 300 | |
|---|
| 301 | //- Table of LINUX keyboard strings, starting with Escape, resolves index plus |
|---|
| 302 | //- shifstate to get the TX-code from a second table. |
|---|
| 303 | static TXW_LINUXKBD txw_linuxkey[] = |
|---|
| 304 | { |
|---|
| 305 | //-- K-string from 2nd byte Index St Tx-code TX-description |
|---|
| 306 | {0x09, 0, 0, 0, 0, 0,0x09,TXW_SST_SHFT}, // 0x10f TXs_TAB |
|---|
| 307 | {0x0a, 0, 0, 0, 0, 0,0x0a,TXW_SST_ALTK}, // 0x11c TXa_ENTER |
|---|
| 308 | {0x1b,0x5b,0x32,0x7e, 0, 0,0x14,TXW_SST_ALTK}, // 0x1a2 TXa_INSERT |
|---|
| 309 | {0x1b,0x5b,0x33,0x7e, 0, 0,0x10,TXW_SST_ALTK}, // 0x1a3 TXa_DELETE |
|---|
| 310 | {0x1b,0x5b,0x35,0x7e, 0, 0,0x17,TXW_SST_ALTK}, // 0x199 TXa_PGUP |
|---|
| 311 | {0x1b,0x5b,0x36,0x7e, 0, 0,0x16,TXW_SST_ALTK}, // 0x1a1 TXa_PGDN |
|---|
| 312 | {0x1b,0x5b,0x41, 0, 0, 0,0x19,TXW_SST_ALTK}, // 0x198 TXa_UP |
|---|
| 313 | {0x1b,0x5b,0x42, 0, 0, 0,0x11,TXW_SST_ALTK}, // 0x1a0 TXa_DOWN |
|---|
| 314 | {0x1b,0x5b,0x43, 0, 0, 0,0x18,TXW_SST_ALTK}, // 0x19d TXa_RIGHT |
|---|
| 315 | {0x1b,0x5b,0x44, 0, 0, 0,0x15,TXW_SST_ALTK}, // 0x19b TXa_LEFT |
|---|
| 316 | {0x1b,0x5b,0x46, 0, 0, 0,0x12,TXW_SST_ALTK}, // 0x19f TXa_END |
|---|
| 317 | {0x1b,0x5b,0x48, 0, 0, 0,0x13,TXW_SST_ALTK}, // 0x197 TXa_HOME |
|---|
| 318 | {0x27, 0, 0, 0, 0, 0,0x08,TXW_SST_ALTK}, // 0x128 TXa_QUOTE |
|---|
| 319 | {0x2c, 0, 0, 0, 0, 0,0x00,TXW_SST_SHFT}, // 0x133 TXa_COMMA |
|---|
| 320 | {0x2d, 0, 0, 0, 0, 0,0x08,TXW_SST_SHFT}, // 0x182 TXa_MINUS |
|---|
| 321 | {0x2e, 0, 0, 0, 0, 0,0x09,TXW_SST_ALTK}, // 0x134 TXa_DOT |
|---|
| 322 | {0x2f, 0, 0, 0, 0, 0,0x07,TXW_SST_ALTK}, // 0x135 TXa_SLASH |
|---|
| 323 | {0x30, 0, 0, 0, 0, 0,0x0b,TXW_SST_STND}, // 0x181 TXa_0 |
|---|
| 324 | {0x31, 0, 0, 0, 0, 0,0x0c,TXW_SST_STND}, // 0x178 TXa_1 |
|---|
| 325 | {0x32, 0, 0, 0, 0, 0,0x0d,TXW_SST_STND}, // 0x179 TXa_2 |
|---|
| 326 | {0x33, 0, 0, 0, 0, 0,0x0b,TXW_SST_SHFT}, // 0x17a TXa_3 |
|---|
| 327 | {0x34, 0, 0, 0, 0, 0,0x0c,TXW_SST_SHFT}, // 0x17b TXa_4 |
|---|
| 328 | {0x35, 0, 0, 0, 0, 0,0x0d,TXW_SST_SHFT}, // 0x17c TXa_5 |
|---|
| 329 | {0x36, 0, 0, 0, 0, 0,0x0b,TXW_SST_ALTK}, // 0x17d TXa_6 |
|---|
| 330 | {0x37, 0, 0, 0, 0, 0,0x0c,TXW_SST_ALTK}, // 0x17e TXa_7 |
|---|
| 331 | {0x38, 0, 0, 0, 0, 0,0x0b,TXW_SST_CTRL}, // 0x17f TXa_8 |
|---|
| 332 | {0x39, 0, 0, 0, 0, 0,0x0c,TXW_SST_CTRL}, // 0x180 TXa_9 |
|---|
| 333 | {0x3b, 0, 0, 0, 0, 0,0x06,TXW_SST_ALTK}, // 0x127 TXa_SEMICOLON |
|---|
| 334 | {0x3d, 0, 0, 0, 0, 0,0x0a,TXW_SST_SHFT}, // 0x183 TXa_EQUAL |
|---|
| 335 | {0x4f,0x32,0x50, 0, 0, 0,0x1a,TXW_SST_SHFT}, // 0x154 TXs_F1 |
|---|
| 336 | {0x4f,0x32,0x51, 0, 0, 0,0x1a,TXW_SST_ALTK}, // 0x155 TXs_F2 |
|---|
| 337 | {0x4f,0x32,0x52, 0, 0, 0,0x1b,TXW_SST_SHFT}, // 0x156 TXs_F3 |
|---|
| 338 | {0x4f,0x32,0x53, 0, 0, 0,0x1b,TXW_SST_ALTK}, // 0x157 TXs_F4 |
|---|
| 339 | {0x4f,0x50, 0, 0, 0, 0,0x1a,TXW_SST_STND}, // 0x13b TXk_F1 |
|---|
| 340 | {0x4f,0x51, 0, 0, 0, 0,0x1a,TXW_SST_CTRL}, // 0x13c TXk_F2 |
|---|
| 341 | {0x4f,0x52, 0, 0, 0, 0,0x1b,TXW_SST_STND}, // 0x13d TXk_F3 |
|---|
| 342 | {0x4f,0x53, 0, 0, 0, 0,0x1b,TXW_SST_CTRL}, // 0x13e TXk_F4 |
|---|
| 343 | {0x5b, 0, 0, 0, 0, 0,0x08,TXW_SST_STND}, // 0x11a TXa_LBRACKET |
|---|
| 344 | {0x5b,0x31,0x35,0x7e, 0, 0,0x1c,TXW_SST_STND}, // 0x13f TXk_F5 |
|---|
| 345 | {0x5b,0x31,0x35,0x3b,0x32,0x7e,0x1c,TXW_SST_SHFT}, // 0x158 TXs_F5 |
|---|
| 346 | {0x5b,0x31,0x37,0x7e, 0, 0,0x1c,TXW_SST_CTRL}, // 0x140 TXk_F6 |
|---|
| 347 | {0x5b,0x31,0x37,0x3b,0x32,0x7e,0x1c,TXW_SST_ALTK}, // 0x159 TXs_F6 |
|---|
| 348 | {0x5b,0x31,0x38,0x7e, 0, 0,0x1d,TXW_SST_STND}, // 0x141 TXk_F7 |
|---|
| 349 | {0x5b,0x31,0x38,0x3b,0x32,0x7e,0x1d,TXW_SST_SHFT}, // 0x15a TXs_F7 |
|---|
| 350 | {0x5b,0x31,0x39,0x7e, 0, 0,0x1d,TXW_SST_CTRL}, // 0x142 TXk_F8 |
|---|
| 351 | {0x5b,0x31,0x39,0x3b,0x32,0x7e,0x1d,TXW_SST_ALTK}, // 0x15b TXs_F8 |
|---|
| 352 | {0x5b,0x31,0x7e, 0, 0, 0,0x13,TXW_SST_KEYB}, // 0x197 TX*_HOME |
|---|
| 353 | {0x5b,0x32,0x30,0x7e, 0, 0,0x1e,TXW_SST_STND}, // 0x143 TXk_F9 |
|---|
| 354 | {0x5b,0x32,0x30,0x3b,0x32,0x7e,0x1e,TXW_SST_SHFT}, // 0x15c TXs_F9 |
|---|
| 355 | {0x5b,0x32,0x31,0x7e, 0, 0,0x1e,TXW_SST_CTRL}, // 0x144 TXk_F10 |
|---|
| 356 | {0x5b,0x32,0x31,0x3b,0x32,0x7e,0x1e,TXW_SST_ALTK}, // 0x15d TXs_F10 |
|---|
| 357 | {0x5b,0x32,0x33,0x7e, 0, 0,0x1f,TXW_SST_STND}, // 0x185 TXk_F11 |
|---|
| 358 | {0x5b,0x32,0x33,0x3b,0x32,0x7e,0x1f,TXW_SST_SHFT}, // 0x187 TXs_F11 |
|---|
| 359 | {0x5b,0x32,0x34,0x7e, 0, 0,0x1f,TXW_SST_CTRL}, // 0x186 TXk_F12 |
|---|
| 360 | {0x5b,0x32,0x34,0x3b,0x32,0x7e,0x1f,TXW_SST_ALTK}, // 0x188 TXs_F12 |
|---|
| 361 | {0x5b,0x32,0x35,0x7e, 0, 0,0x1a,TXW_SST_SHFT}, // 0x154 TXs_F1 |
|---|
| 362 | {0x5b,0x32,0x36,0x7e, 0, 0,0x1a,TXW_SST_ALTK}, // 0x155 TXs_F2 |
|---|
| 363 | {0x5b,0x32,0x38,0x7e, 0, 0,0x1b,TXW_SST_SHFT}, // 0x156 TXs_F3 |
|---|
| 364 | {0x5b,0x32,0x39,0x7e, 0, 0,0x1b,TXW_SST_ALTK}, // 0x157 TXs_F4 |
|---|
| 365 | {0x5b,0x32,0x7e, 0, 0, 0,0x14,TXW_SST_KEYB}, // 0x1a2 TX*_INSERT |
|---|
| 366 | {0x5b,0x33,0x31,0x7e, 0, 0,0x1c,TXW_SST_SHFT}, // 0x158 TXs_F5 |
|---|
| 367 | {0x5b,0x33,0x32,0x7e, 0, 0,0x1c,TXW_SST_ALTK}, // 0x159 TXs_F6 |
|---|
| 368 | {0x5b,0x33,0x33,0x7e, 0, 0,0x1d,TXW_SST_SHFT}, // 0x15a TXs_F7 |
|---|
| 369 | {0x5b,0x33,0x34,0x7e, 0, 0,0x1d,TXW_SST_ALTK}, // 0x15b TXs_F8 |
|---|
| 370 | {0x5b,0x33,0x7e, 0, 0, 0,0x10,TXW_SST_KEYB}, // 0x1a3 TX*_DELETE |
|---|
| 371 | {0x5b,0x34,0x7e, 0, 0, 0,0x12,TXW_SST_KEYB}, // 0x19f TX*_END |
|---|
| 372 | {0x5b,0x35,0x7e, 0, 0, 0,0x17,TXW_SST_KEYB}, // 0x199 TX*_PGUP |
|---|
| 373 | {0x5b,0x36,0x7e, 0, 0, 0,0x16,TXW_SST_KEYB}, // 0x1a1 TX*_PGDN |
|---|
| 374 | {0x5b,0x41, 0, 0, 0, 0,0x19,TXW_SST_KEYB}, // 0x198 TX*_UP |
|---|
| 375 | {0x5b,0x42, 0, 0, 0, 0,0x11,TXW_SST_KEYB}, // 0x1a0 TX*_DOWN |
|---|
| 376 | {0x5b,0x43, 0, 0, 0, 0,0x18,TXW_SST_KEYB}, // 0x19d TX*_RIGHT |
|---|
| 377 | {0x5b,0x44, 0, 0, 0, 0,0x15,TXW_SST_KEYB}, // 0x19b TX*_LEFT |
|---|
| 378 | {0x5b,0x46, 0, 0, 0, 0,0x12,TXW_SST_STND}, // 0x14f TXk_END |
|---|
| 379 | {0x5b,0x48, 0, 0, 0, 0,0x13,TXW_SST_STND}, // 0x147 TXk_HOME |
|---|
| 380 | {0x5b,0x5b,0x41, 0, 0, 0,0x1a,TXW_SST_STND}, // 0x13b TXk_F1 |
|---|
| 381 | {0x5b,0x5b,0x42, 0, 0, 0,0x1a,TXW_SST_CTRL}, // 0x13c TXk_F2 |
|---|
| 382 | {0x5b,0x5b,0x43, 0, 0, 0,0x1b,TXW_SST_STND}, // 0x13d TXk_F3 |
|---|
| 383 | {0x5b,0x5b,0x44, 0, 0, 0,0x1b,TXW_SST_CTRL}, // 0x13e TXk_F4 |
|---|
| 384 | {0x5b,0x5b,0x45, 0, 0, 0,0x1c,TXW_SST_STND}, // 0x13f TXk_F5 |
|---|
| 385 | {0x5c, 0, 0, 0, 0, 0,0x00,TXW_SST_CTRL}, // 0x12b TXa_BACKSLASH |
|---|
| 386 | {0x5d, 0, 0, 0, 0, 0,0x08,TXW_SST_CTRL}, // 0x11b TXa_RBRACKET |
|---|
| 387 | {0x60, 0, 0, 0, 0, 0,0x00,TXW_SST_ALTK}, // 0x129 TXa_BACKQUOTE |
|---|
| 388 | {0x61, 0, 0, 0, 0, 0,0x01,TXW_SST_STND}, // 0x11e TXa_A |
|---|
| 389 | {0x62, 0, 0, 0, 0, 0,0x02,TXW_SST_STND}, // 0x130 TXa_B |
|---|
| 390 | {0x63, 0, 0, 0, 0, 0,0x03,TXW_SST_STND}, // 0x12e TXa_C |
|---|
| 391 | {0x64, 0, 0, 0, 0, 0,0x04,TXW_SST_STND}, // 0x120 TXa_D |
|---|
| 392 | {0x65, 0, 0, 0, 0, 0,0x05,TXW_SST_STND}, // 0x112 TXa_E |
|---|
| 393 | {0x66, 0, 0, 0, 0, 0,0x06,TXW_SST_STND}, // 0x121 TXa_F |
|---|
| 394 | {0x67, 0, 0, 0, 0, 0,0x07,TXW_SST_STND}, // 0x122 TXa_G |
|---|
| 395 | {0x68, 0, 0, 0, 0, 0,0x01,TXW_SST_SHFT}, |
|---|