Laufzeit-Eingabe und Zonenzustand korrigieren und Change archivieren

This commit is contained in:
2026-09-06 08:04:22 +02:00
parent 815825dde7
commit c8b92f0619
36 changed files with 1104 additions and 91 deletions

View File

@@ -58,6 +58,7 @@ Bildschirm zurück.
| `TIMER` | Funktion |
| `TIMESERIAL` | Funktion |
| `TIMEVALUE` | Funktion |
| `TIMEZONEKNOWN` | Funktion |
| `WEEKDAY` | Funktion |
| `YEAR` | Funktion |
@@ -72,6 +73,13 @@ Zeitpunkt bestimmt, nicht einmal beim Programmstart — ein Programm, das
Lässt sich die Zone nicht ermitteln, gilt UTC; das Programm läuft weiter
und der Runner meldet es einmal beim Start auf der Fehlerausgabe.
`TIMEZONEKNOWN` ist eine parameterlose TerminalBasic-Erweiterung mit
Ergebnistyp `INTEGER`: `-1` bei ermittelter Zone (auch UTC), `0` bei
UTC-Rückfall. Jede Abfrage ermittelt den aktuellen Zustand, einschließlich
späterer Ausfälle und Wiederherstellung. Sie ändert weder die Systemuhr
noch den programmeigenen Versatz. Rust-Einbetter erhalten Zeitwert und
Status gemeinsam über `RtState::zeitpunkt()`; `Zeitzone::Unbekannt` kann
weiterhin einen festen UTC-Rückfall vorgeben.
`DATE$ = …` und `TIME$ = …` stellen nicht die Systemuhr, sondern einen
programmeigenen Versatz auf die Ortszeit, den alle Zeitfunktionen
@@ -384,9 +392,39 @@ einen dokumentierten Ersatzwert statt still zu variieren.
`INKEY$` blockiert nicht: leerer String bei leerem Puffer, ein Zeichen
bei einer Zeichentaste, zwei Zeichen mit führendem Nullzeichen bei
einer Sondertaste. `INPUT$(n)` liest genau `n` Zeichen und blockiert
einer Sondertaste. `INPUT$(n)` liest genau `n` Unicode-Codepoints und blockiert
dabei, ohne sie am Bildschirm zu wiederholen.
`KEY n, text$` belegt ein Funktionstasten-Makro (n = 110 sowie 30/31,
höchstens 15 Zeichen), `KEY LIST` gibt alle zwölf untereinander aus,
`KEY ON`/`KEY OFF` blendet die Softkey-Zeile ein und aus.
## Fortlaufende Datei-Eingabe und Record-Konvertierung
`INPUT #` liest Felder fortlaufend, auch über Zeilengrenzen hinweg. Nicht
benötigte Felder bleiben für spätere Aufrufe erhalten. `WRITE #` setzt
Strings in Anführungszeichen und verdoppelt enthaltene Anführungszeichen;
`INPUT #` erhält deren Inhalt einschließlich Kommas und Leerraum.
Fehlende geforderte Felder lösen Fehler 62 aus; ein ausdrücklich leeres
Feld bleibt zulässig.
`INPUT$(n, #f)` decodiert genau `n` UTF-8-Codepoints aus einer INPUT- oder
BINARY-Datei. `INPUT #`, `LINE INPUT #` und `INPUT$` verwenden dieselbe
Leseposition; `LINE INPUT #` entfernt ein LF-, CR- oder CRLF-Zeilenende.
`SEEK` und `LOC` beziehen sich dabei weiterhin auf Bytes. `INPUT$(0)`
verbraucht nichts; negative Längen lösen Fehler 5 aus. EOF vor dem
geforderten Zeichen führt zu Fehler 62; ungültige oder abgeschnittene
UTF-8-Sequenzen führen zu Fehler 57 statt zu Ersatzzeichen.
Bei Tastatureingabe bleibt der unbenutzte Rest einer erweiterten Taste
für `INPUT$` bzw. `INKEY$` erhalten: zweimal `INPUT$(1)` liest aus F1
zuerst `CHR$(0)`, dann `CHR$(59)`.
`CVI`, `CVL`, `CVS`, `CVD`, `CVC` verlangen exakt 2, 4, 4, 8 bzw. 8
Bytezeichen (Codepoints 0255), entsprechend `MKI$`, `MKL$`, `MKS$`,
`MKD$`, `MKC$`. Kürzere, längere oder nicht als Byte darstellbare
Argumente lösen Fehler 5 aus. GET/PUT und UTF-32-Recordfelder bleiben
unverändert; die MK/CV-Bytezeichen sind keine UTF-8-Dateidecodierung.
Fehlt bei `OPEN FOR INPUT`, `KILL` oder der Quelle von `NAME` nur die
Datei, gilt Fehler 53. Ein fehlender Elternpfad führt zu Fehler 76,
auch beim Erzeugen, Umbenennen oder Anlegen von Verzeichnissen.