Phase 3 (Kern): Laufzeitbibliothek, Bildschirm und Datei-E/A
Setzt den OpenSpec-Change phase-3-runtime-bildschirm um (77/77 Aufgaben). Abdeckung laut Inventar: 195 implementiert, 37 offen, 53 Non-Feature. Vollstaendigkeits-Inventar - docs/inventar.md mit 285 Eintraegen aus den Themenlisten von bas7advr.hlp und qb45advr.hlp, je mit Status und Fundstelle - crates/tb-frontend/tests/inventar.rs haelt die Tabelle in beide Richtungen gegen den Code; der Abdeckungsstand kann nicht veralten Bruchschritt (Puffer, Host, Korpus) - Cell/TextScreen ziehen ratatui-frei nach tb-runtime::screen; tb-ui behaelt Farbabbildung, Widget und den neuen Terminal-Host - Host wechselt vom Zeichenstrom auf Anzeige des Zellenpuffers plus Ereignisse (Taste, Groessenaenderung, Abbruch) - Korpusvergleich auf getrimmten Bildschirm-Snapshot; die acht bestehenden Sollausgaben blieben dabei unveraendert Groessenunabhaengigkeit - 80x25 ist nirgends mehr eine feste Grenze; Groessenaenderungen waehrend der Ausfuehrung werden zugestellt (Inhalt oben links erhalten, Cursor und VIEW PRINT geklemmt) - Korpusnachweis: dasselbe Programm bei 80x25 und 120x40 mit je eigener Sollausgabe, plus ein Programm mit Groessenwechsel mitten im Lauf Bibliothek - Breite Unicode-Zeichen belegen zwei Zellen (Cursor, POS, Randumbruch) - Bildschirm: CLS, COLOR, LOCATE, WIDTH, VIEW PRINT, SCREEN, CSRLIN, POS - Tastatur: INKEY$, INPUT$, Funktionstasten-Makros (KEY n / LIST / ON) - PRINT USING, LPRINT USING, FORMAT$, SetFormatCC - Mathematik mit kompatiblem PRNG (gleiche Saat, gleiche Folge) - Datum und Zeit mit Serienwerten ab 1899 - Finanzmathematik: FV#, PV#, Pmt#, IPmt#, PPmt#, NPer#, Rate#, NPV#, IRR#, MIRR#, SLN#, SYD#, DDB# - Datei-E/A: sequenziell, RANDOM (Recordpuffer und UDT-Variablen), BINARY, FIELD/LSET/RSET, Statusfunktionen, Dateisystem, MK$/CV - System: ENVIRON, FRE, CLEAR, TRON/TROFF, STACK, ERDEV, ERR-Anweisung Altlasten aus Phase 2 - ON ERROR GOTO auf Modulebene ist aus Prozeduren ansprechbar (prozeduruebergreifender Fixup im Codegenerator) - DATA behaelt seinen Rohtext (Gross-/Kleinschreibung, innerer Leerraum) - Die vier TODO-verify-Zellen der Konvertierungsmatrix sind aufgeloest Vom Inventar aufgedeckte Fehler - Zwoelf Non-Features wies der Compiler entgegen der Phase-1-Spec nicht ab (CALLS, SSEG, POINT, VIEW, COM, PEN, STRIG, STICK, die String*-Routinen, LINE und OPEN "COMn:") -- geschlossen - Drei Gruppen fehlten im urspruenglichen Umfang: Finanzmathematik, Record-Konvertierung, Rest der Dateisystemfunktionen - bas7advr.hlp allein ist keine vollstaendige Quelle; das Inventar bildet die Vereinigung mit qb45advr.hlp Neue Changes - phase-3-isam: schliesst Phase 3 ab (Speicherschicht redb) - phase-3-ortszeit: zieht die UTC-Abweichung zurueck Neue Abhaengigkeit: unicode-width. Dokumentiert: sprachreferenz.md und tbvm-design.md sind TODO-frei, docs/bibliothek.md neu, PLAN.md fortgeschrieben. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
37
tests/compat/finanzen.bas
Normal file
37
tests/compat/finanzen.bas
Normal file
@@ -0,0 +1,37 @@
|
||||
' tb-screen: 80x25
|
||||
' Finanzmathematik (Spec konsolen-basisbibliothek): Endwert, Zahlung,
|
||||
' Zins-/Tilgungsanteil, Abschreibungen, Kapitalwert und interner Zinsfuss.
|
||||
' Vorzeichen wie beim Vorbild: ausgehende Zahlungen negativ.
|
||||
PRINT USING "########.##"; FV#(0.05, 10, -100, 0, 0)
|
||||
z# = PMT#(0.05, 10, 1000, 0, 0)
|
||||
PRINT USING "########.##"; z#
|
||||
' Zins- und Tilgungsanteil ergaenzen sich zur Zahlung.
|
||||
PRINT IPMT#(0.05, 1, 10, 1000, 0, 0) + PPMT#(0.05, 1, 10, 1000, 0, 0) = z#
|
||||
PRINT USING "#####.## "; SLN#(1000, 100, 10); SYD#(1000, 100, 10, 1); DDB#(1000, 100, 10, 1)
|
||||
DIM q#(1 TO 4)
|
||||
q#(1) = -1000: q#(2) = 400: q#(3) = 400: q#(4) = 400
|
||||
PRINT USING "#.######"; IRR#(q#(), 0.1)
|
||||
PRINT USING "#.######"; MIRR#(q#(), 0.05, 0.06)
|
||||
PRINT USING "#.######"; RATE#(10, z#, 1000, 0, 0, 0.1)
|
||||
PRINT USING "###.##"; NPER#(0.05, z#, 1000, 0, 0)
|
||||
' Fehlerfaelle: ungueltige Argumente und erfolglose Naeherung.
|
||||
ON ERROR GOTO Fehler
|
||||
x# = SLN#(1000, 100, 0)
|
||||
W1:
|
||||
x# = SYD#(1000, 100, 10, 11)
|
||||
W2:
|
||||
DIM p#(1 TO 2)
|
||||
p#(1) = 100: p#(2) = 200
|
||||
x# = IRR#(p#(), 0.1)
|
||||
W3:
|
||||
ON ERROR GOTO 0
|
||||
PRINT "fertig"
|
||||
END
|
||||
Fehler:
|
||||
PRINT "Fehler"; ERR
|
||||
n% = n% + 1
|
||||
SELECT CASE n%
|
||||
CASE 1: RESUME W1
|
||||
CASE 2: RESUME W2
|
||||
CASE ELSE: RESUME W3
|
||||
END SELECT
|
||||
Reference in New Issue
Block a user