====== 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.
> **Zwei der drei Funktionen sind Platzhalter** ([[https://github.com/SEOLizer/LyX-Compiler/issues/1874|#1874]], gemessen mit lyxc 1.1.14A — auch im Pseudoterminal):
>
> * ''SetRawMode(true)'' liefert **immer ''-1''** und schaltet nichts um. Der Rumpf ist ein ''return -1'' mit dem Kommentar „requires platform-specific termios implementation".
> * ''KeyPressed()'' liefert **immer ''false''**.
> * ''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-''ioctl''s sind nur über eine Hardware-Capability erreichbar ([[https://github.com/SEOLizer/LyX-Compiler/issues/1867|#1867]]), und für ''KeyPressed'' fehlt ''poll''/''select'' ganz ([[https://github.com/SEOLizer/LyX-Compiler/issues/1868|#1868]]).
→ [[lyx_-_programmiersprache:units:crt|std.crt]] · [[lyx_-_programmiersprache:units:io|std.io]]
----
===== 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**: ''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
Letzte Aktualisierung: 2026-08-30 — gegen ''lyxc 1.1.14A'' nachgemessen: ''SetRawMode'' und ''KeyPressed'' sind Platzhalter (#1874); die Seite beschrieb sie als arbeitend.