📄 decode.c
字号:
/* Keyborad Driver for FD32 * original by Luca Abeni * extended by Hanzac Chen * * 2004 - 2005 * This is free software; see GPL.txt */#include <dr-env.h>#include "key.h"const WORD keymap[128][4] = { /* N, SHFT, CTRL, ALT *//* NUL */ { 0, 0, 0, 0},/* ESC */ {0x011B, 0x011B, 0x011B, 0x0100}, /* 0x00 0x01 *//* 1 */ {0x0231, 0x0221, 0, 0x7800},/* 2 */ {0x0332, 0x0340, 0x0300, 0x7900}, /* 0x02 0x03 *//* 3 */ {0x0433, 0x0423, 0, 0x7A00},/* 4 */ {0x0534, 0x0524, 0, 0x7B00}, /* 0x04 0x05 *//* 5 */ {0x0635, 0x0625, 0, 0x7C00},/* 6 */ {0x0736, 0x075E, 0x071E, 0x7D00}, /* 0x06 0x07 *//* 7 */ {0x0837, 0x0826, 0, 0x7E00},/* 8 */ {0x0938, 0x092A, 0, 0x7F00}, /* 0x08 0x09 *//* 9 */ {0x0A39, 0x0A28, 0, 0x8000},/* 0 */ {0x0B30, 0x0B29, 0, 0x8100}, /* 0x0a 0x0b *//* - */ {0x0C2D, 0x0C5F, 0x0C1F, 0x8200},/* = */ {0x0D3D, 0x0D2B, 0, 0x8300}, /* 0x0c 0x0d *//* BS */ {0x0E08, 0x0E08, 0x0E7F, 0x0E00},/* TAB */ {0x0F09, 0x0F00, 0x9400, 0xA500}, /* 0x0e 0x0f *//* Q */ {0x1071, 0x1051, 0x1011, 0x1000},/* W */ {0x1177, 0x1157, 0x1117, 0x1100}, /* 0x10 0x11 *//* E */ {0x1265, 0x1245, 0x1205, 0x1200},/* R */ {0x1372, 0x1352, 0x1312, 0x1300}, /* 0x12 0x13 *//* T */ {0x1474, 0x1454, 0x1414, 0x1400},/* Y */ {0x1579, 0x1559, 0x1519, 0x1500}, /* 0x14 0x15 *//* U */ {0x1675, 0x1655, 0x1615, 0x1600},/* I */ {0x1769, 0x1749, 0x1709, 0x1700}, /* 0x16 0x17 *//* O */ {0x186F, 0x184F, 0x180F, 0x1800},/* P */ {0x1970, 0x1950, 0x1910, 0x1900}, /* 0x18 0x19 *//* [ */ {0x1A5B, 0x1A7B, 0x1A1B, 0x1A00},/* ] */ {0x1B5D, 0x1B7D, 0x1B1D, 0x1B00}, /* 0x1a 0x1b *//* CR */ {0x1C0D, 0x1C0D, 0x1C0A, 0xA600},/* LCTRL*/ { 0, 0, 0, 0}, /* 0x1c 0x1d *//* A */ {0x1E61, 0x1E41, 0x1E01, 0x1E00},/* S */ {0x1F73, 0x1F53, 0x1F13, 0x1F00}, /* 0x1e 0x1f *//* D */ {0x2064, 0x2044, 0x2004, 0x2000},/* F */ {0x2166, 0x2146, 0x2106, 0x2100}, /* 0x20 0x21 *//* G */ {0x2267, 0x2247, 0x2207, 0x2200},/* H */ {0x2368, 0x2348, 0x2308, 0x2300}, /* 0x22 0x23 *//* J */ {0x246A, 0x244A, 0x240A, 0x2400},/* K */ {0x256B, 0x254B, 0x250B, 0x2500}, /* 0x24 0x25 *//* L */ {0x266C, 0x264C, 0x260C, 0x2600},/* ; */ {0x273B, 0x273A, 0, 0x2700}, /* 0x26 0x27 *//* ' */ {0x2827, 0x2822, 0, 0},/* ` */ {0x2960, 0x297E, 0, 0}, /* 0x28 0x29 *//* LSHFT*/ { 0, 0, 0, 0},/* \ */ {0x2B5C, 0x2B7C, 0x2B1C, 0x2600}, /* 0x2a 0x2b *//* Z */ {0x2C7A, 0x2C5A, 0x2C1A, 0x2C00},/* X */ {0x2D78, 0x2D58, 0x2D18, 0x2D00}, /* 0x2c 0x2d *//* C */ {0x2E63, 0x2E43, 0x2E03, 0x2E00},/* V */ {0x2F76, 0x2F56, 0x2F16, 0x2F00}, /* 0x2e 0x2f *//* B */ {0x3062, 0x3042, 0x3002, 0x3000},/* N */ {0x316E, 0x314E, 0x310E, 0x3100}, /* 0x30 0x31 *//* M */ {0x326D, 0x324D, 0x320D, 0x3200},/* , */ {0x332C, 0x333C, 0, 0}, /* 0x32 0x33 *//* . */ {0x342E, 0x343E, 0, 0},/* / */ {0x352F, 0x353F, 0, 0}, /* 0x34 0x35 *//* RSHFT*/ { 0, 0, 0, 0},/* KP * */ {0x372A, 0x372A, 0x9600, 0x3700}, /* 0x36 0x37 *//* LALT */ { 0, 0, 0, 0},/* SPACE*/ {0x3920, 0x3920, 0x3920, 0x3920}, /* 0x38 0x39 *//* CAPS */ { 0, 0, 0, 0},/* F1 */ {0x3B00, 0x5400, 0x5E00, 0x6800}, /* 0x3a 0x3b *//* F2 */ {0x3C00, 0x5500, 0x5F00, 0x6900},/* F3 */ {0x3D00, 0x5600, 0x6000, 0x6A00}, /* 0x3c 0x3d *//* F4 */ {0x3E00, 0x5700, 0x6100, 0x6B00},/* F5 */ {0x3F00, 0x5800, 0x6200, 0x6C00}, /* 0x3e 0x3f *//* F6 */ {0x4000, 0x5900, 0x6300, 0x6D00},/* F7 */ {0x4100, 0x5A00, 0x6400, 0x6E00}, /* 0x40 0x41 *//* F8 */ {0x4200, 0x5B00, 0x6500, 0x6F00},/* F9 */ {0x4300, 0x5C00, 0x6600, 0x7000}, /* 0x42 0x43 *//* F10 */ {0x4400, 0x5D00, 0x6700, 0x7100},/* NUML */ { 0, 0, 0, 0}, /* 0x44 0x45 *//*SCROLL*/ { 0, 0, 0, 0},/* KP 7 */ {0x4700, 0x4737, 0x7700, 0x9700}, /* 0x46 0x47 *//* KP 8 */ {0x4800, 0x4838, 0x8D00, 0x9800},/* KP 9 */ {0x4900, 0x4939, 0x8400, 0x9900}, /* 0x48 0x49 *//* KP - */ {0x4A2D, 0x4A2D, 0x8E00, 0x4A00},/* KP 4 */ {0x4B00, 0x4B34, 0x7300, 0x9B00}, /* 0x4a 0x4b *//* KP 5 */ {0x0000, 0x4C35, 0x8F00, 0},/* KP 6 */ {0x4D00, 0x4D36, 0x7400, 0x9D00}, /* 0x4c 0x4d *//* KP + */ {0x4E2B, 0x4E2B, 0, 0x4E00},/* KP 1 */ {0x4F00, 0x4F31, 0x7500, 0x9F00}, /* 0x4e 0x4f *//* KP 2 */ {0x5000, 0x5032, 0x9100, 0xA000},/* KP 3 */ {0x5100, 0x5133, 0x7600, 0xA100}, /* 0x50 0x51 *//* KP 0 */ {0x5200, 0x5230, 0x9200, 0xA200},/* KP . */ {0x5300, 0x532E, 0x9300, 0xA300}, /* 0x52 0x53 *//*SYSREQ*/ { 0, 0, 0, 0},/* */ { 0, 0, 0, 0}, /* 0x54 0x55 *//* */ { 0, 0, 0, 0},/* F11 */ {0x8500, 0x8700, 0x8900, 0x8B00}, /* 0x56 0x57 *//* F12 */ {0x8600, 0x8800, 0x8A00, 0x8C00},/* */ {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0},/* */ {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0},/* */ {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0},/* */ {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0},/* */ {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0},/* */ {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0},/* */ {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0},/* */ {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0},/* */ {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0},/* */ {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}};/* I invented this... Dunno how much correct it is */static int keypadscancode(BYTE c){ return ((c == 0x37) || (c >= 0x47 && c <= 0x53));}static int letterscancode(BYTE c){ return ((keymap[c][0]&0x00ff) >= 'a' && (keymap[c][0]&0x00ff) <= 'z');}WORD decode_ex(WORD c){ return keymap[c&0x00ff][0];}WORD decode(BYTE c, int flags, int lock){ /* Set the keymap index value according to the shift flags */ if ((flags&ALT_FLAG) != 0) flags = 3; else if ((flags&CTRL_FLAG) != 0) flags = 2; else if ((flags&(RSHIFT_FLAG|LSHIFT_FLAG)) != 0) flags = 1; else flags = 0; /* Letter keys have to be handled according to CAPSLOCK... */ if (letterscancode(c)) if (lock & LED_CAPS) { if (flags == 0) flags = 1; else if (flags == 1) flags = 0; } /* Keypad keys have to be handled according to NUMLOCK... */ if (keypadscancode(c)) if (lock & LED_NUMLK) { if (flags == 0) flags = 1; else if (flags == 1) flags = 0; } /* return 0 if something like tab has been pressed... */ return keymap[c][flags];}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -