# Bibliotheksreferenz Die Laufzeitbibliothek **so wie implementiert**. Der Umfang wird von [docs/inventar.md](inventar.md) bestimmt; dort steht auch, was noch offen ist. Abweichungen vom Vorbild sind in [docs/sprachreferenz.md](sprachreferenz.md) unter „Abweichungen" gesammelt. Ein automatischer Test hält das Inventar gegen den Code; diese Referenz beschreibt das Verhalten dahinter. ## Bildschirm | Element | Art | |---|---| | `CLS` | Anweisung | | `COLOR` | Anweisung | | `CSRLIN` | Funktion | | `INPUT` | Anweisung | | `LINE INPUT` | Anweisung | | `LOCATE` | Anweisung | | `POS` | Funktion | | `PRINT` | Anweisung | | `SCREEN` | Anweisung | | `SCREEN` | Funktion | | `SPC` | Funktion | | `TAB` | Funktion | | `VIEW PRINT` | Anweisung | | `WIDTH` | Anweisung | Alle Anweisungen wirken auf den Zellenpuffer der aktuellen Bildschirmgröße — 80×25 ist nirgends eine feste Grenze. Ausgelassene Argumente von `LOCATE` und `COLOR` lassen den bisherigen Wert stehen. `LOCATE` außerhalb der Grenzen und `SCREEN(zeile, spalte)` außerhalb lösen Fehler 5 aus. Die Funktionsform `SCREEN` liefert ohne drittes Argument den Zeichencode, mit drittem das Farbattribut (Hintergrund·16 + Vordergrund). `WIDTH` hebt den Puffer höchstens an. `VIEW PRINT` ohne Argumente setzt den Scrollbereich auf den vollen Bildschirm zurück. ## Datum/Zeit | Element | Art | |---|---| | `DATE$` | Anweisung | | `DATE$` | Funktion | | `DATESERIAL` | Funktion | | `DATEVALUE` | Funktion | | `DAY` | Funktion | | `HOUR` | Funktion | | `MINUTE` | Funktion | | `MONTH` | Funktion | | `NOW` | Funktion | | `SECOND` | Funktion | | `TIME$` | Anweisung | | `TIME$` | Funktion | | `TIMER` | Funktion | | `TIMESERIAL` | Funktion | | `TIMEVALUE` | Funktion | | `WEEKDAY` | Funktion | | `YEAR` | Funktion | Serielle Werte zählen Tage ab dem 30.12.1899 (Serie 2 = 1.1.1900); der Nachkommaanteil ist die Tageszeit. `WEEKDAY` liefert 1 für Sonntag. Ungültige Datums- oder Zeitangaben lösen Fehler 5 aus. Die Uhr läuft in **UTC** (dokumentierte Abweichung). `DATE$ = …` und `TIME$ = …` stellen nicht die Systemuhr, sondern einen programmeigenen Versatz, den alle Zeitfunktionen mitrechnen. ## Deklaration | Element | Art | |---|---| | `COMMON` | Anweisung | | `CONST` | Anweisung | | `DATA` | Anweisung | | `DEFtype` | Anweisung | | `DIM` | Anweisung | | `ERASE` | Anweisung | | `LBOUND` | Funktion | | `LET` | Anweisung | | `OPTION BASE` | Anweisung | | `READ` | Anweisung | | `REDIM` | Anweisung | | `REM` | Anweisung | | `RESTORE` | Anweisung | | `SHARED` | Anweisung | | `STATIC` | Anweisung | | `SWAP` | Anweisung | | `TYPE` | Anweisung | | `UBOUND` | Funktion | ## Ereignisse | Element | Art | |---|---| | `DOEVENTS` | Funktion | ## Fehlerbehandlung | Element | Art | |---|---| | `ERL` | Funktion | | `ERR` | Funktion | | `ERROR` | Anweisung | | `ON ERROR` | Anweisung | | `RESUME` | Anweisung | ## Finanzen | Element | Art | |---|---| | `DDB#` | Funktion | | `FV#` | Funktion | | `IPMT#` | Funktion | | `IRR#` | Funktion | | `MIRR#` | Funktion | | `NPER#` | Funktion | | `NPV#` | Funktion | | `PMT#` | Funktion | | `PPMT#` | Funktion | | `PV#` | Funktion | | `RATE#` | Funktion | | `SLN#` | Funktion | | `SYD#` | Funktion | Alle Funktionen rechnen in DOUBLE. Vorzeichenkonvention wie beim Vorbild: ausgehende Zahlungen sind negativ, eingehende positiv. Das letzte Argument der Renten-Funktionen ist die Fälligkeit — 0 nachschüssig, 1 vorschüssig. `Rate#` und `IRR#` nähern sich mit dem Sekantenverfahren. **Abbruchbedingung:** höchstens 100 Schritte; erreicht wird die Lösung, wenn der Betrag der Restabweichung unter 1e-9 fällt. Bleibt sie über 1e-6, gilt die Näherung als erfolglos und es tritt Fehler 5 auf — ein stiller Ersatzwert wird nie geliefert. Eine Zahlungsreihe ohne Vorzeichenwechsel weist `IRR#` sofort mit Fehler 5 ab. Weitere Fehler 5: Periode außerhalb der Laufzeit bei `IPmt#`/`PPmt#`/`SYD#`/`DDB#`, Nutzungsdauer null bei `SLN#`, Perioden null bei `Pmt#`, Zinssatz ≤ −1. ## Formatierung | Element | Art | |---|---| | `FORMAT$` | Funktion | | `PRINT USING` | Anweisung | | `SetFormatCC` | Routine | `PRINT USING`, `LPRINT USING` und `FORMAT$` teilen dieselbe Formatzeichenkette. Numerische Platzhalter: `#` Ziffernstelle, `.` Dezimalpunkt, `,` Tausendertrennung, `+`/`-` Vorzeichenführung (vorn oder hinten, mit eigener Stelle), `$$` mitlaufendes Währungszeichen und `**` Sternfüllung (beide bringen zwei Stellen mit), `^^^^` Exponentialform. String-Platzhalter: `!` erstes Zeichen, `&` ganzer String, `\ \` feste Länge. `_` macht das Folgezeichen literal. Passt ein Wert nicht in sein Feld, wird er vollständig ausgegeben und mit `%` gekennzeichnet. Die Formatzeichenkette wird wiederholt, solange Werte übrig sind. Eine Zeichenkette ohne Feld bei vorhandenen Werten löst Fehler 5 aus. `SetFormatCC` setzt das Währungszeichen über einen Ländercode; nicht aufgeführte Codes behalten `$`. ## Klang | Element | Art | |---|---| | `BEEP` | Anweisung | ## Mathematik | Element | Art | |---|---| | `ABS` | Funktion | | `ATN` | Funktion | | `CCUR` | Funktion | | `CDBL` | Funktion | | `CINT` | Funktion | | `CLNG` | Funktion | | `COS` | Funktion | | `CSNG` | Funktion | | `EXP` | Funktion | | `FIX` | Funktion | | `INT` | Funktion | | `LOG` | Funktion | | `RANDOMIZE` | Anweisung | | `RND` | Funktion | | `SGN` | Funktion | | `SIN` | Funktion | | `SQR` | Funktion | | `TAN` | Funktion | Rundung ist kaufmännisch-symmetrisch zur geraden Zahl (`CINT(0.5)` = 0, `CINT(1.5)` = 2, `CINT(2.5)` = 2). `INT` rundet ab, `FIX` in Richtung null. Überschreitet ein Ergebnis den Zieltyp, tritt Fehler 6 auf; `SQR`/`LOG` mit unzulässigem Argument lösen Fehler 5 aus, Division durch null Fehler 11. Der Zufallsgenerator ist der 24-Bit-LCG des Vorbilds (`zustand = (zustand · &HFD43FD + &HC39EC3) MOD 2^24`). `RND(0)` wiederholt den letzten Wert, `RND(n)` mit `n < 0` sät neu aus dem Argument. `RANDOMIZE saat` liefert bei gleicher Saat stets dieselbe Folge, unabhängig von vorherigen `RND`-Aufrufen; ohne Argument wird der Startwert abgefragt. ## Metabefehl | Element | Art | |---|---| | `$DYNAMIC` | Metabefehl | | `$STATIC` | Metabefehl | ## Prozeduren | Element | Art | |---|---| | `CALL` | Anweisung | | `DECLARE` | Anweisung | | `DEF FN` | Anweisung | | `FUNCTION` | Anweisung | | `SUB` | Anweisung | ## Steuerfluss | Element | Art | |---|---| | `DO...LOOP` | Anweisung | | `END` | Anweisung | | `EXIT` | Anweisung | | `FOR...NEXT` | Anweisung | | `GOSUB` | Anweisung | | `GOTO` | Anweisung | | `IF...THEN...ELSE` | Anweisung | | `ON...GOSUB` | Anweisung | | `ON...GOTO` | Anweisung | | `RETURN` | Anweisung | | `SELECT CASE` | Anweisung | | `STOP` | Anweisung | | `WHILE...WEND` | Anweisung | ## Strings | Element | Art | |---|---| | `ASC` | Funktion | | `CHR$` | Funktion | | `HEX$` | Funktion | | `INSTR` | Funktion | | `LCASE$` | Funktion | | `LEFT$` | Funktion | | `LEN` | Funktion | | `LTRIM$` | Funktion | | `MID$` | Anweisung | | `MID$` | Funktion | | `OCT$` | Funktion | | `RIGHT$` | Funktion | | `RTRIM$` | Funktion | | `SPACE$` | Funktion | | `STR$` | Funktion | | `STRING$` | Funktion | | `UCASE$` | Funktion | | `VAL` | Funktion | Zeichen sind Unicode-Codepoints; `LEN` zählt Zeichen, nicht Bytes (dokumentierte Abweichung). Randfälle: `VAL` liest das führende Zahlenpräfix und überspringt Leerraum, versteht `&H`/`&O`; `STR$` stellt nicht-negativen Zahlen ein Leerzeichen voran; `LEFT$`/`RIGHT$` mit Länge über der Stringlänge liefern den ganzen String; `ASC("")` sowie eine Startposition kleiner 1 bei `MID$`/`INSTR` lösen Fehler 5 aus. `STRING$` nimmt einen Zeichencode oder einen String (dessen erstes Zeichen zählt). ## System | Element | Art | |---|---| | `COMMAND$` | Funktion | | `SLEEP` | Anweisung | | `SYSTEM` | Anweisung | `ENVIRON$` liest Umgebungsvariablen nach Namen, `COMMAND$` liefert die Aufrufargumente ohne Programmnamen. Nicht abbildbare Größen liefern einen dokumentierten Ersatzwert statt still zu variieren. ## Tastatur | Element | Art | |---|---| | `INKEY$` | Funktion | | `INPUT$` | Funktion | | `KEY` | Anweisung | `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 dabei, ohne sie am Bildschirm zu wiederholen. `KEY n, text$` belegt ein Funktionstasten-Makro (n = 1–10 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.