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 шт):

Автор решения: LeopardL GD

Измени код на такой:

#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;

Как разобраться с капсом - не знаю.

→ Ссылка