Files
TerminalBasic/docs/ide-bedienung.md

30 KiB
Raw Blame History

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.

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 (015) 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. Ein umbenanntes TBC erfüllt keines der beiden Exportziele.

Befehlsabdeckung nach Change 07

Alle Referenzbefehle sind in ihrer Menüfolge vorhanden und angebunden. Nicht verfügbare Aktionen zeigen einen zustandsabhängigen Grund; 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
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 Breakpoints, Schritte, Calls, Watches/Watchpoints, Direktfenster, Trace/History, Break on Errors und Set Next Statement
Options Display, Set Paths, Right Mouse, Save, Syntax Checking einschließlich Zeilenprüfung
Window New Window, Arrange All, Calls/Debug/Help/Immediate/Output/Project, aktive Codeliste, alle Fensterkürzel
Designer Tools/Window Vollständige Toolbox einschließlich Spin, Formliste, Color Palette, Menu Design Window
Help Index, Contents, Keyboard, Topic, Using Help, Tutorial, About

Editor, inkrementelle Übersetzung, Ausführung, Formulardesigner, Debugger und Hilfe 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 03 setzt vier Lesezeichen je Ansicht; Ctrl+Q, dann 03 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.

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 F1F10 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.

Debugger und Direktfenster

F9 setzt oder entfernt eine Haltepunktmarke in der physischen Quelldatei. Für Includes zuerst View → Included File öffnen; die schreibgeschützte Gesamtansicht Included Lines ist kein eindeutiger Haltepunktort. Bei mehrfach verwendeten Includes gehört die Marke zum ausgewählten Projektmodul. am Fensterrand bezeichnet einen gebundenen Haltepunkt, eine inaktive Marke. Textänderungen führen die Marken mit; eine gelöschte Anweisung deaktiviert ihre Marke. Beim Start werden nur ausführbare Grenzen der neuen Kompilatrevision gebunden. Clear All Breakpoints entfernt alle. Ein Zeilenbreakpoint hält vor der ersten ausgeführten Anweisung der Zeile; mehrere durch Doppelpunkt getrennte Anweisungen können einzeln geschritten werden.

Aktion Taste / Menü Verhalten
Continue F5 Führt die angehaltene Anweisung einmal aus; ein späterer Schleifendurchlauf kann erneut halten.
Single Step F8 Nächste BASIC-Anweisungsgrenze, auch innerhalb eines Aufrufs.
Procedure Step F10 Nächste Anweisung im ursprünglichen Frame nach dem Aufruf, einschließlich Rekursion und GOSUB; Breakpoints und Fehlerhalte haben Vorrang.
Run to Cursor F7 Temporäres Laufziel; ein anderer Halt oder das Ende beendet den Cursorlauf.
Next Statement View → Next Statement Zeigt den tatsächlichen aktuellen Ausführungsort.
Calls Window → Calls Aufrufkette mit Prozedur und Quelldatei/-zeile. Maus oder Pfeile wählen einen Inspektionsrahmen; der aktive VM-Frame bleibt unverändert.

Add Watch, Instant Watch / Shift+F9 und Watchpoint nehmen einen BASIC-Ausdruck entgegen. Window → Debug zeigt Werte mit Typen und Diagnosen pro Eintrag. Delete Watch/Delete All Watch löschen Definitionen; das Debug-Fenster bearbeitet keinen Quelltext. Lokale Variablen, Arrays und UDT-Felder beziehen sich auf den in Calls gewählten erreichbaren Frame. Modul!Variable qualifiziert einen globalen Namen, beispielsweise Daten!satz.Preis oder Daten!preise(2). Arithmetik und Konvertierungen stammen aus demselben Frontend und Bytecode wie normale BASIC-Anweisungen.

Automatische Watches sind nebenwirkungsfrei: Literale, Operatoren, vorhandene Variablen, Array-/Feldzugriffe, String-/Mathematik-Intrinsics, FORMAT$, Arraygrenzen sowie ERR/ERL sind erlaubt. Benutzerprozeduren, RND, Eingabe-/Datei-/Uhrfunktionen und andere nicht als rein nachgewiesene Aufrufe liefern eine Diagnose. Ein noch nicht initialisiertes Array wird durch einen Watch nicht angelegt. Solche Aufrufe sind über das Direktfenster möglich. Watchpoints benötigen eine numerische BASIC-Bedingung und halten an der nächsten Anweisungsgrenze, an der sie wahr ist. Continue überspringt die aktuelle Prüfung einmal; bleibt die Bedingung wahr, kann die folgende Grenze erneut halten. Ein fehlerhafter Eintrag löst keinen Halt aus.

Window → Immediate öffnet das Direktfenster. Im Break-Modus führt Enter PRINT, Zuweisungen, Prozeduraufrufe und ERROR aus; Doppelpunkte verbinden mehrere Anweisungen. Vor der Ausführung wird das gesamte Kommando übersetzt. Syntax-/Typfehler verändern weder Variablen noch Fortsetzungspunkt. Erfolgreiche Kommandos kehren zur ursprünglichen Pause zurück. PRINT ist im Direktfenster und im gemeinsamen Programmbildschirm sichtbar. Zuweisungen, BYREF-Aufrufe und normale Laufzeitnebenwirkungen bleiben wirksam. Laufzeitfehler nutzen die bestehenden Handler und RESUME-Regeln; unbehandelte Direktfehler werden angezeigt, während die ursprüngliche Pause erhalten bleibt.

Run → Pause/Ctrl+Break unterbricht auch ein laufendes Direktkommando. Ein wartender Prozeduraufruf bleibt fortsetzbar; seine Programmeingaben werden über Window → Output zugestellt. F5 setzt zunächst das noch aktive Kommando fort; nach dessen Abschluss setzt ein weiteres F5 das ursprüngliche Programm fort. END/SYSTEM beenden die Sitzung, RUN startet über den normalen Sitzungsreset. Direktcode hat den Quellort <Immediate> und wird nie im Projekt gespeichert.

Trace On verfolgt die aktuelle Quellstelle. History On hält höchstens 1.024 tatsächlich begonnene Anweisungen; die ältesten Einträge fallen heraus. Shift+F8/Shift+F10 navigieren zurück/vorwärts. Die Meldung HISTORIE bezeichnet nur eine historische Quellstelle: Watchwerte gehören weiterhin zum aktuellen Halt. Variablen, Dateien, Uhr und andere Nebenwirkungen werden nicht zurückgesetzt. Ein Neustart verwirft Frameauswahl, Verlauf, Instant-Watch und alte Werte, erhält Watchdefinitionen und bindet Breakpoints neu.

Break on Errors hält nach der Handlerwahl und nötigem Stack-Unwinding vor der ersten Handleranweisung. Die Anzeige nennt Fehlernummer, Ursache und Handlerziel; Continue führt den Handler einmal aus. ERR/ERL und RESUME behalten ihren normalen Vertrag. Unbehandelte Programmfehler beenden die Sitzung mit Fehlerdiagnose; unbehandelte Direktfehler sind ausdrücklich als solche sichtbar.

Set Next Statement ist nur an einer freien Anweisungsgrenze im aktiven Frame zulässig. Das Ziel muss ausführbar sein und denselben Kontroll- und Schleifenkontext besitzen. Fremde Frames, Eintritt in Handler/GOSUB-Bereiche, aktive GOSUB-/Fehlerbehandlung, Warteoperationen und ein aktives Direktkommando werden mit Begründung abgewiesen. Die Prüfung erfolgt vor jeder Änderung. Ein erlaubter Sprung führt keine übersprungenen Anweisungen aus. Cursorziele setzen den unveränderten Quellstand der pausierten Sitzung voraus; nach Änderungen zuerst neu starten. F5 kann weiterhin nach ausdrücklicher Auswahl das gekennzeichnete alte Kompilat fortsetzen; seine Watches verwenden die ursprünglichen Symbole und Slots.

Offline-Hilfe

Help → Contents zeigt die eingebetteten Dokumente mit ihren Abschnitten, Help → Index dieselben Ziele alphabetisch. F1 öffnet den Kontext zum BASIC-Wort, zur Designerklasse/-eigenschaft oder zum markierten Menübefehl. Shift+F1 erklärt die Hilfebedienung; Tastatur und Tutorial beschreiben die implementierten Arbeitsabläufe.

Tab/Shift+Tab wählen Links, Enter folgt, Alt+F1 stellt bis zu 20 vorherige Lesepositionen wieder her. Ctrl+F1 folgt der Contents-Dateireihenfolge. Pfeile und Page Up/Down scrollen; links/rechts verschiebt breite Code- und Tabellenzeilen. Größenänderungen behalten Thema, Leseanker und Linkfokus. Esc kehrt zum vorherigen Fenster zurück. Die Hilfe braucht keinen Checkout und öffnet externe Links ausschließlich als sichtbaren Hinweis.