Bei diesem Aufruf wird dem EDT eine Anweisung bzw. Anweisungsfolge zur Ausführung übergeben.
Ist das Anweisungsfeld leer (Länge 4), wird sofort zum rufenden Programm zurückgekehrt.
Folgende Anweisungen sind an der IEDTCMD-Schnittstelle erlaubt:
Außerdem sind die benutzerdefinierten Anweisungen erlaubt (siehe Kapitel „Benutzerdefinierte Anweisungen - @USE“).
Die Anweisung @EDIT (mit Ausnahme des Formats 4 - @EDIT LONG...) wird an der IEDTCMD-Schnittstelle grundsätzlich als @EDIT ONLY interpretiert und bewirkt den Übergang in den Line-Modus-Dialog.
Das EDT-Anweisungssymbol muß nicht angegeben werden (außer bei @:).
Der Programmlauf (Initialisierung, Übergang zum Benutzerdialog, Beendigung mit Entladen und Speicherfreigabe) wird durch die Anweisungsfolge gesteuert, die an den EDT übergeben wird.
Nach dem Laden von EDT wird dessen Datenbereich initialisiert (nur beim 1.Aufruf).
Nach dem Ausführen der Anweisungsfolge kehrt der EDT zum rufenden Programm zurück.
@HALT in der übergebenen Anweisungsfolge bewirkt das Beenden des EDT (Speicherfreigabe und Entladen).
Ist die Anweisungsfolge nicht mit @HALT abgeschlossen, wird ohne Freigabe des Datenbereichs zum rufenden Programm zurückgekehrt. Durch einen erneuten Aufruf mit einer Anweisungsfolge kann die Verarbeitung fortgesetzt oder durch Übergabe von @HALT der EDT beendet werden.
Innerhalb einer Routine, die eine benutzerdefinierte Anweisung bearbeitet, bzw. innerhalb einer Anwenderroutine (siehe Kapitel „Benutzerdefinierte Anweisungen - @USE“ und „Anwenderroutinen - @RUN“) ist ein Aufruf der IEDTCMD- Schnittstelle nur dann zulässig, wenn er benutzt wird, eine andere als die aufrufende Instanz des EDT anzusprechen.
Anweisungen an die aufrufende EDT-Instanz, bei denen der an die Anweisungsroutine übergebene globale Kontrollblock EDTGLCB verwendet wird, dürfen nur über die IEDTEXE- Schnittstelle erfolgen. Ein Aufruf der IEDTCMD -Schnittstelle aus einer Anweisungsroutine mit dem EDTGLCB der aufrufenden Instanz wird mit dem Returncode EUPPAERR/EUPPA08 abgewiesen. Weitere Informationen dazu finden sich im Kapitel „BenutzerdefinierteAnweisungen - @USE“ und den folgenden.
Tritt ein Fehler auf (Syntax- oder Laufzeitfehler), wird die Abarbeitung sofort mit einem entsprechenden Returncode und einer Fehlermeldung unterbrochen. In diesen Fällen dient das Feld EGLCMDS (in EDTGLCB) als Fehlerzeiger. Dieser zeigt auf den Beginn der fehlerhaften Anweisung innerhalb der Anweisungsfolge. Aus Kompatibilitätsgründen wird das erste Zeichen nach dem Satzlängenfeld mit '1' nummeriert (das erste Zeichen der übergebenen Anweisungsfolge hat bei dieser Zählung die Nummer '3'). Die Zählung erfolgt grundsätzlich in Zeichen, nicht in Bytes. Es wird der Returncode EUPSYERR bzw. EUPRTERR übergeben.
Benutzerdialog
Der Wechsel zum Benutzerdialog kann durch die Anweisung @DIALOG (Bildschirmdialog) bzw. durch @EDIT ONLY (Line-Modus-Dialog) innerhalb der übergebenen Anweisungsfolge erfolgen.
Jedes Mal, wenn mit der Anweisung @DIALOG aus der übergebenen Anweisungsfolge heraus in den Bildschirmdialog gewechselt wird, werden die übergebenen Meldungen (MESSAGE1, MESSAGE2) in den Meldungszeilen angezeigt.
Mit @EDIT ONLY wird in den Line-Modus-Dialog (Lesen mit RDATA) umgeschaltet.
Der Benutzerdialog wird mit @END, @HALT oder @RETURN beendet, im F-Modus auch mit [K1].
Der EDT übergibt einen Returncode an den globalen Kontrollblock EDTGLCB (EGLRETC). Nach Beenden des Benutzerdialogs wird die Abarbeitung der Anweisungsfolge fortgesetzt. Die Anweisung @END setzt den gleichen Returncode wie @HALT.
Bei @HALT und @RETURN mit der Angabe von <message> wird der Text zusätzlich im Meldungsfeld EGLRMSGF im Kontrollblock EDTGLCB hinterlegt.
Wenn der Dialog mit @HALT ABNORMAL beendet wurde, wird der Mainreturncode EUPABERR gesetzt.
Ist das Flag EUPNTXT im EDTUPCB gesetzt, wird die Angabe von message bzw. ABNORMAL mit Fehlermeldung (im Dialog) zurückgewiesen.
Das Flag EGLSTXIT im EDTGLCB wird bei jedem Aufruf über die IEDTCMD-Schnittstelle ausgewertet. Bei Rückkehr zum aufrufenden Programm werden die Unterbrechungsroutinen des EDT - falls sie angefordert wurden - wieder abgemeldet.
Durch Setzen des Flags EUPNUSER im EDTUPCB wird die Verarbeitung einer @USE-Anweisung im Dialog abgewiesen.
Kontrollstrukturen
Folgende Datenbereiche müssen vor dem Aufruf der Funktion definiert werden:
der Kontrollblock
EDTGLCBder Kontrollblock
EDTUPCBdie Anweisungsfolge (
COMMAND)optional 2 Meldungszeilen (
MESSAGE1undMESSAGE2), sonst Nullzeiger
Die Kontrollblöcke sind im Abschnitt „Generierung und Aufbau der Kontrollblöcke“. Die Puffer COMMAND, MESSAGE1 und MESSAGE2 sind im Abschnitt Puffer beschrieben.
Bei ungeteiltem Bildschirm wird im Dialog MESSAGE1 in der Meldungszeile angezeigt- bei geteiltem Bildschirm wird MESSAGE1 in der ersten, MESSAGE2 in der zweiten Meldungszeile angezeigt.
Enthält das Längenfeld von MESSAGE1 oder MESSAGE2 einen Wert, der kleiner oder gleich 4 ist, wird die Ausgabe der entsprechenden Meldungszeile unterdrückt. Beim erstmaligen Übergang in den benutzerdialog wird in diesem Fall die EDT-Startmeldung ausgegeben. Dies gilt sinngemäß auch bei Angabe eines Nullzeigers.
Wenn @DIALOG bzw. @EDIT ONLY nicht als letzte Anweisung in der Anweisungsfolge steht, ist zu beachten, dass Returncode und Meldung im EDTGLCB von nachfolgenden Anweisungen verursacht werden können.
Aufruf
Folgende Angaben sind notwendig (siehe Übersichtstabelle):
Versorgen der benötigten Felder in den Kontrollblöcken
EDTGLCBundEDTUPCB.Versorgen des Puffers
COMMANDmit der Anweisungsfolge.Versorgen der Puffer
MESSAGE1undMESSAGE2mit Meldungstexten bzw. der entsprechenden Felder der Parameterliste mit Nullzeigern.Aufruf der Einsprungadresse
IEDTCMDmit der Parameterliste.
Übersichtstabelle
(Kontrollblöcke siehe Abschnitt „EDTGLCB - Globaler EDT - Kontrollblock“).
Einsprungadresse |
Parameterliste
|
Aufrufparameter | Rückkehrparameter | ||
EDTGLCB: | EGLUNIT EGLVERS EGLINDB EGLCCSN | EDTGLCB:
| EGLRETC EGLRMSG EGLCMDS EGLFILE |
|
| ||
COMMAND MESSAGE1 / NULL MESSAGE2 / NULL | |||
Hinweis
Bei jeder Rückkehr werden im Kontrollblock EDTGLCB der Returncode und der Name der aktuellen Arbeitsdatei (EGLFILE) eingetragen.
Returncodes
EGLMRET | EGLRS1 |
EUPRETOK | EUPOK00 EUPOK04 EUPOK08 EUPOK12 EUPOK16 EUPOK20 |
|
|
EUPSPERR EUPABERR | 00 EUPOK08 |
EGLMRET und EGLRS1 sind Felder des Kontrollblocks EDTGLCB. Die Bedeutung der Returncodes ist im Abschnitt „EDTGLCB - Globaler EDT - Kontrollblock“ beschrieben.
Beispiel
*****************************************************************
* CMDBSP: BEISPIEL FUER AUSFUEHREN EINER EDT-ANWEISUNGSFOLGE *
* IM UNICODE-MODUS *
* (PAR SPLIT=OFF,LOWER=ON,SCALE=ON,INDEX=ON;DIALOG) *
*****************************************************************
*
CMDBSP START
CMDBSP AMODE ANY
CMDBSP RMODE ANY
BALR R10,0
USING *,R10
MVC EGLCCSN,CCSN041
LA R13,SAVEAREA
LA R1,CMDPL
L R15,=V(IEDTCMD)
BALR R14,R15
TERM ,
*
* DATENBEREICH
R1 EQU 1
R10 EQU 10
R13 EQU 13
R14 EQU 14
R15 EQU 15
*
SAVEAREA DS 18F
* - KONTROLLBLOECKE (EDTGLCB, EDTUPCB)
IEDTGLCB C,VERSION=2
IEDTUPCB C,VERSION=3
* - ANWEISUNGSFOLGE (COMMAND)
CMDDIA DC Y(CMDDIAL)
DC CL2' '
DC C'PAR SPLIT=OFF,LOWER=ON,SCALE=ON,INDEX=ON;DIALOG'
CMDDIAL EQU *-CMDDIA
* - MELDUNGSZEILE (MESSAGE1)
MSG1DIA DC Y(MSG1DIAL)
DC CL2' '
DC C'DIALOGENDE MIT HALT ODER <K1>'
MSG1DIAL EQU *-MSG1DIA
* - MELDUNGSZEILE (MESSAGE2)
MSG2DIA DC Y(MSG2DIAL)
DC CL2' '
MSG2DIAL EQU *-MSG2DIA
* - PARAMETERLISTE FUER CMD
CMDPL DC A(EDTGLCB)
DC A(EDTUPCB)
DC A(CMDDIA)
DC A(MSG1DIA)
DC A(MSG2DIA)
*
CCSN041 DC CL8’EDF041 ’
*
END CMDBSP
Aufruf im C-Programm
Benötigte Include-Dateien:
#include <stdio.h>
#include <iedtgle.h>
Die Kontrollblöcke EDTGLCB und EDTUPCB werden folgendermaßen deklariert und initialisiert:
iedglcb glcb = IEDGLCB_INIT;
iedupcb upcb = IEDUPCB_INIT;
Für den Aufbau und die Versorgung der Strukturen command, message1 und message2 findet sich ein Beispiel im Abschnitt „Beispiel 1 - C-Hauptprogramm“.
Aufgerufen wird die Funktion IEDTCMD mit den Adressen dieser Strukturen:
IEDTCMD(&glcb,&upcb,&command,&message1,&message2);
