Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

CMDCST Semantikfehlerdialog anstoßen

&pagelevel(5)&pagelevel

Der Makro CMDCST bewirkt, dass SDF mit dem Benutzer einen Dialog führt, in dem dieser Semantikfehler in einer Anweisung korrigiert. SDF hat die Anweisung unmittelbar zuvor analysiert und als syntaktisch richtig an das Programm übergeben. Verdeckt eingegebene Operandenwerte muss der Benutzer während des Korrekturprozesses noch einmal eingeben.

Voraussetzungen für den Semantikfehlerdialog sind:

  • Das Programm läuft in einer interaktiven Task und bei der Syntaxanalyse war ein Fehlerdialog zugelassen. Das bedeutet im Einzelnen:

    • Temporär oder permanent geführter Dialog musste eingestellt sein.

    • In Prozeduren musste die SDF-Option PROCEDURE-DIALOGUE=*YES eingestellt sein.

    • Wenn CMDCST nach CMDTST aufgerufen wird, musste bei CMDTST DIALOG=*ERROR eingestellt sein.

  • Es steht die gleiche Syntaxdatei wie bei der ersten Analyse der Anweisung zur Verfügung (kein zwischenzeitlicher Wechsel der Syntaxdatei).

Sind diese Voraussetzungen nicht erfüllt, lehnt SDF den Dialog ab (Fehlercode X’20’).

Bild 11: Wirkung des Makros CMDCST

Operation

Operanden

CMDCST

INOUT = <var: pointer>

,MESSAGE = <var: pointer>

,DEFAULT = *NO / <var: pointer>

,INVAR = *NO / <var: pointer>

,CALLID = *NO / <var: pointer>

,CCSNAME = *NO / *EXTEND / <c-string 1..8> / <var: char:8>

,MF = C / D / L / M / E

INOUT = <var: pointer>
Adresse des normierten Übergabebereichs, der auf Wortgrenze beginnen muss. In ihm steht das zuvor von SDF an das Programm übergebene Analyseergebnis der fehlerhaften Anweisung. Das Programm hat die von ihm als fehlerhaft erkannten Operandenwerte gekennzeichnet. Änderungen von Eingabewerten durch das Programm übernimmt SDF nicht. Nach dem Fehlerdialog und der erneuten Analyse legt SDF das geänderte Analyseergebnis wieder in diesem Bereich ab (siehe Abschnitt „Aufbau des normiertenÜbergabebereichs“).

MESSAGE = <var: pointer>
Adresse des auszugebenden Textes für den Fehlerdialog. Dieser Text wird im geführten Dialog in das Anweisungsmenü integriert. Der Textbereich muss auf Halbwortgrenze ausgerichtet sein und folgendes Format haben:


2 Byte:

absolute Länge des Satzes (n+4)

2 Byte:

(reserviert)

n Byte:

Meldungstext


Der Text darf maximal 400 Zeichen lang sein. In SDF-formatierten Bildschirmen werden jedoch nur die ersten 280 Zeichen dargestellt. Enthält der Text Bildschirmsteuerzeichen, so kann die Menü-Maske zerstört werden.

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 muss 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.

*NO
Die angegebenen Operandenwerte werden nicht durch vom Programm dynamisch erzeugte Werte ersetzt.

<var: pointer>
Adresse einer auf Wortgrenze ausgerichteten Liste, die Adressen von Umsetzbeschreibungen für Anweisungen enthält. Als Umsetzbeschreibung wird ein formatierter Übergabebereich mit dem Typ 'Struktur' verwendet (siehe Abschnitt „Aufbau des normiertenÜbergabebereichs“). Je Anweisung kann nur eine Umsetzbeschreibung angegeben werden. Eine Umsetzbeschreibung enthält u.a. den internen Anweisungsnamen und die Information, welche Operanden mit welchen Werten zu belegen sind. Die Liste der Adressen von Umsetzbeschreibungen ist wie folgt aufgebaut:


2 Byte:

Anzahl der Umsetzbeschreibungen in der Liste (n)

2 Byte:

(reserviert)

4 Byte:

Adresse der ersten Umsetzbeschreibung

. . .

4 Byte:

Adresse der n-ten Umsetzbeschreibung


Die Bereiche für die Umsetzbeschreibungen, die für die Default-Werte des Programms übergeben werden, müssen auf Wortgrenze ausgerichtet sein. Dies gilt ebenso für den Ausgabebereich der Makros (OUTPUT-Operand).

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.

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. Die INVARIANT-INPUT-Form ist damit die größtmögliche Eingabeform für eine Anweisung, die für einen Benutzer mit bestimmten Privilegien und im gewählten Dialogmodus zulässig ist.

Im Gegensatz zur Protokollierungsform LOGGING=*INVARIANT-FORM (Anweisung MODIFY-SDF-OPTIONS) werden Kennwörter und geheime Operanden jedoch nicht ausgeblendet.

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

<var: pointer>
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:


2 Byte:

maximale Länge des Puffers

2 Byte:

Ausgabelänge, die SDF schreibt (n+4)

2 Byte:

(reserviert)

n Byte:

INVARIANT-INPUT-Form der Anweisung, ab 7. Byte


CALLID =
bezieht sich auf einen Kontext (=Syntaxdateihierarchie), der durch einen OPNCALL-Makro eröffnet wurde. 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 Open-Context-Makro bezeichnet wurde.
Diese Funktion bezieht sich auf den Gebrauch der Makros OPNCALL und CLSCALL.

*NO
Die aktuelle Syntaxdateihierarchie (Kontext) der Task wird für die Analyse der Anweisung verwendet.

<var: pointer>
Adresse des Aufrufprüfungsfeldes. 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.

<c-string 1..8> / <var: char:8>
Gibt den Namen eines speziellen 8-bit-Code an, der für Ein-/Ausgabeoperationen verwendet wird. Der Name muss 8 Byte lang sein und kann als C-String-Konstante oder als String-Variable übergeben werden.

Beschreibung der Parameter MF, PARAM, MACID und PREFIX siehe Benutzerhandbuch „Makroaufrufe an den Ablaufteil“ [8].

Rückinformation und Fehleranzeigen

Der Aufbau des Übergabebereichs ist auf den "Aufbau des normierten Übergabebereichs" beschrieben. Das bis SDF V4.0

verwendete Format des Übergabebereiches finden Sie im Kapitel „Anhang“.

Hinweise zur INVARIANT-INPUT-Form einer Anweisung finden Sie beim Makro CMDRST

auf "CMDRST Anweisung lesen und analysieren".

Der Returncode wird im Standardheader der Parameterliste übergeben.

Standardheader

cc: Subcode 2 (SC2)
bb: Subcode 1 (SC1)
aaaa: Maincode

(SC2) SC1

Maincode

Bedeutung

00000000erfolgreiche Beendigung
00200004nicht behebbarer Systemfehler

010008Parameterfehler:
00

  • falsche Parameterliste
01
  • INOUT
03
  • DEFAULT
04
  • MESSAGE
06
  • INVAR
07
  • CALLID
0040000CÜbergabebereich zu klein
00400010Eingabeende (EOF) oder Anweisung fehlerhaft, danach wurde Eingabeende (EOF) erkannt
00400014Anweisung fehlerhaft, danach wurde Kommando erkannt
00400018Anweisung ist zwar in Ordnung, die vom Programm übergebenen Default-Werte sind jedoch fehlerhaft
0040001CAnweisung fehlerhaft, danach wurde //STEP erkannt
00400020Fehlerdialog nicht möglich
00400024Fehlerdialog vom Benutzer abgelehnt
0040002CEND-Anweisung wurde gelesen
00400034Anweisung fehlerhaft, danach wurde END erkannt
00400040angegebene CALLID nicht gefunden
00400044im DSSM-Katalog eingetragene Syntaxdatei nicht gefunden
0040005CINVAR-Puffer zu klein, INVARIANT-INPUT abgeschnitten
00400064

XHCS-Fehler bei Anweisungseingabe

Migration von CORSTMT zu CMDCST

Die Migration von CORSTMT nach CMDCST ist nur dann notwendig, wenn Sie die neue Funktionalität von CMDCST, CMDRST und CMDTST nutzen wollen. Dabei sind dieselben Punkte wie bei CMDRST zu beachten (siehe „Migration von RDSTMT zu CMDRST“ (CMDRST Anweisung lesen und analysieren)  (CMDRST Anweisung lesen und analysieren).

Der Makro-Returncode wird im Standardheader der Parameterliste übergeben. Der Maincode von CMDCST entspricht den Werten, die bei CORSTMT im rechtsbündigen Byte im Register 15 übergeben wurden. Die Erzeugung von EQUATES für Returncodes mit dem Makro CMDANALY ist nicht mehr notwendig, da diese mit CMDCST MF=D automatisch erzeugt werden. Im Folgenden finden Sie eine Gegenüberstellung der alten (CORSTMT-) und neuen (CMDCST-)Feldnamen:

CORSTMT

CMDCST

&P.NOERR
&P.SYERR
&P.PAERR
&P.TRUNC
&P.EOF
&P.SCMD
&P.DFLT
&P.STEP
&P.DIMP
&P.DREJ
&P.END
&P.EERR
&P.NOPRG
&P.INCID
&P.NOFND
&P.ITRC
&P.XHCS

&PREFIX.MDCSUCCESSFUL
&PREFIX.MDCSYSTEM_ERROR
&PREFIX.MDCPARAMETER_ERROR
&PREFIX.MDCAREA_TOO_SMALL
&PREFIX.MDCEOF
&PREFIX.MDCSTMTERROR_CMD
&PREFIX.MDCWRONG_DEFAULTS
&PREFIX.MDCSTMTERROR_STEP
&PREFIX.MDCDIALOG_IMPOSSIBLE
&PREFIX.MDCDIALOG_REJECTED
&PREFIX.MDCEND_STMT
&PREFIX.MDCSTMTERROR_END
&PREFIX.MDCPROGRAM_NOT_IN_SYNTAX_FILE
&PREFIX.MDCINVALID_CALLID
&PREFIX.MDCSYNTAX_FILE_NOT_FOUND
&PREFIX.MDCINVARIANT_INPUT_TRUNCATED
&PREFIX.MDCXHCS_ERROR