Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

BTAM - Banddateien verarbeiten (Typ S)

Makrotyp: S-Typ (E-Form/L-Form, siehe "Typen von Makroaufrufen")

Alle Benutzeranforderungen für BTAM werden über diesen Makroaufruf abgewickelt. In den Operandenbeschreibungen wird für „Magnetbandkassette“ die Abkürzung MBK verwendet.

Format

Operation

Operanden

BTAM

fcbadr

[,RDWT / RBID / RD / RDBF / CHK / MINF / POS / REV / REVWT /
  RNT / RNTL / RT / RTL / SYNC / WRT / WRTWT / WT / ERG / BSF /
  BSR / FSF / FSR / REW / RUN / WTM ]

[,LEN = länge]

[,LOC = 1 / 2 / relaus ]

[,PARMOD = 24 / 31 ]

[,REQNO = zahl]

MF = L

MF = (E,adr / E,(r))

Operandenbeschreibung

fcbadr

gibt die Adresse des FCB an, mit dem die zu verarbeitenden Datei in Verbindung steht.

RDWT

liest Magnetband vorwärts und wartet das Ende der Operation ab, bevor die Steuerung dem Anwenderprogramm übergeben wird (Standardfunktion)

CHK

prüft, ob die vorausgegangene Ein-/Ausgabeoperation abgeschlossen ist. Ist die Ein-/Ausgabeoperation noch nicht abgeschlossen, wird die Steuerung an die LOC-Adresse übertragen. Andernfalls ist die Operation äquivalent zu WT.

MINF

holt eine Medium-Information bei der Bearbeitung von optischen Platten. Die Bedienung von optischen Platten im BS2000 erfolgt über eine MBK-Emulation.
Der Bereich, in den die Information geschrieben werden soll, und seine Länge (derzeit 128 Byte) müssen über die Operanden LOC und LEN spezifiziert werden. Das Layout der Ausgabeinformation wird mit dem Makro NDWMINF beschrieben.

POS

nur mit PARMOD=31: Band positionieren (siehe „Operationscodes")

RBID

nur mit PARMOD=31: Bandposition bestimmen (siehe „Operationscodes")

RD

liest Magnetband vorwärts

RDBF

Für Magnetbandkassetten, nur mit PARMOD=31: Daten blockweise aus dem Sicherstellungsbereich des MBK-Puffers in den Anwendungsbereich übertragen (siehe „Operationscodes" )

REV

liest Magnetband rückwärts

REVWT

liest Magnetband rückwärts und wartet das Ende der Operation ab, bevor die Steuerung dem Anwenderprogramm übertragen wird.

RNT

Lesen ohne Datentransfer, mit Meldung bei kürzerer Länge als erwartet

RNTL

Lesen ohne Datentransfer, ohne Meldung bei kürzerer Länge als erwartet

RT

Lesen mit Datentransfer, mit Meldung bei kürzerer Länge als erwartet

RTL

Lesen mit Datentransfer, ohne Meldung bei kürzerer Länge als erwartet

SYNC

nur mit PARMOD=31: synchronisieren und Bandposition bestimmen (siehe „Operationscodes")

WRT

schreibt auf Magnetband

WRTWT

schreibt auf Magnetband und wartet das Ende der Operation ab, bevor die Steuerung dem Anwenderprogramm übertragen wird.

WT

wartet die Beendigung der vorausgegangenen Ein-/Ausgabeoperation ab. Die Steuerung wird erst nach Abschluss der Operation bzw. der notwendigen Fehlerbehandlungen an das Benutzerprogramm zurückgegeben.

ERG

erzeugt Blocklücke; bei Wiederholung wird das Band gelöscht!
Die mit ERG ausgelöste Operation ist eine Schreiboperation, die an Stelle eines Bit-Musters ein „Blocklücken-Muster“ in der vom Anwender angegebenen Länge erzeugt (bei einigen Magnetbandtypen ist diese Länge festgelegt).

BSF

Band um eine Abschnittsmarke zurücksetzen

BSR

Band um einen Block zurücksetzen

FSF

Band um eine Abschnittsmarke vorsetzen

FSR

Band um einen Block vorsetzen

REW

Rückspulen bis Bandanfang

RUN

Rückspulen und Band entladen, anschließend ist nur noch CLOSE möglich

WTM

Abschnittsmarke schreiben

LEN = länge

gibt die Länge der einzelnen Blöcke bzw. bei geketteter Ein-/Ausgabe (Operand CHAINIO in FILE/FCB) die Länge der Transporteinheit an.
Wird LEN nicht angegeben, errechnet sich die Länge einer Transporteinheit aus dem Produkt von „Blockgröße“ und Kettungsfaktor, wobei die Blockgröße bei RECFORM=U durch den Inhalt des unter RECSIZE angegebenen Registers bestimmt ist und bei RECFORM=F durch BLKSIZE.

Ohne Kettung holt sich das System die Angaben nur aus dem RECSIZE-Operanden beim Schreiben mit RECFORM=U, sonst aus dem BLKSIZE-Operanden.
Eine Längenangabe mit LEN darf bei RECFORM=U so ausgelegt sein, dass der letzte Block innerhalb einer Transporteinheit kürzer als die vorhergehende ist. Bei RECFORM=F sollte die angegebene Länge ein Vielfaches der gegebenen BLKSIZE betragen (falls dem nicht so ist, wird der Auftrag aber nicht abgewiesen).
Die zu lesende Länge wird immer und nur der aktuellen Längenangabe entnommen. Die tatsächliche Blocklänge steht nach erfolgreichem Lesen im RECSIZE-Register.
Im Zusammenhang mit dem Operationscode RDBF gibt LEN an, wie lang die aus dem Puffer zu sichernden Blöcke sind. Gilt RECFORM=U/V, wird die aktuelle Blocklänge im RECSIZE-Register zurückgemeldet.

LOC

gibt den Bereich an, in den gelesen oder aus dem geschrieben werden soll.

Voreinstellung:

  • IOAREA1

    • bei der ersten Ein-/Ausgabe

    • bei Wechsel von LOC=relaus auf eine IOAREA

    • wenn zuletzt IOAREA2 verwendet wurde

    • wenn IOAREA2 nicht definiert ist

  • IOAREA2, falls zuletzt IOAREA1 verwendet wurde

    = relaus
    Bereichsadresse im Makroaufruf.
    Wird eine CHK-Operation verlangt, so muss der LOC-Operand die Form LOC=relaus aufweisen. Die Steuerung wird an die mit LOC definierte Adresse übertragen, wenn die überprüfte Operation noch nicht abgeschlossen war. Der adressierte Bereich muss nicht mit IOAREA1/2 zusammenfallen.
    = 1
    verweist auf die IOAREA1-Adresse im FCB
    = 2
    verweist auf die IOAREA2-Adresse im FCB
    Im TU-FCB wird angezeigt, welcher Ein-/Ausgabebereich genutzt wurde:
    • Im 31-Bit-TU-FCB im Feld ID1BLWB

    • Im 24-Bit-TU-FCB im Feld ID1LWB

    Im Zusammenhang mit den Operationscodes POS, RBID, RDBF und SYNC hat LOC folgende Funktion:
    • POS: Adresse der Positionsangabe (9 Byte), auf die positioniert wird

    • RBID: Adresse, an der die 9 Byte lange Positionsangabe ausgegeben wird

    • RDBF: Adresse des Bereichs, in den der sichergestellte Block gebracht wird

    • SYNC: Adresse, an der die 9 Byte lange Positionsangabe ausgegeben wird

    Auch bei diesen Operationscodes wird der Pointer im TU-FCB (ID1BLWB bzw. ID1LWB) auf den zuletzt genutzten Bereich gesetzt.

MF

Die Formen des MF-Operanden sind detailliert im Anhang, "Typen von Makroaufrufen" beschrieben.

PARMOD

Gibt den Generierungsmodus für den Makroaufruf an.

Voreinstellung:

der durch den Makro GPARMOD oder durch den Assembler voreingestellte Wert für den Generierungsmodus

= 24
Der Makroaufruf wird mit der Expansion für die 24-Bit-Schnittstelle aufgelöst. Das Objekt ist nur im 24-Bit-Adressierungsmodus ablauffähig.

= 31
Der Makroaufruf wird adressierungsmodus-unabhängig generiert.

REQNO = zahl

zahl <= 8, „zahl“ bestimmt die Nummer der Ein-/Ausgabeanforderung bzw. des zugehörigen Aufrufs. Durch verschiedene Nummern gekennzeichnet, können mehrere asynchrone Lese- oder Schreiboperationen veranlasst werden. Jede dieser Lese-/Schreiboperationen muss mit der Operation WT (versehen mit der entsprechenden Nummer) abgeschlossen werden. Die maximale Anzahl gleichzeitiger Ein-/Ausgabeoperationen wird im FCB, Operand BTAMRQS, festgelegt.

Operationscodes

POS – Band auf eine bestimmte Stelle positionieren

Zum Wiederaufsetzen, z.B. nach Schreibfehlern mit Datenverlust: der Anwender kann die Bandposition, die er durch eine frühere RBID-Operation erhalten hat, an der mit LOC bestimmten Adresse angeben, das Band wird dann entsprechend positioniert.

RBID – aktuelle Bandposition (Blocknummer) bestimmen

Jeder Block auf einem Magnetband, auch eine Abschnittsmarke, ist durch seine Bandposition identifizierbar.
Bei herkömmlichen Magnetbändern erhält der Anwender die Bandposition als Wertepaar (TM- und Record-Counter) zurück. Sie wird dem Anwender nach einem RBID-Befehl (oder SYNC-Befehl, siehe „SYNC - Synchronisieren und Markierungspunkte setzen") an der Adresse angezeigt, die durch den Operanden LOC definiert ist (siehe Operandenbeschreibung) oder – wenn LOC nicht angegeben wurde – in einem der im FCB definierten Ein-/Ausgabebereiche. Die Positionsangabe (die ersten acht Byte) ist abhängig vom Verarbeitungszustand und liefert im Fehlerfall die in der Tabelle aufgeführten Informationen im FCB-Feld ID1ECB. Das 9. Byte gibt an, wie die Postitionsangabe zu interpretieren ist:

2**7 = 1:

TM-/Record-Counter

2**6 = 1:

Block-ID

2**0 = 1:

keine gültige Positionsangabe

Vor Absetzen eines RBID-Befehls müssen alle noch ausstehenden asynchronen Lese-/Schreiboperationen (im MAV-Modus) mit einem WAIT abgeschlossen werden; bei synchroner Dateiverarbeitung führt BTAM den WAIT automatisch durch.

Bei Magnetbandkassetten wird die Bandposition als „Blocknummer“ (oder Block-ID) bestimmt.

Rückinformationen

Ereignis

Rückinformation

Bedeutung

Maßnahme

erfolgreiche Ausführung

Blocknummer

zeigt die Position des Datenblocks an, der als nächster in den MBK-Puffer geschrieben oder aus dem Puffer gelesen wird

----

nicht erfolgreiche Ausführung

Blocknummer
+Fehler DC7C

Bandposition wurde gesichert; die Blocknummer zeigt den letzten fehlerfrei geschriebenen Block

neu positionieren mit POS

Blocknummer undefiniert
+ Fehler DC7B

Bandposition konnte nicht gesichert werden

Rücksetzen auf einen Wiederaufsetzpunkt oder Programmabbruch

Blocknummer undefiniert
+ Fehler DC79

Bandposition konnte nicht gesichert werden

Programmabbruch

Blocknummer
+ Fehler DC77

Ein-/Ausgabefehler; die Bandposition wird so zurückgegeben, wie sie nach der Fehlerbehandlung vorliegt

----

Blocknummer undefiniert
+ Fehler DC77

Ein-/Ausgabefehler mit „Positionsverlust“

Rücksetzen auf einen Wiederaufsetzpunkt oder Programmabbruch

RDBF – nur für MBK – bei nicht behebbarem Schreibfehler die sichergestellten Daten des MBK-Puffers in den Anwenderbereich übernehmen

Bei gepuffertem Schreiben kann ein Fehler für Datenblöcke auftreten, für die der Anwender bereits eine positive Quittung erhalten hat. Die Geräteverwaltung versucht, die dem Kassettenpuffer bereits übergebenen Daten und die Bandposition zu sichern, sodass der Anwender eine ordnungsgemäße Fehlerbehandlung durchführen kann. Er kann den fehlerhaften Block und die darauf folgenden ebenfalls bereits positiv quittierten, aber noch nicht auf das Band geschriebenen Blöcke dem Sicherstellungsbereich des Puffers entnehmen und erneut bearbeiten, z.B. auf einen anderen Datenträger ausgeben.

Bevor die Datei geschlossen wird (CLOSE) oder Bandwechsel mit FEOV eingeleitet wird, muss der Anwender den Datenträger mit POS hinter den letzten erfolgreich auf das Band geschriebenen Block positionieren. Das „Herauslesen“ der Blöcke erfolgt nach dem Prinzip „last-in – first-out“, die Anzahl der gespeicherten Blöcke ist im Feld ID1BLANZ des TU-FCB enthalten. Für jeden Block muss ein RDBF-Befehl gegeben werden, der Eingabebereich wird wie bei einem normalen Leseaufruf versorgt: die Adresse ist über LOC im BTAM-Makroaufruf oder durch IOAREA im FCB gegeben, die Länge durch LEN im BTAM-Makroaufruf oder durch FCB-Angaben, analog dem Lesen von Band. Die Blöcke werden nur in der angegebenen Länge übertragen. Ist für die Datei RECFORM=V/U definiert, wird die echte Länge des gesicherten Blocks in dem Register angezeigt, das durch RECSIZE in FILE oder FCB definiert ist.

SYNC – Synchronisieren und Markierungspunkte setzen

Die im MBK-Puffer enthaltenen Daten werden auf Band geschrieben. Bei synchroner Verarbeitung (nicht MAV-Modus) veranlasst BTAM einen evtl. noch ausstehenden WAIT; bei asynchroner Verarbeitung (MAV-Modus) muss der Anwender dafür sorgen, dass vor Absetzen des SYNC-Befehls alle ausstehenden WAITS ausgeführt werden. Implizit wird mit dem SYNC-Aufruf auch ein RBID-Aufruf veranlasst, d.h. dem Anwender wird im Ein-/Ausgabebereich die aktuelle Bandposition mitgeteilt. Der Anwender kann dieses Verhalten nutzen, um Fixpunkte zu setzen, z.B. im Hinblick auf evtl. später auftretende Fehler: er kann auf diesen Punkten wieder aufsetzen, einen Bandwechsel veranlassen und auf dem Folgeband die Verarbeitung fortsetzen.

Hinweise zur Programmierung

  1. Der BTAM-Makroaufruf zerstört die Register 0, 1, 14 und 15.

  2. Missbrauch von FSF und FSR kann dazu führen, dass das Band bis zum Ende durchläuft und vom Operator wieder zurückgespult werden muss (off-line).

  3. Bei jedem nicht erfolgreichen Verzweigen nach BTAM wird die Steuerung an die Adresse abgegeben, die im EXIT-Operanden des FCB definiert ist. Im FCB wird ein entsprechender sedezimaler Fehlerschlüssel abgesetzt.

  4. Gibt ein Anwender Blöcke fester Länge an (Format F), liest jedoch Blöcke anderer Länge als angegeben, wird die Steuerung an den Ausgang ERRADDR im EXLST-Makroaufruf übertragen.

    Überschreitet die Länge des Satzes die definierte Länge, so wird im „Ablaufteil-Markierungsbyte“ das „abnormale Beendigungs-Bit“ und im Fehler-Byte das „Satzlängen-Fehler-Bit“ gesetzt, sofern es sich nicht um eine RTL- bzw. RNTL-Operation unter gleichzeitiger Verwendung von Kettung und/oder MAV-Modus handelt (in diesem Fall erfolgt keine Benachrichtung des Benutzers).
    Ist der Block jedoch kleiner als die definierte Länge, so wird das „abnormale Beendigungs-Bit“ gesetzt. Es wird jedoch kein Fehlerbyte übermittelt (die Restlänge ist in den Sense-Byte 2 und 3 gespeichert; siehe Makro NDWERINF, "NDWERINF - Status-Bytes abfragen"). Eine Benachrichtigung des Benutzers erfolgt nicht, wenn es sich um eine RTL- bzw. RNTL-Operation handelt.
  5. Gibt ein Anwender Blöcke variabler Länge an (Format U bzw. V) oder verwendet er die Operationcodes RTL bzw. RNTL, liest jedoch Blöcke mit größerer Länge als angegeben, so wird die Steuerung an den Ausgang ERRADDR im EXLST-Makroaufruf dann übertragen, wenn ohne Kettung und ohne MAV-Modus gearbeitet wird. Bei den Operationen RT oder RNT wird generell der Ausgang ERRADDR aktiviert. In allen anderen Fällen erfolgt bei Format U/V keine Information des Benutzers.

    Zusammengefasst ergibt sich also folgendes Bild bzgl. der Benachrichtigung des Benutzers.

    OperationRECFORM=F
    Block < gg. Länge
    RECFORM=F
    Block > gg. Länge
    RECFORM=U/V
    Block < gg. Länge
    RECFORM=U/V
    Block > gg. Länge
    RD(WT)jajaneinbedingt *)
    R(N)Tjajajaja
    R(W)TLneinbedingt *)neinbedingt *)

    *) Benachrichtigung falls nicht Kettung und nicht MAV-Modus

  6. Der Anwender braucht, falls nicht im MAV-Modus gearbeitet wird, explizit keine „WAITs“ anzugeben. BTAM gibt automatisch vor jeder neuen Operation einen WAIT aus. Tritt jedoch in diesem WAIT ein Fehler auf, so wird der Fehlerschlüssel X'0C77' ausgegeben. Die neue Operation wird nicht ausgeführt.
    Es ist aber zu beachten, dass dieser implizite WAIT-Aufruf nur bei Arbeiten mit mehreren Ein-/Ausgabebereichen sinnvoll ist. Da die Daten im Ausgabebereich beim Schreiben grundsätzlich bis zum erfolgten WAIT erhalten bleiben müssen bzw. beim Lesen der Eingabebereich erst nach erfolgtem WAIT ordnungsgemäß gefüllt ist, muss im Falle der Verwendung nur eines Ein-/Ausgabebereiches der Anwender selbst für das Absetzen eines WAITs sorgen, sobald er seinen einzigen Bereich erneut verwenden will.

  7. BTAM verwendet nicht den EXLST-Ausgang EOFADDR (Dateiende). Wird von einem RD, RDWT, RNT, RNTL, RT, RTL, REV oder REVWT eine Abschnittsmarke gelesen, wird die Steuerung an die ERRADDR-Adresse übertragen.
    Das Programm kann nach dem WAIT die 5 Status-Byte im FCB (SDB, FB1, FB2, FB3, AMB) auswerten. Die Steuerung wird ebenfalls der ERRADR-Adresse übertragen, falls versucht wird, ein auf Bandanfang positioniertes Band rückwärts zu lesen.

  8. Bei den Operationen REV und REVWT ist die Adresse für das erste Byte, in das Daten gelesen werden, definiert durch:

    LOC + LEN - 1.
  9. Bei einer Datei, die mit BTAM eröffnet wurde, kann der SAM-Makroaufruf FEOV verwendet werden. Bei Erkennen des Dateiendes auf dem aktuellen Band, verzweigt BTAM zum sonst nicht verwendeten Ausgang EOFADDR.

  10. CHAINIO mit Magnetbandkassetten: die Transporteinheit sollte nicht größer sein als die Puffergröße, und die Puffergröße sollte als n*BLKSIZE darstellbar sein. Wird im Fehlerfall die Anzahl noch im Puffer befindlicher Blöcke angezeigt (TU-FCB: ID1BLANZ), bezieht sich diese immer auf einzelne Blöcke, nicht auf Transporteinheiten; auch die RDBF-Operationen betreffen immer nur einzelne Blöcke.

  11. MAV-Modus mit Magnetbandkassetten: für BTAMRQS im FCB können kleinere Werte gewählt werden als bei Magnetbändern, da die Benutzer-Ein-/Ausgabebereiche schneller wieder frei werden.

  12. Im Fehlerfall kann es vorkommen, dass nicht der gesamte Inhalt des MBK-Puffers auf die Magnetbandkassette geschrieben werden konnte. Auf die vom Betriebssystem aus dem MBK-Puffer in einen Sicherstellungsbereich übernommenen Blöcke kann der Anwender wieder Bezug nehmen, was einem Lesen von Band in umgekehrter Richtung entspricht. Anschließend sollte der Anwender versuchen, die Magnetbandkassette hinter den letzten ordnungsgemäß geschriebenen Block zu positionieren.

    Der Anwender muss dafür sorgen, dass vor weiteren Schreibaufrufen (speziell vor dem Schreiben der EOV-/EOF-Kennsätze) das Magnetband eine definierte Position hat (POS-Befehl); andernfalls können Daten überschrieben werden. RBID nach Fehler DC7C liefert die Position nach dem letzten korrekt auf Band geschriebenen Block.

    Der Anwender erreicht einen ordnungsgemäßen Abschluss des Bandes mit Schreiben von Endekennsätzen, wenn er anschließend einige Blöcke rückwärts liest oder zurückpositioniert (falls er auf die bereits geschriebenen Daten verzichten kann).

  13. Wurden bei einem Schreibfehler nicht alle Blöcke des Kassettenpuffers auf das Band geschrieben, im Sicherstellungsbereich des Puffers aber noch gesichert, muss als Nächstes die Operation RDBF oder RBID veranlasst werden, als Zeichen dafür, dass der Anwender auf die Daten des MBK-Puffers nicht verzichtet. Diese Daten stehen ihm sonst später nicht zur Verfügung. Die Operationen RDBF und RBID können in beliebiger Reihenfolge abgesetzt werden; der Pufferinhalt bleibt solange erhalten, wie keine andere Operation veranlasst wird. Ausgenommen sind dabei noch ausstehende WAITs im MAV-Mode, die vom Benutzer vor Abgabe des RDBF- und RBID-Befehls aufgerufen werden dürfen (und vor dem RBID auch müssen); naturgemäß werden dann alle den Fehler DC7C melden.

    Verzichtet der Benutzer nach der Meldung DC7C auf eine anschließende Positionierung, so geht die Bandposition auf „UNDEFINED“ über. Dieser Zustand „UNDEFINED“ kann nur durch Positionierung (auch REW und UNL) aufgehoben werden.

  14. Beim Kennzeichnen von markanten Punkten (Fixpunkte) durch Absetzen von SYNC-Befehlen wird verlangt, dass vorher alle angestoßenen Ein-/Ausgaben mit einem WAIT abgeschlossen wurden.

  15. Im MAV-Modus müssen bei einer Aufruffolge, wo „Schreiben“ nach einem „Lesen rückwärts“ erfolgt, vor dem „Schreiben“ alle ausstehenden WAITS abgesetzt sein.

  16. Es ist eine Eigenart der Magnetbandkassetten, dass ein bei Ausgabeoperationen auftretender Fehler erst zum Zeitpunkt des Transfers vom Puffer auf das Band gemeldet wird; der Benutzer erfährt von einem aufgetretenen Fehler somit u.U. erst zum Zeitpunkt eines späteren Auftrags. Es kann also vorkommen, dass der Anwender die Meldung „Bandende“ noch vor der Meldung eines davor aufgetretenen Fehlers bekommt. Die Meldung „Bandende“ bedeutet, dass ab dem Zeitpunkt der Meldung keine weiteren Schreibaufträge vom Benutzer abgesetzt werden sollen, damit gewährleistet ist, dass noch alle im Puffer befindlichen Daten und die Endekennsätze auf das Band passen. Die Meldung „Bandende“ ist bei Magnetbandkassette nicht vom Erkennen einer Endemarke auf dem Band abhängig, sondern wird bereits beim Transfer der Daten in den Puffer, abhängig von dessen Füllgrad und anderen Kriterien, ausgegeben.

  17. Bei den Makroaufrufen FEOV oder CLOSE für eine BTAM-Datei, die INOUT eröffnet wurde, wird die Datei als Ausgabedatei behandelt, wenn für die Datei im Laufe der Verarbeitung eine WRITE-mit-WAIT-Operation angefordert wurde (WRT, WRTWT, WTM). Wurde keine WRITE-mit-WAIT-Operation angefordert, wird die Datei als Eingabedatei behandelt.

  18. BTAM gibt den Fehlerschlüssel X'0C95' aus

    • wenn ein ungültiger Gerätetyp angegeben wurde

    • wenn der Operationscode ungültig ist

    • wenn im FCB-Operanden RECSIZE eines der Register 0, 1, 13, 14 oder 15 angegeben wurde

    • wenn der Wert des Operanden LEN im BTAM-Makroaufruf <= 0 ist oder wenn er, falls LOC=relaus nicht angegeben ist, größer als BLKSIZE ist (dann nämlich wird IOAREA1/2 verwendet, die die Größe von BLKSIZE hat)

    • wenn bei einer OUTPUT-eröffneten Datei eine Leseoperation angefordert wurde

    • wenn im MAV-Modus die REQNO-Angabe größer ist als maximal erlaubt

    • wenn im MAV-Modus vor einem Lese-/Schreibaufruf für die gleiche REQNO der WAIT-Aufruf fehlt

    • wenn nach RUN ein BTAM-Aufruf gegeben wurde (es ist nur CLOSE erlaubt) oder wenn nach einem nicht erfolgreichen FEOV ein BTAM-Aufruf gegeben wird.

    • wenn für eine nicht für BTAM eröffnete Datei BTAM-Aufrufe gegeben werden (außer in EXLST-Routinen zur Kennsatzbehandlung)

  19. Beim Erweitern einer Banddatei sollte ein unmittelbarer Wechsel von Lese- und Schreibbefehl vermieden werden. Wegen fehlender Löschüberlappung kann das bei einzelnen Magnetbandgeräten zu Schwierigkeiten führen.

    Eine Folge, die immer korrektes Verhalten garantiert:

    BTAM- Makroaufruf

    Erklärung

    BSR, FSR, ...

    Band vor Block n positionieren

    RD

    Lesen (Retten) von Block n

    BSR

    Band wieder vor Block n positionieren

    WRT

    Block n erneut auf das Band schreiben

    WRT/WTM

    Block n+1 (oder Bandmarke) schreiben

  20. In bestimmten Fällen wird beim Lesen von Daten mit Kettung eine falsche Blocklänge nicht angezeigt (siehe "BTAM - Banddateien verarbeiten (Typ S)").

    Die Kette für die Eingabe CCWs läuft weiter. Die Bereiche, wohin die Eingaben der einzelnen Blöcke erfolgen, werden aber in dem der normalen Blockgröße entsprechenden Rhythmus weitergeschaltet, d.h. es werden in den Fällen, wo Blöcke kürzerer Länge auftreten, in den Ein-/Ausgabe-Bereichen Lücken vorhanden sein.

  21. Eine Angabe über verwendete Puffer erfolgt bei PARMOD=24 im Feld ID1LWB des P1FCB bzw. bei PARMOD=31 im Feld ID1BLWB bei der Durchführung eines WAITs in folgender Weise (asynchrone Verarbeitung): Bei Eingabe-Operationen wird der Puffer vermerkt, für den die letzte WAIT-Operation ohne Fehler-Rückmeldung erfolgt ist. Bei Ausgabe-Operationen ist der Puffer angegeben, der für die letzte Ausgabe (die noch nicht unbedingt beendet ist) verwendet wurde.

    Bei synchroner Verarbeitung gilt: bei PARMOD=24 wird im FCB-Feld ID1LWB der Puffer angegeben, der als Letzter verwendet und für den ein erfolgreicher WAIT abgesetzt wurde, bei PARMOD=31 wird das FCB-Feld ID1BLWB verwendet.

  22. Bei der Festlegung der Block- und Transporteinheits-Größen durch den Benutzer ist auf einen besonderen Aspekt hinzuweisen: Hinter jeder Ein-/Ausgabe-Operation durch den Gerätetreiber steht ein Fixieren der betroffenen Seiten.
    Bei gekettetem Ein-/Ausgabe-Betrieb wird das Fixieren bei jedem CCW der Kette veranlasst. Dies aber ist vom Memory Management aus nur bis zu einer Anzahl von 63 Fixierungen pro Seite möglich; d.h., wenn ein Auftrag so abgegeben wird, dass u.U. mehr als 63 CCWs, die sich auf dieselbe Seite beziehen, aufgebaut werden (z.B. bei Verwendung kleiner Blockgrößen und großer Transporteinheit-Längen), kann es zu einem CSTAT-Fehler kommen.

  23. Bei Bändern mit Standard-Kennsätzen überprüft BTAM vor Schreibbefehlen, ob die aktuelle Bandposition ein Schreiben dorthin erlaubt. Ist dies nicht der Fall, so wird der Auftrag mit USERERR und Fehlercode 0C9D abgewiesen.

Returncodes

Im TU-FCB werden die fünf Status-Byte (SDB, FB1, FB2, FB3, AMB) abgelegt. Zusätzlich werden im Feld ID1LRCRB noch folgende Informationen abgesetzt:

Byte 1     

X'04' Bandende/Bandanfang erreicht
X'02' Block kürzer als BLKSIZE-Wert (Blocklänge)
X'05' Block länger als BLKSIZE-Wert (Blocklänge)
X'01' Bandmarke erkannt
X'08' undefinierter Fehler (unrecoverable)
X'09' Parity Fehler (inoperabel)
X'0C' Gerät defekt
X'0D' Gerät in Betrieb
X'0E' Folge-Fehler auf Magnetbandkassette; Position nach defektem Block
X'0F' Bandformat und Gerätetyp sind nicht kompatibel

Byte 2     

Byte 3/4

Request-Nummer (nötig, da EXIT ERRADR nur einmal pro FCB)

Blocknummer innerhalb einer geketteten Ein-/Ausgabe-Anforderung, bei der ein Fehler aufgetreten ist, bzw. Nummer des Blockes, mit dem das Bandende erreicht wurde (dieser Block wird noch geschrieben).

Zum Abfragen der im ersten Byte des Feldes ID1LRCRB abgesetzten Werte steht eine DSECT (Makroaufruf: DLRC) zur Verfügung.

Bei Arbeiten im asynchronen Modus (Operand REQNO) werden bei Auftreten von Fehlern bei einer Ein-/Ausgabe die bereits angenommenen weiteren Ein-/Ausgabe-Anforderungen nicht mehr gestartet, sondern nach dem vom Benutzer abgesetzten WAIT logisch beendet. In einem solchen Fall ist neben der für die fehlerhafte Ein-/Ausgabe gültigen Fehlerinformation die Blocknummer in den Byte 3 und 4 des Feldes ID1LRCLB mit dem Wert 1 besetzt, und der Wert im RECSIZE-Register (bei RECFORM=U) ist 0.

Es ist gewährleistet, dass der Benutzer jederzeit, auch vor Abgabe aller noch ausstehenden WAITs, einen CLOSE-Aufruf geben kann. Alle zu diesem Zeitpunkt evtl. noch anstehenden Ein-/Ausgabe-Anforderungen werden dabei logisch beendet. Es sind aber noch nicht unbedingt alle Anforderungen durchgeführt.