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>
66 lines
2.9 KiB
Markdown
66 lines
2.9 KiB
Markdown
# 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 3–5 umfasst und in Zeile 5 ein Umbruch erfolgt
|
||
- **THEN** scrollen nur die Zeilen 3–5; 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 0–15,
|
||
Hintergrund 0–7) und auf ANSI-Indexfarben mappen (klassisch 1 = Blau ↔
|
||
ANSI 4 usw.). Blinkende Vordergrundfarben (16–31) 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
|