ISAM: | Makrotyp: | R bei PARMOD=24 |
SAM: | Makrotyp: | R bei PARMOD=24 und bei PARMOD=31 |
Anwendungsbereich
Die Funktion PUT ist bei der Dateiverarbeitung mit SAM oder ISAM (satzorientierte Zugriffsmethoden) möglich. Die Datei muss dabei mit einem der folgenden OPEN-Modi eröffnet worden sein:
EXTEND | bei SAM und ISAM |
INOUT/OUTIN | bei ISAM |
OUTPUT | bei SAM |
Funktion
Der PUT-Makroaufruf dient zum sequenziellen Erstellen oder Erweitern einer Datei. Er verlängert die Datei um einen Satz.
Nur für K-ISAM:
Der PUT-Makroaufruf kann nur verwendet werden, wenn sequenziell an das Dateiende geschrieben werden soll. Wurde eine Datei INOUT oder OUTIN eröffnet, wird mit PUT der Satz an das aktuelle Dateiende geschrieben. War der letzte Makroaufruf zu dieser Datei kein PUT, wird mit dem PUT ein SETL an das Ende der Datei durchgeführt, bevor der Satz in die Datei geschrieben wird.
ISAM:
Beim sequenziellen Erstellen bzw. Erweitern einer Datei wird der PAD-Faktor (Blockfüllung) berücksichtigt. Die Auswirkungen bei NK-ISAM und K-ISAM sind jedoch unterschiedlich (Näheres siehe "OPEN-Modi").
Der PUT-Makroaufruf stellt sicher, dass der Datei nur Sätze hinzugefügt werden, deren Schlüssel gleich oder größer ist als der vorhandene größte Schlüssel. Wird die aufsteigende Folge der Schlüssel unterbrochen, geht die Steuerung an einen der beiden folgenden EXLST-Ausgänge:
DUPEKY, falls der Schlüssel des aktuellen Satzes gleich dem Schlüssel des Vorgängers ist und nicht DUPEKY=YES angegeben ist
SEQCHK, falls der Schlüssel des aktuellen Satzes kleiner ist als der höchste Schlüssel der vorhandenen Datei
NK-ISAM:
Ist für NK-ISAM im FCB IOAREA1=NO definiert, führt jeder PUT zu einem SVC, der PAD-Wert wird nicht berücksichtigt.
Ist IOAREA1≠NO, wird der Ein-/Ausgabebereich IOAREA1 so lange mit Sätzen gefüllt, bis eine der folgenden Bedingungen erfüllt ist:
der Puffer ist gefüllt
die mit PAD in FILE/FCB definierte Grenze ist überschritten
ein anderer ISAM-Aktionsmakro als PUT wird ausgeführt
Dann wird ein SVC abgesetzt und der Datei ein neuer Datenblock mit dem Inhalt des Ein-/Ausgabebereichs hinzugefügt.
Bei Shared-Update-Verarbeitung ist nach einem PUT der gesamte Bereich zwischen dem aktuellen höchsten Schlüssel und dem Dateiende gesperrt.
Locate-Mode (Ortungsbetrieb):
Im Locate-Mode versorgt das DVS das IOREG-Register (siehe Makro FCB, Operand IOREG, "FCB - Dateisteuerblock definieren") mit der Adresse des ersten freien Bytes innerhalb des Puffers. Der Anwender muss anschließend dafür sorgen, dass der Satz, der in die Ausgabedatei aufgenommen werden soll, an dieser Adresse bereitgestellt wird.
Der PUT-Aufruf überprüft den Satz und aktualisiert für den folgenden Satz die Adresse in IOREG. Nachdem der letzte Satz an der IOREG-Adresse bereitgestellt wurde, braucht der PUT-Makro nicht mehr aufgerufen zu werden (andernfalls kommt es zu einem CLOSE-Fehler oder der Datei wird ein „verfälschter“ Satz hinzugefügt).
SAM:
Werden Sätze vom Format V im LOCATE-Modus verarbeitet, gibt das DVS im VARBLD-Register (siehe Makro FCB, Operand VARBLD, "FCB - Dateisteuerblock definieren"), nach jedem PUT die verbleibende Pufferkapazität an. Im Anwenderprogramm muss sichergestellt werden, dass ein Satz in den restlichen Pufferbereich vollständig aufgenommen werden kann. Reicht der vorhandene Platz nicht aus, muss der RELSE-Makro aufgerufen werden, damit ein Datenblock abgeschlossen wird.
Move-Mode (Übertragunsbetrieb) – Bandverarbeitung:
Wird bei Bandverarbeitung beim PUT-Aufruf eine Übertragung der vorherigen Sätze ausgelöst und dabei die Bandendemarke erreicht, wird anschließend der aktuelle Satz ohne Blockung allein in einem Block auf das Band geschrieben, bevor der Bandwechsel eingeleitet wird. Dadurch kann sich die Datei pro Bandwechsel um einen Block vergrößern.
Format
Operation | Operanden |
|
|
Operandenbeschreibung
fcbadr
Adresse des FCB für die zu verarbeitende Datei.
(1)
Die FCB-Adresse steht im Register 1.
area
aktuelle Adresse des Satzes, der in den Ausgabepuffer gebracht werden soll; bei Dateiverarbeitung im Locate-Mode wird der Operand (Operand IOREG im FCB) ignoriert.
(0)
Die Adresse des in den Ausgabepuffer zu übertragenden Satzes steht im Register 0.
PARMOD
Gibt den Generierungsmodus an.
Voreinstellung: | der durch den Assembler oder den GPARMOD-Makroaufruf im Programm eingestellte Wert |
= 24
Der Makroaufruf wird mit der Expansion für die 24-Bit-Schnittstelle aufgelöst. Es wird ein Objekt erzeugt, das nur im 16-MB-Adressraum (24-Bit-Adressierung) ablauffähig ist.
= 31
Es wird ein Objekt erzeugt, das im 2-GB-Adressraum ablauffähig ist (24-Bit- oder 31-Bit-Adressierung). Der Makroaufruf wird adressierungsmodus-unabängig generiert.
Hinweise zur Programmierung
Der PUT-Makroaufruf zerstört die Register 0, 1, 14 und 15.
Ein PUT-Makroaufruf führt nur dann zu einem SVC, wenn eine Pufferübertragung ausgelöst wird. Der Anwender kann daher nicht erwarten, bei jedem PUT-Aufruf die Kontrolle in einem STXIT-Prozess zu bekommen (bei Verwendung des STXIT-Makroaufrufs mit SVC= oder SVCLIST=; Näheres siehe Handbuch „Makroaufrufe an den Ablaufteil“ [2]).