Files
TerminalBasic/openspec/changes/laufzeit-eingabe-und-systemstatus/specs/datei-eio/spec.md

4.4 KiB

MODIFIED Requirements

Requirement: Sequenzielle Datenübertragung

PRINT # SHALL wie PRINT formatieren (Druckzonen, Zahlendarstellung mit Vorzeichenspalte), WRITE # SHALL Elemente komma-getrennt mit Strings in Anführungszeichen schreiben. INPUT # SHALL komma-getrennte Felder lesen und dabei Anführungszeichen auswerten, LINE INPUT # die ganze Zeile ohne Zeilenende. EOF SHALL das Erreichen des Dateiendes melden; Lesen über das Dateiende hinaus MUST Laufzeitfehler 62 „Input past end of file" auslösen.

INPUT # SHALL nicht konsumierte Felder einer Zeile für spätere Aufrufe bewahren und bei Bedarf über Zeilen hinweg weiterlesen. Fehlende geforderte Felder am Dateiende MUST Fehler 62 auslösen statt als leere Ersatzwerte zu gelten.

Scenario: WRITE # und INPUT # sind gegenläufig

  • WHEN WRITE #1, "a,b", 5 geschrieben und die Zeile mit INPUT #1, s$, n gelesen wird
  • THEN enthält s$ den Text a,b und n den Wert 5

Scenario: Lesen über das Dateiende

  • WHEN INPUT #1, x nach dem letzten Datensatz ausgeführt wird
  • THEN tritt Laufzeitfehler 62 auf

Scenario: Felder über zwei Aufrufe

  • WHEN WRITE #1, "a", "b" geschrieben und nach Wiederöffnung zweimal INPUT #1 mit je einer Stringvariablen ausgeführt wird
  • THEN liefern die Aufrufe a und b

Scenario: Zu wenige Felder

  • WHEN nur ein Feld vorhanden ist und INPUT #1 zwei Felder verlangt
  • THEN tritt Fehler 62 auf

Requirement: Record-Konvertierungsfunktionen

Die Bibliothek SHALL die Konvertierungsfunktionen für Recordpuffer bereitstellen: MKI$, MKL$, MKS$, MKD$ und MKC$ wandeln einen numerischen Wert in seine Byte-Darstellung als String, CVI, CVL, CVS, CVD und CVC wandeln zurück. Jedes Paar MUST gegenläufig sein. Ein Argument, dessen Länge nicht zur Zielbreite passt, MUST Laufzeitfehler 5 „Illegal function call" auslösen. MKSMBF$, MKDMBF$, CVSMBF und CVDMBF SHALL dieselbe Rolle für das Microsoft-Binärformat älterer BASIC-Versionen erfüllen; ist dieses Format ein deklariertes Non-Feature, MUST die Ablehnung namentlich erfolgen und in der Sprachreferenz unter „Abweichungen" stehen.

Die Argumentlänge der CV-Funktionen SHALL exakt ihrer Zielbreite entsprechen, nicht nur einer Mindestbreite.

Scenario: MK und CV sind gegenläufig

  • WHEN CVL(MKL$(123456)) ausgewertet wird
  • THEN ist das Ergebnis 123456

Scenario: Falsche Argumentlänge

  • WHEN CVI("x") mit einem ein Zeichen langen String ausgewertet wird
  • THEN tritt Laufzeitfehler 5 auf

Scenario: Zu langes CVI-Argument

  • WHEN CVI("abc") ausgewertet wird
  • THEN tritt Laufzeitfehler 5 auf

Requirement: Dateisystem-Anweisungen mit plattformübergreifender Pfadsemantik

KILL, NAME … AS, FILES, CHDIR, CHDRIVE, MKDIR, RMDIR, CURDIR$, DIR$ sowie SHELL als Anweisung und als Funktion SHALL verfügbar sein. CURDIR$ SHALL das aktuelle Verzeichnis liefern, DIR$ den ersten bzw. — bei leerem Argument — den nächsten Treffer eines Suchmusters und den leeren String, wenn keiner mehr folgt. Die SHELL-Funktion SHALL den Beendigungsstatus des aufgerufenen Prozesses liefern. CHDRIVE SHALL auf Plattformen ohne Laufwerksbuchstaben namentlich abgewiesen oder als Non-Feature dokumentiert werden. Pfade SHALL sowohl \ als auch / als Trennzeichen akzeptieren und auf die Konvention der laufenden Plattform abgebildet werden; Laufwerksbuchstaben SHALL auf Nicht-Windows-Plattformen als gewöhnlicher Namensbestandteil behandelt oder mit benannter Ablehnung abgewiesen werden. Fehlende Dateien MUST Fehler 53 auslösen, fehlende Pfade Fehler 76 „Path not found".

Scenario: Rückwärts-Schrägstrich auf Unix

  • WHEN OPEN "unter\d.txt" FOR OUTPUT AS #1 auf einer Unix-Plattform ausgeführt wird
  • THEN entsteht die Datei d.txt im Verzeichnis unter

Scenario: Verzeichnis durchlaufen

  • WHEN DIR$("*.txt") und danach DIR$("") wiederholt ausgewertet werden
  • THEN liefern sie nacheinander alle passenden Namen und zuletzt den leeren String

Scenario: Fehlender Pfad

  • WHEN MKDIR in einem nicht existierenden Elternverzeichnis aufgerufen wird
  • THEN tritt Laufzeitfehler 76 auf

Scenario: OPEN mit fehlendem Elternpfad

  • WHEN OPEN FOR INPUT einen Dateinamen in einem nicht vorhandenen Elternverzeichnis verwendet
  • THEN tritt Fehler 76 auf; fehlt nur die Datei in einem vorhandenen Verzeichnis, tritt Fehler 53 auf