diff --git a/ps2d/src/keymap.rs b/ps2d/src/keymap.rs index 5697e52543..24c3ecda17 100644 --- a/ps2d/src/keymap.rs +++ b/ps2d/src/keymap.rs @@ -146,3 +146,154 @@ pub mod dvorak { } } } + +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' + } + } +} + diff --git a/ps2d/src/main.rs b/ps2d/src/main.rs index 9f587c8818..a63405659b 100644 --- a/ps2d/src/main.rs +++ b/ps2d/src/main.rs @@ -198,6 +198,8 @@ fn daemon(input: File) { Some(k) => match k.to_lowercase().as_ref() { "dvorak" => (keymap::dvorak::get_char), "english" => (keymap::english::get_char), + "azerty" => (keymap::azerty::get_char), + "bepo" => (keymap::bepo::get_char), &_ => (keymap::english::get_char) }, None => (keymap::english::get_char)