⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 decode.c

📁 freedos32的源代码
💻 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 + -