root/kbd.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 // PC keyboard interface constants
   2 
   3 #define KBSTATP         0x64    // kbd controller status port(I)
   4 #define KBS_DIB         0x01    // kbd data in buffer
   5 #define KBDATAP         0x60    // kbd data port(I)
   6 
   7 #define NO              0
   8 
   9 #define SHIFT           (1<<0)
  10 #define CTL             (1<<1)
  11 #define ALT             (1<<2)
  12 
  13 #define CAPSLOCK        (1<<3)
  14 #define NUMLOCK         (1<<4)
  15 #define SCROLLLOCK      (1<<5)
  16 
  17 #define E0ESC           (1<<6)
  18 
  19 // Special keycodes
  20 #define KEY_HOME        0xE0
  21 #define KEY_END         0xE1
  22 #define KEY_UP          0xE2
  23 #define KEY_DN          0xE3
  24 #define KEY_LF          0xE4
  25 #define KEY_RT          0xE5
  26 #define KEY_PGUP        0xE6
  27 #define KEY_PGDN        0xE7
  28 #define KEY_INS         0xE8
  29 #define KEY_DEL         0xE9
  30 
  31 // C('A') == Control-A
  32 #define C(x) (x - '@')
  33 
  34 static uchar shiftcode[256] =
  35 {
  36   [0x1D] CTL,
  37   [0x2A] SHIFT,
  38   [0x36] SHIFT,
  39   [0x38] ALT,
  40   [0x9D] CTL,
  41   [0xB8] ALT
  42 };
  43 
  44 static uchar togglecode[256] =
  45 {
  46   [0x3A] CAPSLOCK,
  47   [0x45] NUMLOCK,
  48   [0x46] SCROLLLOCK
  49 };
  50 
  51 static uchar normalmap[256] =
  52 {
  53   NO,   0x1B, '1',  '2',  '3',  '4',  '5',  '6',  // 0x00
  54   '7',  '8',  '9',  '0',  '-',  '=',  '\b', '\t',
  55   'q',  'w',  'e',  'r',  't',  'y',  'u',  'i',  // 0x10
  56   'o',  'p',  '[',  ']',  '\n', NO,   'a',  's',
  57   'd',  'f',  'g',  'h',  'j',  'k',  'l',  ';',  // 0x20
  58   '\'', '`',  NO,   '\\', 'z',  'x',  'c',  'v',
  59   'b',  'n',  'm',  ',',  '.',  '/',  NO,   '*',  // 0x30
  60   NO,   ' ',  NO,   NO,   NO,   NO,   NO,   NO,
  61   NO,   NO,   NO,   NO,   NO,   NO,   NO,   '7',  // 0x40
  62   '8',  '9',  '-',  '4',  '5',  '6',  '+',  '1',
  63   '2',  '3',  '0',  '.',  NO,   NO,   NO,   NO,   // 0x50
  64   [0x9C] '\n',      // KP_Enter
  65   [0xB5] '/',       // KP_Div
  66   [0xC8] KEY_UP,    [0xD0] KEY_DN,
  67   [0xC9] KEY_PGUP,  [0xD1] KEY_PGDN,
  68   [0xCB] KEY_LF,    [0xCD] KEY_RT,
  69   [0x97] KEY_HOME,  [0xCF] KEY_END,
  70   [0xD2] KEY_INS,   [0xD3] KEY_DEL
  71 };
  72 
  73 static uchar shiftmap[256] =
  74 {
  75   NO,   033,  '!',  '@',  '#',  '$',  '%',  '^',  // 0x00
  76   '&',  '*',  '(',  ')',  '_',  '+',  '\b', '\t',
  77   'Q',  'W',  'E',  'R',  'T',  'Y',  'U',  'I',  // 0x10
  78   'O',  'P',  '{',  '}',  '\n', NO,   'A',  'S',
  79   'D',  'F',  'G',  'H',  'J',  'K',  'L',  ':',  // 0x20
  80   '"',  '~',  NO,   '|',  'Z',  'X',  'C',  'V',
  81   'B',  'N',  'M',  '<',  '>',  '?',  NO,   '*',  // 0x30
  82   NO,   ' ',  NO,   NO,   NO,   NO,   NO,   NO,
  83   NO,   NO,   NO,   NO,   NO,   NO,   NO,   '7',  // 0x40
  84   '8',  '9',  '-',  '4',  '5',  '6',  '+',  '1',
  85   '2',  '3',  '0',  '.',  NO,   NO,   NO,   NO,   // 0x50
  86   [0x9C] '\n',      // KP_Enter
  87   [0xB5] '/',       // KP_Div
  88   [0xC8] KEY_UP,    [0xD0] KEY_DN,
  89   [0xC9] KEY_PGUP,  [0xD1] KEY_PGDN,
  90   [0xCB] KEY_LF,    [0xCD] KEY_RT,
  91   [0x97] KEY_HOME,  [0xCF] KEY_END,
  92   [0xD2] KEY_INS,   [0xD3] KEY_DEL
  93 };
  94 
  95 static uchar ctlmap[256] =
  96 {
  97   NO,      NO,      NO,      NO,      NO,      NO,      NO,      NO,
  98   NO,      NO,      NO,      NO,      NO,      NO,      NO,      NO,
  99   C('Q'),  C('W'),  C('E'),  C('R'),  C('T'),  C('Y'),  C('U'),  C('I'),
 100   C('O'),  C('P'),  NO,      NO,      '\r',    NO,      C('A'),  C('S'),
 101   C('D'),  C('F'),  C('G'),  C('H'),  C('J'),  C('K'),  C('L'),  NO,
 102   NO,      NO,      NO,      C('\\'), C('Z'),  C('X'),  C('C'),  C('V'),
 103   C('B'),  C('N'),  C('M'),  NO,      NO,      C('/'),  NO,      NO,
 104   [0x9C] '\r',      // KP_Enter
 105   [0xB5] C('/'),    // KP_Div
 106   [0xC8] KEY_UP,    [0xD0] KEY_DN,
 107   [0xC9] KEY_PGUP,  [0xD1] KEY_PGDN,
 108   [0xCB] KEY_LF,    [0xCD] KEY_RT,
 109   [0x97] KEY_HOME,  [0xCF] KEY_END,
 110   [0xD2] KEY_INS,   [0xD3] KEY_DEL
 111 };
 112 

/* [<][>][^][v][top][bottom][index][help] */