#include <sys/param.h>
#include <sys/kbd.h>
#define c(c_char) (c_char&0x1F)
#define ESC 0x1B
#define DEL 0x7F
static struct keymap keytab_s3_lc = {
HOLE, BUCKYBITS+SYSTEMBIT,
HOLE, LF(2), HOLE, TF(1), TF(2), HOLE,
TF(3), HOLE, TF(4), HOLE, TF(5), HOLE, TF(6), HOLE,
TF(7), TF(8), TF(9), SHIFTKEYS+ALT,
HOLE, RF(1), RF(2), RF(3),
HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '1', '2',
'3', '4', '5', '6', '7', '8', '9', '0',
'-', '=', '`', '\b', HOLE, RF(4), RF(5), RF(6),
HOLE, LF(5), HOLE, LF(6), HOLE, '\t', 'q', 'w',
'e', 'r', 't', 'y', 'u', 'i', 'o', 'p',
'[', ']', DEL, HOLE, RF(7), STRING+UPARROW,
RF(9), HOLE,
LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
'a', 's', 'd',
'f', 'g', 'h', 'j', 'k', 'l', ';', '\'',
'\\', '\r', HOLE, STRING+LEFTARROW,
RF(11), STRING+RIGHTARROW,
HOLE, LF(9),
HOLE, LF(10), HOLE, SHIFTKEYS+LEFTSHIFT,
'z', 'x', 'c', 'v',
'b', 'n', 'm', ',', '.', '/', SHIFTKEYS+RIGHTSHIFT,
'\n',
RF(13), STRING+DOWNARROW,
RF(15), HOLE, HOLE, HOLE, HOLE, SHIFTKEYS+CAPSLOCK,
BUCKYBITS+METABIT,
' ', BUCKYBITS+METABIT,
HOLE, HOLE, HOLE, ERROR, IDLE,
};
static struct keymap keytab_s3_uc = {
HOLE, BUCKYBITS+SYSTEMBIT,
HOLE, LF(2), HOLE, TF(1), TF(2), HOLE,
TF(3), HOLE, TF(4), HOLE, TF(5), HOLE, TF(6), HOLE,
TF(7), TF(8), TF(9), SHIFTKEYS+ALT,
HOLE, RF(1), RF(2), RF(3),
HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '!', '@',
'#', '$', '%', '^', '&', '*', '(', ')',
'_', '+', '~', '\b', HOLE, RF(4), RF(5), RF(6),
HOLE, LF(5), HOLE, LF(6), HOLE, '\t', 'Q', 'W',
'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P',
'{', '}', DEL, HOLE, RF(7), STRING+UPARROW,
RF(9), HOLE,
LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
'A', 'S', 'D',
'F', 'G', 'H', 'J', 'K', 'L', ':', '"',
'|', '\r', HOLE, STRING+LEFTARROW,
RF(11), STRING+RIGHTARROW,
HOLE, LF(9),
HOLE, LF(10), HOLE, SHIFTKEYS+LEFTSHIFT,
'Z', 'X', 'C', 'V',
'B', 'N', 'M', '<', '>', '?', SHIFTKEYS+RIGHTSHIFT,
'\n',
RF(13), STRING+DOWNARROW,
RF(15), HOLE, HOLE, HOLE, HOLE, SHIFTKEYS+CAPSLOCK,
BUCKYBITS+METABIT,
' ', BUCKYBITS+METABIT,
HOLE, HOLE, HOLE, ERROR, IDLE,
};
static struct keymap keytab_s3_cl = {
HOLE, BUCKYBITS+SYSTEMBIT,
HOLE, LF(2), HOLE, TF(1), TF(2), HOLE,
TF(3), HOLE, TF(4), HOLE, TF(5), HOLE, TF(6), HOLE,
TF(7), TF(8), TF(9), SHIFTKEYS+ALT,
HOLE, RF(1), RF(2), RF(3),
HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '1', '2',
'3', '4', '5', '6', '7', '8', '9', '0',
'-', '=', '`', '\b', HOLE, RF(4), RF(5), RF(6),
HOLE, LF(5), HOLE, LF(6), HOLE, '\t', 'Q', 'W',
'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P',
'[', ']', DEL, HOLE, RF(7), STRING+UPARROW,
RF(9), HOLE,
LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
'A', 'S', 'D',
'F', 'G', 'H', 'J', 'K', 'L', ';', '\'',
'\\', '\r', HOLE, STRING+LEFTARROW,
RF(11), STRING+RIGHTARROW,
HOLE, LF(9),
HOLE, LF(10), HOLE, SHIFTKEYS+LEFTSHIFT,
'Z', 'X', 'C', 'V',
'B', 'N', 'M', ',', '.', '/', SHIFTKEYS+RIGHTSHIFT,
'\n',
RF(13), STRING+DOWNARROW,
RF(15), HOLE, HOLE, HOLE, HOLE, SHIFTKEYS+CAPSLOCK,
BUCKYBITS+METABIT,
' ', BUCKYBITS+METABIT,
HOLE, HOLE, HOLE, ERROR, IDLE,
};
static struct keymap keytab_s3_ct = {
HOLE, BUCKYBITS+SYSTEMBIT,
HOLE, LF(2), HOLE, TF(1), TF(2), HOLE,
TF(3), HOLE, TF(4), HOLE, TF(5), HOLE, TF(6), HOLE,
TF(7), TF(8), TF(9), SHIFTKEYS+ALT,
HOLE, RF(1), RF(2), RF(3),
HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '1', c('@'),
'3', '4', '5', c('^'), '7', '8', '9', '0',
c('_'), '=', c('^'), '\b', HOLE, RF(4), RF(5), RF(6),
HOLE, LF(5), HOLE, LF(6), HOLE, '\t', c('q'), c('w'),
c('e'), c('r'), c('t'), c('y'), c('u'), c('i'), c('o'), c('p'),
c('['), c(']'), DEL, HOLE, RF(7), STRING+UPARROW,
RF(9), HOLE,
LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
c('a'), c('s'), c('d'),
c('f'), c('g'), c('h'), c('j'), c('k'), c('l'), ';', '\'',
c('\\'),
'\r', HOLE, STRING+LEFTARROW,
RF(11), STRING+RIGHTARROW,
HOLE, LF(9),
HOLE, LF(10), HOLE, SHIFTKEYS+LEFTSHIFT,
c('z'), c('x'), c('c'), c('v'),
c('b'), c('n'), c('m'), ',', '.', c('_'), SHIFTKEYS+RIGHTSHIFT,
'\n',
RF(13), STRING+DOWNARROW,
RF(15), HOLE, HOLE, HOLE, HOLE, SHIFTKEYS+CAPSLOCK,
BUCKYBITS+METABIT,
c(' '), BUCKYBITS+METABIT,
HOLE, HOLE, HOLE, ERROR, IDLE,
};
static struct keymap keytab_s3_up = {
HOLE, BUCKYBITS+SYSTEMBIT,
HOLE, NOP, HOLE, NOP, NOP, HOLE,
NOP, HOLE, NOP, HOLE, NOP, HOLE, NOP, HOLE,
NOP, NOP, NOP, SHIFTKEYS+ALT,
HOLE, NOP, NOP, NOP,
HOLE, NOP, NOP, HOLE, HOLE, NOP, NOP, NOP,
NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
NOP, NOP, NOP, NOP, HOLE, NOP, NOP, NOP,
HOLE, NOP, HOLE, NOP, HOLE, NOP, NOP, NOP,
NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
NOP, NOP, NOP, HOLE, NOP, NOP, NOP, HOLE,
NOP, NOP, HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
NOP, NOP, NOP,
NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
NOP, NOP, HOLE, NOP, NOP, NOP, HOLE, NOP,
HOLE, NOP, HOLE, SHIFTKEYS+LEFTSHIFT,
NOP, NOP, NOP, NOP,
NOP, NOP, NOP, NOP, NOP, NOP, SHIFTKEYS+RIGHTSHIFT,
NOP,
NOP, NOP, NOP, HOLE, HOLE, HOLE, HOLE, NOP,
BUCKYBITS+METABIT,
NOP, BUCKYBITS+METABIT,
HOLE, HOLE, HOLE, HOLE, RESET,
};
static struct keyboard keyindex_s3 = {
&keytab_s3_lc,
&keytab_s3_uc,
&keytab_s3_cl,
0,
0,
&keytab_s3_ct,
&keytab_s3_up,
0x0000,
0x0000,
1, 0, 77,
CAPSMASK,
NULL,
99, 110, 21,
};
static struct keymap keytab_s4_lc = {
HOLE, BUCKYBITS+SYSTEMBIT,
HOLE, LF(2), HOLE, TF(1), TF(2), TF(10),
TF(3), TF(11), TF(4), TF(12), TF(5), SHIFTKEYS+ALTGRAPH,
TF(6), HOLE,
TF(7), TF(8), TF(9), SHIFTKEYS+ALT,
HOLE, RF(1), RF(2), RF(3),
HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '1', '2',
'3', '4', '5', '6', '7', '8', '9', '0',
'-', '=', '`', '\b', HOLE, RF(4), RF(5), RF(6),
BF(13), LF(5), BF(10), LF(6), HOLE, '\t', 'q', 'w',
'e', 'r', 't', 'y', 'u', 'i', 'o', 'p',
'[', ']', DEL, COMPOSE,
RF(7), STRING+UPARROW,
RF(9), BF(15),
LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
'a', 's', 'd',
'f', 'g', 'h', 'j', 'k', 'l', ';', '\'',
'\\', '\r', BF(11), STRING+LEFTARROW,
RF(11), STRING+RIGHTARROW,
BF(8), LF(9),
HOLE, LF(10), SHIFTKEYS+NUMLOCK,
SHIFTKEYS+LEFTSHIFT,
'z', 'x', 'c', 'v',
'b', 'n', 'm', ',', '.', '/', SHIFTKEYS+RIGHTSHIFT,
'\n',
RF(13), STRING+DOWNARROW,
RF(15), HOLE, HOLE, HOLE, LF(16), SHIFTKEYS+CAPSLOCK,
BUCKYBITS+METABIT,
' ', BUCKYBITS+METABIT,
HOLE, HOLE, BF(14), ERROR, IDLE,
};
static struct keymap keytab_s4_uc = {
HOLE, BUCKYBITS+SYSTEMBIT,
HOLE, LF(2), HOLE, TF(1), TF(2), TF(10),
TF(3), TF(11), TF(4), TF(12), TF(5), SHIFTKEYS+ALTGRAPH,
TF(6), HOLE,
TF(7), TF(8), TF(9), SHIFTKEYS+ALT,
HOLE, RF(1), RF(2), RF(3),
HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '!', '@',
'#', '$', '%', '^', '&', '*', '(', ')',
'_', '+', '~', '\b', HOLE, RF(4), RF(5), RF(6),
BF(13), LF(5), BF(10), LF(6), HOLE, '\t', 'Q', 'W',
'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P',
'{', '}', DEL, COMPOSE,
RF(7), STRING+UPARROW,
RF(9), BF(15),
LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
'A', 'S', 'D',
'F', 'G', 'H', 'J', 'K', 'L', ':', '"',
'|', '\r', BF(11), STRING+LEFTARROW,
RF(11), STRING+RIGHTARROW,
BF(8), LF(9),
HOLE, LF(10), SHIFTKEYS+NUMLOCK,
SHIFTKEYS+LEFTSHIFT,
'Z', 'X', 'C', 'V',
'B', 'N', 'M', '<', '>', '?', SHIFTKEYS+RIGHTSHIFT,
'\n',
RF(13), STRING+DOWNARROW,
RF(15), HOLE, HOLE, HOLE, LF(16), SHIFTKEYS+CAPSLOCK,
BUCKYBITS+METABIT,
' ', BUCKYBITS+METABIT,
HOLE, HOLE, BF(14), ERROR, IDLE,
};
static struct keymap keytab_s4_cl = {
HOLE, BUCKYBITS+SYSTEMBIT,
HOLE, LF(2), HOLE, TF(1), TF(2), TF(10),
TF(3), TF(11), TF(4), TF(12), TF(5), SHIFTKEYS+ALTGRAPH,
TF(6), HOLE,
TF(7), TF(8), TF(9), SHIFTKEYS+ALT,
HOLE, RF(1), RF(2), RF(3),
HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '1', '2',
'3', '4', '5', '6', '7', '8', '9', '0',
'-', '=', '`', '\b', HOLE, RF(4), RF(5), RF(6),
BF(13), LF(5), BF(10), LF(6), HOLE, '\t', 'Q', 'W',
'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P',
'[', ']', DEL, COMPOSE,
RF(7), STRING+UPARROW,
RF(9), BF(15),
LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
'A', 'S', 'D',
'F', 'G', 'H', 'J', 'K', 'L', ';', '\'',
'\\', '\r', BF(11), STRING+LEFTARROW,
RF(11), STRING+RIGHTARROW,
BF(8), LF(9),
HOLE, LF(10), SHIFTKEYS+NUMLOCK,
SHIFTKEYS+LEFTSHIFT,
'Z', 'X', 'C', 'V',
'B', 'N', 'M', ',', '.', '/', SHIFTKEYS+RIGHTSHIFT,
'\n',
RF(13), STRING+DOWNARROW,
RF(15), HOLE, HOLE, HOLE, LF(16), SHIFTKEYS+CAPSLOCK,
BUCKYBITS+METABIT,
' ', BUCKYBITS+METABIT,
HOLE, HOLE, BF(14), ERROR, IDLE,
};
static struct keymap keytab_s4_ag = {
HOLE, BUCKYBITS+SYSTEMBIT,
HOLE, LF(2), HOLE, TF(1), TF(2), TF(10),
TF(3), TF(11), TF(4), TF(12), TF(5), SHIFTKEYS+ALTGRAPH,
TF(6), HOLE,
TF(7), TF(8), TF(9), SHIFTKEYS+ALT,
HOLE, RF(1), RF(2), RF(3),
HOLE, LF(3), LF(4), HOLE, HOLE, ESC, NOP, NOP,
NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
NOP, NOP, NOP, '\b', HOLE, RF(4), RF(5), RF(6),
BF(13), LF(5), BF(10), LF(6), HOLE, '\t', NOP, NOP,
NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
NOP, NOP, DEL, COMPOSE,
RF(7), STRING+UPARROW,
RF(9), BF(15),
LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
NOP, NOP, NOP,
NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
NOP, '\r', BF(11), STRING+LEFTARROW,
RF(11), STRING+RIGHTARROW,
BF(8), LF(9),
HOLE, LF(10), SHIFTKEYS+NUMLOCK,
SHIFTKEYS+LEFTSHIFT,
NOP, NOP, NOP, NOP,
NOP, NOP, NOP, NOP, NOP, NOP, SHIFTKEYS+RIGHTSHIFT,
'\n',
RF(13), STRING+DOWNARROW,
RF(15), HOLE, HOLE, HOLE, LF(16), SHIFTKEYS+CAPSLOCK,
BUCKYBITS+METABIT,
' ', BUCKYBITS+METABIT,
HOLE, HOLE, BF(14), ERROR, IDLE,
};
static struct keymap keytab_s4_nl = {
HOLE, NONL, HOLE, NONL, HOLE, NONL, NONL, NONL,
NONL, NONL, NONL, NONL, NONL, NONL, NONL, HOLE,
NONL, NONL, NONL, NONL, HOLE, NONL, NONL, NONL,
HOLE, NONL, NONL, HOLE, HOLE, NONL, NONL, NONL,
NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
NONL, NONL, NONL, NONL, HOLE, PADEQUAL,
PADSLASH,
PADSTAR,
NONL, NONL, PADDOT, NONL, HOLE, NONL, NONL, NONL,
NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
NONL, NONL, NONL, NONL,
PAD7, PAD8, PAD9, PADMINUS,
NONL, NONL, HOLE, HOLE, NONL, NONL, NONL, NONL,
NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
NONL, NONL, PADENTER,
PAD4, PAD5, PAD6, PAD0, NONL,
HOLE, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
NONL, NONL, NONL, NONL, NONL, NONL, NONL,
NONL,
PAD1, PAD2, PAD3, HOLE, HOLE, HOLE, NONL, NONL,
NONL, NONL, NONL, HOLE, HOLE, PADPLUS,
ERROR, IDLE,
};
static struct keymap keytab_s4_ct = {
HOLE, BUCKYBITS+SYSTEMBIT,
HOLE, LF(2), HOLE, TF(1), TF(2), TF(10),
TF(3), TF(11), TF(4), TF(12), TF(5), SHIFTKEYS+ALTGRAPH,
TF(6), HOLE,
TF(7), TF(8), TF(9), SHIFTKEYS+ALT,
HOLE, RF(1), RF(2), RF(3),
HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '1', c('@'),
'3', '4', '5', c('^'), '7', '8', '9', '0',
c('_'), '=', c('^'), '\b', HOLE, RF(4), RF(5), RF(6),
BF(13), LF(5), BF(10), LF(6), HOLE, '\t', c('q'), c('w'),
c('e'), c('r'), c('t'), c('y'), c('u'), c('i'), c('o'), c('p'),
c('['), c(']'), DEL, COMPOSE,
RF(7), STRING+UPARROW,
RF(9), BF(15),
LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
c('a'), c('s'), c('d'),
c('f'), c('g'), c('h'), c('j'), c('k'), c('l'), ';', '\'',
c('\\'),
'\r', BF(11), STRING+LEFTARROW,
RF(11), STRING+RIGHTARROW,
BF(8), LF(9),
HOLE, LF(10), SHIFTKEYS+NUMLOCK,
SHIFTKEYS+LEFTSHIFT,
c('z'), c('x'), c('c'), c('v'),
c('b'), c('n'), c('m'), ',', '.', c('_'), SHIFTKEYS+RIGHTSHIFT,
'\n',
RF(13), STRING+DOWNARROW,
RF(15), HOLE, HOLE, HOLE, LF(16), SHIFTKEYS+CAPSLOCK,
BUCKYBITS+METABIT,
c(' '), BUCKYBITS+METABIT,
HOLE, HOLE, BF(14), ERROR, IDLE,
};
static struct keymap keytab_s4_up = {
HOLE, BUCKYBITS+SYSTEMBIT,
HOLE, NOP, HOLE, NOP, NOP, NOP,
NOP, NOP, NOP, NOP, NOP, SHIFTKEYS+ALTGRAPH,
NOP, HOLE,
NOP, NOP, NOP, SHIFTKEYS+ALT,
HOLE, NOP, NOP, NOP,
HOLE, NOP, NOP, HOLE, HOLE, NOP, NOP, NOP,
NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
NOP, NOP, NOP, NOP, HOLE, NOP, NOP, NOP,
NOP, NOP, NOP, NOP, HOLE, NOP, NOP, NOP,
NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
NOP, NOP, HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
NOP, NOP, NOP,
NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
HOLE, NOP, NOP,
SHIFTKEYS+LEFTSHIFT,
NOP, NOP, NOP, NOP,
NOP, NOP, NOP, NOP, NOP, NOP, SHIFTKEYS+RIGHTSHIFT,
NOP,
NOP, NOP, NOP, HOLE, HOLE, HOLE, NOP, NOP,
BUCKYBITS+METABIT,
NOP, BUCKYBITS+METABIT,
HOLE, HOLE, NOP, HOLE, RESET,
};
static struct keyboard keyindex_s4 = {
&keytab_s4_lc,
&keytab_s4_uc,
&keytab_s4_cl,
&keytab_s4_ag,
&keytab_s4_nl,
&keytab_s4_ct,
&keytab_s4_up,
0x0000,
0x0000,
1, 0, 77,
CAPSMASK|NUMLOCKMASK,
NULL,
99, 110, 21,
};
struct keyboards keytables[] = {
KB_SUN3, &keyindex_s3,
KB_SUN4, &keyindex_s4,
0, NULL,
};
#ifdef __STDC__
char keystringtab[16][KTAB_STRLEN] = {
{ '\033', '[', 'H', '\0' },
{ '\033', '[', 'A', '\0' },
{ '\033', '[', 'B', '\0' },
{ '\033', '[', 'D', '\0' },
{ '\033', '[', 'C', '\0' },
};
#else
#define kstescinit(c) {'\033', '[', 'c', '\0'}
char keystringtab[16][KTAB_STRLEN] = {
kstescinit(H) ,
kstescinit(A) ,
kstescinit(B) ,
kstescinit(D) ,
kstescinit(C) ,
};
#endif
signed char kb_compose_map[ASCII_SET_SIZE] = {
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0,
1,
4,
-1,
-1,
-1,
-1,
16,
-1,
-1,
28,
31,
32,
36,
48,
49,
54,
57,
60,
61,
112,
-1,
-1,
-1,
-1,
-1,
112,
-1,
63,
-1,
64,
65,
-1,
66,
-1,
70,
112,
71,
-1,
-1,
73,
74,
-1,
-1,
112,
-1,
76,
77,
84,
-1,
112,
112,
112,
85,
-1,
-1,
112,
112,
-1,
-1,
87,
-1,
88,
93,
94,
99,
-1,
101,
112,
112,
-1,
-1,
102,
112,
-1,
-1,
112,
-1,
103,
104,
108,
-1,
112,
109,
112,
112,
-1,
-1,
110,
112,
-1,
-1,
111,
-1,
112,
-1,
};
struct compose_sequence_t kb_compose_table[] = {
{' ', ' ', 0xA0},
{'!', '!', 0xA1},
{'!', 'P', 0xB6},
{'!', 'p', 0xB6},
{'"', '"', 0xA8},
{'"', 'A', 0xC4},
{'"', 'E', 0xCB},
{'"', 'I', 0xCF},
{'"', 'O', 0xD6},
{'"', 'U', 0xDC},
{'"', 'a', 0xE4},
{'"', 'e', 0xEB},
{'"', 'i', 0xEF},
{'"', 'o', 0xF6},
{'"', 'u', 0xFC},
{'"', 'y', 0xFF},
{'\'','A', 0xC1},
{'\'','E', 0xC9},
{'\'','I', 0xCD},
{'\'','O', 0xD3},
{'\'','U', 0xDA},
{'\'','Y', 0xDD},
{'\'','a', 0xE1},
{'\'','e', 0xE9},
{'\'','i', 0xED},
{'\'','o', 0xF3},
{'\'','u', 0xFA},
{'\'','y', 0xFD},
{'*', 'A', 0xC5},
{'*', '^', 0xB0},
{'*', 'a', 0xE5},
{'+', '-', 0xB1},
{',', ',', 0xB8},
{',', '-', 0xAC},
{',', 'C', 0xC7},
{',', 'c', 0xE7},
{'-', '-', 0xAD},
{'-', ':', 0xF7},
{'-', 'A', 0xAA},
{'-', 'D', 0xD0},
{'-', 'L', 0xA3},
{'-', 'Y', 0xA5},
{'-', '^', 0xAF},
{'-', 'a', 0xAA},
{'-', 'd', 0xF0},
{'-', 'l', 0xA3},
{'-', 'y', 0xA5},
{'-', '|', 0xAC},
{'.', '^', 0xB7},
{'/', 'C', 0xA2},
{'/', 'O', 0xD8},
{'/', 'c', 0xA2},
{'/', 'o', 0xF8},
{'/', 'u', 0xB5},
{'0', 'X', 0xA4},
{'0', '^', 0xB0},
{'0', 'x', 0xA4},
{'1', '2', 0xBD},
{'1', '4', 0xBC},
{'1', '^', 0xB9},
{'2', '^', 0xB2},
{'3', '4', 0xBE},
{'3', '^', 0xB3},
{'<', '<', 0xAB},
{'>', '>', 0xBB},
{'?', '?', 0xBF},
{'A', 'E', 0xC6},
{'A', '^', 0xC2},
{'A', '`', 0xC0},
{'A', '~', 0xC3},
{'C', 'O', 0xA9},
{'E', '^', 0xCA},
{'E', '`', 0xC8},
{'H', 'T', 0xDE},
{'I', '^', 0xCE},
{'I', '`', 0xCC},
{'N', '~', 0xD1},
{'O', 'R', 0xAE},
{'O', 'S', 0xA7},
{'O', 'X', 0xA4},
{'O', '^', 0xD4},
{'O', '_', 0xBA},
{'O', '`', 0xD2},
{'O', '~', 0xD5},
{'P', '|', 0xDE},
{'U', '^', 0xDB},
{'U', '`', 0xD9},
{'\\','\\',0xB4},
{'^', 'a', 0xE2},
{'^', 'e', 0xEA},
{'^', 'i', 0xEE},
{'^', 'o', 0xF4},
{'^', 'u', 0xFB},
{'_', 'o', 0xBA},
{'`', 'a', 0xE0},
{'`', 'e', 0xE8},
{'`', 'i', 0xEC},
{'`', 'o', 0xF2},
{'`', 'u', 0xF9},
{'a', 'e', 0xE6},
{'a', '~', 0xE3},
{'c', 'o', 0xA9},
{'h', 't', 0xFE},
{'n', '~', 0xF1},
{'o', 'r', 0xAE},
{'o', 's', 0xA7},
{'o', 'x', 0xA4},
{'o', '~', 0xF5},
{'p', '|', 0xFE},
{'s', 's', 0xDF},
{'x', 'x', 0xD7},
{'|', '|', 0xA6},
{0, 0, 0},
};
struct fltaccent_sequence_t kb_fltaccent_table[] = {
{FA_UMLAUT, 'A', 0xC4},
{FA_UMLAUT, 'E', 0xCB},
{FA_UMLAUT, 'I', 0xCF},
{FA_UMLAUT, 'O', 0xD6},
{FA_UMLAUT, 'U', 0xDC},
{FA_UMLAUT, 'a', 0xE4},
{FA_UMLAUT, 'e', 0xEB},
{FA_UMLAUT, 'i', 0xEF},
{FA_UMLAUT, 'o', 0xF6},
{FA_UMLAUT, 'u', 0xFC},
{FA_UMLAUT, 'y', 0xFC},
{FA_CFLEX, 'A', 0xC2},
{FA_CFLEX, 'E', 0xCA},
{FA_CFLEX, 'I', 0xCE},
{FA_CFLEX, 'O', 0xD4},
{FA_CFLEX, 'U', 0xDB},
{FA_CFLEX, 'a', 0xE2},
{FA_CFLEX, 'e', 0xEA},
{FA_CFLEX, 'i', 0xEE},
{FA_CFLEX, 'o', 0xF4},
{FA_CFLEX, 'u', 0xFB},
{FA_TILDE, 'A', 0xC3},
{FA_TILDE, 'N', 0xD1},
{FA_TILDE, 'O', 0xD5},
{FA_TILDE, 'a', 0xE3},
{FA_TILDE, 'n', 0xF1},
{FA_TILDE, 'o', 0xF5},
{FA_CEDILLA, 'C', 0xC7},
{FA_CEDILLA, 'c', 0xE7},
{FA_ACUTE, 'A', 0xC1},
{FA_ACUTE, 'E', 0xC9},
{FA_ACUTE, 'I', 0xCD},
{FA_ACUTE, 'O', 0xD3},
{FA_ACUTE, 'U', 0xDA},
{FA_ACUTE, 'a', 0xE1},
{FA_ACUTE, 'e', 0xE9},
{FA_ACUTE, 'i', 0xED},
{FA_ACUTE, 'o', 0xF3},
{FA_ACUTE, 'u', 0xFA},
{FA_ACUTE, 'y', 0xFD},
{FA_GRAVE, 'A', 0xC0},
{FA_GRAVE, 'E', 0xC8},
{FA_GRAVE, 'I', 0xCC},
{FA_GRAVE, 'O', 0xD2},
{FA_GRAVE, 'U', 0xD9},
{FA_GRAVE, 'a', 0xE0},
{FA_GRAVE, 'e', 0xE8},
{FA_GRAVE, 'i', 0xEC},
{FA_GRAVE, 'o', 0xF2},
{FA_GRAVE, 'u', 0xF9},
{0, 0, 0},
};
uchar_t kb_numlock_table[] = {
'=',
'/',
'*',
'-',
',',
'7',
'8',
'9',
'+',
'4',
'5',
'6',
'1',
'2',
'3',
'0',
'.',
'\n',
};