BASIC-Compiler

Ein-/Ausgabegeräte


Ein- und Ausgaben von Text und Daten erfolgen über Geräte. Am häufigsten verwendet werden Tastatur und Bildschirm. Diese beiden Geräte können mit verschiedenen Anweisungen und Funktionen bedient werden, z.B. INPUT, INKEY$ und PRINT. Bei einigen Zielsystemen wird auch ein Drucker unterstützt, auf dem Sie mit der Anweisung LPRINT Ausgaben tätigen können. Neben diesen speziellen Anweisungen ist es aber auch möglich, Bildschirm und Drucker über einen Ausgabekanal anzusprechen. Mit allen anderen Geräten lässt sich sogar nur über Ein-/Ausgabekanäle kommunizieren, die mit der Anweisung OPEN geöffnet werden.

Zurück zur Anweisung OPEN: Wenn damit ein Ein-/Ausgabekanal geöffnet werden soll, ist der Name des Gerätes und/oder der Name einer Datei anzugeben. Der Gerätename kann sowohl groß als auch klein geschrieben werden. Manche Geräte unterstützen keine Dateinamen, d.h., bei diesen wird nur der Gerätename angegeben und das Gerät als solches geöffnet. Andere Geräte bieten Zugriff auf Dateien. Hier muss hinter dem Gerätenamen, d.h. nach dem Doppelpunkt, ein Dateiname folgen. Abhängig vom konkreten Gerät kann der Dateiname auch einen Pfad enthalten.

Wenn kein Gerät angegeben wird, d.h., wenn der angegebene Text keinen Doppelpunkt enthält, werden die unterstützten Geräte, oder genauer gesagt die zugehörigen Treiber, der Reihe nach durchgegangen und versucht, damit die Datei zu öffnen. Standardmäß enthält das kompilierte Programm alle sinnvollen Treiber. Wenn Sie jedoch wissen, dass z.B. ein bestimmter Treiber nicht benötigt wird, können Sie diesen in den Compiler-Optionen ausschalten.

Es ist prinzipiell auch möglich, Geräte unter Umgehung der Ein-/Ausgabekanäle und je nach Hardware direkt mit PEEK- und POKE- bzw. mit IN- und OUT-Befehlen anzusprechen. Doch das ist nur für spezielle Anwendungen sinnvoll und erfordert auch spezielles Wissen. Aus diesem Grund wird darauf nicht weiter eingegangen.

Es folgt eine Beschreibung der vom JKCEMU-BASIC-Compiler unterstützten Geräte:

1. Bildschirm (CRT:)

Ein Ausgabekanal auf das Gerät CRT: dient zur Ausgabe von Text auf dem Bildschirm. Grafische Ausgaben sind damit nicht möglich. Der Sinn, einen Ausgabekanal auf den Bildschirm zu öffnen, liegt darin, Programme schreiben zu können, die die gleichen Ausgaben entweder parallel oder umschaltbar auf mehreren Geräten ermöglichen. Man braucht dann die Logik zur Erzeugung der Ausgaben nur einmal zu implementieren und gibt nur in der OPEN-Anweisung an, auf welchem Gerät die Ausgabe erfolgen soll.

2. Drucker (LPT:)

Ähnlich wie beim Bildschirm ist es mit dem Gerät LPT: möglich, einen Ausgabekanal auf den Drucker zu öffnen. Dies ist allerdings nur möglich, wenn das Zielsystem einen Drucker unterstützt.

3. Dateisystem (A: bis P:)

Das Zielsystem CP/M-kompatibel bietet als einziges Zugriff auf ein Dateisystem. Dazu gibt man bei der OPEN-Anweisung das Laufwerk (A: bis P:) gefolgt von dem Namen der zu öffnenden Datei an. Das Laufwerk repräsentiert das Gerät und kann weggelassen werden. In dem Fall wird die Datei auf dem aktuellen Laufwerk geöffnet.

Zwischen dem Laufwerksbuchstaben und dem Doppelpunkt kann ein Benutzerbereich angegeben werden. Das ist eine numerische Zahl zwischen 0 und 15. Die Datei wird dann in dem angegeben Benutzerbereich angelegt, anderenfalls im aktuellen Benutzerbereich (siehe CP/M-Kommando USER).

Beispiel ohne Angabe eines Benutzerbereichs:

  OPEN "A:DATEI.TXT" FOR INPUT AS #1

Beispiel mit Angabe eines Benutzerbereichs:

  OPEN "A12:DATEI.TXT" FOR INPUT AS #1

Dateien in einem CP/M-kompatiblen System werden immer in Blöcken zu 128 Byte gespeichert, d.h., die Dateilänge ist auch nur in 128-Byte-Schritten möglich. Um aber trotzdem Dateioperationen mit einer Byte-exaktne Dateilänge zu ermöglichen, wird das Byte 1Ah als Dateiendezeichen verwendet. Dieses Byte wird deshalb automatisch beim Schließen einer zum Schreiben geöffneten Datei angehängt. Umgekehrt kann eine Datei nur bis zum Byte 1Ah gelesen werden. Ein Nullbyte wird ebenfalls als Dateiende gewertet.

Das Dateiendezeichen wirkt sich auch auf die Betriebsart APPEND (Anhängen) aus. Die Datei wird geöffnet und bis zum ersten Auftreten eines 00h- oder 1Ah-Bytes gelesen. An genau dieser Position beginnt dann das Schreiben.

Die Verwendung der Bytes 00h und 1Ah als Dateiendezeichen hat aber den Nachteil, das man diese Bytes nicht lesen kann und somit Einschränkungen beim Zugriff auf Binärdateien hat. Benötigen Sie vollen Zugriff auf Binärdateien, müssen Sie diese im Binärmodus öffnen (siehe Schlüselwort BINARY in der Anweisung OPEN). Der Binärmodus verwendet keine Dateiendezeichen, d.h. es wird weder ein solches Zeichen automatisch angehängt noch beim Lesen eines solchen Zeichens ein Dateiende erkannt.

4. USB-Speicher an VDIP-Modul (V:)

Das Gerät steht für einen FAT-formatierten USB-Speicher, der an Port 2 eines VDIP-Moduls angeschlossen ist. Der Gerätename V: hat absichtlich die gleiche Form wie die aus der CP/M- und DOS-Welt bekannten Laufwerksbuchstaben, da es wie die dortigen Laufwerke zur Speicherung von Dateien dient und somit auch wie ein Laufwerk betrachtet werden kann.

Der Dateiname kann, muss aber nicht, mit einem Pfad beginnen. Dieser Pfad ist sowohl absolut (Trennzeichen am Anfang) oder relativ (kein Trennzeichen am Anfang) möglich. Als Trennzeichen sind sowohl der Backslash (\) als auch der Slash (/) möglich. Die Tabelle zeigt einige Beispiele:

V:abc.txt Dateiname ohne Pfad,
Die Datei wird im aktuellen Verzeichnis gesucht.
V:\abc.txt Dateiname mit absoluter Pfadangabe auf das Wurzelverzeichnis
V:/xxx/abc.txt Dateiname mit absoluter Pfadangabe
V:xxx/abc.txt Dateiname mit relativer Pfadangabe,
Die Datei wird vom aktuellen Verzeichnis ausgehend im Unterverzeichnis xxx gesucht.

Achtung! Systembedingt wird beim Öffnen einer Datei mit Pfadangabe zuerst in das Verzeichnis gewechselt und danach die Datei geöffnet. Nach Schließen der Datei, aber auch wenn die Datei nicht geöffnet werden konnte, bleibt dieses Verzeichnis weiterhin als aktuelles Verzeichnis im VDIP-Modul gesetzt, d.h., wenn danach eine andere Datei ohne Pfad oder mit relativer Pfadangabe geöffnet werden soll, wird sie wahrscheinlich nicht gefunden, da nun in einem anderen bzw. von einem anderen Verzeichnis aus gesucht wird.

Hinweis! Da Dateien auf dem USB-Speicher eine Byte-exakte Länge haben, ist die Verwendung von speziellen Dateiendezeichen wie beim weiter oben beschriebenen CP/M-kompatiblen Dateisysten nicht nötig. Aus diesem Grund gibt es auch keine Unterscheidung zwischen einem Text- und einem Binärmodus, d.h., das Schlüsselwort BINARY in der Anweisung OPEN hat keine Wirkung. Die Datei wird immer in einer Art Binärmodus geöffnet. Trotzdem sollten Sie aus Gründen der Portabilität das Schlüsselwort BINARY mit angeben, wenn es sich um Binärdateien handelt.