====== std.crt_raw — Raw-Terminal I/O ====== ''import std.crt_raw;'' Low-level Raw-Terminal-I/O: Non-blocking Tastatureingabe, Raw-Modus-Umschaltung. Erweitert [[lyx_-_programmiersprache:units:crt|std.crt]] um direkte Terminal-Steuerung ohne Zeilenpufferung. > **Experimentell**: Benötigt dynamisches Linking mit libc (''tcgetattr''/''tcsetattr'' via ''@extern''). Plattform: Linux x86-64. → [[lyx_-_programmiersprache:units:crt|std.crt]] · [[lyx_-_programmiersprache:units:io|std.io]] ---- ===== Funktionen ===== ^ Funktion ^ Signatur ^ Beschreibung ^ | ''SetRawMode'' | ''(enabled: bool): int64'' | Schaltet Terminal in Raw-Modus (kein Echo, keine Zeilenpufferung) | | ''KeyPressed'' | ''(): bool'' | Prüft nicht-blockierend ob eine Taste gedrückt wurde | | ''ReadKeyRaw'' | ''(): int64'' | Liest ein Byte von stdin; ''-1'' bei Fehler oder EOF | ---- ===== Verwendung ===== ==== Tastatureingabe ohne Enter ==== import std.crt_raw; fn WaitForKey(): int64 { SetRawMode(true); var k: int64 := ReadKeyRaw(); SetRawMode(false); return k; } ==== Non-blocking Input-Loop ==== import std.crt_raw; fn InputLoop(): void { SetRawMode(true); var running: bool := true; while (running) { if (KeyPressed()) { var k: int64 := ReadKeyRaw(); if (k = 113) { running := false; } // 'q' = beenden } // ... restliche Spiellogik / Verarbeitung ... } SetRawMode(false); } ---- ===== Hinweise ===== * **Experimentell**: ''SetRawMode'' und ''KeyPressed'' sind aktuell Platzhalter (''-1'' / ''false''). Die vollständige ''termios''-Implementierung ist plattformspezifisch und noch nicht integriert. * **libc-Abhängigkeit**: Die Unit verwendet ''@extern''-Funktionen (''tcgetattr'', ''tcsetattr'', ''select'', ''ioctl'') — erfordert dynamisches Linking mit libc. * **ReadKeyRaw** funktioniert auch ohne Raw-Modus als einfaches ''read(0, buf, 1)''. * **Alternative**: Für produktiven Einsatz direkten termios-Syscall via ''sys_ioctl'' und ''TCGETS''/''TCSETS'' auf dem Terminal-fd implementieren. ---- Letzte Aktualisierung: 2026-06-06