std.crt_raw — Raw-Terminal I/O
import std.crt_raw;
Low-level Raw-Terminal-I/O: Non-blocking Tastatureingabe, Raw-Modus-Umschaltung. Erweitert std.crt um direkte Terminal-Steuerung ohne Zeilenpufferung.
Experimentell: Benötigt dynamisches Linking mit libc (tcgetattr/tcsetattrvia@extern). Plattform: Linux x86-64.
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:
SetRawModeundKeyPressedsind aktuell Platzhalter (-1/false). Die vollständigetermios-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_ioctlundTCGETS/TCSETSauf dem Terminal-fd implementieren.
Letzte Aktualisierung: 2026-06-06
