387 lines
24 KiB
Markdown
387 lines
24 KiB
Markdown
# Terminal Basic IDE bedienen
|
||
|
||
`cargo run -p tb-ide -- [Projekt.mak|Modul.bas|Formular.frm]` startet die IDE.
|
||
Ohne Datei erscheint ein neues Projekt mit `[1] Untitled` und dem Project
|
||
Window rechts. Versions- und Copyright-Begrüßung blockieren keine Eingabe.
|
||
Bei bereits vorhandener `Untitled.bas` bekommt das neue Dokument einen
|
||
freien Namen. Es wird beim Start keine Datei angelegt.
|
||
|
||
Das Terminal muss mindestens 80×25 Zellen haben. Darunter erscheint nur
|
||
der Größenhinweis; Dokumente, Fokus und Fensterzustand bleiben erhalten.
|
||
Beim Vergrößern werden die Fenster wieder innerhalb der Terminalfläche
|
||
dargestellt. Normales Beenden und Fehlerpfade stellen Raw Mode, Cursor,
|
||
Mausmodus und Alternate Screen zurück.
|
||
|
||
## Menüs, Fenster und Dialoge
|
||
|
||
- Alt plus Menübuchstabe oder F11 öffnet die Menüleiste. Pfeile wählen
|
||
Menü/Eintrag, Enter führt aus; der unterstrichene Buchstabe wählt direkt.
|
||
Esc bricht ab. F11 ist die Alternative, wenn das Terminal Alt allein
|
||
nicht meldet. Menüs sind auch anklickbar, Help steht rechts.
|
||
- File enthält Projekt- und Dateiaktionen einschließlich New Form,
|
||
New Module, Add/Remove File, Save File/As, Load/Save Text und Exit.
|
||
Run → Set Start-up File speichert eine Auswahl oder den bisherigen Standard.
|
||
- Dialoge binden Tastatur und Maus an sich. Tab/Shift+Tab wechselt das Feld,
|
||
Links/Rechts ändert Auswahlwerte, Leertaste schaltet Kästchen. Textfelder
|
||
unterstützen Cursor, Pos1/Ende, Backspace/Entf und Ctrl+A zum Ersetzen.
|
||
Enter/OK übernimmt, Esc/Abbrechen verwirft den Dialog.
|
||
- F2 in einem Dateipfad öffnet die Dateiauswahl. Links/Rechts wählt einen
|
||
Eintrag, Enter öffnet ein Verzeichnis oder übernimmt eine Datei. Esc
|
||
kehrt zum vorherigen Dialog mit dessen Angaben zurück. Neue Dateinamen
|
||
lassen sich direkt ins Pfadfeld schreiben.
|
||
- F6/Ctrl+F6 bzw. Shift+F6 wechselt Fenster. Ctrl+F4 schließt eine Ansicht;
|
||
Dokument und Änderungen bleiben im Projektmodell erhalten. Alt+Minus
|
||
oder die Control-Menü-Box öffnet die Fensterbefehle.
|
||
- Ctrl+F7 verschiebt und Ctrl+F8 skaliert mit Pfeilen (Ctrl+Pfeile: fünf
|
||
Zellen); Enter bestätigt, Esc stellt die vorige Geometrie wieder her.
|
||
Ctrl+F9 minimiert, Ctrl+F10 maximiert, Ctrl+F5 stellt die Normalgeometrie
|
||
wieder her. Window → Arrange All kachelt, New Window öffnet eine weitere
|
||
Ansicht desselben Dokuments. Die Window-Liste markiert die aktive Ansicht.
|
||
- Im Project Window wählen Pfeile das Mitglied; Enter öffnet Code oder
|
||
Formular entsprechend dem Dateityp. Form/Code-Buttons öffnen die gewählte
|
||
Ansicht. View → Code/Form bietet zusätzlich einen Auswahldialog.
|
||
- Die Umgebung zeigt unten anklickbare Tastenkürzel und `00001:001` als
|
||
Zeile/Spalte. Der Designer besitzt stattdessen die Properties Bar.
|
||
F10 wechselt dort zwischen Menü- und Properties Bar, F2 fokussiert Value.
|
||
Die Formularbearbeitung ist unten beschrieben.
|
||
|
||
## Speichern und Wechseln
|
||
|
||
Save File nutzt den bestehenden Pfad; neue Dateien, Importziele und
|
||
Speicherkonflikte öffnen den Speicherdialog. Save Project zeigt Projektziel
|
||
und Dokumentziele mit separaten Überschreibentscheidungen. Eine Änderung
|
||
eines Pfades allein autorisiert kein Überschreiben einer vorhandenen Datei.
|
||
Binäre FRM-Originale bleiben auch mit gesetzter Überschreibentscheidung
|
||
geschützt; für bearbeitete Importe ist ein anderes Textziel erforderlich.
|
||
|
||
Beim Projektwechsel und Beenden stehen Abbrechen, Speichern und Verwerfen
|
||
zur Auswahl. Abbrechen ist vorausgewählt. Bei einem Teilspeicherfehler
|
||
bleibt der Dialog mit allen Angaben offen: erfolgreich gespeicherte Dateien
|
||
sind gespeichert, übrige Änderungen bleiben erhalten; die IDE schließt
|
||
nicht. Die MAK-Datei wird zuletzt geschrieben. Details stehen in
|
||
[Dateiformate](dateiformate.md#bearbeitete-dokumente-und-speichern).
|
||
|
||
Load Text fügt am Cursor als eine Undo-Aktion ein; Save Text exportiert im
|
||
Rahmen den gesamten Code. Der Dokumentvertrag unterstützt bereits
|
||
Auswahlexport des markierten Bereichs. Remove
|
||
File löscht keine Datei; beim Entfernen der Startdatei ist die Wahl eines
|
||
Ersatzes oder des bisherigen Standards ausdrücklich im Dialog enthalten.
|
||
|
||
## Display und Benutzereinstellungen
|
||
|
||
Options → Display bietet Vorder- und Hintergrund (0–15) für Menü, Desktop,
|
||
Code, aktiven Titel, Rahmen, Dialog/Projekt und Status. Default ist Schwarz
|
||
auf Hellgrau für Menüs/Dialogs, Hellgrau auf Blau für Code, Weiß auf Magenta
|
||
für aktive Titel und Schwarz auf Cyan für den Status. Desktop: `▒`,
|
||
Hellgrau auf Schwarz; Tabweite: 8. Ein Desktopzeichen muss genau eine
|
||
Terminalzelle belegen, Tabweite liegt zwischen 1 und 32. Änderungen gelten
|
||
sofort für die IDE; BASIC-Laufzeitfarben bleiben unabhängig.
|
||
|
||
Set Paths verwaltet Quellen-, Ausgabe- und Include-Verzeichnisse. Mehrere
|
||
Includes werden mit `|` getrennt; relative Optionspfade werden beim
|
||
Übernehmen relativ zum Projektverzeichnis absolut aufgelöst. Das Include
|
||
neben der Quelldatei hat Vorrang vor Suchverzeichnissen. Right Mouse
|
||
schaltet Kontext-Hilfe per Rechtsklick (Default an); die Hilfefunktion
|
||
folgt in Change 07. Syntax Checking ist zunächst an; seine Wirkung ist unten beschrieben.
|
||
|
||
Erst Options → Save… / OK schreibt die versionierte Benutzerdatei:
|
||
|
||
| System | Pfad |
|
||
| --- | --- |
|
||
| Unix mit absolutem XDG_CONFIG_HOME | `$XDG_CONFIG_HOME/TerminalBasic/options.ini` |
|
||
| macOS ohne XDG_CONFIG_HOME | `$HOME/Library/Application Support/TerminalBasic/options.ini` |
|
||
| anderes Unix ohne XDG_CONFIG_HOME | `$HOME/.config/TerminalBasic/options.ini` |
|
||
| Windows | `%APPDATA%/TerminalBasic/options.ini` |
|
||
|
||
Die Datei ist unabhängig vom Arbeitsverzeichnis. Ungültige Werte erhalten
|
||
eine Diagnose und behalten die Vorgabe; unbekannte Schlüssel werden mit
|
||
Hinweis ignoriert. Unbekannte Versionen/ungültige Textkodierung verwenden
|
||
Defaults. Schreibfehler erhalten die aktuellen, ungespeicherten Optionen.
|
||
Externe Änderungen der Optionsdatei werden vor dem Ersetzen erkannt.
|
||
|
||
## Native Exporte: UI in Phase 5, Erzeugung in Phase 6
|
||
|
||
Run → Make EXE File… (Alt+R, E) und Make Library… (Alt+R, L) öffnen
|
||
vollständig bedienbare Dialoge. Artefaktart ist das native eigenständige
|
||
Executable bzw. die native Systembibliothek. Zielsystem (Linux/macOS/Windows)
|
||
und Architektur (x86_64/aarch64) sind auswählbar; Vorgabe ist das laufende
|
||
Zielsystem. Ausgabepfad und Überschreibentscheidung werden je Auftrag
|
||
erfasst. Die Auswahl ist noch keine Zusage einer vom Backend unterstützten
|
||
Kombination; die Phase-6-Plattformmatrix bestätigt die tatsächlichen Ziele.
|
||
|
||
Prüfen/Enter validiert die Angaben und schützt Projektdatei, geöffnete
|
||
Dokumente und binäre FRM-Originale. Leere/ungültige Pfade, fehlende
|
||
Zielverzeichnisse, bestehende Ziele ohne Zustimmung und `.tbc` als natives
|
||
Ziel ergeben eine Diagnose; die anderen Angaben bleiben erhalten.
|
||
|
||
Nur **Erzeugen** ist bis Phase 6 gesperrt, mit dem Hinweis „Native
|
||
Erzeugung folgt in Phase 6“. Ein Produktionsaufruf schreibt keine Datei
|
||
und meldet keinen erfundenen Erfolg. Der vorbereitete Auftrag trägt
|
||
Projektidentität und Revisionsstand, Artefakt, Zielsystem, Architektur,
|
||
Pfad und Überschreibentscheidung. Die UI kann zu diesem Auftrag Laufend,
|
||
Erfolg, Fehler und Abbruch darstellen. Oberflächentests speisen diese
|
||
Ergebnisse kontrolliert ein; sie belegen keine native Erzeugung.
|
||
|
||
Die tatsächliche Erzeugung und reale Backend-Anbindung, native Formate,
|
||
Library-Symbole/Aufrufvertrag und der native Verbraucher-Nachweis stehen
|
||
explizit in [PLAN.md, Phase 6](../PLAN.md). Ein umbenanntes TBC erfüllt
|
||
keines der beiden Exportziele.
|
||
|
||
## Befehlsabdeckung nach Change 05
|
||
|
||
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 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, Print (UTF-8-Datei), Shell, Exit | — |
|
||
| Edit | Undo, Cut/Copy/Paste/Clear, New Sub/Function, Event Procedures | — |
|
||
| View | Code/Form-Auswahl, Prozedurauswahl, Included File/Lines, Diagnostics, Designer Menu Bar/Value-Fokus, Grid Lines, Output Screen | Next Statement: 06 |
|
||
| Search | Find, Selected Text, Repeat Last Find, Change | — |
|
||
| 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 | Debug/Calls/Immediate-Inhalte: 06; Hilfeinhalt: 07 |
|
||
| Designer Tools/Window | Vollständige Toolbox einschließlich Spin, Formliste, Color Palette, Menu Design Window | — |
|
||
| Help | Vollständiges Menü, About und Help-Fensterrahmen | Index, Contents, Keyboard, Topic, Using Help, Tutorial: 07 |
|
||
|
||
Editor, inkrementelle Übersetzung, Ausführung und Formulardesigner 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
|
||
dieselbe `App::render`-Funktion wie der Terminalprozess mit
|
||
`ratatui::TestBackend`. Die Tests bedienen Menü, Tastatur, Dialog und Maus;
|
||
sie prüfen Fokus, Dokumente, Fenster, sichtbare Texte und Farben. Dieser
|
||
Pfad steht den Folgechanges zur Verfügung. `TerminalGuard` prüft zusätzlich
|
||
Normalende, Fehlerende und teilweise fehlgeschlagene Initialisierung.
|
||
|
||
## Editor, Suche und Quelltextpflege
|
||
|
||
Einfügen/Überschreiben wechselt mit Insert. Shift mit Pfeilen, Pos1/Ende und
|
||
Bild auf/ab markiert Text; Ctrl+A markiert alles. Ctrl+Links/Rechts navigiert
|
||
wortweise, Ctrl+Pos1/Ende zum Dateianfang/-ende. Ctrl+Y löscht die aktuelle
|
||
Zeile. Unicode-Codepunkte und CRLF-Zeilenumbrüche bleiben unbeschädigt;
|
||
Tabs und breite Zeichen verwenden Bildschirmspalten für die Vertikalbewegung.
|
||
Markierungen werden invertiert dargestellt, der Cursor bleibt im sichtbaren Bereich.
|
||
|
||
Ctrl+C/X/V/Z sowie Ctrl+Insert, Shift+Delete/Insert und Alt+Backspace bedienen
|
||
Kopieren, Ausschneiden, Einfügen und Undo. Die Zwischenablage ist IDE-intern und
|
||
funktioniert zwischen Codefenstern. Terminal-Paste wird mit Bracketed Paste als
|
||
eine Aktion verarbeitet. Paste, Ausschneiden, Ersetzen aller Treffer,
|
||
Normalisierung und Prozedurerzeugung sind jeweils eine Undo-Einheit. Undo
|
||
stellt auch Cursor, Markierungen und Lesezeichen der gemeinsamen Ansichten her.
|
||
|
||
WordStar: Ctrl+Q, dann S/D setzt den Zeilenanfang/-ende, R/C den
|
||
Dateianfang/-ende. Ctrl+K, dann 0–3 setzt vier Lesezeichen je Ansicht;
|
||
Ctrl+Q, dann 0–3 springt dorthin. Esc oder eine unbekannte Folgetaste bricht
|
||
ab, ohne Quelltext einzufügen. Mausaktionen beenden einen begonnenen Chord.
|
||
|
||
Find und Change bieten Suchtext, Ersetzung, Richtung, Groß-/Kleinschreibung,
|
||
ganze Wörter und den Bereich „Dokument“ oder „Nur Auswahl“. Das Aktionsfeld
|
||
wählt Suchen, Einzeln ersetzen oder Alle ersetzen. Eine leere Ersetzung löscht
|
||
Treffer. Ctrl+Backslash übernimmt die Auswahl als Suchtext, F3 sucht weiter.
|
||
Am Bereichsende zeigt die Statusmeldung den angebotenen Rücksprung an;
|
||
erneutes F3 bestätigt ihn. Alle Treffer einer Ersetzungsaktion werden gemeinsam
|
||
rückgängig gemacht.
|
||
|
||
Shift+F2 beziehungsweise View → Procedures öffnet Modulrumpf und Prozeduren;
|
||
Ctrl+F2 kehrt zur vorherigen Codeposition zurück. New Sub/Function prüft Namen
|
||
auch gegen andere Projektmodule und übernimmt die am Erzeugungsort wirksamen
|
||
DEFtype-Regeln, einschließlich Includes und des aktuellen Prozedurkontexts.
|
||
|
||
View → Included File öffnet das Original der Include-Anweisung auf der
|
||
Cursorzeile. Included Lines zeigt die expandierte Übersetzungseinheit mit
|
||
Dateinamen und physischen Zeilen als schreibgeschützte Ansicht. Pfeile und
|
||
Bild auf/ab scrollen; erneuter Aufruf kehrt zum Quelltext zurück. Save File
|
||
speichert immer das physische Dokument. Eine Expansion wird niemals zur BAS-Datei.
|
||
View → Diagnostics ist eine ergänzende IDE-Funktion: Die Auswahl springt zur
|
||
richtigen physischen Datei, Zeile und Spalte, auch bei Includes und FRM-Code.
|
||
|
||
Syntax Checking prüft beim Verlassen einer geänderten Zeile. Der reguläre
|
||
Parser unterscheidet fehlende Blockabschlüsse am Dateiende von Syntaxfehlern.
|
||
Unvollständige Blöcke bleiben ohne modalen Fehlerdialog bearbeitbar. Gültige
|
||
Zeilen erhalten normalisierte Keywords und zulässige Abstände anhand der
|
||
Lexerpositionen; Tokenvergleich schützt Strings, Kommentare, DATA und Bezeichner.
|
||
Abschalten unterbindet automatische Prüfung, Formatierung und Fehlerdialoge.
|
||
Die explizite Übersetzungs-API prüft unabhängig davon den vollständigen Stand.
|
||
|
||
Save File/As und Save Project pflegen DECLAREs im kommentierten Bereich
|
||
`' $IDE DECLARE BEGIN` bis `' $IDE DECLARE END` unmittelbar vor den Prozeduren.
|
||
Die Prüfung nutzt den regulären Projektcompiler mit Includes und Forms. Passende
|
||
Handdeklarationen bleiben erhalten. Bei Konflikten oder unfertigem/fehlerhaftem
|
||
Projektstand wird die gesamte Pflege übersprungen, der Entwurf unverändert
|
||
gespeichert und der Grund mit Quellort ausgegeben. Auch FRM-Code benutzt diesen
|
||
Speicherhook. Wiederholtes Speichern erzeugt keine neuen Deklarationen oder Revisionen.
|
||
|
||
## Übersetzung und Revisionsbindung
|
||
|
||
`App::compile_current` lädt den aktuellen Projektstand und verwendet
|
||
`tb_vm::project::ProjectCompiler`. `CompileStats` zählt geparste, übersetzte und
|
||
wiederverwendete Module. Der Cache liegt nur im Speicher. Sein Verlust führt
|
||
zur vollständigen Neuübersetzung, ohne das Dateiformat zu ändern.
|
||
|
||
Die Schlüssel vergleichen Include-Inhalte und Herkunft, Modulidentität,
|
||
aufgelöste Importverträge und den Forms-Katalog. Private Rumpfänderungen lassen
|
||
andere Modulprodukte bestehen. Konstante Importwerte werden transitiv neu
|
||
aufgelöst; unbenutzte importierte Konstanten invalidieren keine unabhängigen
|
||
Module. Importierte TYPEs und Prozeduren gehören zu den unverketteten Tabellen
|
||
und damit zum Modulvertrag. Eigene Quellorte bleiben Bestandteil des Schlüssels;
|
||
verschobene fremde Prozedurzeilen sind keine Signaturänderung. Änderungen an
|
||
Quelltabellen oder Modulreihenfolge werden konservativ neu geparst. Der bestehende
|
||
Linker baut sämtliche globalen Tabellen aus unverknüpften Produkten neu auf und
|
||
prüft COMMON-Kompatibilität. Forms-Anfangswerte werden beim Link frisch eingesetzt.
|
||
|
||
Erfolge und Diagnosen gehören zu Projektrevision, expandierten Quellen und Forms.
|
||
`current_compilation` und `current_diagnostics` geben nur einen dazu passenden
|
||
Stand zurück; ein Fehler macht keinen früheren Erfolg aktuell. Geöffnete
|
||
Include-Puffer bleiben maßgeblich gegenüber externen Dateiänderungen. Noch nicht
|
||
geöffnete Includes werden erneut vom Loader gelesen und verglichen. Start und
|
||
Fortsetzen der VM verwenden diese Schnittstelle.
|
||
|
||
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.
|
||
|
||
|
||
## Formulare gestalten
|
||
|
||
File → New Form öffnet ein neues FRM-Dokument mit 40×15 Zellen. Toolbox
|
||
links und Tools-Menü verwenden dieselben Klassenmetadaten: auch Datei-,
|
||
Verzeichnis- und Laufwerkslisten, Timer sowie VSpin/HSpin sind enthalten.
|
||
Doppelklick auf einen Toolboxeintrag platziert einen gültigen Standard im
|
||
gewählten Container (sonst auf der Form); mit Tastatur: Window → Toolbox,
|
||
Pfeile, Enter. Ein einfacher Klick oder Tools wählt das Werkzeug zum
|
||
Aufziehen auf der Designfläche. Esc beendet die Werkzeugwahl.
|
||
|
||
Die Vorschau verwendet FormsModel und TextScreen, führt aber keinen
|
||
Ereigniscode und keine Timer aus. Timer erscheinen als `[T]`-Marken.
|
||
Klicken wählt auch deaktivierte/unsichtbare Controls aus, Ctrl+Klick bildet
|
||
Mehrfachauswahlen. Tab/Shift+Tab folgt TabIndex. Drag verschiebt, die acht
|
||
Handles skalieren. Pfeile bewegen um eine, Ctrl+Pfeile um fünf Zellen;
|
||
Shift+Pfeile ändern die Größe (mit Ctrl ebenfalls fünf). View → Grid Lines
|
||
schaltet das Raster. Koordinaten sind relativ zum tatsächlichen Container.
|
||
Unzulässige Größen/Positionen werden vor der gesamten Änderung abgewiesen.
|
||
|
||
Oben wechseln F10 und F11 zwischen Properties Bar und Menü. Klicken auf
|
||
die Property-Auswahl öffnet die Klassenproperties; Bild auf/ab blättert
|
||
sie auf der Designfläche. F2 fokussiert Value, Ctrl+A ersetzt den Wert,
|
||
Enter übernimmt und Esc verwirft die Eingabe. Der rechte Bereich zeigt
|
||
Position und Größe auch bei langen Namen/Werten. Boolean-Werte sind
|
||
`true`/`false` beziehungsweise `-1`/`0`. Typen, Metadatenbereiche und
|
||
Laufzeitregeln werden geprüft; schreibgeschützte Properties bleiben erhalten.
|
||
Spin.Style wählt 0 (vertikal, 1×2) oder 1 (horizontal, 2×1); Width/Height
|
||
sind bei Spin schreibgeschützt. Explizites Index=0 erzeugt ein Control-Array.
|
||
|
||
Cut/Copy/Paste/Clear und Undo wirken im Designer auf Controls; die
|
||
Textzwischenablage des Editors bleibt getrennt. Container nehmen ihre
|
||
Kinder mit. Paste verlangt einen Container und vergibt freie Namen,
|
||
wobei die Arraygruppen und expliziten Indizes erhalten bleiben. Eine
|
||
Mehrfachaktion ist genau eine Undo-Einheit. Nach Clear/Cut weist ein Dialog
|
||
auf erhaltenen, nun ungebundenen Code hin. Code wird nicht gelöscht.
|
||
|
||
CtlName/FormName ändern auch gebundene Codeverweise und Ereignisnamen
|
||
in betroffenen Projektdateien und Includes. Kommentare, Strings und
|
||
unabhängige Variablen bleiben erhalten. Beide Projektstände werden
|
||
übersetzt und ihre Objektbindungen verglichen. Konflikte oder mehrdeutige
|
||
Include-Verweise verhindern die gesamte Änderung. Undo aus einer beteiligten
|
||
Datei nimmt sie überall zurück; spätere Änderungen in einer anderen
|
||
beteiligten Datei müssen zuerst rückgängig gemacht werden.
|
||
|
||
Window → Menu Design Window zeigt die Menühierarchie. `+`/Insert fügt unter
|
||
dem gewählten Menü (sonst unter der Form) ein, Del löscht, Enter/Edit öffnet
|
||
Caption, CtlName, Tag, Index, Flags und Shortcut. `&` markiert Access-Keys,
|
||
`-` einen Separator. Leerer Index bedeutet skalar; `0` ist ein Arrayindex.
|
||
Die Pfeilbuttons beziehungsweise Ctrl+Links/Rechts ändern die Ebene,
|
||
Ctrl+Auf/Ab die Reihenfolge. Änderungen des Dialogs sind gemeinsam rücknehmbar.
|
||
Angeboten werden F1–F10 mit unterstützten Modifikatoren sowie Ctrl+Buchstaben
|
||
außer Ctrl+C, das dem Programmabbruch vorbehalten bleibt. Unbekannte Importwerte
|
||
werden nicht als gültige Shortcuts angeboten; Menütitel und Separatoren tragen
|
||
keinen Shortcut.
|
||
|
||
Window → Color Palette bietet getrennte ForeColor-/BackColor-Zeilen. Eine
|
||
Farbfläche auf Form/Control ziehen trägt diese Farbe auf. Enter öffnet
|
||
zusätzlich den Dialog zum gemeinsamen Auftragen beider Farben auf die
|
||
Auswahl oder ausdrücklich die Form. Window bietet außerdem Toolbox, Help
|
||
und die Formliste; der Help-Inhalt folgt in Change 07.
|
||
|
||
F12/Edit → Event Procedures wählt Objekt und erlaubtes Ereignis. Eine
|
||
vorhandene gebundene Prozedur wird geöffnet; sonst entsteht ein New-Sub-Rumpf
|
||
mit den bestehenden Eventtypen, BYREF-Parametern und gegebenenfalls führendem
|
||
`Index AS INTEGER`. DEFtype aus Includes bleibt wirksam. Zweiter Aufruf
|
||
öffnet dieselbe Prozedur. Shift+F12/View → Form führt zum zugehörigen
|
||
Dokument und Control zurück; View → Code behält die Codeposition. Struktur
|
||
und Code bleiben dabei ungespeichert im gemeinsamen Dokument.
|
||
|
||
Save File/As/Project verwendet den vorhandenen FRM-Writer. Dieser lässt
|
||
überflüssige Defaultwerte aus, erhält aber explizites Index=0. Binärimporte
|
||
benötigen weiter ein separates Textziel. Die Designer-Tests prüfen alle
|
||
Klassen, Geometrie, Properties, Maus/Tastatur, Transaktionen, Ereignisse und
|
||
Speicher-Roundtrips. Der CLI-Integrationstest erzeugt eine FRM über dieselben
|
||
Designeraktionen und übersetzt sie mit dem echten `tbc build`-Prozess.
|