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