CAPS LOCK через кнопку CAPS и кнопку SHIFT, но с контекстом | C++
Вот что у меня есть:
#include "types.h" // Содержит типы переменных
// Что-то
void printf(char*);
// Что-то
uint32_t KeyboardDriver::HandleInterrupt(uint32_t esp) {
uint8_t key = dataport.Read();
if(key < 0x80) {
switch(key) {
case 0x02: printf("1"); break;
case 0x03: printf("2"); break;
// И так далее куча символов
Этот код и еще немного кода, который я не включил сюда, отвечает за то, чтобы работала клавиатура в OS. Если какой-то символ не указан здесь, но его нажали, то выводится следующее:
KEYBOARD hexnumber, пример: KEYBOARD 0x5B, это пуск.
Вот что мне надо: сделать так, чтобы кнопка CAPS LOCK работала и выводились заглавные буквы. То же самое с зажатым SHIFT, чтобы он выводил заглавные буквы и символы при нажатии на цифры на верхней панели клавиатуры. ОЧЕНЬ ВАЖНО не использовать стандартные библиотеки. Ах да, мне не нужно, чтобы вы прописали каждый символ, с этим я справлюсь. Мне нужна сама суть, как сделать эти кнопки рабочими в этом контексте?
ПОМОЩЬ
SHIFT: 0x2A
CAPS: 0x3A
Спасибо заранее! Язык C++
Ответы (1 шт):
Измени код на такой:
#include "types.h" // Содержит типы переменных
// Что-то
void printf(char*);
// Что-то
uint32_t KeyboardDriver::HandleInterrupt(uint32_t esp) {
uint8_t key = dataport.Read();
static bool Shift = false;
if(key < 0x80) {
switch(key) {
case 0x02: if(Shift) printf("!"); else printf("1"); break;
case 0x03: if(Shift) printf("@"); else printf("2"); break;
// И так далее куча символов
case 0x2A: case 0x36: Shift = true; break;
case 0xAA: case: 0xB6: Shift = false; break;
Как разобраться с капсом - не знаю.