ST

Die Systemvariable ST (üblicherweise in einer Langform als STATUS bezeichnet) dient zum Abfragen von Meldungen, die bei Ein- und Ausgabevorgängen von Datasette, RS-232 und seriellem Datenbus (z.B. Diskettenlaufwerk, Drucker) generiert werden. Diese werden als Bitwerte (8 Bits) vom KERNAL zurückgemeldet und steht in BASIC als ganzzahliger Wert im Wertebereich von -128 bis +127 zur Verfügung.

Eine Zuweisung an die Variable ST ist nicht möglich und führt zur Fehlerausgabe von ?SYNTAX ERROR. Dies passiert typischerweise bei Verwendung von Variablennamen, die mit den signifikanten 2 Buchstaben ST beginnen, wie z.B. bei STIMMEN = STIMMEN + 1.

Mögliche Werte von STATUS

Je nach Gerät und ausgeführter Operation wird das Ergebnis im entsprechenden Bit der STATUS-Variablen wiedergegeben.

STATUS
Bit
Bit-
Wert
Datasette Serieller Bus RS-232
0 1 Datenrichtung, während der eine Zeitüberschreitung aufgetreten ist
0 = Lesen, 1 = Schreiben
Paritätsfehler
1 2 Zeitüberschreitung (Timeout) aufgetreten Rahmenfehler (Start-/Stoppbit)
2 4 Block ist zu kurz
(kleiner als 192 Bytes)
Empfängerpuffer voll
3 8 Block ist zu lang
(größer als 192 Bytes)
Empfängerpuffer leer
4 16 VERIFY-Fehler
(Fehlerhaft gelesene Bytes in Pass 1 konnten in Pass 2 nicht korrigiert werden.)
VERIFY-Fehler CTS-Signal fehlt
5 32 Prüfsummenfehler
6 64 Dateiende (EOF, End Of File) wurde erreicht
(nur beim Lesen)
EOI (End Of Information), normalerweise Dateiende (EOF, End Of File), bei relativen Dateien Datensatzende DSR-Signal fehlt
7 128 Gerät nicht vorhanden BREAK-Signal empfangen

Entsprechend dem Bitwert, kann das jeweilige Bit aus ST mittels Operator AND ausmaskiert werden. Z.B. erkennt der Ausdruck STATUS AND 128 ein gesetztes 7. Bit.
Die Kombination aller Bits, also der Ausdruck STATUS AND 255, konvertiert den Statuswert in eine vorzeichenlose Zahl.

Beispiele

Direktmodus

PRINT STATUS

oder als Vorzeichenlose Zahl:

PRINT (STATUS AND 255)

bzw.

PRINT (ST AND 255)

(Das Leerzeichen nach „ST“ ist wesentlich, da sonst in STAND das Funktionstoken TAN erkannt wird und einen ?SYNTAX ERROR hervorruft.)

Der Wert von STATUS befindet sich in der Speicheradresse 144/$0090 und kann somit auch mit einem PEEK-Befehl ausgelesen werden:

PRINT PEEK(144)

Dieser Wert ist identisch mit des Ausdrucks STATUS AND 255.

Innerhalb von Programmen

10 REM
20 OPEN 1, 8, 4, "TESTFILE, SEQ, W"
30 IF ST <> 0 THEN PRINT "DATEIFEHLER"
40 IF ST = 0 THEN PRINT "DATEI EXISTIERT"
50 CLOSE 1

Mit dem folgenden Programm wird eine Textdatei geöffnet, Byte für Byte gelesen und auf dem Bildschirm ausgegeben. Dies passiert solange, bis das Ende der Datei erreicht wurde oder ein Fehler auftritt. Wie in der obigen Tabelle ersichtlich, erkennt man durch eine Abfragen von Bit 6 aus ST das Dateiende (End-of-File). In diesem Fall (wenn nämlich auch kein anderes Bit gesetzt ist) wird „OK“ ausgegeben.

10 REM DATEI BYTEWEISE LESEN UND AUSGEBEN
20 OPEN 1,8,2,"0:TEXT FILE,S,R": REM SEQ. DATEI FUER EINGABE OEFFNEN
20 FOR S=0 TO 1: REM ENDLOSSCHLEIFE, SOLANGE S = 0 IST
30 GET#1,A$: REM EIN BYTE AUSLESEN
40 PRINT A$;: REM DAS BYTE AUF DEM BILDSCHIRM AUSGEBEN
50 S=ST AND255: REM S >0 BEI DATEIENDE ODER BEI FEHLER
60 NEXT S : REM ABBRUCH, WENN ST > 0 WAR
70 CLOSE 1: REM DATEI WIEDER SCHLIESSEN
80 IF S=64 THEN PRINT "OK"