# Design — Formulardateien und Konvertierung ## Context Siehe proposal.md — Why. Ausgangslage: `docs/dateiformate.md` hält das Schema des Windows-Schwesterprodukts als Vorlage fest und markiert die exakte Serialisierung als offen. Die Formularbeschreibung, die gelesen und geschrieben wird, stammt aus `phase-4-objektmodell`; dieser Change fügt nur Ein- und Ausgabe hinzu. ## Goals / Non-Goals **Goals:** - Ein Format, das ein Mensch im Editor bearbeiten kann und das ein Werkzeug reproduzierbar schreibt. - Binäre Beispieldateien werden lesbar, ohne dass wir das Binärformat jemals schreiben. **Non-Goals:** - Binärkompatibilität in Schreibrichtung. - Verlustfreie Übernahme von Eigenschaften, die es bei uns nicht gibt (etwa reine Windows-Eigenschaften aus Version 2.00). ## Decisions ### D1 — Wir legen die Serialisierung fest und dokumentieren sie als Referenz Es gibt keine Originalfassung zum Nachbilden. Festgelegt wird das Sparsamste, das den Rundlauf trägt: ``` VERSION 1.00 Begin Form Form1 Caption = "Beispiel" Height = 15 Begin CommandButton cmdOK Caption = "&OK" End End ``` - Drei Leerzeichen Einrückung je Ebene, Eigenschaftsname auf 16 Spalten aufgefüllt, `=` mit zwei Leerzeichen davor und danach — die Optik des Vorlagenschemas. - Nur Eigenschaften, die vom Vorgabewert abweichen. Das hält Dateien klein und macht Vorgabewertänderungen sichtbar, statt sie in Altbeständen einzufrieren. - Reihenfolge: alphabetisch wie in der Forms-Referenz je Klasse, nicht die Einfügereihenfolge — sonst hängt die Datei von der Bedienung des Designers ab. ### D2 — Rundlauf ist die Prüfung, nicht der Vergleich mit einer Sollddatei Da das Format unsere Festlegung ist, prüft ein Vergleich gegen eine handgeschriebene Solldatei nur uns selbst. Aussagekräftig ist der Rundlauf: lesen, schreiben, byte-vergleichen — und zusätzlich schreiben, lesen, Beschreibung vergleichen. Beide Richtungen fangen verschiedene Fehler. ### D3 — Der Binärleser bleibt eigenständig und liest nur Das Reverse Engineering erschließt den Aufbau aus den Beispieldateien. Der Leser übersetzt in dieselbe Formularbeschreibung wie der Textleser und teilt sich mit ihm die Prüfungen. Was er nicht erkennt, bricht ab — eine „beste Vermutung" hinterließe ein Formular, das anders aussieht als das Original, ohne dass jemand es merkt. Unbekannte Eigenschaften aus dem Windows-Erbe werden beim Konvertieren namentlich gemeldet und übersprungen; die Zusammenfassung nennt sie am Ende, damit sie nicht in der Ausgabeflut untergehen. ## Risks / Trade-offs - **Das Binärformat ist nur teilweise erschließbar** → der Befehl bricht ab, statt zu raten; die dokumentierte Fundstelle sagt, wo es endete. - **„Nur Abweichungen schreiben" verliert Werte, wenn sich ein Vorgabewert ändert** → die Vorgabewerte stehen im Inventar und in der Forms-Referenz; eine Änderung dort ist ein bewusster Vorgang. - **Version 2.00 kennt Eigenschaften, die wir nicht haben** → beim Lesen namentlich gemeldet und übersprungen, nicht als Fehler behandelt. ## Open Questions - Ob eine Formulardatei mehrere Formulare enthalten darf, klärt sich mit der Projektverwaltung (`.MAK`, Phase 5); bis dahin gilt: ein Formular je Datei.