Phase 5: Ausführung und Output implementieren und archivieren

This commit is contained in:
2026-09-06 18:56:47 +02:00
parent 9c85349a4d
commit e3dc9028bf
37 changed files with 2404 additions and 450 deletions

View File

@@ -133,24 +133,81 @@ Alle Referenzbefehle sind in ihrer Menüfolge vorhanden. Fachbefehle der
folgenden Changes sind sichtbar deaktiviert und zeigen einen
Verfügbarkeitsgrund; ihre Kürzel gelangen nicht versehentlich an BASIC.
Ctrl+C im Editor ist Kopieren, bei laufendem Programm mit
Output-Fokus wird Ctrl+C an den Programmeingabepfad weitergereicht.
Output-Fokus unterbricht Ctrl+C sofort die Sitzung, ohne eine BASIC-Taste einzureihen.
| Bereich | Rahmenaktion jetzt | Fachaktion im Folgechange |
| --- | --- | --- |
| File | New/Open/Save Project, New Form/Module, Add/Remove File, Save File/As, Load/Save Text, Exit | Print/Shell: 04 |
| File | New/Open/Save Project, New Form/Module, Add/Remove File, Save File/As, Load/Save Text, Print (UTF-8-Datei), Shell, Exit | — |
| Edit | Undo, Cut/Copy/Paste/Clear, New Sub/Function | Event Procedures: 05 |
| View | Code/Form-Auswahl, Prozedurauswahl, Included File/Lines, Diagnostics, Designer Menu Bar/Value-Fokus | Output Screen: 04; Grid Lines: 05; Next Statement: 06 |
| View | Code/Form-Auswahl, Prozedurauswahl, Included File/Lines, Diagnostics, Designer Menu Bar/Value-Fokus, Output Screen | Grid Lines: 05; Next Statement: 06 |
| Search | Find, Selected Text, Repeat Last Find, Change | — |
| Run | Set Start-up File und beide Make-Dialoge | Start/Restart/Continue/COMMAND$ und Startup-Ausführungswirkung: 04; native Erzeugung: Phase 6 |
| Run | Start/Restart/Continue/Pause, COMMAND$, wirksame Startdatei und beide Make-Dialoge | Native Erzeugung: Phase 6 |
| Debug | Vollständiges Menü und Kürzelzuordnung, einschließlich F7/F8/F9/F10 und History | Watches, Watchpoints, Trace, History, Breakpoints, Break on Errors, Set Next Statement: 06 |
| Options | Display, Set Paths, Right Mouse, Save, Syntax Checking einschließlich Zeilenprüfung | Kontext-Hilfe: 07 |
| Window | New Window, Arrange All, Calls/Debug/Help/Immediate/Output/Project, aktive Codeliste, alle Fensterkürzel | Output-Inhalt: 04; Debug/Calls/Immediate-Inhalte: 06; Hilfeinhalt: 07 |
| Window | New Window, Arrange All, Calls/Debug/Help/Immediate/Output/Project, aktive Codeliste, alle Fensterkürzel | Debug/Calls/Immediate-Inhalte: 06; Hilfeinhalt: 07 |
| Designer Tools/Window | Tools-Menü, Formliste und gemeinsamer Fenster-/Modusrahmen | Controls/Toolbox, Color Palette, Menu Design Window: 05 |
| Help | Vollständiges Menü, About und Help-Fensterrahmen | Index, Contents, Keyboard, Topic, Using Help, Tutorial: 07 |
Der Editor einschließlich inkrementeller Übersetzung ist umgesetzt. Die gesamte
Editor, inkrementelle Übersetzung und Ausführung sind umgesetzt. Die gesamte
Phase-5-Abnahme erfolgt in Change 08.
## Programme ausführen
Shift+F5/Run → Start kompiliert den aktuellen Projektstand einschließlich
ungespeicherter Dokumente und startet eine frische TBVM. F5/Continue startet
im Bearbeitungsmodus oder setzt eine Pause fort. Run → Pause und Ctrl+Break
unterbrechen auch bei Editorfokus; Ctrl+C unterbricht ausschließlich bei
Programmfokus. Die Statusmeldung nennt Quelldatei und Unterbrechungszeile.
STOP pausiert. END/SYSTEM beenden die Sitzung, erhalten die letzte Ausgabe
und lassen die IDE offen. Natürliches Modulende hält sichtbare Formulare
weiter bedienbar. Laufzeitfehler erscheinen als Diagnose
mit Fehlernummer und Zeile; Kompilierfehler verhindern einen neuen Lauf.
Nach Quelländerungen während einer Pause verlangt Continue eine Entscheidung:
aktuellen Stand neu starten oder das alte Kompilat ausdrücklich fortsetzen.
Die zweite Wahl kennzeichnet das Output-Fenster mit **ALTES KOMPILAT**.
Laufender Code wird nicht nachträglich ersetzt. Der Dialog Modify COMMAND$
setzt Argumente für den nächsten Start. Restart und BASIC RUN erzeugen eine
neue VM samt Variablen, DATA-Zeiger, Fehlerzustand, Forms, Timern und Dateien.
RUN mit Dateiname löst das Ziel relativ zum Ausführungsziel auf; fremde Ziele
ersetzen das bearbeitete IDE-Projekt nicht. RUN auf dasselbe Ziel verwendet
den aktuellen Editorstand. Fehlende Ziele erhalten die Dokumente.
Eine ausgewählte Startdatei läuft zuerst; die übrigen Modulrümpfe behalten
ihre relative Reihenfolge. Ein ausgewähltes FRM wird Startformular, ein
ausgewähltes BAS verhindert den automatischen Formularstart allein aufgrund
der Projektmitgliedschaft. Ohne Auswahl bleiben Projektreihenfolge und erstes
Startformular wie bisher. CLI und gespeichertes TBC verwenden denselben Vertrag.
Window → Output und F4 zeigen denselben TextScreen. Das kleine Fenster schneidet
die Ansicht ab, verändert aber weder BASIC-Farben noch logische Bildschirmgröße.
Nur ein echtes Terminal-Resize verändert den Laufzeitbildschirm. Auch während
INPUT, LINE INPUT, INPUT$, RANDOMIZE ohne Argument, SLEEP und modaler Dialoge
bleiben Umschalten und Pausieren möglich; Eingabeteile, Prompt, Fokus und
Deadline bleiben erhalten. Eine Pause friert die Hostuhr nicht ein: Eine
verstrichene SLEEP-Deadline wird nach Continue sofort erkannt.
File → Shell und BASIC SHELL geben Raw Mode, Maus-/Paste-Erfassung und
Alternativschirm an ein Vordergrund-Kindprogramm mit geerbtem Standard-I/O ab.
Nach Ende, Fehler oder Ctrl+C werden Terminal und bisheriger IDE-Fokus
wiederhergestellt. SHELL als Funktion liefert den Exit-Code (bei unterbrochenem
Kind ohne regulären Exit-Code wie bisher: 0); ein fehlgeschlagener Prozessstart wird
BASIC-Fehler 53. Die IDE führt während der Übergabe keine VM-Schritte aus.
File → Print ist eine Plattformanpassung: Der Dialog schreibt Auswahl oder
Gesamttext als UTF-8 in eine wählbare Druckdatei (Vorgabe `LPT1.TXT`). Er nutzt
dieselben geschützten, atomaren Dateipfade wie Save Text. Überschreiben muss
explizit gewählt werden; Projekt-/Quelldateien und originale Binärdateien sind
weiter geschützt. Fehler halten den Dialog offen und verändern den Quelltext
nicht. Ein Druckertreiber ist dafür nicht erforderlich.
Die VM gibt nach einem festen Instruktionsbudget oder bei ausstehender Eingabe
die Kontrolle zurück. Synchrone Betriebssystemoperationen wie Öffnen, Lesen,
Schreiben, Datenbank-I/O oder Dateiauswahl lassen sich innerhalb eines laufenden
Systemaufrufs nicht unterbrechen. Sie sind keine Eingabewarte-Schleifen; nach
Rückkehr gelten wieder die normalen Unterbrechungsgrenzen. Es gibt keinen
VM-Hintergrundthread und keine zweite Kopie des Programmbildschirms.
## Reproduzierbarer Testpfad
`cargo test -p tb-ide` prüft denselben `App::handle(Event)`-Dispatcher und
@@ -244,3 +301,9 @@ geöffnete Includes werden erneut vom Loader gelesen und verglichen. Start und
Fortsetzen der VM werden in Change 04 an diese Schnittstelle angebunden.
Release-Messungen und Aufruf stehen in [tbvm-design.md](tbvm-design.md).
Die Ausführungstests liegen in `crates/tb-ide/tests/execution.rs` und
`crates/tb-vm/tests/cooperative.rs`. Zusätzlich prüft
`cargo build -p tb-ide && python3 tests/support/ide-execution-pty.py` unter Unix
in einem unsichtbaren PTY die echten Shell-/Terminalübergaben und das Fortsetzen
nach STOP. Das Skript verwendet ausschließlich temporäre Projekte.

View File

@@ -27,7 +27,7 @@ Window Help**. `───` = Separator, `•` = Toggle-Markierung.
*(Designer-Modus: … ─ Menu Bar **F10** / Grid Lines)*
- **Search (Alt+S):** Find… / Selected Text **Ctrl+\\** / Repeat Last Find
**F3** / Change…
- **Run (Alt+R):** Start **Shift+F5** / Restart / Continue **F5** /
- **Run (Alt+R):** Start **Shift+F5** / Restart / Continue **F5** / Pause (Ctrl+Break) /
Modify COMMAND$… ─── Make EXE File… / Make Library… ─── Set Start-up File…
- **Debug (Alt+D):** Add Watch… / Instant Watch… **Shift+F9** / Watchpoint… /
Delete Watch… / Delete All Watch ─── •Trace On / •History On ───