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.
Zwei der drei Funktionen sind Platzhalter (#1874, gemessen mit lyxc 1.1.14A — auch im Pseudoterminal):
*SetRawMode(true)liefert immer-1und schaltet nichts um. Der Rumpf ist einreturn -1mit dem Kommentar „requires platform-specific termios implementation„.
*KeyPressed()liefert immerfalse.
*ReadKeyRaw()arbeitet — ohne Raw-Modus aber zeilengepuffert, das Byte kommt also erst nach der Eingabetaste.
Die termios-Hüllen (tcgetattr,tcsetattr,ioctl) stehen in derselben Datei bereits; angeschlossen ist die API darüber nicht. Die Beispiele unten zeigen die vorgesehene Verwendung, kein heute laufendes Programm.
Unter LCBS kommt zweierlei dazu: die Terminal-ioctls sind nur über eine Hardware-Capability erreichbar (#1867), und fürKeyPressedfehltpoll/selectganz (#1868).
Funktionen
| Funktion | Signatur | Beschreibung |
|---|---|---|
SetRawMode | (enabled: bool): int64 | Vorgesehen: Terminal in den Raw-Modus schalten (kein Echo, keine Zeilenpufferung). Liefert derzeit immer -1 (#1874) |
KeyPressed | (): bool | Vorgesehen: nicht-blockierend prüfen, ob eine Taste anliegt. Liefert derzeit immer false (#1874) |
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
Letzte Aktualisierung: 2026-08-30 — gegen lyxc 1.1.14A nachgemessen: SetRawMode und KeyPressed sind Platzhalter (#1874); die Seite beschrieb sie als arbeitend.
