Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

RDSTMT Anweisung lesen und analysieren

&pagelevel(4)&pagelevel

Der Makro RDSTMT bewirkt, dass SDF

  • eine Programmanweisung von SYSSTMT einliest (Für die Systemdatei SYSSTMT gilt die gleiche Zuweisung, die für die Systemdatei SYSDTA getroffen ist. Bezüglich Folgezeilen, Fortsetzungszeichen und Angabe von Bemerkungen gelten für die Anweisungseingabe von SYSSTMT die gleichen Regeln wie für die Kommandoeingabe von SYSCMD.)

  • die eingelesene Anweisung analysiert und

  • das Analyseergebnis an das Programm übergibt.

Voraussetzung ist, dass eine aktivierte Syntaxdatei die Definition des Programms und seiner Anweisungen enthält. Die Eingabelänge einer über RDSTMT eingelesenen Anweisung beträgt 16364 Byte.

Operation

Operanden

RDSTMT

PROGRAM = name

,OUTPUT = addr / (r1)

[ ,STMT = *ALL / (name,...) / *ADDR(addr/(r)) ]

[ ,PREFER = *ALL / name / *ADDR(addr/(r)) ]

[ ,DEFAULT = *NO / (addr,...) ]

[ ,MESSAGE = *NO / addr / (r3) ]

[ ,PROT = YES / NO ]

[ ,BUFFER = *NO / addr / (r) ]

[ ,INVAR = *NO / addr / (r) ]

[ ,SPIN = NO / YES ]

[ ,ERRSTMT = STEP / NEXT ]

[ ,CALLID = *NO / addr / (r7) ]

[ ,CCSNAME = *NO / *EXTEND / name ]



[ ,MF =]


PROGRAM = name

Interner Name des Programms, das den Makroaufruf absetzt. In der Syntaxdatei ist dieser Name in der Programmdefinition abgelegt (siehe ADD-PROGRAM). Er ist mindestens ein und maximal acht Byte lang.

OUTPUT = addr / (r1)
Adresse des normierten Übergabebereichs bzw. Register, das diese Adresse enthält. Der Bereich muss auf Wortgrenze beginnen. Das Programm muss vor Aufruf des Makros RDSTMT dafür sorgen, dass in den ersten zwei Byte dieses Bereichs die maximal mögliche Bereichslänge steht (siehe Abschnitt „Format des normierten Übergabebereiches bis SDF V4.0“ ). SDF legt in dem Bereich das Analyseergebnis ab.

STMT =
Bestimmt, welche Anweisungen als Eingabe zulässig sind.

*ALL
Alle Anweisungen sind zulässig.

(name,...)
Nur die Anweisungen, deren interner Anweisungsname angegeben ist, sind zulässig. Der interne Anweisungsname ist in der Syntaxdatei in der Anweisungsdefinition abgelegt (siehe ADD-STMT). Er ist mindestens ein und maximal acht Byte lang. Die SDF-Standardanweisungen sind unabhängig von der hier getroffenen Festlegung immer zulässig.

*ADDR(addr/(r))
Adresse der Liste der zulässigen Anweisungen. Diese Liste muss mit dem Makro CMDALLW generiert worden sein.

PREFER =
Ist nur für den geführten Dialog relevant und bestimmt, ob als nächste Eingabe eine bestimmte Anweisung erwartet wird.

*NO
Es wird keine bestimmte Anweisung erwartet. SDF fragt mit dem Anweisungsmenü beim Benutzer ab, welche Anweisung er eingeben will.

name
Interner Name der Anweisung, deren Eingabe mit hoher Wahrscheinlichkeit zu erwarten ist. SDF gibt kein Anweisungsmenü aus, in dem der Benutzer die einzugebende Anweisung auswählt, sondern direkt den Operandenfragebogen für die erwartete Anweisung. Der Benutzer kann allerdings statt der erwarteten eine andere Anweisung eingeben.

Beispiel:

Nach MODIFY-OPERAND erwartet SDF-A als nächste Anweisung MODIFY-VALUE. Der interne Anweisungsname ist in der Syntaxdatei in der Anweisungsdefinition abgelegt (siehe ADD-STMT). Er ist mindestens ein und maximal acht Byte lang.

*ADDR(addr/(r))
Adresse eines 8 Byte langen Bereiches, das den internen Namen der zu erwartenden Anweisung enthält. Der Name muss linksbündig ausgerichtet und mit Leerzeichen
(X’40’) aufgefüllt sein.

DEFAULT =
Bestimmt, ob SDF folgende Werte durch vom Programm dynamisch erzeugte Werte ersetzt.

  • eingegebene Operandenwerte oder

  • Default-Werte der Operanden

In der Syntaxdatei müssen die Operanden bzw. Operandenwerte entsprechend definiert sein (siehe ADD-OPERAND ...,OVERWRITE-POSSIBLE=*YES),... bzw. ADD-VALUE ..., VALUE=<c-string> (OVERWRITE-POSSIBLE=*YES),...). Der vom Programm erzeugte Wert mus s gültiger Operandenwert sein.
Im geführten Dialog zeigt SDF die vom Programm erzeugten Werte im Fragebogen.

Beispiel:

SDF-A ersetzt in den eingegebenen MODIFY-Anweisungen den Wert *UNCHANGED durch den aktuellen Wert.
Stehen die zu defaultierenden Operanden in einer Struktur, deren Einleiter mit LIST-ALLOWED=*YES definiert ist (siehe ADD-VALUE), so kann folgender Fall eintreten: Die Umsetzbeschreibung enthält mehrere Listenelemente, an denen eine Struktur mit zu defaultierenden Operanden hängt. Auf der anderen Seite gibt der Anwender ebenfalls mehrere Listenelemente ein, an denen eine Struktur mit zu defaultierenden Operanden hängt. SDF versucht zunächst, die vom Benutzer eingegebenen und die in der Umsetzbeschreibung angegebenen Strukturen einander über den Wert des Struktureinleiters zuzuordnen. Ist über den struktureinleitenden Wert keine eindeutige Zuordnung möglich, weil keiner der eingegebenen Werte mit denen in der Umsetzbeschreibung übereinstimmt oder weil der Benutzer den übereinstimmenden Wert mehrfach eingegeben hat, so erfolgt die Zuordnung über die Position des Struktureinleiters in der Liste.

*NO
SDF soll die eingegebenen Operandenwerte nicht durch vom Programm dynamisch erzeugte Werte ersetzen.

(addr,...)
In einer oder in mehreren der möglichen Anweisungen soll SDF eingegebene Operandenwerte durch vom Programm dynamisch erzeugte Werte ersetzen. Unter den angegebenen Adressen (adr21,...) stehen in dem Programm die Umsetzbeschreibungen (siehe Abschnitt „Format des normierten Übergabebereiches bis SDF V4.0“) für diese Anweisungen. Je Anweisung kann nur eine einzige Umsetzbeschreibung angegeben werden. Die Umsetzbeschreibung enthält u.a. den internen Anweisungsnamen und die Information, welche eingegebenen Operandenwerte in welche Werte umzusetzen sind. Die Bereiche für die Umsetzbeschreibungen, die für die Standardwerte des Programms übergeben werden, müssen auf Wortgrenze ausgerichtet sein. Dies gilt ebenso für den Ausgabebereich der Makros (OUTPUT-Operand).

MESSAGE =
Bestimmt, ob SDF bei der Aufforderung zur Anweisungseingabe eine Meldung ausgeben soll. Diese wird im geführten Dialog in das Anweisungsmenü integriert.

*NO
SDF soll keine Meldung ausgeben.

addr / (r3)
Adresse des auszugebenden Meldungstextes bzw. Register, das diese Adresse enthält. Der Text wird als Satz variabler Länge erwartet, die maximale Länge beträgt
400 Zeichen. In SDF-formatierten Bildschirmen werden jedoch nur die ersten 80 Zeichen dargestellt. Enthält der Text Bildschirmsteuerzeichen, so kann die Menü-Maske zerstört werden. Dieser Bereich muss auf Halbwortgrenze ausgerichtet sein.

PROT =
Bestimmt, ob SDF zu protokollierende Eingaben und Meldungen nach SYSOUT schreibt. Falls nicht nach SYSOUT geschrieben wird, sollte der Benutzer des Programms in der Programmdokumentation darüber informiert werden. Dieser Parameter ist im Gegensatz zum TRSTMT-Makro ein Flag (set=NO, reset=YES). Ein Protokollpuffer kann bei BUFFER bereitgestellt werden.

YES
SDF soll zu protokollierende Eingaben und Meldungen nach SYSOUT schreiben.

NO
SDF soll keine Protokollierung durchführen. Mit folgendem Verhalten ist zu rechnen:


Ergebnis der Analyse

PROT=YES

PROT=NO

Kein Fehler:

Eingabeanweisung

– / –

Syntaxfehler:

1. Eingabeanweisung
2. Syntaxfehlermeldung
3. Spin-off-Meldung

Spin-off-Meldung


BUFFER =
Das Protokoll der Anweisung und die Fehlermeldungen können in einen vom Benutzer bereitgestellten Bereich geschrieben werden.

*NO
Es wird kein Puffer bereitgestellt.

addr / (r)
Adresse eines Bereichs bzw. Register, in dem das Protokoll der angegebenen Anweisung und die Meldungen, unabhängig vom Wert, der bei PROT angegeben wurde, abgelegt wird. Der Bereich muss auf Wortgrenze ausgerichtet sein. Das erste Halbwort muss die Gesamtlänge des Bereiches enthalten. SDF schreibt die tatsächliche Länge des Ausgabe-Protokolls in das zweite Halbwort. Im Anschluss daran werden die Protokollsätze als Sätze variabler Länge in den Bereich geschrieben.
Wenn der Puffer nicht leer ist, ist der erste Datensatz normalerweise das Protokoll des Eingabe-Kommandos. Die weiteren Datensätze enthalten Meldungen. Wenn kein Eingabeprotokoll zur Verfügung steht oder ausgegeben werden kann, wird ein doppelter Schrägstrich („//“) in den Ausgabebereich geschrieben.

INVAR =
Legt fest, ob die INVARIANT-INPUT-Form der Anweisung abgespeichert wird. Das heißt, dass die Anweisung mit allen eingegebenen Operanden, allen durch Default-Werte vorbelegten Operanden und mit allen Operandenwerten abgelegt wird, die für die Task zu dieser Zeit erlaubt sind. Im Gegensatz zur Protokollierungsform LOGGING=INVARIANT-FORM (siehe MODIFY-SDF-OPTIONS) werden Kennwörter und geheime Operanden jedoch nicht ausgeblendet.

*NO
Die INVARIANT-INPUT-Form der Anweisung wird nicht abgespeichert.

addr / (r)
Gibt die Adresse eines Puffers an, in den SDF die INVARIANT-INPUT-Form der Anweisung schreibt. Der Puffer muss auf Wortgrenze ausgerichtet sein und das erste Halbwort muss die Länge des Puffers enthalten. SDF legt die INVARIANT-INPUT-Form ab dem zweiten Halbwort als Satz mit variabler Satzlänge ab. Der Puffer hat dann folgenden Inhalt:

1. HW    2. HW  3. HW (Halbwort)


buflen

reclen

filler

invariant-input

buflen:Länge des Puffers
reclen:Länge des Satzes, den SDF schreibt
filler:Füllzeichen
invariant-input:INVARIANT-INPUT-Form des Kommandos, beginnt beim 7. Byte.


SPIN =
Bestimmt, welche Anweisung SDF im Stapelbetrieb als nächste liest und analysiert.

NO
SDF soll die nächste Anweisung der Anweisungsfolge lesen und bearbeiten.

YES
SDF soll alle Anweisungen bis zur nächsten STEP-Anweisung bzw. bis zur END-Anweisung überlesen und ggf. die Bearbeitung mit der Anweisung fortsetzen, die der STEP-Anweisung folgt.

ERRSTMT =
Bestimmt, welche Anweisung den Spin-off-Mechanismus abbricht, wenn SDF einen Syntaxfehler für die Leseanweisung feststellt.

STEP
SDF leitet Spin-off ein bis STEP (oder END) erkannt wird.
Der Returncode ist X’1C’, X’34’,...

NEXT
SDF leitet keinen Spin-off ein: Die nächste Anweisung wird beim nächsten RDSTMT-Aufruf gelesen. Returncode ist dann X’50’.

CALLID =
Diese Funktion bezieht sich auf den Gebrauch der Makros OPNCALL und CLSCALL. CALLID benennt den Programmkontext (=Syntaxdateihierarchie, durch einen OPNCALL-Makro eröffnet), in dem die Anweisung gelesen und analysiert werden muss. Der Name der Syntaxdateihierarchie (CALLID) muss den 4 Byte langen Wert haben, der von SDF an das Feld zurückgegeben wird, welches durch den Operanden CALLID im OPNCALL-Makro bezeichnet wurde.

*NO
Die aktuelle Syntaxdateihierarchie (Kontext) der Task wird für die Analyse der Anweisung verwendet. Das kann z.B. die für die Task beim LOGON eröffnetete Syntaxdateihierarchie sein.

addr / (r7)
Adresse des Aufrufprüfungsfeldes oder Register, das diese Adresse enthält. Der Bereich muss auf Wortgrenze ausgerichtet sein.

CCSNAME =
Gibt den Namen des Zeichensatzes an, der für den Korrekturdialog auf 8-bit-Terminals und für die Konvertierung von Klein- in Großbuchstaben verwendet wird. Jedes Terminal arbeitet mit einem bestimmten Zeichensatz. Ein codierter Zeichensatz (CCS, Coded Character Set) ist die eindeutige Darstellung der Zeichen eines Zeichensatzes in binärer Form. Jeder codierte Zeichensatz wird durch seinen Namen (Coded Character Set Name, CCSN) bestimmt (siehe Handbuch „XHCS“ [11]). Die Ausgabe von Meldungen wird durch diesen Parameter nicht beeinflusst.

*NO
Der 7-bit-Standard-Code wird für Ein-/Ausgabeoperationen verwendet.

*EXTEND
Der 8-bit-Standard-Code wird für Ein-/Ausgabeoperationen verwendet.

name
Gibt den Namen eines speziellen 8-bit-Code an, der für Ein-/Ausgabeoperationen verwendet wird. Der Name muss 8 Byte lang sein.

MF =
definiert besondere Anforderungen an die Makroauflösung (siehe Benutzerhandbuch

„Makroaufrufe an den Ablaufteil“ [8]).

L
Es wird nur der Datenteil der Makroauflösung (Operandenliste) generiert. Das erfordert, dass im Makroaufruf keine Operandentypen mit ausführbarem Code auftreten. Der generierte Datenteil hat die im Namensfeld des Makroaufrufs angegebene Adresse.

(E,(1)) / (E,opadr)
Es wird nur der Befehlsteil der Makroauflösung generiert. Auf den zugehörigen Datenteil (Operandenliste) wird mit der Adresse „opadr“ verwiesen. Diese steht entweder in Register 1 oder wird direkt angegeben.

Rückinformation und Fehleranzeigen
Der Aufbau des Übergabebereichs ist auf den Format des normierten Übergabebereiches bis SDF V4.0 beschrieben.

Register 15 enthält im rechtsbündigen Byte einen Returncode und im linksbündigen Byte Angaben über die Zuweisung von SYSSTMT. EQUATE-Anweisungen dafür können mit dem Makro CMDANALY generiert werden.

X’00’

X’04’

X’08’

X’0C’

X’10’

normale Beendigung

nicht behebbarer Systemfehler

Operandenfehler im Makroaufruf

Übergabebereich zu klein

Eingabeende (EOF) oder Anweisung fehlerhaft, Eingabeende (EOF) wurde
erkannt

X’14’

X’18’

Anweisung fehlerhaft, Kommando wurde erkannt

Anweisung ist zwar in Ordnung, die vom Programm übergebenen Defaultwerte
sind aber fehlerhaft

X’1C’

X’28’

X’2C’

X’34’

X’38’

X’3C’

X’44’

X’4C’

Anweisung fehlerhaft, STEP wurde erkannt

Puffer zu klein, Protokoll abgebrochen

END-Anweisung wurde gelesen

Anweisung fehlerhaft, die nächste zu bearbeitende Anweisung ist END

SDF ist nicht verfügbar

Programm nicht in Syntaxdatei bekannt

Syntaxdatei nicht gefunden

Das Programm ist oberhalb der 16 M Byte-Grenze nicht ablauffähig, weil SDF nicht
geladen ist. Bitte Systembetreuung verständigen.

X’50’

X’5C’

X’64’

Anweisung fehlerhaft, Spin-off wurde nicht eingeleitet

INVAR-Puffer zu klein, INVARIANT-INPUT abgeschnitten

XHCS-Fehler

Zuweisung von SYSSTMT:

X’01’

X’02’

X’03’

X’04’

X’05’

X’06’

SYSSTMT=Datensichtstation

SYSSTMT=SYSCMD in Nicht-S-Prozedur oder Datei

SYSSTMT=Kartenleser

SYSSTMT=Diskette

SYSSTMT=SYSCMD in S-Prozedur

SYSSTMT=S-Variable