INPUT | sequenzielles Lesen in Richtung Dateiende; die Datei muss existieren |
OUTPUT | neue Datei sequenziell erstellen oder eine vorhandene Datei überschreiben |
EXTEND | Datei erweitern |
UPDATE | nur für Plattendateien im Locate-Mode: Sätze aktualisieren; der zu aktualisierende Satz muss mit GET bereitgestellt werden, bei der Verarbeitung darf die Satzlänge nicht verändert werden, der aktualisierte Satz wird mit PUTX zurückgeschrieben |
REVERSE | sequenzielles Lesen in Richtung Dateianfang; die Datei muss existieren; Banddateien, die sich über mehrere Datenträger erstrecken, können nur pro Datenträger mithilfe des VSEQ-Operanden (siehe "FILE - Dateimerkmale definieren/Dateiverarbeitung steuern") gelesen werden; kein automatischer Bandwechsel. |
Nachfolgende Tabelle zeigt, welche OPEN-Modi bei welchen SAM-Aktionsmakroaufrufen möglich sind.
Aktionsmakroaufruf | OPEN-Typ | OPEN-Typ | OPEN-Typ | OPEN-Typ | OPEN-Typ |
GET | x | x | x | ||
PUT | x | x | |||
PUTX | x | ||||
RELSE | x | x | x | x | x |
SETL | x | x | x | x | x |
Werden Dateien als Ausgabedateien eröffnet (OPEN OUTPUT/EXTEND), interpretiert SAM jeden PUT- oder SETL-Makroaufruf als „EOF-Anzeige“. Der letzte PUT oder SETL vor einem CLOSE zeigt dem System somit automatisch das Dateiende an. Sollen ab einem bestimmten Satz alle folgenden Sätze gelöscht werden, kann der Anwender mit dem SETL-Makroaufruf auf den gewünschten Punkt in der Datei positionieren und anschließend die Datei mit CLOSE schließen.
Für den Direktzugriff wird dem Anwender eine Wiedergewinnungsadresse bereitgestellt. Das Format dieser Wiedergewinnungsadresse ist ausführlich im Kapitel „SAM“ im Handbuch „Einführung in das DVS“ [1] beschrieben. Beim Schreiben eines Satzes wird seine Wiedergewinnungsadresse im FCB bereitgestellt. Der Anwender kann, falls er es wünscht, aus den Daten der Wiedergewinnungsadresse eine neue Datei aufbauen und hierbei eine Grundlage für anschließende nichtsequenzielle Verarbeitung der Datei schaffen, die gerade erstellt wird. Nach der Ausführung eines GET-Makroaufrufs wird diese Wiedergewinnungsadresse ebenfalls im FCB bereitgestellt. Auch hier kann der Anwender – falls er eine Datei nicht selbst erstellte – eine zweite Datei aus den Wiedergewinnungsadressen aufbauen, um eine anschließende nichtsequenzielle Verarbeitung der Datei durchzuführen.
Wird im Move-Mode mit zwei Ausgabepuffern beim Schreiben eines Datenblockes für eine Banddatei das physikalische Bandende erkannt, so wird der andere Puffer (der nur einen Satz enthält) noch auf das alte Band geschrieben. Erst dann wird der Bandwechsel eingeleitet.
Soll eine Datei im Locate-Mode erstellt werden (OPEN OUTPUT/EXTEND), erhält der Anwender nach Abschluss des OPEN in dem Register, das im FCB-Operanden IOREG angegeben ist, die Anfangsadresse des ersten zu schreibenden Satzes. Nach Ausführung des PUT-Makroaufrufs enthält das IOREG-Register die Anfangsadresse des nächsten Satzes.
Bei einer Datei mit Sätzen variabler Länge (RECFORM=V) erhält der Anwender außerdem immer die Zahl der noch freien Bytes im aktuellen Block: Sie wird ihm in dem Register übergeben, das er im Operanden VARBLD des FCB-Makros angegeben hat.
Primär-/Sekundärzuweisung (Plattendateien)
Wird eine SAM-Datei erstellt oder erweitert (OPEN OUTPUT/EXTEND), müssen Primär- und Sekundärzuweisung mindestens gleich der Blockgröße sein.
Soll im Move-Mode eine Datei erstellt oder erweitert werden (OPEN OUTPUT/EXTEND), die mit RECFORM=F oder RECFORM=V definiert wurde und pro Datenblock mehr als einen Satz enthält, so gilt:
Die Primärzuweisung muss mindestens das Doppelte der Datenblocklänge betragen (Primärzuweisung >= 2 * BLKSIZE). Andernfalls geht die Steuerung an den EXLST-Ausgang NOSPACE (Speicherplatzzuweisung nicht ausreichend).
Die Sekundärzuweisung durch SAM wird bereits beim ersten Satz des letzten Blockes eingeleitet, der noch in den zugewiesenen Bereich geschrieben werden kann. Kann die Sekundärzuweisung nicht durchgeführt werden, dann geht die Steuerung an den EXLST-Ausgang NOSPACE (sofern er im Programm vorgesehen ist). Dies gibt dem Anwender die Möglichkeit, die restlichen Sätze des letzten Blockes noch zu schreiben.
Auswirkungen des LABEL-Operanden (Banddateien)
NO / NSTD | Angaben im BUFOFF-Operanden führen zum OPEN-Fehler bei CODE=ISO/OWN und BLKSIZE=STD |
(STD,0) | Angaben im BUFOFF-Operanden und CODE=ISO/OWN führen zum OPEN-Fehler |
(STD,1) | Angaben im BUFOFF-Operanden und die Angabe von CODE=ISO/OWN führen zum OPEN-Fehler; |
(STD,2) | Standardblöcke werden in Nichtstandardblöcke (BLKCTRL=DATA/NO) und V-Sätze in D-Sätze umgewandelt; |
(STD,3) | Standardblöcke werden in Nichtstandardblöcke (BLKCTRL=DATA/NO) und V-Sätze in D-Sätze1) umgewandelt; |
STD / keine Angabe | Angaben im BUFOFF-Operanden führen zum OPEN-Fehler. |
1) Bei D-Sätzen werden Längenangaben dezimal geführt.
Aus der Kombination der Angaben in den Operanden CODE, RECSIZE und RECFORM ergeben sich folgende Werte für LABEL, wenn die zu erstellende Datei die Erste auf dem Band ist:
CODE | Blockformat | REFORM | LABEL-Wert (implizit) |
EBCDIC | PAMKEY | - | (STD,1) |
EBCDIC | DATA/NO | U | (STD,2) |
EBCDIC | DATA/NO | F/V | (STD,3), V-Sätze --> D-Sätze |
ISO/OWN | PAMKEY | - | OPEN-Fehler |
ISO/OWN | DATA/NO | U | (STD,2) |
ISO/OWN | DATA/NO | F | (STD,3) |
ISO/OWN | DATA/NO | V | V-Sätze --> D-Sätze (STD,3) |
Tabelle 4: Auswirkungen von CODE-, BLKSIZE- und RECFORM-Angaben auf den LABEL-Operanden
Die Kombination von BUFOFF und RECFORM=U oder BLKCTRL=DATA ist nicht zulässig!
Bei LABEL=(STD,1) ist es nicht möglich, eine Datei mit CODE=EBCDIC, mit Nichtstandardblöcken und D-Sätzen zu schreiben, sie kann jedoch gelesen werden.
Es kommt zum OPEN-Fehler, wenn ein im LABEL-Operanden geforderte Standardkennsatzstufe nicht mit der im VOL1-Kennsatz enthaltenen übereinstimmt.
Wurde LABEL=STD angegeben oder keine Angabe gemacht, wird die Kennsatzstufe entsprechend der o.g. Tabelle SAM-2 ermittelt. Liegt die so ermittelte Kennsatzstufe über der im VOL1-Kennsatz, gilt die im VOL1-Kennsatz definierte Kennsatzstufe. Liegt sie unter der Kennsatzstufe im VOL1-Kennsatz oder gilt aus dem VOL1-Kennsatz LABEL=(STD,0) und gilt CODE=ISO/OWN, kommt es zum OPEN-Fehler.
Satzformate für SAM-Dateien
Bei SAM sind die Satzformate F (feste Satzlänge), V (variable Satzlänge) und U (undefinierte Satzlänge) zulässig.
Bei Format U schreibt/liest SAM pro Datenblock (Puffer) nur einen Satz. Die Definition RECFORM=U in Verbindung mit BLKSIZE=STD und BLKCTRL=PAMKEY sowie einer aktuellen Satzlänge von 48 Byte hätte z.B. zur Folge, dass in jeder PAM-Seite 2000 Byte „verschwendet“ würden.
Wird ein Standardblock nicht voll ausgenutzt (z.B. nach den Aktionsmakroaufrufen RELSE, SETL, FEOV oder CLOSE), bleiben die restlichen Byte unverändert; d.h. sie haben undefinierten Inhalt.
Die Satzlänge darf die Blocklänge nicht überschreiten (siehe BLKSIZE-Operand in FILE/FCB).
Weitere Angaben zum Satzformat sind dem Kapitel „Zugriffsmethoden“, Handbuch „Einführung in das DVS“ [1] zu entnehmen.
Wiedergewinnungsadresse
Das DVS versorgt beim Erstellen einer SAM-Datei im FCB eine Wiedergewinnungsadresse, die für Positionierungen mit SETL genutzt werden kann. Die Wiedergewinnungsadresse besteht aus Block- und Satznummern. Die Blocknummer bezieht sich immer auf den logischen Datenblock (nicht auf PAM-Seiten), die Satznummer zeigt die Position des Satzes innerhalb eines Datenblocks. Bei Mehrbanddateien ist zu beachten, dass die Blocknummer nur innerhalb eines Bandes geführt wird.
Im 31-bit-TU-FCB ist die Wiedergewinnungsadresse auf zwei jeweils ein Wort lange Felder aufgeteilt: das Feld ID1BLK# enthält die Blocknummer innerhalb der Datei, das Feld ID1REC# die Satznummer innerhalb des Datenblocks. Satz- und Blockzähler werden bei PUT und GET vom System automatisch hochgezählt. Wird eine Datenübertragung ausgelöst, wird der Satzzähler automatisch zurückgesetzt.
Beim 24-bit-TU-FCB im Feld ID1RPTR in der Form „bbbbbbrr“ enthalten: „bbbbbb“ ist die Nummer des Datenblocks in der Datei, „rr“ die Nummer des Satzes innerhalb des Datenblocks. Der Satzzähler wird vom System nicht automatisch hochgezählt, dies muss der Anwender im Programm durchführen, wenn er die Wiedergewinnungsadresse nutzen will. Der Satzzähler wird jedoch bei jeder Datenübertragung automatisch zurückgesetzt.
Für Bandverarbeitung ist zu beachten, dass die Wiedergewinnungsadresse bei 24-Bit-Verarbeitung nur für Dateien mit Standardblockung versorgt wird, sodass für Dateien mit Nichtstandardblöcken kein SETL R möglich ist (siehe Makro SETL, "SETL - In der Datei positionieren").
Aufbau der Wiedergewinnungsadresse:
ID1BLK# (1 Wort) | ID1REC# (1 Wort) |
Blocknumer | Satznummer |
Tabelle 5: Aufbau der Wiedergewinnungsadresse XS-Schnittstelle
ID1RPTR1 Byte 1-3 | ID1RPTR* Byte 4 |
Blocknummer | Satznummer |
Tabelle 6: Aufbau der Wiedergewinnungsadresse Nicht-XS-Schnittstelle
1 1 Wort
Der erste Satz einer Datei hat also folgende Wiedergewinnungsadressen:
im 31-bit-TU-FCB im 24-bit-TU-FCB | 00000001 im Feld ID1BLK# und 00000001 im Feld ID1REC# 00000101 im Feld ID1RPTR |
Bei der Bearbeitung von SAM-Node-Files ist Folgendes zu beachten:
Wird beim Beschreiben eines SAM-Node-Files ein Datenblock mit RELSE abgeschlossen, bevor er vollständig gefüllt worden ist, sind die Wiedergewinnungsadressen ab dieser Stelle nur gültig solange die Datei noch geöffnet ist.
Nach CLOSE und erneutem OPEN, ergibt sich eine andere Aufteilung der Datensätze des Node-Files auf die SAM-Blöcke, die der Zugriffsmethode zur Bearbeitung übergeben werden, so dass die vorherigen Wiedergewinnungsadressen nicht mehr zur Datei passen!
Dieses Verhalten bei SAM-Node-Files (Net-Storage) ist inkompatibel zur Verarbeitung von SAM-Dateien auf herkömmlichem Public-Space, wo die Block- und Satzstruktur auch nach CLOSE und OPEN erhalten bleibt. Die Anwendung muss daher vor dem Öffnen der Datei mit dem Indikator SAM_NODE_FILE_ENABLE im Dateisteuerblock (FCB) anzeigen, dass sie in der Lage ist SAM-Node-Files korrekt zu verarbeiten.
Werte der Wiedergewinnungsadresse nach SETL B und SETL E, abhängig von OPEN:
OPEN-Modus | SETL B | SETL B | SETL B | SETL E | SETL E | SETL E |
INPUT, UPDATE | - | - | - | max | 1 | max 1 |
OUTPUT | 1 | 0 | 1 0 | Fehler | Fehler | Fehler |
EXTEND | 1 | 0 | 1 0 | Fehler | Fehler | Fehler |
REVERSE | - | - | - | - | - | - |
Tabelle 7: Werte der Wiedergewinnungsadresse nach SETL B und SETL E, abhängig von OPEN
- | Feldinhalt unverändert |
max | höchste Blocknummer |
Im Feld IDRPTR sind Block- und Satzzähler dargestellt.
Die Aktionsmakroaufrufe versorgen die Wiedergewinnungsadresse folgendermaßen:
GET
Wird durch den angegebenen Satz eine Datenübertragung erforderlich, enthält der Blockzähler die logische Blocknummer, und der Satzzähler wird zurückgesetzt. Beim 31-Bit-FCB wird der Satzzähler bei jedem Aktionsmakroaufruf aktualisiert.
PUT
Wird durch den PUT-Makroaufruf für den angegebenen Satz eine Datenüberragung ausgelöst, dann wird der Blockzähler aktualisiert und der Satzzähler zurückgesetzt. Das heißt, dass der Blockzähler auf die Nummer des neuen Datenblocks gesetzt wird, der den Satz aufnehmen soll. Bei 31-Bit-FCB wird der Satzzähler bei jedem Aktionsmakroaufruf aktualisiert.
RELSE
Wenn eine Datei erstellt oder erweitert wird (OPEN OUTPUT/EXTEND) enthält der Blockzähler die Nummer des Datenblocks, der den folgenden Satz aufnehmen soll, der Satzzähler wird auf null gesetzt.
FEOV
nach Bandwechsel werden Block- und Satzzähler für das neue Band vom System zurückgesetzt.
Beispiel | |
Dateieigenschaften: | BLKCTRL=PAMKEY, BLKSIZE=(STD,2), RECFORM=F, RECSIZE=512 |
Wiedergewinnungsadresse | Wiedergewinnungsadresse | Wiedergewinnungsadresse | |
für Satz 10 | 00000002 | 00000002 | 00000202 |
für Satz 20 | 00000003 | 00000004 | 00000304 |