Phase 0: Referenzdokumente, Fehlerkatalog, Testkorpus, Ratatui-Spike
Entscheidungen festgehalten: TBVM bestaetigt und eingebettet in die Executables; durchgaengig UTF-8 statt CP437 (dokumentierte Abweichung). - docs/: Sprachreferenz, Forms-Referenz, Dateiformate, TBVM-Design - tb-runtime::errors: klassischer Laufzeitfehler-Katalog (implementiert) - tb-ui::screen: 80x25-Unicode-Zellenpuffer mit 16-Farben-Abbildung, Scrollbereich (VIEW PRINT), Letterboxing; Ratatui-Widget + Tests - Spike: cargo run -p tb-ui --example spike (Farben, Unicode, Tasten, Maus) - tests/compat/: erste Referenzprogramme mit byte-genauer Sollausgabe Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
85
docs/forms-referenz.md
Normal file
85
docs/forms-referenz.md
Normal file
@@ -0,0 +1,85 @@
|
||||
# Forms-Referenz Terminal Basic
|
||||
|
||||
Rekonstruierte Referenz der Forms-Engine des Vorbilds (textbasierte,
|
||||
ereignisgesteuerte Oberflächen). Grundlage für `tb-ui::forms` und den
|
||||
Formular-Designer der IDE. Unklare Punkte sind mit `TODO` markiert.
|
||||
|
||||
## Koordinatenmodell
|
||||
|
||||
Alle Maße in **Textzellen** (Zeilen/Spalten), Ursprung links oben.
|
||||
Formulare liegen auf dem 80×25-Bildschirm; Steuerelemente relativ zum
|
||||
Formular-Innenbereich. Eigenschaften `Top`, `Left`, `Height`, `Width`.
|
||||
|
||||
## Steuerelemente (Übersicht)
|
||||
|
||||
| Steuerelement | Zweck | Schlüssel-Ereignisse |
|
||||
|---|---|---|
|
||||
| Form | Fenster (mit/ohne Rahmen, Titel, verschiebbar) | Load, Unload, Activate, Deactivate, Resize, Paint, Click, KeyPress |
|
||||
| Label | statischer Text | Click |
|
||||
| TextBox | ein-/mehrzeilige Texteingabe | Change, KeyPress, GotFocus, LostFocus |
|
||||
| CommandButton | Schaltfläche | Click |
|
||||
| CheckBox | Mehrfachauswahl (Value 0/1/2) | Click |
|
||||
| OptionButton | Einfachauswahl in Gruppe (Value TRUE/FALSE) | Click |
|
||||
| Frame | Gruppierungsrahmen (Container) | — |
|
||||
| ListBox | Liste (List, ListCount, ListIndex, AddItem/RemoveItem) | Click, DblClick |
|
||||
| ComboBox | Eingabe + Liste (Style 0/1/2) | Change, Click, DblClick |
|
||||
| HScrollBar / VScrollBar | Bildlauf (Min, Max, Value, SmallChange, LargeChange) | Change, Scroll |
|
||||
| PictureBox | Text-Zeichenfläche (PRINT/CLS auf Steuerelement) | Click, Paint |
|
||||
| Timer | unsichtbar; Interval in ms (Vorbild: 55-ms-Ticks) | Timer |
|
||||
| Menu | Menüleiste/-einträge (Designer-definiert) | Click |
|
||||
|
||||
## Gemeinsame Eigenschaften
|
||||
|
||||
`Name` (Entwurfszeit), `Caption`/`Text`, `Top`/`Left`/`Height`/`Width`,
|
||||
`Visible`, `Enabled`, `TabIndex`, `TabStop`, `Tag`, `Index` (Steuerelement-
|
||||
Arrays), `ForeColor`/`BackColor` (0–15 bzw. 0–7), `MousePointer` (TODO).
|
||||
Zugriff zur Laufzeit: `form.eigenschaft`, `form!element.eigenschaft`;
|
||||
Standard-Eigenschaft (z. B. `Text` bei TextBox, `Caption` bei Label) bei
|
||||
Zuweisung ohne Eigenschaftsname. TODO: exakte Standard-Eigenschaften prüfen.
|
||||
|
||||
## Gemeinsame Methoden
|
||||
|
||||
`Move top, left [, height, width]` · `SetFocus` · `Refresh` · `Drag` (Nicht-
|
||||
Ziel?) · Form zusätzlich: `Show [modal]`, `Hide`, `Cls`, `Print`, `Line`
|
||||
(Textmodus-Variante? TODO). ListBox/ComboBox: `AddItem text$ [, index]`,
|
||||
`RemoveItem index`, `Clear` (TODO: hieß es `Clear`?).
|
||||
|
||||
## Ereignismodell
|
||||
|
||||
- Ereignisprozeduren heißen `SUB elementname_Ereignis (argumente)` und liegen
|
||||
im Formular-Modul.
|
||||
- Tastatur: `KeyDown(KeyCode%, Shift%)`, `KeyPress(KeyAscii%)`, `KeyUp` —
|
||||
KeyAscii ist bei uns ein Unicode-Codepoint (Abweichung UTF-8).
|
||||
- Maus: `MouseDown/MouseMove/MouseUp(Button%, Shift%, X!, Y!)` in Zellen.
|
||||
- Fokusreihenfolge über `TabIndex`; Tab/Shift+Tab wechseln, Access-Keys per
|
||||
`&` im Caption (z. B. `"&OK"` → Alt+O).
|
||||
- Zentrale Schleife: Ereignisse werden nur bei `DOEVENTS`, `SLEEP`, `INPUT`-
|
||||
artigen Wartezuständen oder nach Ende einer Ereignisprozedur zugestellt
|
||||
(kooperativ, wie im Vorbild — keine Präemption).
|
||||
|
||||
## Globale Objekte und Funktionen
|
||||
|
||||
- `SCREEN`-Objekt: `SCREEN.ActiveForm`, `SCREEN.ActiveControl`,
|
||||
`SCREEN.Height`/`Width` (25/80), `SCREEN.MousePointer` (TODO: Umfang).
|
||||
- `MSGBOX(text$ [, typ% [, titel$]])` als Anweisung und Funktion
|
||||
(Rückgabe: gedrückte Schaltfläche), `INPUTBOX$(prompt$ [, titel$
|
||||
[, standard$ [, spalte%, zeile%]]])`.
|
||||
- `LOAD form` (Load-Ereignis, unsichtbar), `UNLOAD form` (Unload-Ereignis),
|
||||
Formular-Referenzen sind statisch (keine Instanziierung wie in späteren
|
||||
Nachfolgern).
|
||||
|
||||
## Farben und Zeichensatz
|
||||
|
||||
Rahmen, Schatten und Bedienelemente werden mit Unicode-Box-Drawing gezeichnet
|
||||
(Abweichung: UTF-8 statt CP437, identische Optik). Standard-Farbschema des
|
||||
Vorbilds (grauer Dialog, schwarze Schrift, weiße Akzente) wird als Default
|
||||
nachgebildet. TODO: exakte Attributtabelle je Steuerelement-Zustand
|
||||
(normal/fokussiert/deaktiviert) aus Screenshots/Emulator ableiten.
|
||||
|
||||
## Offene Detailfragen (per Emulator-Session zu klären)
|
||||
|
||||
- Exakte Standardwerte aller Eigenschaften je Steuerelement
|
||||
- Z-Reihenfolge/Überlappung von Steuerelementen und Formularen
|
||||
- Verhalten `Show 1` (modal): welche Ereignisse laufen weiter?
|
||||
- Timer-Auflösung und -Reihenfolge bei mehreren Timern
|
||||
- Genauer Umfang von PictureBox im Textmodus
|
||||
Reference in New Issue
Block a user