Dateien werden auf Band in Form von Blöcken à 512 Bytes aufgezeichnet.
Der erste Block ist dabei der Dateikopf ("header record"), der gesondert gekennzeichnet ist,
gefolgt von den Datenblöcken. Der Dateikopf entspricht dem Verzeichniseintrag auf Diskette; es
gibt jedoch kein Inhaltverzeichnis auf Band, so daß zum Auffinden einer Datei unter
Umständen das gesamte Band durchgespult werden muß.
Da die Bandkassetten zur IBM 5100 kompatibel sind, muß auf einige Besonderheiten geachtet
werden. So entspricht der Zeichencode der 5100 nicht dem EBCDI-Code der 5110, sondern ist ein
eigener. Daraus folgt, daß alle Texte vor dem Schreiben bzw. nach dem Lesen konvertiert
werden müssen. Dies gilt für den Dateinamen sowie für gesamte Textdateien (z.B.
vom Dateityp 2).
Offset Beschreibung/Inhalt ------------------------------------------------------------------------------ 00 Dateityp (8-Bit); 0 für eine freie Datei 01-02 Dateinummer (16-Bit) 03-04 Größe der markierten Datei in kBytes (16-Bit) 05 Ein Wert ungleich 0 steht für geblockte Sätze 06-07 Anzahl benutzter Dateiblöcke (16-Bit) ... 80-90 Dateiname (in Bandcode) 92-9B BASTMT \ bei BASIC- 9C-AF BASKEY / Dateien ... B8-BB APLMSG \ BC-BF APLWS1 \ C0-C3 APLSVI \ C4-C7 APLWS2 > bei APL-Dateien C8-C9 APLMSZ / CA-CB APLMXL / CC-CF APLMX# / CA-CB logische Satzlänge (Dateityp 9) (16-Bit) CC-CF Anzahl logischer Blöcke (Dateityp 9) (32-Bit) ...
Alle Werte sind Dualzahlen der angegebenen Breite.
Es gilt hier im wesentlichen das gleiche wie auch für Disketten. Im Gegensatz dazu muß das Band dabei solange durchsucht werden, bis entweder die Datei gefunden wurde oder das Ende des markierten Bands erreicht wurde. Außerdem kann nur über die Dateinummer gesucht werden, nicht über den Dateinamen.
Auf jeden Fall muß als erste Operation ein Sense stattfinden. Dabei wird der I/O Supervisor wie im Kapitel über den IOCB aufgerufen. Der IOCB für ein Sense muß folgende Werte enthalten (zusätzlich zu denen für die Geräteadressierung):
Wichtig: Während allen Operationen, die dieselbe Datei betreffen, muß IOCB_WA immer auf denselben Puffer zeigen. Die I/O-Routinen speichern darin Informationen über die aktuelle Datei.
Wenn die Datei gefunden werden konnte, enthält IOCB_Ret den Wert 0. Wenn sie nicht gefunden werden
konnte (und kein anderer Fehler auftrat), wird $F1F1 = '11' als Fehlercode zurückgeliefert.
Bei Erfolg steht im Puffer der Dateikopf. Der Aufbau des Eintrags wurde schon weiter
oben erklärt.
Das Lesen bzw. Schreiben einer Datei kann nur Block pro Block geschehen; pro I/O-Aufruf kann nur ein Block übertragen werden. Der IOCB dazu:
Es sollte am besten nach dem Find überprüft werden, ob für das Schreiben die
Datei groß genug ist. Wenn das nicht möglich ist, sollte der Fehler 09 oder 10
entsprechend abgefangen werden.
Für den reibungslosen Austausch von Daten zwischen IBM 5100 und IBM 5110 wurde bei der 5110 der gleiche Code zur Aufzeichnung verwendet wie bei der 5100. Daraus folgt, daß wie erwähnt Textdateien u.ä. nach dem Lesen von Band nach EBCDIC bzw. vor dem Schreiben von EBCDIC in den Bandcode umgewandelt werden müssen. Zu diesem Zweck gibt es einen eigenen I/O-Befehl namens "translate only", also die ausschließliche Übersetzung des Pufferinhalts.
Dateien können auf Band nicht gelöscht werden wie bei der Diskette. Es kann lediglich der für eine Datei markierte Bereich für neue Dateien freigegeben werden. Dies geschieht, indem man den Dateityp in Dateikopf (Offset $00) auf 0 setzt. Siehe dazu auch Schreiben einer Datei.<
Die Reihenfolge, in der die einzelnen I/O-Operationen ausgeführt werden, spielt bei der Bandbenutzung eine wichtige Rolle. Wird sie nicht eingehalten, wird die Operation mit dem Fehler 02 abgebrochen. Zum Schreiben gilt daher folgendes:
Start ---> Sense | | ok v Find | | gefunden v Ändere Dateityp und Dateinamen (sonstiges darf nicht geändert werden!) | | v Write Header | | ok v Write (so oft wie nötig) | | ok v Write Last (für letzten Dateiblock) | | ok v Find (gleiche Datei!) | | ok v Ändere Anzahl benutzter Blöcke | | v Write Header --> Fertig!
Wurde beim ersten Write Header z.B. ein anderer Wert geändert, schlägt die Operation fehl.