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/tcsetattr via @extern). Plattform: Linux x86-64.

std.crt · 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