Phase 5: Projekt- und Dokumentmodell implementieren und archivieren
This commit is contained in:
@@ -135,6 +135,74 @@ akzeptiert zusätzlich Kommentarzeilen mit `'`. `tbc check`, `build` und
|
||||
DOS-Großschreibung auf; Formularobjekte aller `.FRM`-Einträge stehen dem
|
||||
gemeinsamen Modulverbund zur Verfügung.
|
||||
|
||||
Optional speichert das Projekt eine ausdrücklich gewählte Startdatei in
|
||||
einem Metakommentar (Terminal-Basic-Erweiterung):
|
||||
|
||||
```mak
|
||||
' Beispielprojekt
|
||||
' $STARTUP: "main.bas"
|
||||
main.bas
|
||||
lib.bas
|
||||
form.frm
|
||||
```
|
||||
|
||||
Der Wert muss genau ein vorhandenes BAS-/FRM-Mitglied bezeichnen. Doppelte,
|
||||
leere, fehlerhafte oder auf Nichtmitglieder gerichtete Angaben werden mit
|
||||
Dateipfad diagnostiziert. Ohne Metakommentar bleiben die bisherige
|
||||
Modulreihenfolge und Startformularwahl erhalten. Der gemeinsame Lader
|
||||
erhält die Auswahl als `ProjectSources.manifest.startup`; ihre zusätzliche
|
||||
Ausführungswirkung gehört zum Phase-5-Change 04. Ältere Leser ignorieren
|
||||
diese Kommentarzeile. Mitgliedsreihenfolge, Leerzeilen und gewöhnliche
|
||||
Kommentare bleiben beim Speichern erhalten; der Startup-Kommentar wird
|
||||
kanonisch vorangestellt.
|
||||
|
||||
### Bearbeitete Dokumente und Speichern
|
||||
|
||||
`tb_vm::project_io::SourceLoader` ist der gemeinsame BAS-/FRM-/MAK- und
|
||||
Include-Lader von CLI und IDE-Modell. Bearbeitete Dokumente überlagern ihren
|
||||
Plattenstand; Includes behalten ihre physische Datei, Zeile und den
|
||||
jeweiligen Modulkontext. Relative Includes gewinnen vor optionalen
|
||||
Include-Suchverzeichnissen. Dateialiasse werden für die Dokumentverwaltung
|
||||
auf eine gemeinsame absolute Identität aufgelöst; noch ungespeicherte
|
||||
Dokumente haben ebenfalls einen stabilen Quellpfad, aber keinen Speicherpfad.
|
||||
|
||||
`tb_ide::documents::Project` stellt Projekt-, Datei-, Textimport-/Export-,
|
||||
Undo- und Schließaktionen als direkt testbare API bereit. Ansichten haben
|
||||
eigene Cursor-/Scrollpositionen und teilen den Dokumentinhalt. Ein
|
||||
Formulardokument enthält den vorhandenen `FormFile` einschließlich Code;
|
||||
Importwarnungen bleiben über `Document::import_warnings` abrufbar. Die
|
||||
Terminaldialoge werden in Change 02 daran angebunden.
|
||||
|
||||
Save File und Save As schreiben zunächst eine temporäre Datei im
|
||||
Zielverzeichnis und ersetzen das Ziel erst nach erfolgreichem Schreiben.
|
||||
Externe Änderungen und bestehende neue Ziele erfordern eine ausdrückliche
|
||||
Überschreibentscheidung für die jeweilige Datei. Schreibschutz und binäre
|
||||
FRM-Originale bleiben geschützt. Binärimporte benötigen für Save File ein
|
||||
anderes, ausdrücklich gewähltes FRM-Textziel. Ein Dateiexport verändert
|
||||
weder Projektmitgliedschaft noch Dokumentpfad.
|
||||
|
||||
Save Project speichert geänderte Mitglieder und geöffnete geänderte
|
||||
Include-/Textdokumente vor der MAK-Datei. Es gibt keine atomare Transaktion
|
||||
über mehrere Dateien: Bei einem Teilfehler bleiben bereits erfolgreich
|
||||
gespeicherte Dokumente gespeichert, die übrigen geändert und offen. Ein
|
||||
Schließ-/Projektwechsel wird dann nicht als erfolgreich gemeldet. Die
|
||||
Konfliktprüfung wird unmittelbar vor dem Ersetzen wiederholt; sie ist ein
|
||||
optimistischer Abgleich und keine Sperre für fremde Editoren.
|
||||
|
||||
Projekt-Save-As berechnet die Mitgliedsverweise relativ zum neuen
|
||||
Projektverzeichnis. Save As eines Moduls oder Formulars in ein anderes
|
||||
Verzeichnis passt dessen relative Includes so an, dass sie dieselben
|
||||
Dateien erreichen; unveränderte Originaldateien bleiben erhalten. Die
|
||||
aktive Datei-/Projektidentität wechselt erst nach erfolgreicher Ausgabe.
|
||||
Remove File entfernt nur die Mitgliedschaft; Dateien, geöffnete Ansichten
|
||||
und ungespeicherter Code bleiben erhalten. Für die aktuelle Startdatei
|
||||
muss ausdrücklich Ersatz, Standard oder Abbrechen gewählt werden.
|
||||
|
||||
Load Text fügt UTF-8-Text am Cursor als eine rückgängig machbare Aktion ein.
|
||||
Save Text exportiert Auswahl oder gesamten Code. Zum Überschreiben eines
|
||||
geöffneten Dokuments wird Save File verwendet, damit Dokumentstand und
|
||||
Formularstruktur nicht durch einen reinen Textexport auseinanderlaufen.
|
||||
|
||||
## Record-Dateien (`GET`/`PUT`, `OPEN … FOR RANDOM`)
|
||||
|
||||
Feste Strings (`STRING * n`) in Records werden als **UTF-32LE** gespeichert
|
||||
|
||||
Reference in New Issue
Block a user