Files
TerminalBasic/openspec/specs/textbildschirm/spec.md
Chili Palmer da23d52036 OpenSpec-Baseline: Phasen 0/1 als Specs nachgeruestet
Change "baseline-phasen-0-1" (Explore/Retrofit des umgesetzten Stands),
per Archiv in die Haupt-Specs uebernommen und validiert:
- sprach-frontend (6 Requirements: Lexik, Literal-Typisierung,
  Anweisungs-Grammatik, Semantik, Non-Feature-Abweisung, Diagnostik)
- laufzeitfehler (2: Katalog 1-480, Unprintable error)
- textbildschirm (5: dynamische Groesse, PRINT/Scroll, Cursor-API,
  Farbpalette/Blink, Unicode-Zellenmodell)
- kompat-testkorpus (2: byte-genaue Sollausgaben, Frontend-Meilenstein)

Workflow ab jetzt je Phase: Explore -> Proposal -> Umsetzung -> Archiv.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 09:47:01 +02:00

2.9 KiB
Raw Blame History

textbildschirm Specification

Purpose

Der emulierte Textbildschirm ist die Rendering-Grundlage für PRINT, LOCATE, COLOR, CLS und später die Forms-Engine: Unicode-Zellenpuffer mit dynamischer Terminalgröße und klassischer 16-Farben-Palette auf Ratatui.

Requirements

Requirement: Dynamische Terminalgröße mit Mindestmaß

Der Bildschirm SHALL der Terminalgröße folgen (Puffer per resize anpassbar; Inhalt bleibt oben links erhalten, Cursor wird geklemmt). Die Mindestgröße ist 80×25: kleinere Werte werden auf 80×25 geklemmt, und ist die Render-Fläche kleiner als 80×25, SHALL nur ein Hinweis „Terminal zu klein" mit Ist- und Mindestgröße gerendert werden.

Scenario: Vergrößertes Terminal

  • WHEN der Bildschirm auf 120×40 gesetzt wird
  • THEN sind alle 120 Spalten und 40 Zeilen adressierbar (LOCATE 40, 120)

Scenario: Zu kleines Terminal

  • WHEN die Render-Fläche 60×20 misst
  • THEN erscheint statt des Puffers der Hinweis mit Minimum 80×25

Requirement: PRINT-Semantik mit Umbruch und Scrollen

print SHALL Zeichen an der Cursorposition ausgeben, am rechten Rand umbrechen und am unteren Rand des Scrollbereichs den Bereich um eine Zeile nach oben scrollen; \n bricht um, \r setzt an den Zeilenanfang. VIEW PRINT oben TO unten SHALL das Scrollen auf den Bereich begrenzen; ohne eigene Einstellung folgt der Scrollbereich der Bildschirmgröße.

Scenario: Scrollen in VIEW-PRINT-Bereich

  • WHEN der Scrollbereich Zeilen 35 umfasst und in Zeile 5 ein Umbruch erfolgt
  • THEN scrollen nur die Zeilen 35; Kopfzeilen außerhalb bleiben unverändert

Requirement: 1-basierte Cursor-API mit Bereichsprüfung

LOCATE, CSRLIN und POS SHALL 1-basiert arbeiten; LOCATE außerhalb der aktuellen Bildschirmgrenzen SHALL als Fehler abgewiesen werden (Basis für Laufzeitfehler 5).

Scenario: Grenzprüfung

  • WHEN bei 80×25 LOCATE 26, 1 aufgerufen wird
  • THEN wird der Aufruf abgewiesen

Der Bildschirm SHALL die klassische Palette abbilden (Vordergrund 015, Hintergrund 07) und auf ANSI-Indexfarben mappen (klassisch 1 = Blau ↔ ANSI 4 usw.). Blinkende Vordergrundfarben (1631) SHALL als „hell" simuliert werden (Farbe 16, Intensitätsbit gesetzt) — kein echtes Terminal-Blinken.

  • WHEN COLOR 17, 0 gesetzt wird (blinkend Blau)
  • THEN wird mit heller Vordergrundfarbe 9 gerendert

Requirement: Unicode-Zellenmodell

Der Puffer SHALL Unicode-Zeichen speichern (keine CP437-Emulation); aktuell gilt strikt 1 Zeichen = 1 Zelle. (Zeichen mit Darstellungsbreite 2 belegen künftig zwei Zellen — beschlossene Änderung, Umsetzung in Phase 3 als eigenes Change.)

Scenario: Umlaute und Symbole

  • WHEN Ä☃ ausgegeben wird
  • THEN belegen Ä und je genau eine Zelle