Makrotyp: S-Typ (E-Form/L-Form/D-Form/C-Form) (siehe "Typen von Makroaufrufen")
Der Makro CREPOOL erzeugt einen task- oder host- oder userid-spezifischen ISAM-Pool oder verbindet den Auftrag mit einem bereits existierenden ISAM-Pool. Der ISAM-Pool ist eindeutig gekennzeichnet durch folgende Eigenschaften:
Poolnamen: Operand NAME
Katalogkennung: Operand CATID
Geltungsbereich: Operand SCOPE
Größe des ISAM-Pools: Operand SIZE
Art der Pufferung: Operand WROUT
Performance-Eigenschaft des ISAM-Pools: Operand RESDNT
Der Makro CREPOOL kann nur bei XS-Programmierung (31-Bit-Schnittstelle) genutzt werden.
Hinweis
Taskübergreifende ISAM-Pools (SCOPE=HOST) werden bei der Dateieröffnung automatisch dateispezifisch in einem Data Space angelegt.
Die bis BS2000/OSD-BC V6.0A vorhandenen Geltungsbereiche SCOPE=USERID und SCOPE=USERGROUP werden aus Kompatibilitätsgründen noch akzeptiert, intern jedoch auf SCOPE=HOST (taskübergreifender ISAM-Pool) abgebildet. Für weitere Informationen zu ISAM-Pools in Data Spaces siehe Handbuch „Einführung in das DVS“ [1].
Format
Operation | Operanden |
|
|
| |
| |
|
Operandenbeschreibung
CATID = catid
gibt die Katalogkennung des Pubsets an, dem der ISAM-Pool zugeordnet werden soll: der ISAM-Pool wird an dem Host-Rechner eingerichtet, zu dem der hier genannte Pubset gehört. Die Katalogkennung kann wie beim Dateinamen als Teil des Namens gesehen werden, d.h. verschiedene Katalogkennungen bezeichnen verschiedene ISAM-Pools.
Voreinstellung: Default-Catid des aufrufenden Auftrags
MACID
wird nur in Verbindung mit MF=C ausgewertet und legt jeweils das zweite bis einschließlich vierte Zeichen der Feldnamen und Equates fest, die bei der Makroauflösung im Datenbereich generiert werden.
Voreinstellung: MACID = ISC
= macid„macid“ ist eine drei Zeichen lange Zeichenfolge, die jeweils das zweite bis vierte Zeichen der generierten Feldnamen und Equates festlegt.
MF
Die Formen des MF-Operanden sind detailliert im Anhang ("Typen von Makroaufrufen") beschrieben.
MODE
Gibt für taskübergreifende ISAM-Pools an, ob ein neuer ISAM-Pool angelegt werden soll oder ob eine Verbindung zu einem bereits existierenden Pool gleichen Namens und gleicher Catid hergestellt werden kann.
Standardmäßig schließt das DVS den Auftrag unbedingt an einen bereits bestehenden ISAM-Pool mit o.g. Namen an.
= ANY
Falls bereits ein taskübergreifender ISAM-Pool mit gleichem Namen und gleicher Catid von einer anderen Task erzeugt wurde, wird der Auftrag an diesen Pool angeschlossen, auch wenn die Angabe im Operanden SIZE nicht mit der tatsächlichen Poolgröße übereinstimmt.
Existiert noch kein solcher ISAM-Pool, wird ein neuer Pool mit der in SIZE definierten Größe angelegt.
Mit der Spezifikation des Parameters CREATION-MODE=ANY kann ausschließlich die Verbindung zu einem von einer anderen Task erzeugten ISAM-Pool hergestellt werden, d.h. wenn ein Task zweimal (oder mehrmals) hintereinander ein CREPOOL mit CREATION-MODE=ANY für einen ISAM-Pool abgesetzt wird, so wird der 2. Aufruf mit Fehler abgewiesen, auch wenn der ISAM-Pool durch den 1. Aufruf bereits existiert. D.h. wiederum: Innerhalb einer Task kann ein ISAM-Pool nur kreiert werden, wenn er für diese Task noch nicht existiert.
= NEW
Es soll ein taskübergreifender ISAM-Pool angelegt werden; existiert jedoch bereits ein solcher Pool gleichen Namens und gleicher Catid, wird der Makroaufruf abgewiesen.
NAME=poolname
Ordnet dem ISAM-Pool einen Namen zu. Zusammen mit Katalogkennung und Geltungsbereich ist der Pool so eindeutig identifizierbar.
„poolname“ kann 1-8 Zeichen lang sein; gültiger Zeichenvorrat: alle Buchstaben und Ziffern, sowie Sonderzeichen $, # und @; das erste Zeichen von „poolname“ muss ein Buchstabe oder eines der Sonderzeichen # oder @ sein.
PARAM
bezeichnet die Adresse der Operandenliste und wird nur in Verbindung mit MF=E ausgewertet (siehe auch "Typen von Makroaufrufen")
= adr
adr ist die symbolische Adresse (der Name) der Operandenliste.
= (r)
r ist die Nummer des Registers, das die Adresse der Operandenliste enthält. Vor dem Makroaufruf muss das Register mit diesem Adresswert geladen werden.
PREFIX
wird nur in Verbindung mit MF=C oder MF=D ausgewertet und legt das jeweils erste Zeichen der Feldnamen und Equates fest, die bei der Makroauflösung im Datenbereich generiert werden.
Voreinstellung: PREFIX = D
= pre
„pre“ ist ein Zeichen langes Präfix, mit dem die vom Assembler generierten Feldnamen und Equates beginnen sollen.
RESDNT
gibt an, ob die Seiten eines ISAM-Pools im Arbeitsspeicher resident gehalten werden sollen (im Sinn der Funktion $CSTAT):
= NO
gibt an, dass die Seiten des anzulegenden ISAM-Pools nicht resident gehalten werden sollen.
= YES
gibt an, dass die Seiten eines ISAM-Pools resident gehalten werden sollen. Zur Ausführung dieser Funktion ist ein Privileg für „Performanten Dateizugriff“ erforderlich.
Bei bereits existierenden ISAM-Pools wird der Aufruf abgewiesen, wenn ein Widerspruch zwischen dem RESDNT-Attribut des Pools und dem angeforderten RESDNT-Attribut besteht.
SCOPE
definiert den Geltungsbereich des ISAM-Pools.
= TASK
der ISAM-Pool kann nur vom aufrufenden Auftrag genutzt werden: er ist tasklokal.
= USERID
= USERGROUP
Die bis BS2000 OSD V6.0A vorhandenen Geltungsbereiche SCOPE=USERID und SCOPE=USERGROUP werden aus Kompatibilitätsgründen noch akzeptiert, intern jedoch auf SCOPE=HOST (taskübergreifender ISAM-Pool) abgebildet.
= HOST
Der ISAM-Pool kann von allen Aufträgen genutzt werden: er ist taskübergreifend.
Bei SCOPE=HOST wird der MODE-Operand ausgewertet; gleichzeitig wirkt sich SCOPE=HOST auf den WROUT-Operanden aus: die Voreinstellung WROUT=YES gilt für alle Dateien im ISAM-Pool und kann vom Benutzer nicht verändert werden.
SIZE
definiert die Größe des neu anzulegenden ISAM-Pools.
= STD
Der ISAM-Pool soll mit der im ISAM-Parameterservice festgelegten Standardgröße angelegt werden.
Wenn der Parameter CREATION-MODE=ANY spezifiziert wurde, gilt Folgendes: Wird der Pool neu angelegt, so wird die Angabe zu SIZE ausgewertet wie oben beschrieben. Existiert der ISAM-Pool bereits, so wird die Größe des bestehenden ISAM-Pools übernommen. Die Angaben zu RESDNT und zu WROUT müssen dagegen mit den Attributen des existierenden ISAM-Pools übereinstimmen.
= zahl
bestimmt die Größe des anzulegenden ISAM-Pools in PAM-Seiten:
32 <= zahl <= 32767 für taskübergreifende ISAM-Pools
32 <= zahl <= 8192 für tasklokale ISAM-Pools.
Ggf. stellt die vom Systemverwalter festgelegte maximale Größe des Benutzeradressraumes eine obere Grenze dar.
Ein ISAM-Pool, in dem Dateien gepuffert werden, die sowohl mit BLKCTRL=DATA2K als auch =DATA4K erstellt wurden, erhält dynamisch einen zweiten Extent, besteht also im Endeffekt aus einem 2K-Extent und einem 4K-Extent der Größe zahl.
Es ist zu beachten, dass mit der minimalen Größe von 32 PAM-Seiten nur Dateien mit einer Blockgröße bis höchstens (STD,6) verarbeitet werden können. Für die Bearbeitung von Dateien mit logischen Blöcken der Größe (STD,16) wird ein ISAM-Pool mit 96 PAM-Seiten benötigt.
WROUT
legt für den Pool fest, ob geänderte Blöcke einer Datei sofort auf Platte geschrieben werden sollen:
Voreinstellung:
WROUT=NO für einen tasklokalen ISAM-Pool (SCOPE=TASK)
WROUT=YES für einen taskübergreifenden ISAM-Pool
(SCOPE=USERID/USERGROUP/HOST)
= YES
Geänderte Blöcke werden sofort auf Platte geschrieben, unabhängig vom Wert des WROUT-Operanden im FILE- oder FCB-Aufruf für die zugehörige Datei.
= NO
gibt an, dass geänderte Blöcke nicht sofort auf Platte geschrieben werden müssen. Trotz einer Angabe von WROUT=NO bei CREPOOL wird jedoch ein geänderter Block sofort auf Platte geschrieben, wenn
für die zugehörige Datei WROUT=YES (durch FILE oder FCB bzw. ADD-FILE-LINK) spezifiziert ist oder wenn
für den Pool SCOPEnot equalTASK spezifiziert ist.
= UNCOND-NO
gibt an, dass geänderte Blöcke nicht sofort auf Platte geschrieben werden müssen, wobei die Einschränkungen von WROUT=NO nicht gelten:
Auch für einen taskübergreifenden Pool (SCOPE=USERID/USERGROUP/HOST) werden geänderte Blöcke nicht sofort auf Platte geschrieben.
Ein OPEN wird für Dateien, die mit SHARUPD=YES geöffnet werden sollen, nur dann durchgeführt, wenn im zugehörigen ADD-FILE-LINK-Kommando oder FILE-Makro explizit WRITE-IMMEDIATE=NO bzw. WROUT=NO spezifiziert wurde.
Returncodes
Die mit der C- oder D-Form des Makros generierten Feldnamen und EQU-Anweisungen für die Returncodes beginnen mit der Zeichenfolge DISC. Diese Zeichenfolge kann im ersten Zeichen durch PREFIX, in den Zeichen 2-4 durch MACID verändert werden.
Die Returncodes werden im Standardheader der Operandenliste hinterlegt.
Haupt-Returncode | Bedeutung |
DISCOK X'0000' | Makroaufruf war erfolgreich |
DISCNPAR X'0001' | auf die Operandenliste kann nicht zugegriffen werden |
DISCNCAT X'0003' | die Katalogkennung „catid“ ist im System nicht bekannt |
DISCNACC X'0004' | zum Pubset „catid“ besteht keine Verbindung |
DISCINVN X'0005' | der Poolname ist ungültig |
DISCSPAC X'0007' | der freie Adressraum reicht nicht aus, um einen Pool anzulegen |
DISCPLEX X'0008' | Der angegebene ISAM-Pool existiert bereits: |
DISCSYSE X'000B' | während der Makrobearbeitung trat ein Systemfehler auf |
DISCSIZE X'000C' | SIZE-Angabe ist nicht zulässig |
DISCINVW X'000E' | WROUT-Angabe ist nicht zulässig |
DISCINVS X'000F' | SCOPE-Angabe ist nicht zulässig |
DISCINVM X'0010' | MODE-Angabe ist nicht zulässig |
DISCPRIV X'0011' | fehlendes Privileg für die Angabe RESDNT=YES |
DISCPRES X'0012' | die RESDNT-Angabe in der Parameterliste und des bereits existierenden Pools widersprechen sich. |
DISCPERR X'0013' | Parameter-Fehler |
DISCSPEX X'0014' | Kontingent für ISAM-Pools überschritten |
DISCRLNK X'FFFF' | Makroaufruf konnte nicht ausgeführt werden (Linkage Fehler): Subreturncode1 auswerten! |