#include <windows.h>
#include <stdio.h>

int main() {
    HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    DWORD inMode = 0, outMode = 0;

    // Eingabemodus: VT + Einzelzeicheneingabe aktivieren
    GetConsoleMode(hIn, &inMode);
    inMode &= ~(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT | ENABLE_PROCESSED_INPUT);
    inMode |= ENABLE_VIRTUAL_TERMINAL_INPUT;
    SetConsoleMode(hIn, inMode);

    // Ausgabemodus: VT100 aktivieren
    GetConsoleMode(hOut, &outMode);
    SetConsoleMode(hOut, outMode | ENABLE_VIRTUAL_TERMINAL_PROCESSING);

    printf("\x1b[2J\x1b[H");
    printf("\x1b[1;36mESC-Sequenz-Tester (VT + Einzelzeichenmodus)\x1b[0m\n\n");

    char ch;
    DWORD read;
    while (1) {
        if (!ReadFile(hIn, &ch, 1, &read, NULL)) break;
        if (read == 1) {
            printf("Byte: 0x%02X '%c'\n", (unsigned char)ch, (ch >= 32 && ch < 127) ? ch : '.');
            if (ch == 27) {
                printf("ESC erkannt → Programmende\n");
                break;
            }
        }
    }

    return 0;
}