Allgemeines
Anwendungsgebiet: | Abfragen und Zugriff zu Listen und Tabellen; siehe "Abfragen und Zugriff zu Listen und Tabellen" |
Makrotyp: | S-Typ, MF-Format 2: Standardform/E-/L-/C-/D-/M-Form; siehe "S-Typ-Makroaufrufe" |
Das NDM (Nucleus Device Management) stellt für den Anwender, den Operator und die Systemverwaltung Informationen über den Belegungs- und Verfügbarkeitszustand der Konfiguration und der montierten Datenträger zur Verfügung. Zur Konfiguration zählen CPUs, Kanäle, Steuerungen und Geräte.
Den Geräten (Plattengeräte, Bandgeräte, Drucker, ...) sind Gerätetypen (T-C), Gerätefamilien (F-C), Volumetypen (V-T) und Geräteklassen zugeordnet, siehe Handbuch „Systeminstallation“ [11]. Ein bestimmtes Gerät kann über seinen mnemotechnischen Gerätenamen (MN) angesprochen werden.
Der Makro NKGTYPE informiert über Namen, Gerätetypcode, Geräteeigenschaften, Pfadadressen und Pfadeigenschaften für einen Geräte- oder Volumetyp oder über Namen und Gerätetypcodes der Gerätetypen, die zu einer Gerätefamilie oder Geräteklasse gehören.
Makrobeschreibung
Der Makro NKDINF ermöglicht den Zugriff auf Daten, die von dem Informationsdienst (NKD) des NDM zur Verfügung gestellt werden. Die Daten informieren über
- die Belegungsmenge einer Task;
den Belegungs- und Verfügbarkeitszustand von Geräten, Geräte eines Gerätetyps, Geräte einer Gerätefamilie, Platten oder Bändern;
die Struktur der Konfiguration;
die Warteschlange für die Gerätereservierung.
Der Makro NKDINF übergibt die angeforderten Informationen in geeignet strukturierten Ausgabesätzen. Zur Interpretation der Ausgabe stellt er dem Anwender die Layouts dieser Ausgabesätze als DSECTs zur Verfügung.
Die Ausgabesätze enthalten Informationen über den Belegungs- und Verfügbarkeitszustand der angegebenen Geräte, Hardwareeinheiten oder Betriebsmittel. Die Sätze werden in einen Bereich des Klasse-6-Speichers eingetragen, den der Makro zuvor angefordert hat.
In diesem Ausgabebereich wird den vom Anwender angeforderten Ausgabesätzen noch der Output-Control-Record vorangestellt, ein Satz mit allgemeinen Informationen über die Makroausführung und die Struktur des Ausgabebereiches. Die Anfangsadresse des Bereiches wird im Feld NKDIOPTR
des Datenbereichs übergeben.
Für die Rückgabe des Speicherbereiches ist der Aufrufer zuständig (RELM-Makro). Die Längenangaben sind dem Output-Control-Record zu entnehmen. Bei der Rückgabe ist zu beachten:
Die Anfangsadresse des Ausgabepuffers ist auf Seitengrenze ausgerichtet.
Das Feld
NKDIOLEN
im Output-Control-Record enthält die Größe des Ausgabebereiches: Für den nichtprivilegierten Aufrufer ist sie in Hauptspeicherseiten (zu je 4K) angegeben.
Durch einen Makroaufruf mit MF=D und dem Operanden RECORD kann sich der Anwender das Layout eines jeden Ausgabesatzes als DSECT erzeugen lassen, der von NKDINF angeboten wird. Die DSECT ermöglicht eine symbolische Adressierung der einzelnen Felder eines Ausgabesatzes.
Der Anwender muss die Auswertung seines CONFIG-Records ändern, wenn er bestehende Programme (aus einer Version < BS2000/OSD-BC V3.0) mit BS2000/OSD-BC >= V3.0 übersetzt. Das Layout hat sich gegenüber BS2000/OSD-BC V2.0 inkompatibel geändert, da sich die Anzahl der Inner Connections des CONFIG von 4 auf 8 erhöht hat.
In Versionen < BS2000/OSD-BC V3.0 übersetzte Programme bekommen die Ausgabe im bisherigen Format übergeben, sind also weiterhin ablauffähig.
Für den nichtprivilegierten Anwender bestehen folgende Einschränkungen:
Tasksätze werden nur für Tasks unter der eigenen Kennung ausgegeben.
Der Aufrufer erhält keine Informationen über Gerätewarteschlangen (Operand DVQ), über Belegungen und Reservierungen angegebener Gerätetypen (Operand TYPTASK), über Platten, für die mit dem Kommando SET-DISK-PARAMETER Benutzungsvorgaben gemacht wurden (Operand DISC) und über Platten, für die das Produkt DRV im Einsatz ist (Operand DRV).
Informationen über Belegungen anderer Benutzer werden ausgeblendet.
Der Aufrufer erhält im LOC-Record nur die Ausgabe der SUMMARY-Information.
Makroaufrufformat und Operandenbeschreibung
NKDINF |
CONFIG={ NO / ALL / CHN / CPU / CTL / DVC / IOSIDE / SE / SIDE / ( {ctl-mn / chpid / chnrange / icuu / mn / ioside# / cpu# / se# / side# / dev#},{adr / (r)} [,{S / L}]) } ,EXTMN=NO / YES ,DISC={NO / MONITORED / SCHEDULED / ( {mn / vsn},{adr / (r)}[,{S / L[,TASK]}]) } ,TAPE={NO / {ALL / (ALL,CAR)} / ({mn / vsn},{adr / (r)}) / (mn,adr,CAR) } ,TASK={ NO / OWN / ({tsn / tid},{adr / (r)) } ,DEPOT={ NO / ALL / (mn / location}, {adr / (r)}) } ,DEVICE={ NO / ALL / ({mn / tt / fc},{adr / (r)}) } ,GLOBAL=NO / YES ,UNMONIT={ NO / ALL / (vsn,{adr / (r)}) } ,TYPTASK={ NO / ALL / ({fc / tt},{adr / (r}) } ,SUMMARY={ NO / ALL / ({fc / tt},{adr / (r)}) } ,DRV={ NO / ALL / ALL-DRV / (vsn,{adr / (r)}) } ,DVQ=NO / YES ,LOC={ NO / ALL / ({location / tt / fc / vt},{adr / (r)}) } [,RECORD=ALL / CONFIG / DEVICE / DEPOT / DISC / DRV / DVQ / GLOBAL / HEADER / LOC / SUMMARY / TAPE / TASK / TYPTASK / UNMONIT] ,HWSTATE=NO / YES ,MF=S / E / L / C / D / M [,PARAM=adr / (r)] ,PREFIX=N / p ,MACID=KDI / macid |
CONFIG=IOSIDE/SE/SIDE/(ioside#,...)/(se#,...)/(side#,...)
liefern keine Informationen mehr, da die zugehörige Hardware nicht mehr unterstützt wird. Die Operandenwerte können noch aus Kompatibilität angegeben werden.In der nachfolgenden Operandenbeschreibung sind die Operanden alphabetisch geordnet.
CONFIG=
für jede angegebene Einheit der Konfiguration wird ein CONFIG-Ausgabesatz geschrieben.
NO
Diese Funktion wird nicht gewünscht.
ALL
Informationen über alle generierten Units (Hardwareeinheiten) werden angefordert. Bei großen Konfigurationen kann mit CONFIG=ALL ein sehr großer Ausgabebereich entstehen.
CHN
Informationen über alle Kanäle werden angefordert.
CPU
Informationen über alle Zentraleinheiten werden angefordert.
CTL
Informationen über alle Mehrgerätesteuerungen werden angefordert.
DVC
Informationen über alle Geräte werden angefordert.
(ctl-mn,...)
Der Anwender übergibt in einer Liste (siehe "OPSGEN - Steuern der S-Variablen-Generierung durch MIP") die mnemotechnischen Namen der Gerätesteuerungen, über die er Informationen anfordert.
(chpid,...)
Der Anwender übergibt in einer Liste (siehe "OPSGEN - Steuern der S-Variablen-Generierung durch MIP") die CHANNEL_PATH_ID (Kanalpfadbezeichnungen) der Kanäle, über die er Informationen anfordert.
(chnrange,...)
Der Anwender übergibt in einer Liste (siehe "OPSGEN - Steuern der S-Variablen-Generierung durch MIP") den Kanalbereich, über den er Informationen anfordert.
(icuu,...)
Der Anwender übergibt in einer Liste (siehe "OPSGEN - Steuern der S-Variablen-Generierung durch MIP") die Geräteadressen von Hardwareeinheiten, über die er Informationen anfordert.
Eine Geräteadresse beschreibt den Weg, auf dem ein Gerät angesprochen werden kann. Sie ist 2 Byte lang und setzt sich aus folgenden Bestandteilen zusammen:
1. Byte: | 1. Halbbyte: Nummer des Ein-/Ausgabeprozessors |
2. Byte: | Anschlussnummer Mehrgerätesteuerung und Anschlussnummer Gerät |
(mn,...)
Der Anwender übergibt in einer Liste (s. unten) die mnemotechnischen Namen der Hardwareeinheiten, über die er Informationen anfordert.
(cpu#,...)
Der Anwender übergibt in einer Liste (s. unten) die Nummern der Zentraleinheiten, über die er Informationen anfordert.
(dev#,...)
Der Anwender übergibt in einer Liste (s. unten) die Gerätenummern der Hardwareeinheiten, über die er Informationen anfordert.
adr
symbolische Adresse (Name) eines Feldes; Das Feld enthält eine Liste von mnemotechnischen Gerätenamen, von Geräteadressen oder von Gerätenummern. Es ist auf Wortgrenze auszurichten.
(r)
r = Register mit dem Adresswert von adr. Die Angabe eines Registers ist nur in Verbindung mit MF=M erlaubt.
Aufbau der Liste zur Übergabe der mnemotechnischen Gerätenamen, der Geräteadressen oder -nummern:
Das erste Wort enthält rechtsbündig hexadezimal die Anzahl der Einträge in der Liste.
Ihm folgen die Einträge: Jeder Eintrag ist 4 Byte lang und enthält linksbündig den mnemotechnischen Gerätenamen, die Geräteadresse oder die Gerätenummer. Nicht benötigte Byte sind mit X'00' zu überschreiben.
S
Die Informationen werden im kurzen Format (Standardformat) ausgegeben.
L
Die Informationen werden im langen Format ausgegeben und enthalten zusätzlich Pfadbeschreibungen.
DEPOT=
gibt Informationen über die Zuordnung von physikalischen Bandgeräten (Mnemonics) zu Lagerorten (Locations).
NO
Diese Funktion wird nicht gewünscht.
ALL
Für alle bekannten Lagerorte werden Informationen ausgegeben.
(mn,...)
Der Anwender übergibt in einer Liste (s. unten) die mnemotechnischen Namen der Bandgeräte, für die er Informationen anfordert.
(location,...)
Der Anwender übergibt in einer Liste (s. unten) die Lagerorte, für die er Informationen anfordert.
adr
symbolische Adresse eines Feldes; Das Feld enthält eine Liste von Mnemonics bzw. Locations. Es ist auf Wortgrenze auszurichten.
(r)
r = Register mit dem Adresswert von adr. Die Angabe eines Registers ist nur zusammen mit MF=M erlaubt.
Aufbau der Liste zur Übergabe der (Band-)Mnemonics bzw. der Locations:
Das erste Wort der Liste enthält rechtsbündig hexadezimal die Anzahl der Einträge.
Es folgen die Einträge: Für die Mnemonics ist jeder Eintrag 4 Byte lang. Für die Locations ist jeder Eintrag 8 Byte lang. Die Einträge enthalten linksbündig die Mnemonics bzw. die Locations.
DEVICE=
für jedes angegebene Gerät wird ein DEVICE-Ausgabesatz (DEVICE-Record) geschrieben. Siehe Hinweis bei RECORD=DEVICE, "OPSGEN - Steuern der S-Variablen-Generierung durch MIP".
NO
Diese Funktion wird nicht gewünscht.
ALL
Informationen über alle Geräte werden angefordert.
(mn,...)
Der Anwender übergibt in einer Liste (s. unten) die mnemotechnischen Namen der Geräte, über die er Informationen anfordert.
(tt,...)
Der Anwender übergibt in einer Liste (s. unten) die Codes für die Typen der Geräte (Gerätetypcodes), über die er Informationen anfordert.
(fc,...)
Der Anwender übergibt in einer Liste (s. unten) die Codes für die Familien der Geräte (Familycodes), über die er Informationen anfordert.
adr
symbolische Adresse (Name) eines Feldes; Das Feld enthält eine Liste von mnemotechnischen Gerätenamen, von Codes für Gerätefamilien oder von Gerätetypcodes. Es ist auf Wortgrenze auszurichten.
(r)
r = Register mit dem Adresswert von adr. Die Angabe eines Registers ist nur in Verbindung mit MF=M erlaubt.
Aufbau der Liste zur Übergabe der Familycodes, Gerätetypcodes oder mnemotechnischen Gerätenamen:
Das erste Wort enthält rechtsbündig hexadezimal die Anzahl der Einträge in der Liste.
Ihm folgen die Einträge: Bei der Angabe von Family-Gerätetypcodes ist jeder Eintrag 2 Byte lang, bei der Angabe von mnemotechnischen Gerätenamen hängt die Länge eines Eintrags vom Wert des Operanden EXTMN ab: Bei EXTMN=NO ist jeder Eintrag 2 Byte lang, bei EXTMN=YES 4 Byte.
Die Listen dürfen maximal 32 K Einträge enthalten.
Beispiel 1: | 2 Gerätetypen mit Gerätetypcodes X'A5' (=D3435) und X'8F' (=D3475) --------------------------------------------------------- |X‘00‘|X‘00‘|X‘00‘|X‘02‘|X‘A5‘|X‘00‘|X‘8F‘|X‘00‘| --------------------------------------------------------- ^ | adr |
Beispiel 2: | 2 Gerätefamilien mit Familycodes X'A0' (= Plattengeräte) und --------------------------------------------------------- |X‘00‘|X‘00‘|X‘00‘|X‘02‘|X‘A0‘|X‘00‘|X‘C0‘|X‘00‘| --------------------------------------------------------- ^ | adr |
DISC=
fordert für jede(s) angegebene Platte (Plattengerät) einen DISC-Ausgabesatz (DISC-Record) an.
NO
Diese Funktion wird nicht gewünscht.
MONITORED
Es werden Informationen über alle Platten angefordert, die online verfügbar sind und von NDM überwacht werden.
SCHEDULED
Es werden Informationen über alle Platten angefordert, für die mit dem Kommando SET-DISK-PARAMETER explizit Benutzungsvorgaben gemacht wurden.
Dieser Wert kann nur unter der Kennung der Systemverwaltung (TSOS) angegeben werden.
(mn,...)
Der Anwender übergibt in einer Liste (s. unten) die mnemotechnischen Namen der Platten, über die er Informationen anfordert.
(vsn,...)
Der Anwender übergibt in einer Liste (s. unten) die VSNs (Volume Serial Numbers) der Platten, über die er Informationen anfordert.
adr
symbolische Adresse (Name) eines Feldes; Das Feld enthält entweder eine Liste von VSNs oder von mnemotechnischen Gerätenamen. Es ist auf Wortgrenze auszurichten.
(r)
r = Register mit dem Adresswert von adr. Die Angabe eines Registers ist nur in Verbindung mit MF=M erlaubt.
Aufbau der Liste zur Übergabe der mnemotechnischen Gerätenamen oder VSNs:
Das erste Wort enthält rechtsbündig hexadezimal die Anzahl der Einträge in der Liste.
Es folgen die Einträge: Jeder Eintrag ist 8 Byte lang und enthält linksbündig die VSN oder den mnemotechnischen Gerätenamen. Nicht benötigte Byte sind mit X'00' zu überschreiben.
S
Die Informationen werden im kurzen Format (Standardformat) ausgegeben.
L
Die Informationen werden im langen Format ausgegeben und enthalten zusätzlich Angaben über die SVL-Zustände und Plattenparameter.
Dieser Wert kann nur unter der Kennung der Systemverwaltung (TSOS) angegeben werden.
TASK
Ausgabe einer Liste mit den TSNs der Tasks, die momentan mit der Platte arbeiten. Die Liste besteht aus 4-Byte-Einträgen und wird nur für Privatplatten im Modus USE=DMS ausgegeben. Die Angabe von TASK ist nur für das lange Format (Angabe L) möglich.Dieser Wert kann nur unter der Kennung der Systemverwaltung (TSOS) angegeben werden.
DRV=
fordert einen DRV-Ausgabesatz (DRV-Record) für jede angegebene Platte an, für die das Produkt DRV (Dual Recording by Volume; siehe Handbuch „DRV“ [25]) im Einsatz ist.
NO
Diese Funktion wird nicht gewünscht.
ALL
fordert für jede Platte einen DRV-Ausgabesatz an, die der Komponente DRV bekannt ist.
Dieser Wert kann nur unter der Kennung der Systemverwaltung (TSOS) angegeben werden.
ALL-DRV
fordert für jede Platte einen DRV-Ausgabesatz an, für die die Betriebsart DRV eingestellt ist.
Dieser Wert kann nur unter der Kennung der Systemverwaltung (TSOS) angegeben werden.
(vsn,...)
Der Anwender übergibt in einer Liste (s. unten) die VSN (Volume Serial Numbers) der Platten, über die er Informationen anfordert.
Dieser Wert kann nur unter der Kennung der Systemverwaltung (TSOS) angegeben werden.
adr
symbolische Adresse (Name) eines Feldes; Das Feld enthält eine Liste von VSN. Es ist auf Wortgrenze auszurichten.
(r)
r = Register mit dem Adresswert von adr. Die Angabe eines Registers ist nur in Verbindung mit MF=M erlaubt.
Aufbau der Liste zur Übergabe der VSN:
Das erste Wort enthält rechtsbündig hexadezimal die Anzahl der Einträge in der Liste.
Es folgen die Einträge: Jeder Eintrag ist 8 Byte lang und enthält linksbündig die VSN. Nicht benötigte Byte sind mit X'00' zu überschreiben.
DVQ=
gibt an, ob Informationen über die Gerätewarteschlange (Secure Queue) ausgegeben werden sollen.
NO
Die Funktion wird nicht gewünscht.
YES
DVQ-Ausgabesätze werden geschrieben.
Dieser Wert kann nur unter der Kennung der Systemverwaltung (TSOS) angegeben werden.
EXTMN=
gibt an, ob der Aufrufer mnemotechnische Gerätenamen im alten Format (2 Byte lang) oder im neuen Format (4 Byte lang) im Datenbereich übergibt und/oder im Ausgabebereich des Makros erwartet.
Zur Aufnahme der mnemotechnischen Namen stellt der Makro im Ausgabebereich jeweils Felder für das 2-Byte- und das 4-Byte-Format bereit. Ein Indikator zeigt für jeden Ausgabesatz an, ob das 2-Byte- oder das 4-Byte-Ausgabefeld versorgt ist.
NO
Der Anwender übergibt im Datenbereich nur 2 Byte lange mnemotechnische Gerätenamen und wertet auch nur 2 Byte lange Namen aus.
Werden für ein Gerät Informationen ausgegeben, dessen mnemotechnischer Name
4 Byte lang ist, so wird im Ausgabebereich das 2-Byte-Feld gelöscht, der Indikator für Ausgabe im 4-Byte-Format gesetzt und im Ausgabevorspann (OCR) sowie im Standardheader durch Returncodes die Unvollständigkeit der Information angezeigt.
YES
Der Anwender übergibt und erwartet mnemotechnische Gerätenamen immer im 4-Byte-Format.
Werden kürzere mnemotechnische Gerätenamen angegeben, so sind sie in die dafür vorgesehenen Felder des Datenbereichs linksbündig einzutragen und am rechten Ende mit Leerzeichen aufzufüllen.
GLOBAL=
gibt an, ob die Einstellung aller globalen NDM-Steuerparameter ausgegeben werden soll.
NO
Diese Funktion wird nicht gewünscht.
YES
Alle globalen NDM-Steuerparameter werden geschrieben.
HWSTATE=
gibt Informationen über den Hardwarestatus (ON/OFF) der Unit aus.
SIDE_/GP_
etc. HARDWARE_STATE
(in NKDCUTYP des CONFIG Records) nicht auswerten, sollten NKDINF mit dem Operanden HWSTATE=NO aufrufen, um die Bearbeitung zu beschleunigen.NO
Diese Funktion wird nicht gewünscht.
YES
Der Hardwarestatus der Unit wird bestimmt (nur für spezielle Anwendungen von Bedeutung).
LOC=
gibt den Informationsumfang von SUMMARY und TYPTASK nach Lagerorten (Locations) geordnet aus.
NO
Diese Funktion wird nicht gewünscht.
ALL
Für jeden generierten Gerätetyp wird ein Ausgabesatz erzeugt.
(location,...)
Für jeden generierten Gerätetyp wird für die angegebenen Lagerorte ein Ausgabesatz erstellt. Zum Aufbau der Location-Liste siehe Operand DEPOT.
(tt,...)
Der Anwender übergibt in einer Liste (s. unten) die Codes der Gerätetypen, über die er Informationen anfordert.
(fc,...)
Der Anwender übergibt in einer Liste (s. unten) die Codes der Gerätefamilien (Familycodes), über die er Informationen anfordert.
(vt,...)
Der Anwender übergibt in einer Liste (s. unten) die Codes der Volumetypcodes, über die er Informationen anfordert.
adr
symbolische Adresse eines Feldes; Das Feld enthält eine Liste von Gerätetypcodes bzw. Familycodes. Es ist auf Wortgrenze auszurichten.
(r)
r = Register mit dem Adresswert von adr. Die Angabe eines Registers ist nur zusammen mit MF=M erlaubt.
Aufbau der Liste zur Übergabe der Gerätetypcodes bzw. Familycodes:
Das erste Wort der Liste enthält rechtsbündig hexadezimal die Anzahl der Einträge in die Liste.
Es folgen die Einträge: Jeder Eintrag ist 2 Byte lang und enthält linksbündig den Gerätetypcode bzw. den Familycode.
MF=
Zur allgemeinen Beschreibung des Operanden MF, der dazugehörenden Operandenwerte und der evtl. nachfolgenden Operanden (z.B. PREFIX, MACID und PARAM) siehe Abschnitt „S-Typ-Makroaufrufe“. Die gültigen MF-Werte sind zu Beginn der Makrobeschreibung bei „Makrotyp“ angegeben und aus dem Aufrufformat ersichtlich.
Bei der C-Form, D-Form oder M-Form des Makroaufrufs kann ein Präfix PREFIX und bei der C-Form oder M-Form zusätzlich eine Macid MACID angegeben werden (siehe Abschnitt „S-Typ-Makroaufrufe“).
RECORD
kann nur zusammen mit MF=C bzw. MF=D angegeben werden und legt fest, für welchen Ausgabesatz eine CSECT bzw. DSECT generiert wird.
ALL
erzeugt CSECTs/DSECTs für alle vom Makro angebotenen Ausgabesätze (HEADER bis DRV).
CONFIG
erzeugen eine CSECT/DSECT für den CONFIG-Ausgabesatz (Operand CONFIG).
DEPOT
erzeugt eine CSECT/DSECT für den DEPOT-Ausgabesatz (Operand DEPOT).
DEVICE
erzeugt eine CSECT/DSECT für den DEVICE-Ausgabesatz (Operand DEVICE).
Hinweis
Bedingt durch die Funktionserweiterung „Dynamische I/O-Konfigurationsänderung“ können im DEVICE-Record jetzt auch Records für jene Dummy-Geräte enthalten sein, die in der BS2000-Gerätetabelle als Platzhalter vorhanden sind und später durch reale Geräte ersetzt werden. Die Records dieser Geräte enthalten im Feld EXTENDED DE-VICE MNEMONIC die Mnemonic „DMMY“ und im Feld DEVICE RECONFIGURATION STATE den Wert X'0F' (INVALID).
DISC
erzeugt eine CSECT/DSECT für den DISC-Ausgabesatz (Operand DISC).
DRV
erzeugt eine CSECT/DSECT für den DRV-Ausgabesatz (Operand DRV).
DVQ
erzeugt eine CSECT/DSECT für den DVQ-Ausgabesatz (Operand DVQ).
GLOBAL
erzeugt eine CSECT/DSECT für den GLOBAL-Ausgabesatz (Operand GLOBAL).
HEADER
erzeugt eine CSECT/DSECT für den Output-Control-Record.
Der Output-Control-Record enthält:
Zeiger zu den verschiedenen Ausgabesätzen
Zähler
Längenangaben (Länge des Ausgabebereiches, Länge der einzelnen Ausgabesätze) und
Returncodes für die verschiedenen Ausgabesätze.
Das Layout ist am Ende der Beschreibung wiedergegeben.
LOC
erzeugt eine CSECT/DSECT für den LOC-Ausgabesatz (Operand LOC).
SUMMARY
erzeugt eine CSECT/DSECT für den SUMMARY-Ausgabesatz (Operand SUMMARY).
TAPE
erzeugt eine CSECT/DSECT für den TAPE-Ausgabesatz (Operand TAPE).
TASK
erzeugt eine CSECT/DSECT für den TASK-Ausgabesatz (Operand TASK).
TYPTASK
erzeugt eine CSECT/DSECT für den TYPTASK-Ausgabesatz (Operand TYPTASK).
UNMONIT
erzeugt eine CSECT/DSECT für den UNMONIT-Ausgabesatz (Operand UNMONIT).
SUMMARY=
fordert für jede(n) angegebene(n) Gerätefamilie (Gerätetyp) einen SUMMARY-
Ausgabesatz an. Der Satz enthält Übersichtsinformationen über die Gerätefamilie bzw. den Gerätetyp. Für jede Gerätefamilie wird die Menge der SUMMARY-Sätze ihrer Gerätetypen geliefert.
NO
Diese Funktion wird nicht gewünscht.
ALL
fordert für jeden im System definierten Gerätetyp einen SUMMARY-Ausgabesatz an.
(fc,...)
Der Anwender übergibt in einer Liste (s. unten) die Codes der Gerätefamilien (FamilyCodes), über deren Gerätetypen er Informationen anfordert.
(tt,...)
Der Anwender übergibt in einer Liste (s. unten) die Codes der Gerätetypen, über die er Informationen anfordert.
adr
symbolische Adresse (Name) eines Feldes; Das Feld enthält eine Liste von Familycodes oder von Gerätetypcodes. Es ist auf Wortgrenze auszurichten.
(r)
r = Register mit dem Adresswert von adr. Die Angabe eines Registers ist nur in Verbindung mit MF=M erlaubt.
Aufbau der Liste zur Übergabe der Familycodes oder der Gerätetypcodes:
Das erste Wort enthält rechtsbündig hexadezimal die Anzahl der Einträge in der Liste.
Ihm folgen die Einträge: Jeder Eintrag ist 2 Byte lang und enthält linksbündig den Familycode oder den Gerätetypcode.
TAPE=
für jedes angegebene Bandgerät wird ein TAPE-Ausgabesatz (TAPE-Record) geschrieben.
NO
Diese Funktion wird nicht gewünscht.
ALL
Informationen über alle von NDM überwachten Bänder werden angefordert.
(mn,...)
Der Anwender übergibt in einer Liste (s. unten) die mnemotechnischen Namen der Bandgeräte, über die er Informationen anfordert.
(vsn,...)
Der Anwender übergibt in einer Liste (s. unten) die VSNs (Volume Serial Numbers) der Bänder, über die er Informationen anfordert.
adr
symbolische Adresse (Name) eines Feldes; Das Feld enthält entweder eine Liste von VSNs oder von mnemotechnischen Gerätenamen. Es ist auf Wortgrenze auszurichten.
(r)
r = Register mit dem Adresswert von adr. Die Angabe eines Registers ist nur in Verbindung mit MF=M erlaubt.
Aufbau der Liste zur Übergabe der mnemotechnischen Gerätenamen oder VSNs:
Das erste Wort enthält rechtsbündig hexadezimal die Anzahl der Einträge in der Liste.
Ihm folgen die Einträge: Jeder Eintrag ist 8 Byte lang und enthält linksbündig die VSN oder den mnemotechnischen Gerätenamen. Nicht benötigte Byte sind mit X'00' zu überschreiben.
CAR
Für MBK-Geräte, die sich im „Random“-Modus befinden, werden zusätzlich Records für die im „Cartridge-Loader“ vorhandenen und bereits von der Geräteverwaltung registrierten Kassetten ausgegeben. Zu einem Gerät können mehrere Records bereit gestellt werden.
TASK=
Es wird ein TASK-Ausgabesatz (TASK-Record) geschrieben. Der Satz enthält Informationen über Geräte, Platten und Bänder, die von der angegebenen Task belegt sind.
NO
Diese Funktion wird nicht gewünscht.
OWN
Die Angaben beziehen sich auf die aufrufende Task.
(tsn,...)
Der Anwender übergibt in einem Wort die TSN (Task Sequence Number) der Task, über deren Geräte- und Volumebelegung er Informationen anfordert.
(tid,...)
Der Anwender übergibt in einem Wort die TID (Task Identifier; internes
Taskkennzeichen) der Task, über deren Geräte- und Volumebelegung er Informationen anfordert.
adr
symbolische Adresse (Name) des Wortes mit der TSN bzw. TID einer Task
(r)
r = Register mit dem Adresswert von adr. Die Angabe eines Registers ist nur in Verbindung mit MF=M erlaubt.
TYPTASK=
fordert für jede(n) angegebene(n) Gerätefamilie (Gerätetyp) einen TYPTASK-Ausgabesatz an. Der Satz beschreibt, wie viele Geräte des angegebenen Typs eine Task reserviert hat. Für jede Gerätefamilie wird die Menge der TYPTASK-Sätze ihrer Gerätetypen
ausgegeben.
NO
Diese Funktion wird nicht gewünscht.
ALL
fordert für jeden im System definierten Gerätetyp einen TYPTASK-Ausgabesatz an.Dieser Wert kann nur unter der Kennung der Systemverwaltung (TSOS) angegeben werden.
(fc,...)
Der Anwender übergibt in einer Liste (s. unten) die Codes der Gerätefamilien (FamilyCodes), über deren Gerätetypen er Informationen anfordert.
Dieser Wert kann nur unter der Kennung der Systemverwaltung (TSOS) angegeben werden.
(tt,...)
Der Anwender übergibt in einer Liste (s. unten) die Codes der Gerätetypen, über die er Informationen anfordert.
Dieser Wert kann nur unter der Kennung der Systemverwaltung (TSOS) angegeben werden.
adr
symbolische Adresse (Name) eines Feldes; Das Feld enthält eine Liste von Familycodes oder von Gerätetypcodes. Es ist auf Wortgrenze auszurichten.
(r)
r = Register mit dem Adresswert von adr. Die Angabe eines Registers ist nur in Verbindung mit MF=M erlaubt.
Aufbau der Liste zur Übergabe der Familycodes oder der Gerätetypcodes:
Das erste Wort enthält rechtsbündig hexadezimal die Anzahl der Einträge in der Liste.
Ihm folgen die Einträge: Jeder Eintrag ist 2 Byte lang und enthält linksbündig den Familycode oder den Gerätetypcode.
UNMONIT=
fordert für jedes angegebene Bandvolume, das „offline“ reserviert wurde, einen UNMONIT-Ausgabesatz an. Der Satz beschreibt, welches Bandvolume (VSN) von welcher Task (TSN) reserviert wurde.
„Offline“-Reservierung bedeutet: Es existiert eine Geräte-/Volumeanforderung für ein Gerät, das von NDM (noch) nicht überwacht wird.
NO
Diese Funktion wird nicht gewünscht.
ALL
fordert für jedes „offline“ reservierte Bandvolume einen UNMONIT-Ausgabesatz an.
(vsn,...)
Der Anwender übergibt in einer Liste (s. unten) die VSNs (Volume Serial Numbers) der Bänder, über die er Informationen anfordert.
adr
symbolische Adresse (Name) eines Feldes; Das Feld enthält eine Liste von VSNs. Es ist auf Wortgrenze auszurichten.
(r)
r = Register mit dem Adresswert von adr. Die Angabe eines Registers ist nur in Verbindung mit MF=M erlaubt.
Aufbau der Liste zur Übergabe der VSNs:
Das erste Wort enthält rechtsbündig hexadezimal die Anzahl der Einträge in der Liste.
Ihm folgen die Einträge: Jeder Eintrag ist 8 Byte lang und enthält linksbündig die VSN. Nicht benötigte Bytes sind mit X'00' zu überschreiben.
Registerverwendung
Beim Aufruf des Makros NKDINF mit MF=M und der Angabe von Adressen wird Register R15 intern als Arbeitsregister verwendet.
Rückinformation und Fehleranzeigen
Standardheader:
+---------------+ | | | | | |c|c|b|b|a|a|a|a| +---------------+
Über die Ausführung des Makros NKDINF wird im Standardheader folgender Returncode übergeben (cc=Subcode2, bb=Subcode1, aaaa=Maincode):
X'cc' | X'bb' | X'aaaa' | Erläuterung |
X'00' | X'00' | X'0000' | Funktion erfolgreich ausgeführt. Alle angeforderten Informationen sind |
X'01'1 | X'00' | X'0008' | Ausgabebereich wurde erstellt, aber nicht alle angeforderten Ausgabesätze |
X'02'1 | X'00' | X'0008' | Ausgabebereich wurde erstellt, aber nicht alle angeforderten Ausgabesätze |
X'04'1 | X'00' | X'0008' | Ausgabebereich wurde erstellt, aber in einigen Ausgabesätzen ist die |
X'08'1 | X'00' | X'0008' | Ausgabebereich wurde erstellt, aber in einigen Ausgabesätzen ist die |
X'10'1 | X'00' | X'0008' | Ausgabebereich wurde erstellt, aber der Operand DRV konnte nicht |
X'20'1 | X'00' | X'0008' | Ausgabebereich wurde erstellt, aber in einigen Ausgabesätzen ist die |
X'xx'2 | X'01' | X'0010' | Operandenfehler, kein Ausgabebereich wurde erstellt: Typ der angeforderten |
X'xx'2 | X'01' | X'0011' | Operandenfehler, kein Ausgabebereich wurde erstellt: Eine der Angaben |
X'00' | X'01' | X'0013' | Operandenfehler, kein Ausgabebereich wurde erstellt: Operand EXTMN |
X'00' | X'20' | X'0004' | Systemfehler, es wurde kein Ausgabebereich erstellt. |
X'xx'2 | X'40' | X'0012' | Typ eines angeforderten Ausgabesatzes (Recordtyp) für den nichtprivilegierten |
X'xx'2 | X'40' | X'0020' | Liste mit den bereitgestellten Gerätetypcodes, VSNs, mnemotechnischen |
X'xx'2 | X'40' | X'0021' | Liste mit den bereitgestellten Gerätetypcodes, VSNs, mnemotechnischen |
X'xx'2 | X'40' | X'0022' | In einer Liste wurden mehr Gerätetypcodes, VSNs, mnemotechnischen |
X'xx'2 | X'40' | X'0023' | Versionsnummer eines Layouts ist unbekannt. |
X'00' | X'80' | X'0040' | Zurzeit kein Speicher verfügbar, es wurde kein Ausgabebereich erstellt. |
1Die Subreturncodes zum Maincode X'0008' sind additiv: Bei einem Makroaufruf können mehrere von ihnen gleichzeitig auftreten.
2X'xx' bezeichnet den Typ des Ausgabesatzes (Recordtyp), der zum Returncode führte. Die für xx möglichen Werte haben die folgenden Bedeutungen:
01 TASK-Ausgabesatz
02 GLOBAL-Ausgabesatz
03 DEVICE-Ausgabesatz
04 TAPE-Ausgabesatz
05 DISC-Ausgabesatz
06 CONFIG-Ausgabesatz
07 DVQ-Ausgabesatz
08 SUMMARY-Ausgabesatz
09 TYPTASK-Ausgabesatz
0A UNMONIT-Ausgabesatz
0B DRV-Ausgabesatz
0C DEPOT-Ausgabesatz
0D LOC-Ausgabesatz
Weitere Returncodes, deren Bedeutung durch Konvention makroübergreifend festgelegt ist, können der Tabelle „Standard-Returncodes“ (Standardheader) entnommen werden.
Das aufrufende Programm wird beendet, wenn folgende Fehler auftreten:
Der Datenbereich ist dem Aufrufer nicht zugewiesen.
Der Datenbereich ist nicht auf Wortgrenze ausgerichtet.
Der Datenbereich ist gegen Schreibzugriff geschützt.
Layout der DSECT für den Output-Control-Record (RECORD=HEADER)
NKDINF MF=D,RECORD=HEADER 1 *,NKDINF VERSION 500 1 #INTF INTNAME=NKDINF,REFTYPE=REQUEST,INTCOMP=1 1 * 1 * GENERATION OF OUTPUT-LAYOUTS 1 * 1 * 1 * C/DSECT FOR OUTPUT-CONTROL RECORD 1 * 1 MFCHK MF=D,PREFIX=N,SUPPORT=(C,D),MACID=KDI, C 1 DMACID=KDO,DNAME=KDOENT 2 NKDOENT DSECT , 2 *,##### PREFIX=N, MACID=KDO ##### 1 NKDOENTR DS 0F 1 OUTPUT_CONTROL_RECORD 1 NKDOBLEN DS F 2 LENGTH_OF_BUFFER_OBTAINED 1 NKDOSBUF DS 0F 2 SUBBUFFER_DESCRIPTION 1 NKDOTRBP DS A 3 PTR_TO_FIRST_TASK_RECORD 1 NKDOTRB# DS H 3 #_OF_TASK_RECORDS 1 NKDOTRBL DS H 3 LENGTH_OF_TASK_RECORD 1 NKDOTRBR DS X 3 RESULT_FOR_TASK_RECORDS SET 1 NKDOOKRO EQU X'00' (OK_RECORDS_OUTPUTED 1 NKDOOKPT EQU X'02' OK_RECORDS_PARTIAL_OUTPUT 1 NKDOOKRN EQU X'04' OK_RECORDS_NOT_REQUESTED 1 NKDOOKRE EQU X'08' OK_NO_RECORDS_EXISTS 1 NKDONOTA EQU X'0C' SCOPE_HIDES_REQUESTED_RECORDS 1 NKDOOKMN EQU X'0E' OK_NO_MN_DUE_TO_EXTENDED_MN 1 NKDODRBD DS 0F 2 DEVICE_RECORD_BUFFER_DESCRIPTION 1 NKDODRBP DS A 3 PTR_TO_FIRST_DEVICE_RECORD 1 NKDODRB# DS H 3 #_OF_DEVICE_RECORDS 1 NKDODRBL DS H 3 LENGTH_OF_DEVICE_RECORD 1 NKDODRBR DS X 3 RESULT_FOR_DEVICE_RECORDS SET 1 * &P.OKRO EQU X'00' (OK_RECORDS_OUTPUTED 1 * &P.OKPT EQU X'02' OK_RECORDS_PARTIAL_OUTPUT 1 * &P.OKRN EQU X'04' OK_RECORDS_NOT_REQUESTED 1 * &P.OKRE EQU X'08' OK_NO_RECORDS_EXISTS 1 * &P.NOTA EQU X'0C' SCOPE_HIDES_REQUESTED_RECORDS 1 * &P.OKMN EQU X'0E' OK_NO_MN_DUE_TO_EXTENDED_MN 1 NKDOGRBD DS 0F 2 GLOBAL_RECORD_BUFFER_DESCRIPTION 1 NKDOGRBP DS A 3 PTR_TO_GLOBAL_RECORD 1 NKDOGRB# DS H 3 #_OF_GLOBAL_RECORDS "ALWAYS 1" 1 NKDOGRBL DS H 3 LENGTH_OF_GLOBAL_RECORD 1 NKDOGRBR DS X 3 RESULT_FOR_GLOBAL_RECORD SET 1 * &P.OKRO EQU X'00' (OK_RECORDS_OUTPUTED 1 * &P.OKPT EQU X'02' OK_RECORDS_PARTIAL_OUTPUT 1 * &P.OKRN EQU X'04' OK_RECORDS_NOT_REQUESTED 1 * &P.OKRE EQU X'08' OK_NO_RECORDS_EXISTS
1 * &P.NOTA EQU X'0C' SCOPE_HIDES_REQUESTED_RECORDS 1 NKDOCRBD DS 0F 2 CONFIG_RECORD_BUFFER_DESCRIPTION 1 NKDOCRBP DS A 3 PTR_TO_FIRST_CONFIG_RECORD 1 NKDOCRB# DS H 3 #_OF_CONFIG_RECORDS 1 NKDOCRBL DS H 3 LENGTH_OF_CONFIG_RECORD 1 NKDOCRBR DS X 3 RESULT_FOR_CONFIG_RECORDS SET 1 * &P.OKRO EQU X'00' (OK_RECORDS_OUTPUTED 1 * &P.OKPT EQU X'02' OK_RECORDS_PARTIAL_OUTPUT 1 * &P.OKRN EQU X'04' OK_RECORDS_NOT_REQUESTED 1 * &P.OKRE EQU X'08' OK_NO_RECORDS_EXISTS 1 * &P.NOTA EQU X'0C' SCOPE_HIDES_REQUESTED_RECORDS 1 * &P.OKMN EQU X'0E' OK_NO_MN_DUE_TO_EXTENDED_MN 1 NKDOBRBD DS 0F 2 TAPE_RECORD_BUFFER_DESCRIPTION 1 NKDOBRBP DS A 3 PTR_TO_FIRST_TAPE_RECORD 1 NKDOBRB# DS H 3 #_OF_TAPE_RECORDS 1 NKDOBRBL DS H 3 LENGTH_OF_TAPE_RECORD 1 NKDOBRBR DS X 3 RESULT_FOR_TAPE_RECORDS SET 1 * &P.OKRO EQU X'00' (OK_RECORDS_OUTPUTED 1 * &P.OKPT EQU X'02' OK_RECORDS_PARTIAL_OUTPUT 1 * &P.OKRN EQU X'04' OK_RECORDS_NOT_REQUESTED 1 * &P.OKRE EQU X'08' OK_NO_RECORDS_EXISTS 1 * &P.NOTA EQU X'0C' SCOPE_HIDES_REQUESTED_RECORDS 1 * &P.OKMN EQU X'0E' OK_NO_MN_DUE_TO_EXTENDED_MN 1 NKDOPRBD DS 0F 2 DISC_RECORD_BUFFER_DESCRIPTION 1 NKDOPRBP DS A 3 PTR_TO_FIRST_DISC_RECORD 1 NKDOPRB# DS H 3 #_OF_DISC_RECORDS 1 NKDOPRBL DS H 3 LENGTH_OF_DISC_RECORD 1 NKDOPRBR DS X 3 RESULT_FOR_DISC_RECORDS SET 1 * &P.OKRO EQU X'00' (OK_RECORDS_OUTPUTED 1 * &P.OKPT EQU X'02' OK_RECORDS_PARTIAL_OUTPUT 1 * &P.OKRN EQU X'04' OK_RECORDS_NOT_REQUESTED 1 * &P.OKRE EQU X'08' OK_NO_RECORDS_EXISTS 1 * &P.NOTA EQU X'0C' SCOPE_HIDES_REQUESTED_RECORDS 1 * &P.OKMN EQU X'0E' OK_NO_MN_DUE_TO_EXTENDED_MN 1 NKDOQRBD DS 0F 2 DVQ_RECORD_BUFFER_DESCRIPTION 1 NKDOQRBP DS A 3 PTR_TO_DVQ_RECORD 1 NKDOQRB# DS H 3 #_OF_DVQ_RECORDS "ALWAYS 1" 1 NKDOQRBL DS H 3 LENGTH_OF_DVQ_RECORD 1 NKDOQRBR DS X 3 RESULT_FOR_DVQ_RECORD SET 1 * &P.OKRO EQU X'00' (OK_RECORDS_OUTPUTED 1 * &P.OKPT EQU X'02' OK_RECORDS_PARTIAL_OUTPUT 1 * &P.OKRN EQU X'04' OK_RECORDS_NOT_REQUESTED 1 * &P.OKRE EQU X'08' OK_NO_RECORDS_EXISTS 1 * &P.NOTA EQU X'0C' SCOPE_HIDES_REQUESTED_RECORDS 1 * &P.OKMN EQU X'0E' OK_NO_MN_DUE_TO_EXTENDED_MN 1 NKDOSRBD DS 0F 2 SUMMARY_RECORD_BUFFER_DESCRIPTION 1 NKDOSRBP DS A 3 PTR_TO_SUMMARY_RECORD 1 NKDOSRB# DS H 3 #_OF_SUMMARY_RECORDS
1 NKDOSRBL DS H 3 LENGTH_OF_SUMMARY_RECORD 1 NKDOSRBR DS X 3 RESULT_FOR_SUMMARY_RECORD SET 1 * &P.OKRO EQU X'00' (OK_RECORDS_OUTPUTED 1 * &P.OKPT EQU X'02' OK_RECORDS_PARTIAL_OUTPUT 1 * &P.OKRN EQU X'04' OK_RECORDS_NOT_REQUESTED 1 * &P.OKRE EQU X'08' OK_NO_RECORDS_EXISTS 1 * &P.NOTA EQU X'0C' SCOPE_HIDES_REQUESTED_RECORDS 1 NKDOYRBD DS 0F 2 TYPTASK_RECORD_BUFFER_DESCRIPTION 1 NKDOYRBP DS A 3 PTR_TO_TYPTASK_RECORD 1 NKDOYRB# DS H 3 #_OF_TYPTASK_RECORDS 1 NKDOYRBL DS H 3 LENGTH_OF_TYPTASK_RECORD 1 NKDOYRBR DS X 3 RESULT_FOR_TYPTASK_RECORD SET 1 * &P.OKRO EQU X'00' (OK_RECORDS_OUTPUTED 1 * &P.OKPT EQU X'02' OK_RECORDS_PARTIAL_OUTPUT 1 * &P.OKRN EQU X'04' OK_RECORDS_NOT_REQUESTED 1 * &P.OKRE EQU X'08' OK_NO_RECORDS_EXISTS 1 * &P.NOTA EQU X'0C' SCOPE_HIDES_REQUESTED_RECORDS 1 NKDOURBD DS 0F 2 UNMONIT_RECORD_BUFFER_DESCRIPTION 1 NKDOURBP DS A 3 PTR_TO_UNMONIT_RECORD 1 NKDOURB# DS H 3 #_OF_UNMONIT_RECORDS 1 NKDOURBL DS H 3 LENGTH_OF_UNMONIT_RECORD 1 NKDOURBR DS X 3 RESULT_FOR_UNMONIT_RECORD SET 1 * &P.OKRO EQU X'00' (OK_RECORDS_OUTPUTED 1 * &P.OKPT EQU X'02' OK_RECORDS_PARTIAL_OUTPUT 1 * &P.OKRN EQU X'04' OK_RECORDS_NOT_REQUESTED 1 * &P.OKRE EQU X'08' OK_NO_RECORDS_EXISTS 1 * &P.NOTA EQU X'0C' SCOPE_HIDES_REQUESTED_RECORDS 1 NKDOVRBD DS 0F 2 DRV_RECORD_BUFFER_DESCRIPTION 1 NKDOVRBP DS A 3 PTR_TO_DRV_RECORD 1 NKDOVRB# DS H 3 #_OF_DRV_RECORDS 1 NKDOVRBL DS H 3 LENGTH_OF_DRV_RECORD 1 NKDOVRBR DS X 3 RESULT_FOR_DRV_RECORD SET 1 * &P.OKRO EQU X'00' (OK_RECORDS_OUTPUTED 1 * &P.OKPT EQU X'02' OK_RECORDS_PARTIAL_OUTPUT 1 * &P.OKRN EQU X'04' OK_RECORDS_NOT_REQUESTED 1 * &P.OKRE EQU X'08' OK_NO_RECORDS_EXISTS 1 * &P.NOTA EQU X'0C' SCOPE_HIDES_REQUESTED_RECORDS 1 NKDOLRBD DS 0F 2 DEPOT_RECORD_BUFFER_DESCRIPTION 1 NKDOLRBP DS A 3 PTR_TO_DEPOT_RECORD 1 NKDOLRB# DS H 3 #_OF_DEPOT_RECORDS 1 NKDOLRBL DS H 3 LENGTH_OF_DEPOT_RECORD 1 NKDOLRBR DS X 3 RESULT_FOR_DEPOT_RECORD SET 1 * &P.OKRO EQU X'00' (OK_RECORDS_OUTPUTED 1 * &P.OKPT EQU X'02' OK_RECORDS_PARTIAL_OUTPUT 1 * &P.OKRN EQU X'04' OK_RECORDS_NOT_REQUESTED 1 * &P.OKRE EQU X'08' OK_NO_RECORDS_EXISTS
1 * &P.NOTA EQU X'0C' SCOPE_HIDES_REQUESTED_RECORDS 1 NKDOARBD DS 0F 2 LOCATION_REC_BUFFER_DESCRIPTION 1 NKDOARBP DS A 3 PTR_TO_LOCATION_RECORD 1 NKDOARB# DS H 3 #_OF_LOCATION_RECORDS 1 NKDOARBL DS H 3 LENGTH_OF_LOCATION_RECORD 1 NKDOARBR DS X 3 RESULT_FOR_LOCATION_RECORD SET 1 * &P.OKRO EQU X'00' (OK_RECORDS_OUTPUTED 1 * &P.OKPT EQU X'02' OK_RECORDS_PARTIAL_OUTPUT 1 * &P.OKRN EQU X'04' OK_RECORDS_NOT_REQUESTED 1 * &P.OKRE EQU X'08' OK_NO_RECORDS_EXISTS 1 * &P.NOTA EQU X'0C' SCOPE_HIDES_REQUESTED_RECORDS 1 DS XL3 RESERVED 1 NKDO# EQU *-NKDOENTR LENGTH_OF_CONTROL_RECORD 1 NKDOLGTH EQU NKDO# OLD NAME OF LENGTH