479 lines
9.5 KiB
Rust
479 lines
9.5 KiB
Rust
pub mod us {
|
|
static US: [[char; 2]; 58] = [
|
|
['\0', '\0'],
|
|
['\x1B', '\x1B'],
|
|
['1', '!'],
|
|
['2', '@'],
|
|
['3', '#'],
|
|
['4', '$'],
|
|
['5', '%'],
|
|
['6', '^'],
|
|
['7', '&'],
|
|
['8', '*'],
|
|
['9', '('],
|
|
['0', ')'],
|
|
['-', '_'],
|
|
['=', '+'],
|
|
['\x7F', '\x7F'],
|
|
['\t', '\t'],
|
|
['q', 'Q'],
|
|
['w', 'W'],
|
|
['e', 'E'],
|
|
['r', 'R'],
|
|
['t', 'T'],
|
|
['y', 'Y'],
|
|
['u', 'U'],
|
|
['i', 'I'],
|
|
['o', 'O'],
|
|
['p', 'P'],
|
|
['[', '{'],
|
|
[']', '}'],
|
|
['\n', '\n'],
|
|
['\0', '\0'],
|
|
['a', 'A'],
|
|
['s', 'S'],
|
|
['d', 'D'],
|
|
['f', 'F'],
|
|
['g', 'G'],
|
|
['h', 'H'],
|
|
['j', 'J'],
|
|
['k', 'K'],
|
|
['l', 'L'],
|
|
[';', ':'],
|
|
['\'', '"'],
|
|
['`', '~'],
|
|
['\0', '\0'],
|
|
['\\', '|'],
|
|
['z', 'Z'],
|
|
['x', 'X'],
|
|
['c', 'C'],
|
|
['v', 'V'],
|
|
['b', 'B'],
|
|
['n', 'N'],
|
|
['m', 'M'],
|
|
[',', '<'],
|
|
['.', '>'],
|
|
['/', '?'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
[' ', ' ']
|
|
];
|
|
|
|
pub fn get_char(scancode: u8, shift: bool) -> char {
|
|
if let Some(c) = US.get(scancode as usize) {
|
|
if shift {
|
|
c[1]
|
|
} else {
|
|
c[0]
|
|
}
|
|
} else {
|
|
'\0'
|
|
}
|
|
}
|
|
}
|
|
|
|
pub mod gb {
|
|
static GB: [[char; 2]; 87] = [
|
|
['\0', '\0'],
|
|
['\x1B', '\x1B'],
|
|
['1', '!'],
|
|
['2', '"'],
|
|
['3', '£'],
|
|
['4', '$'],
|
|
['5', '%'],
|
|
['6', '^'],
|
|
['7', '&'],
|
|
['8', '*'],
|
|
['9', '('],
|
|
['0', ')'],
|
|
['-', '_'],
|
|
['=', '+'],
|
|
['\x7F', '\x7F'],
|
|
['\t', '\t'],
|
|
['q', 'Q'],
|
|
['w', 'W'],
|
|
['e', 'E'],
|
|
['r', 'R'],
|
|
['t', 'T'],
|
|
['y', 'Y'],
|
|
['u', 'U'],
|
|
['i', 'I'],
|
|
['o', 'O'],
|
|
['p', 'P'],
|
|
['[', '{'],
|
|
[']', '}'],
|
|
['\n', '\n'],
|
|
['\0', '\0'],
|
|
['a', 'A'],
|
|
['s', 'S'],
|
|
['d', 'D'],
|
|
['f', 'F'],
|
|
['g', 'G'],
|
|
['h', 'H'],
|
|
['j', 'J'],
|
|
['k', 'K'],
|
|
['l', 'L'],
|
|
[';', ':'],
|
|
['\'', '@'],
|
|
['`', '¬'],
|
|
['\0', '\0'],
|
|
['#', '~'],
|
|
['z', 'Z'],
|
|
['x', 'X'],
|
|
['c', 'C'],
|
|
['v', 'V'],
|
|
['b', 'B'],
|
|
['n', 'N'],
|
|
['m', 'M'],
|
|
[',', '<'],
|
|
['.', '>'],
|
|
['/', '?'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
[' ', ' '],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\\', '|'],
|
|
];
|
|
|
|
pub fn get_char(scancode: u8, shift: bool) -> char {
|
|
if let Some(c) = GB.get(scancode as usize) {
|
|
if shift {
|
|
c[1]
|
|
} else {
|
|
c[0]
|
|
}
|
|
} else {
|
|
'\0'
|
|
}
|
|
}
|
|
}
|
|
|
|
pub mod dvorak {
|
|
static DVORAK: [[char; 2]; 58] = [
|
|
['\0', '\0'],
|
|
['\x1B', '\x1B'],
|
|
['1', '!'],
|
|
['2', '@'],
|
|
['3', '#'],
|
|
['4', '$'],
|
|
['5', '%'],
|
|
['6', '^'],
|
|
['7', '&'],
|
|
['8', '*'],
|
|
['9', '('],
|
|
['0', ')'],
|
|
['[', '{'],
|
|
[']', '}'],
|
|
['\x7F', '\x7F'],
|
|
['\t', '\t'],
|
|
['\'', '"'],
|
|
[',', '<'],
|
|
['.', '>'],
|
|
['p', 'P'],
|
|
['y', 'Y'],
|
|
['f', 'F'],
|
|
['g', 'G'],
|
|
['c', 'C'],
|
|
['r', 'R'],
|
|
['l', 'L'],
|
|
['/', '?'],
|
|
['=', '+'],
|
|
['\n', '\n'],
|
|
['\0', '\0'],
|
|
['a', 'A'],
|
|
['o', 'O'],
|
|
['e', 'E'],
|
|
['u', 'U'],
|
|
['i', 'I'],
|
|
['d', 'D'],
|
|
['h', 'H'],
|
|
['t', 'T'],
|
|
['n', 'N'],
|
|
['s', 'S'],
|
|
['-', '_'],
|
|
['`', '~'],
|
|
['\0', '\0'],
|
|
['\\', '|'],
|
|
[';', ':'],
|
|
['q', 'Q'],
|
|
['j', 'J'],
|
|
['k', 'K'],
|
|
['x', 'X'],
|
|
['b', 'B'],
|
|
['m', 'M'],
|
|
['w', 'W'],
|
|
['v', 'V'],
|
|
['z', 'Z'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
[' ', ' ']
|
|
];
|
|
|
|
pub fn get_char(scancode: u8, shift: bool) -> char {
|
|
if let Some(c) = DVORAK.get(scancode as usize) {
|
|
if shift {
|
|
c[1]
|
|
} else {
|
|
c[0]
|
|
}
|
|
} else {
|
|
'\0'
|
|
}
|
|
}
|
|
}
|
|
|
|
pub mod azerty {
|
|
static AZERTY: [[char; 2]; 58] = [
|
|
['\0', '\0'],
|
|
['\x1B', '\x1B'],
|
|
['&', '1'],
|
|
['é', '2'],
|
|
['"', '3'],
|
|
['\'', '4'],
|
|
['(', '5'],
|
|
['|', '6'],
|
|
['è', '7'],
|
|
['_', '8'],
|
|
['ç', '9'],
|
|
['à', '0'],
|
|
[')', '°'],
|
|
['=', '+'],
|
|
['\x7F', '\x7F'],
|
|
['\t', '\t'],
|
|
['a', 'A'],
|
|
['z', 'Z'],
|
|
['e', 'E'],
|
|
['r', 'R'],
|
|
['t', 'T'],
|
|
['y', 'Y'],
|
|
['u', 'U'],
|
|
['i', 'I'],
|
|
['o', 'O'],
|
|
['p', 'P'],
|
|
['^', '¨'],
|
|
['$', '£'],
|
|
['\n', '\n'],
|
|
['\0', '\0'],
|
|
['q', 'Q'],
|
|
['s', 'S'],
|
|
['d', 'D'],
|
|
['f', 'F'],
|
|
['g', 'G'],
|
|
['h', 'H'],
|
|
['j', 'J'],
|
|
['k', 'K'],
|
|
['l', 'L'],
|
|
['m', 'M'],
|
|
['ù', '%'],
|
|
['*', 'µ'],
|
|
['\0', '\0'],
|
|
['ê', 'Ê'],
|
|
['w', 'W'],
|
|
['x', 'X'],
|
|
['c', 'C'],
|
|
['v', 'V'],
|
|
['b', 'B'],
|
|
['n', 'N'],
|
|
[',', '?'],
|
|
[';', '.'],
|
|
[':', '/'],
|
|
['!', '§'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
[' ', ' ']
|
|
];
|
|
|
|
pub fn get_char(scancode: u8, shift: bool) -> char {
|
|
if let Some(c) = AZERTY.get(scancode as usize) {
|
|
if shift {
|
|
c[1]
|
|
} else {
|
|
c[0]
|
|
}
|
|
} else {
|
|
'\0'
|
|
}
|
|
}
|
|
}
|
|
|
|
pub mod bepo {
|
|
static BEPO: [[char; 2]; 58] = [
|
|
['\0', '\0'],
|
|
['\x1B', '\x1B'],
|
|
['"', '1'],
|
|
['«', '2'],
|
|
['»', '3'],
|
|
['(', '4'],
|
|
[')', '5'],
|
|
['@', '6'],
|
|
['+', '7'],
|
|
['-', '8'],
|
|
['/', '9'],
|
|
['*', '0'],
|
|
['=', '°'],
|
|
['%', '`'],
|
|
['\x7F', '\x7F'],
|
|
['\t', '\t'],
|
|
['b', 'B'],
|
|
['é', 'É'],
|
|
['p', 'P'],
|
|
['o', 'O'],
|
|
['è', 'È'],
|
|
['^', '!'],
|
|
['v', 'V'],
|
|
['d', 'D'],
|
|
['l', 'L'],
|
|
['j', 'J'],
|
|
['z', 'Z'],
|
|
['w', 'W'],
|
|
['\n', '\n'],
|
|
['\0', '\0'],
|
|
['a', 'A'],
|
|
['u', 'U'],
|
|
['i', 'I'],
|
|
['e', 'E'],
|
|
[',', ';'],
|
|
['c', 'C'],
|
|
['t', 'T'],
|
|
['s', 'S'],
|
|
['r', 'R'],
|
|
['n', 'N'],
|
|
['m', 'M'],
|
|
['ç', 'Ç'],
|
|
['\0', '\0'],
|
|
['ê', 'Ê'],
|
|
['à', 'À'],
|
|
['y', 'Y'],
|
|
['x', 'X'],
|
|
['.', ':'],
|
|
['k', 'K'],
|
|
['\'', '?'],
|
|
['q', 'Q'],
|
|
['g', 'G'],
|
|
['h', 'H'],
|
|
['f', 'F'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
[' ', ' ']
|
|
];
|
|
|
|
pub fn get_char(scancode: u8, shift: bool) -> char {
|
|
if let Some(c) = BEPO.get(scancode as usize) {
|
|
if shift {
|
|
c[1]
|
|
} else {
|
|
c[0]
|
|
}
|
|
} else {
|
|
'\0'
|
|
}
|
|
}
|
|
}
|
|
|
|
pub mod it {
|
|
static IT: [[char; 2]; 58] = [
|
|
['\0', '\0'],
|
|
['\x1B', '\x1B'],
|
|
['1', '!'],
|
|
['2', '"'],
|
|
['3', '£'],
|
|
['4', '$'],
|
|
['5', '%'],
|
|
['6', '&'],
|
|
['7', '/'],
|
|
['8', '('],
|
|
['9', ')'],
|
|
['0', '='],
|
|
['?', '\''],
|
|
['ì', '^'],
|
|
['\x7F', '\x7F'],
|
|
['\t', '\t'],
|
|
['q', 'Q'],
|
|
['w', 'W'],
|
|
['e', 'E'],
|
|
['r', 'R'],
|
|
['t', 'T'],
|
|
['y', 'Y'],
|
|
['u', 'U'],
|
|
['i', 'I'],
|
|
['o', 'O'],
|
|
['p', 'P'],
|
|
['è', 'é'],
|
|
['+', '*'],
|
|
['\n', '\n'],
|
|
['\x20', '\x20'],
|
|
['a', 'A'],
|
|
['s', 'S'],
|
|
['d', 'D'],
|
|
['f', 'F'],
|
|
['g', 'G'],
|
|
['h', 'H'],
|
|
['j', 'J'],
|
|
['k', 'K'],
|
|
['l', 'L'],
|
|
['ò', 'ç'],
|
|
['à', '°'],
|
|
['ù', '§'],
|
|
['\0', '\0'],
|
|
['<', '>'],
|
|
['z', 'Z'],
|
|
['x', 'X'],
|
|
['c', 'C'],
|
|
['v', 'V'],
|
|
['b', 'B'],
|
|
['n', 'N'],
|
|
['m', 'M'],
|
|
[',', ';'],
|
|
['.', ':'],
|
|
['-', '_'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
['\0', '\0'],
|
|
[' ', ' ']
|
|
];
|
|
|
|
pub fn get_char(scancode: u8, shift: bool) -> char {
|
|
if let Some(c) = IT.get(scancode as usize) {
|
|
if shift {
|
|
c[1]
|
|
} else {
|
|
c[0]
|
|
}
|
|
} else {
|
|
'\0'
|
|
}
|
|
}
|
|
}
|