Die historische MicroCalc-Beispielanwendung (CALC.PAS, CALC.INC, CALC.HLP) wird als moderne, wartbare C#-Anwendung auf Basis von .NET 10 neu umgesetzt.
Zielzustand:
- Laufzeit: .NET 10 (Preview/RTM je nach Verfuegbarkeit).
- UI: Text User Interface mit Terminal.Gui.
- Verhalten: moeglichst nahe am Original (147 Zellen, Formeln, Navigation, Datei laden/speichern, Drucken in Datei, Formatierung, Hilfe).
- Hilfe: integriertes, seitenbasiertes Hilfesystem analog
CALC.HLP. - Qualitaet: Tests fuer Parser/Evaluator, Core-Modelle und Use-Cases.
- DevOps: Git-Versionierung, GitHub-Repository, CI fuer Build/Test.
Kernpunkte:
- Definiert das Spreadsheet-Raster:
- Spalten
A..G(FXMax = 'G') - Zeilen
1..21(FYMax = 21) - Insgesamt 147 Zellen.
- Spalten
- Zellmodell (
CellRec):CellStatus(Attribute wieConstant,Formula,Txt,OverWritten,Locked,Calculated)Contents(max. 70 Zeichen)Value(Real)DEC,FW(Formatierung: Dezimalstellen/Feldbreite)
- Eventloop mit Tastatursteuerung:
- Navigation (Ctrl-/Arrow-Mapping)
/fuer Kommando-MenueESCoder druckbare Eingabe fuer Zellenbearbeitung.
Rueckschluss fuer Migration:
- Das Original trennt bereits Datenmodell, UI-Interaktion und Berechnungslogik in Module. Diese Trennung wird in C# sauber in Schichten ueberfuehrt.
Enthaelt funktional fast die komplette Anwendung:
- Modul 000: Utilities/UI-Helfer
- Welcome, Statusmeldungen, Blinken, Key-Mapping (IBM-Scancodes), AutoCalc Toggle.
- Modul 001: Grid/Init/Clear
- Initialisierung aller Zellen, Zeichnen des Grids, Loeschen des Sheets.
- Modul 002: Navigation/Anzeige
- Aktive Zelle, Zelltypanzeige, Bewegung links/rechts/oben/unten mit Ueberspringen gesperrter/ueberschriebener Zellen.
- Modul 003: Persistenz + Help
- Save/Load des binären Zellformats (
file of CellRec), Print in Textdatei, Help-Pager ausCALC.HLP.
- Save/Load des binären Zellformats (
- Modul 004: Parser/Evaluator
- Rekursiver Descent-Parser fuer Zahlen, Operatoren (
+,-,*,/,^), Klammern, Zellreferenzen, Bereichssumme (A1>B5) und Funktionen (ABS,SQRT,SQR,SIN,COS,ARCTAN,LN,LOG,EXP,FACT). - Rekalkulation ueber alle Formelzellen.
- Rekursiver Descent-Parser fuer Zahlen, Operatoren (
- Modul 005: Zelleneditierung + Format
- Zeileneditor, Text/Formel-Erkennung, Statusverwaltung (
OverWritten,Locked), Spaltenformatierung mit DEC/FW.
- Zeileneditor, Text/Formel-Erkennung, Statusverwaltung (
Rueckschluss fuer Migration:
- Die groesste fachliche Komplexitaet liegt in:
- Status- und Seiteneffektlogik beim Editieren (
OverWritten/Locked), - Formelparser mit rekursiver Auswertung,
- konsistenter Anzeigeformatierung.
- Status- und Seiteneffektlogik beim Editieren (
- Diese Teile zuerst im Core ohne UI-Abhaengigkeit implementieren und dann ans TUI anbinden.
Beobachtungen:
- Reine Textdatei mit Seitenumbruechen ueber Marker
.PA. - Inline-Formatierungen via Steuerzeichen (historisch
^Bfuer Fett/Highlight). - Inhaltliche Kapitel:
- Einfuehrung und Grenzen,
- Bedienung/Navigation,
- Befehlsuebersicht (
/Q,/L,/S,/R,/P,/F,/A), - Formelbeispiele.
Rueckschluss fuer Migration:
- Das Help-System kann als strukturierter Seiten-Pager in Terminal.Gui umgesetzt werden.
CALC.HLPwird in ein neutrales Markdown- oder Plaintext-Format ueberfuehrt, Seitenkonzept bleibt erhalten.
Projektstruktur (Vorschlag):
src/MicroCalc.Core- Domänenmodell, Parser/Evaluator, Use-Cases (ohne UI).
src/MicroCalc.Tui- Terminal.Gui-App, Views, Keybindings, Dialoge.
tests/MicroCalc.Core.Tests- Unit-/Property-Tests fuer Kernlogik.
tests/MicroCalc.Tui.Tests(optional spaeter)- Smoke-/Presenter-Tests fuer UI-Flows.
docs/- Migrationsdokumentation, Bedienhilfe, Architekturentscheidungen.
Schichten:
- Domain:
Spreadsheet,Cell,CellAddress,CellStatusFlags,CellFormat.
- Application:
EditCellService,RecalculateService,FormatRangeService,CommandDispatcher.
- Infrastructure:
SheetSerializer(modernes JSON + optional Legacy-Adapter),SheetPrinter(Text-Export),HelpContentProvider.
- Presentation (TUI):
- GridView, StatusBar, CommandPalette/Dialog, HelpPager.
- Grid 7x21:
- 1:1 uebernehmen.
- Zellattribute:
- Als
[Flags] enumin C# modellieren.
- Als
- Navigation:
- Arrow + Ctrl-Keybindings nachbauen.
- Zellbearbeitung:
- Text, Zahl, Formel; ESC/Edit-Verhalten nachbilden.
- Formelengine:
- Funktionalitaet parity-faehig zum Original.
- AutoCalc:
- On/Off Status im UI plus sofortige/manuelle Rekalkulation.
- Commands:
/oeffnet Command-Dialog mit Originalfunktionen (Load, Save, Recalculate, Print, Format, Auto, Help, Clear, Quit).
- Help:
- Seitenweise Navigation (
N,P,Esc) im Help-Fenster.
- Seitenweise Navigation (
Technische Leitlinien:
- Aktuelle stabile Terminal.Gui-Version verwenden, die mit .NET 10 kompatibel ist.
- UI nicht als „Paint everything manually“, sondern via Views/Layouts strukturieren.
TUI-Komponenten:
- Hauptfenster:
- Grid-Bereich (Spalten A-G, Zeilen 1-21)
- Statuszeile 1: aktive Zelle + Zelltyp
- Statuszeile 2: Meldungen/Command-Hinweise.
- Eingabedialog:
- Modales Edit-Feld fuer Zellinhalt/Formel.
- Command-Dialog (
/):- Ein-Tasten-Auswahl + klar beschriftete Menuepunkte.
- Help-Pager:
- Scroll-/Page-Navigation, Seitennummer, Close via
Esc.
- Scroll-/Page-Navigation, Seitennummer, Close via
Keybindings (MVP):
- Navigation: Pfeiltasten, optional Ctrl-E/S/D/X analog Historie.
- Aktionen:
/,Esc,Enter,Ctrl+Q(zus. moderner Shortcut fuer Quit).
Inhalte:
CALC.HLPindocs/help/microcalc-help.mdueberfuehren.- Seitenlogik beibehalten (Abschnittsmarker, z. B.
--- page ---intern).
Runtime-Design:
HelpParserliest Datei, splittet inHelpPage-Objekte.HelpViewrendert jeweils eine Seite, zeigt Navigation (P,N,Esc).- Option fuer spaetere Internationalisierung (
docs/help/de,docs/help/en).
Original:
- Binärserialisierung des Pascal-Records (
.MCS) ist nicht robust/plattformneutral.
Neues Standardformat:
- JSON-Datei, z. B.
.mcalc.json. - Vorteile: diffbar, testbar, versionsfaehig.
Kompatibilitaetsoption:
- Optional Legacy-Import fuer alte
.MCSnur falls erforderlich. - Wenn nicht zwingend benoetigt: dokumentieren, dass neue App eigenes Format nutzt.
Print-Export:
- Textausgabe (
.lstoder.txt) mit linker Margin und Spaltenlayout aehnlich Original.
Empfohlener Ansatz:
- Lexer + Recursive-Descent-Parser neu in C# schreiben (keine direkte 1:1-Portierung von Pascal-Codezeilen).
- AST oder direkte Auswertung mit klarer Trennung von Parsing und Evaluation.
- Zellreferenzen und Bereichssummen (
A1>B5) als eigene Node-Typen. - Built-in Funktionen mappen auf
System.Math+ eigeneFact-Implementierung. - Fehlerdiagnostik mit Positionsangabe fuer UI-Feedback.
Tests (vor UI-Integration):
- Rechenoperator-Prioritaet.
- Klammerung und verschachtelte Ausdruecke.
- Zellreferenzen + Bereichssummen.
- Funktionsaufrufe inkl. Grenzfaelle (z. B. negative SQRT).
- Regressionstests gegen Beispiele aus
CALC.HLP.
- Neues Repo initialisieren oder bestehendes in saubere Struktur bringen.
.editorconfig,.gitattributes,.gitignoreanlegen.- Solution + Projekte (
Core,Tui,Tests) erzeugen. - CI-Baseline (GitHub Actions: restore/build/test).
- Zell-/Sheet-Modelle inkl. Statusflags.
- In-Memory Spreadsheet-Operationen.
- Formatierungsobjekte (DEC/FW) und Anzeigeformatierung.
- Parser/Evaluator implementieren.
- Rekalkulationsservice + Abhaengigkeitsstrategie (zunaechst Full-Recalc wie Original).
- Unit-Tests breit aufbauen.
- Load/Save (JSON).
- Print-Export.
- Command-Services (Clear, FormatRange, AutoCalc).
- Grid-Darstellung + Cursor-/Fokuslogik.
- Zell-Edit-Dialog + Validierung.
- Command-Menue (
/) und Statusmeldungen. - Help-Pager anbinden.
CALC.HLPin neue Hilfeinhalte uebertragen.- Bedienungsanleitung + Tastaturmapping dokumentieren.
- E2E-Szenarien manuell pruefen.
- Fehlerbehandlung, Logging, Performance-Check.
- Release-Readiness.
- Alle lernrelevanten Dokumente muessen fuer Auszubildende in Deutsch und Englisch auf CEFR-B2-Niveau nachvollziehbar vorliegen.
- Fuer grosse normative Dokumente ist aus Uebersichtsgruenden eine synchron gepflegte englische Parallelfassung mit Suffix
.EN.mdzulaessig und empfohlen. - Erzeugte HTML-/API-Dokumentation muss nach
Programmierung #include<everyone>fuer Braille-Zeile, Screenreader und Textbrowser nutzbar sein; WCAG 2.2 AA ist die praktische Baseline. - Nach jedem
docfx-Neubau folgt ein textorientierter A11Y-Review, bevorzugt mit Playwright +@axe-core/playwrightundlynx.
Repository-Setup:
- Git initialisieren (
mainals Default). - Branch-Strategie:
mainstabil- Feature-Branches mit Prefix
codex/(z. B.codex/core-model,codex/formula-engine).
Commit-Konvention:
feat:,fix:,test:,docs:,chore:.
GitHub-Einrichtung:
- Neues GitHub-Repo erstellen.
- Remote setzen und pushen.
- Branch Protection fuer
main(mind. 1 Review, gruenes CI). - Issue-Templates:
- Bug, Feature, Migration-Task.
- PR-Template:
- Problem, Loesung, Tests, Screenshots (bei UI-Aenderungen).
CI/CD (GitHub Actions):
- Workflow 1: Build + Test bei Push/PR.
- Workflow 2 (optional): Release-Artefakt fuer plattformspezifische Builds.
Testpyramide:
- Viele Unit-Tests in
MicroCalc.Core.Tests. - Wenige Integrations-/Smoke-Tests fuer TUI-nahe Flows.
Pflichttests fuer MVP:
- Parser-Evaluator-Regression.
- Load/Save-Roundtrip.
- Formatierung DEC/FW.
- AutoCalc On/Off Verhalten.
- Help-Pager Seitenwechsel.
Definition of Done (pro Feature):
- Funktion laeuft manuell im TUI.
- Relevante Tests vorhanden.
- Doku aktualisiert.
- CI gruen.
-
Risiko: Terminal.Gui API-Aenderungen.
- Massnahme: Version pinnen, Adapter-Schicht fuer UI-spezifische Aufrufe.
-
Risiko: Formelkompatibilitaet zum Original.
- Massnahme: Golden-Tests aus Originalbeispielen und Help-Beispielen.
-
Risiko: Unterschiedliches Verhalten bei numerischen Grenzfaellen.
- Massnahme: explizite Numeric-Rules dokumentieren und testen.
-
Risiko: Legacy-
.MCSwird erwartet.- Massnahme: Frueh klaeren; falls noetig separaten Importer als eigenes Arbeitspaket planen.
MVP muss enthalten:
- 7x21 Grid, Navigation, Zellbearbeitung.
- Formeln inkl. Referenzen, Bereichssumme, Standardfunktionen.
- AutoCalc, Recalculate.
- Load/Save (JSON), Print-Export.
- Format-Kommando (DEC/FW + Locking analog Originalidee).
- Help-Pager mit migrierten Inhalten.
Nicht zwingend im MVP:
- Vollstaendige Binärkompatibilitaet zu
.MCS. - Erweiterte Undo/Redo-Stacks.
- Plugin-System.
- Repo + Solution + CI aufsetzen.
- Core-Datenmodell implementieren.
- Parser/Evaluator mit Tests fertigstellen.
- Recalculate + AutoCalc anbinden.
- JSON-Persistenz + Print-Export.
- Terminal.Gui-Grundgeruest (Grid + Statusbar).
- Zell-Edit-Flow integrieren.
- Command-Menue integrieren.
- Help-System integrieren und Inhalte migrieren.
- Finales Testen, Doku, erster GitHub-Release.
Mit diesem Plan kann die MicroCalc-Beispielanwendung strukturiert, testbar und mit hoher Verhaltensnaehe in eine moderne C#/.NET-10-TUI-Anwendung auf Basis von Terminal.Gui ueberfuehrt werden, inklusive Hilfe-System und professionellem GitHub-Workflow.