====== 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