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

66 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
### Requirement: Klassische Farbpalette und Blink-Simulation
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.
#### Scenario: Blink wird hell
- **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