Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Event-Exit FORMAT (BS2000-Systeme)

Wenn Sie den Event-Exit FORMAT verwenden, verzichten Sie auf die Ausgabeunterstützung der Systemkomponenten FHS und VTSU. Sie müssen dann Ihre eigene Formatierung schreiben und ggf. auch selbst für den Bildschirmwiederanlauf sorgen. openUTM erkennt den Event-Exit FORMAT am Präfix "-" des Formatkennzeichens in KCMF/kcfn.

Der Event-Exit FORMAT muss in der EXIT-Anweisung mit dem Operanden USAGE=FORMAT generiert werden. Es ist pro Anwendung nur ein Event-Exit FORMAT erlaubt. Teilformate können Sie nicht verwenden.

Der Event-Exit FORMAT ist ein Programm, das Funktionen der Systemsoftware realisiert. Er muss daher sehr sorgfältig auscodiert sein und darf keine offenen Ausgänge, nicht auscodierte Pfade usw. enthalten, da ein Fehler zum Abbruch des Vorgangs oder sogar zum Anwendungsabsturz führen kann. In Zweifelsfällen beenden Sie den Event-Exit FORMAT mit Formatierungsfehler.

Der Event-Exit FORMAT kann in jeder von openUTM unterstützten Programmiersprache programmiert werden. Besonders geeignet sind die Programmiersprachen Assembler und C/C++. Die Beschreibung des FORMAT-Exits in diesem Abschnitt basiert auf der Programmiersprache Assembler - im Folgenden jedoch ein kurzes Beispiel für den Prototyp eines FORMAT-Exits in C:


Prototyp eines FORMAT-Exits in C (ANSI)
void FORMATEX( struct kc_ca  * const pKB
              ,char          * const pSPAB
              ,char          * const pFormatName
              ,char          * const pDevice
              ,char          * const pFormatArea
              ,char          * const pPhysicallyInOutArea
              ,char          * const pRestartArea
              ,char          * const pFormatControlArea
              ,char          * const pInOutIndicator
              ,char          * const pSecondaryReturnCode
             );

Adressleiste

openUTM stellt beim Aufruf des Event-Exits folgende Adressleiste zur Verfügung:

Reihenfolge der Wortadressen

Inhalt

1.

Adresse des KB

2.

Adresse des SPAB

3.

Adresse des Formatnamens

4.

Adresse des Terminaltyps

5.

Adresse des Formatierungs-Benutzerbereichs

6.

Adresse des physischen Ein-/Ausgabebereichs

7.

Adresse eines Wiederanlaufbereichs

8.

Adresse des Formatierungskontrollbereichs

9.

Adresse des Ein-/Ausgabe-Indikators


openUTM ruft die Formatierungsroutine auf, wenn man in den KDCS-Aufrufen MPUT, FPUT, DPUT, MGET oder FGET ein -Format verwendet.

Die Formatierung einer Dialog-Ausgabe-Nachricht (MPUT) erfolgt erst nach dem PEND- oder PGWT-Aufruf. Der Inhalt von KB und SPAB ist gleich dem des PEND- oder PGWT-Aufrufs. Die Formatierung einer asynchronen Ausgabenachricht erfolgt erst beim Senden. Der Inhalt von KB und SPAB ist in diesem Fall undefiniert, d.h. sie haben keinen Bezug mehr zum Teilprogramm, das den FPUT oder DPUT aufgerufen hat.

Die Formatierung einer Dialog-Eingabe-Nachricht erfolgt während der MGET-Behandlung. KB und SPAB haben den Inhalt vom MGET-Aufruf. Das gilt nur beim Event-Exit FORMAT, normalerweise formatiert openUTM vor dem INIT.
Die Formatierung einer asynchronen Eingabenachricht erfolgt beim Empfang der Nachricht, nicht erst beim FGET. Die Inhalte von KB und SPAB sind daher undefiniert.

Es ist darauf zu achten, dass vor dem Transaktionscode kein Feld sein darf, da openUTM den TAC ermittelt, ohne den Formatexit aufzurufen.

Formatname (Adresse in Wort 3)

  • bei Eingabeformatierung der Formatname, der bei der vorausgehenden Ausgabeformatierung für dieses Terminal benutzt wurde (Aufrufe: MPUT, FPUT, DPUT oder Kommando KDCFOR).

  • bei Ausgabeformatierung die Angabe in KCMF/kcfn des Parameterbereichs des MPUT- bzw. FPUT-Aufrufs.

Terminaltyp und Zusatzinformationen (Adresse in Wort 4)

t

ist der physische Gerätetyp, wie er beim TSTAT-Makro mit TCHAR abgefragt werden kann. Die Codes lassen sich dem DCSTA-Makro entnehmen (siehe BS2000-Handbuch „Makroaufrufe an den Ablaufteil“).

Wenn der Terminaltyp vom Event-Exit FORMAT nicht unterstützt wird, muss ein Formatierungsfehler erzeugt werden.

z

ist eine Zusatzinformation:

X’00’ = Bildschirm löschen;

X’01’ = Bildschirm nicht löschen

ba

ist die Bildschirmausgabefunktion:

X’0001’: KCRESTRT

X’0001’: KCREPL

X’0002’: KCERAS

X’0004’: KCALARM

X’0008’: KCREPR

X’2000’: KCEXTEND

X’4000’: KCCARD

qa

ist ein Kennzeichen, das anzeigt, ob eine Quittung angefordert werden muss - gilt nur für Ausgaben auf Drucker.

X’00’ = Quittung nicht anfordern

X’01’ = Quittung anfordern

q1,q2

Ist qa = X’01’, stehen in diesen beiden Bytes die Quittungs-Nummern im EBCDIC-Code.
Man muss diese beiden Bytes bei Verwendung eines Nachrichtenkopfes in ASCII umwandeln und in die Rückmelde-Bytes RB1 und RB2 eintragen (siehe Handbücher zu Ihrem Terminal).

dc

device characteristica; enthält in der Länge von 8 Byte Informationen über Gerätetyp und -ausbau, so wie dies im PDN mit XSTAT und XOPCH generiert wurde.
Die Bedeutung der 8 Byte können Sie dem DCSTA-Makro entnehmen (siehe BS2000-Handbuch „Makroaufrufe an den Ablaufteil“).

Formatierungs-Benutzerbereich (Adresse in Wort 5)

Eingabeformatierung:

Nach dem Aufruf des Formatexits erwartet openUTM hier die logische Nachricht im Eingabeformat (siehe „Nachrichtenformate"). Die maximale Länge wird bestimmt durch den generierten Wert (siehe MAX-Anweisung, Operand NB im openUTM-Handbuch „Anwendungen generieren“). Diese maximale Länge trägt openUTM vor dem Aufruf in das Längenfeld des Formatierungs-Benutzerbereichs ein.
Falls die Umsetzung der logischen in die physische Nachricht die Bereichslänge überschreitet, muss ein Formatierungsfehler erzeugt werden.

Ausgabeformatierung:

Der Bereich enthält die zu formatierende Nachricht, wie sie beim MPUT bzw. FPUT im Nachrichtenbereich bereitgestellt wurde. Die Nachricht ist im Eingabeformat (siehe „Nachrichtenformate") aufgebaut. Teilformate sind nicht erlaubt.

Physischer Ein-Ausgabebereich (Adresse in Wort 6)

Eingabeformatierung:
openUTM übergibt die Nachricht, wie sie vom Terminal kommt, im Eingabeformat.

Ausgabeformatierung:
Nach dem Aufruf des Formatexits erwartet openUTM hier die formatierte Nachricht im Ausgabeformat.

Die maximale Länge ist bestimmt durch die maximal auf der Verbindung zum Client erlaubten Nachrichtenlänge. Diese maximale Länge trägt openUTM vor dem Aufruf in das Längenfeld des physischen Ein-/Ausgabebereiches ein.
Falls bei der Umsetzung der logischen in die physische Nachricht die Bereichslänge überschritten wird, muss ein Formatierungsfehler oder eine Ersatznachricht erzeugt werden.

Wiederanlaufbereich (Adresse in Wort 7)

Den Wiederanlaufbereich muss man benutzen, um Bildschirmformate bei Bedarf rekonstruieren zu können, was z.B. in folgenden Situationen vorkommen kann:

  • Beim KDCDISP-Kommando (Anzeigen des letzten Bildschirms)

  • Wenn der Terminalbenutzer einen unterbrochenen Vorgang mit seinem zuletzt eingegebenen Format fortsetzen möchte (z.B. nach einem Verbindungsverlust oder Eingabe des Kommandos KDCOFF innerhalb eines laufenden Vorgangs)

  • Wenn der Bildschirm durch eine asynchrone Ausgabe zerstört wurde und wiederhergestellt werden soll.

Man muss dafür sorgen, dass der Wiederanlaufbereich immer die aktuelle logische Nachricht enthält, die bei Bedarf ausgegeben werden soll.

Will man bei einer Ausgabeformatierung zuerst den alten Bildschirm löschen, muss man den Wiederanlaufbereich neu aufbauen.

Soll bei einer Ausgabe der alte Bildschirm nicht gelöscht werden, braucht man im Wiederanlaufbereich nur die Felder zu ändern (überschreiben), die auch am Terminal modifiziert werden.

Nach Eingaben vom Terminal muss man den Wiederanlaufbereich entsprechend aktualisieren.

Er wird beim PEND in der Länge gesichert, die für den Benutzerbereich für dieses Format bei der letzten Ausgabeformatierung angegeben wurde (KCLM bei MPUT).

Beim Wiederanlauf wird eine Ausgabeformatierung durchgeführt. Dabei ist die Adresse des Formatierungsbenutzerbereichs gleich der Adresse des Wiederanlaufbereichs (d.h. es gibt nur den Wiederanlaufbereich).

Formatierungs-Kontrollbereich (Adresse in Wort 8)

Ab Adresse + 1 dieses Bereichs müssen Sie im Event-Exit FORMAT den Rückkehrcode (sedezimal) ablegen, der aussagt, ob die Formatierung erfolgreich war.

Als Eintrag kommt infrage:

X’00’

Die Ausgabeformatierung war erfolgreich.

X’xy’

Fehlermeldungen des Benutzers, die als UTM-Rückgabecode "FRxy" im Feld KCRCDC weitergegeben werden (Formatierungsfehler). Verboten sind die Einträge X’01’, X’02’, X’03’, X’04’, X’08’, X’10’ und X’99’, weil diese Rückkehrcodes für die Zusammenarbeit von openUTM und FHS reserviert sind.

Ein-Ausgabe-Indikator (Adresse in Wort 9)

Das erste Byte des Indikators enthält den Wert:

X'00':für Eingabeformatierung
X'01':für Ausgabeformatierung
X'02':für Restart
X'03':bei KDCFOR

Im Restart-Fall sind die Adressen des Formatierungs- und Wiederanlaufbereichs identisch.

Nachrichtenformate

Im Event-Exit FORMAT werden zwei unterschiedliche Nachrichtenformate verwendet (siehe vorigen Abschnitt). Diese sind nicht unbedingt auf Halbwortgrenze ausgerichtet.

Eingabeformat    -------------------------------------------
                 |  länge  |  b  |  b  |  (Teil-)Nachricht |
                 -------------------------------------------
                 0         2           4
Ausgabeformat    --------------------------------------------------
                 |  länge  |  b  |  b  |  b  |  (Teil-)Nachricht  |
                 --------------------------------------------------
                 0         2                 5

länge

ist die Länge der Gesamtnachricht (binär), inklusive des Nachrichtenvorspanns, der bei der Eingabeformatierung 4 Bytes und bei der Ausgabeformatierung 5 Bytes beträgt.

b

ist ein Leerzeichen (X’40’)

Informationen über den Nachrichtenaufbau von physischen Nachrichten finden Sie in den Handbüchern zu Ihrem Terminal.

Beispiel
FEXIT    CSECT
         STM   14,12,12(13)
         BALR  12,0
         USING *,12
         USING KB,2
         USING SPAB,3
         USING DFORMNAM,4
         USING DFORMSDE,5
         USING DADUSERA,6
         USING DAREAFMI,7
         USING DADRSRTA,8
         USING DMDCBUSE,9
         USING DFORMMOD,10
         LM    2,10,0(1)
*
*  EIN- ODER AUSGABEFORMATIERUNG, RESTART ODER KDCFOR ?
*
         CLI   FORM#IND,X'00'            00=EINGABE, 01=AUSGABE
         BE    EINFORM                   02=RESTART, 03=KDCFOR
         CLI   FORM#IND,X'01'
         BE    AUSFORM

         CLI   FORM#IND,X'02'
         BE    RESTFORM
         CLI   FORM#IND,X'03'
         BE    FORFORM
*
* SETZEN FORMATIERUNGSFEHLER: KEIN GUELTIGER OPCODE !
*
*********************************************************  K D C F O R
*
FORFORM  DS    0H
*
*      A) PHYS. NACHR. LT. FORMATNAME AUFBAUEN
*         UND MIT "STD."-WERTEN VORBESETZEN
*      B) QUITT.-ANFORDERUNG ('FORMQA') AUSWERTEN
*         UND NACHRICHTENKOPF VERSORGEN
*      C) RESTART-BER. AUFBAUEN
*      D) RET.-CODE IM FORMAT.-KONTROLLBER. SETZEN
*
END#EXIT LM    14,12,12(13)
         BR    14
*
***********************************************  EINGABE-FORMATIERUNG
*
EINFORM  CNOP   0,4
*
*      A) PHYS. NACHRICHT LT. FORMATNAME AUSWERTEN UND
*         FORMAT.-BENUTZERBER. ('DADUSERA') AUFBAUEN GEM.
*         NACHRICHTENFORMAT F. EINGABE
*      B) RESTART-BER. VERSORGEN
*      C) RET.-CODE IM FORMAT.-KOMTROLLBER. SETZEN
*
         B      END#EXIT
         EJECT
************************************************  AUSGABE-FORMATIERUNG
*
AUSFORM  CNOP   0,4
*
*      A) AUFBAUEN DER PHYS. NACHRICHT,
*         DABEI WIRD AUSGEWERTET:
*         -  FORMAT.-BENUTZERBER.
*         -  FORMAT-NAME
*         -  STATIONSTYP UND ZUSATZINFORMATION
*            MIT
*              1) 'FORMCLMO' (BILDSCHIRM LOESCHEN ?
*                 D.H. "FORMAT-ALT" = "FORMAT-NEU" ?)
*              2) 'FORMBA' (BILDSCHIRMAUSGABE-FUNKTION)
*              3) 'FORMQA' UND GGF. 'FORMRB'
*      B) RESTARTBEREICH VERSORGEN
*      C) RET.-CODE IM FORMAT.-KONTROLLBER. SETZEN
*
         B    END#EXIT
*****************************************************  R E S T A R T
*
RESTFORM CNOP 0,4
*
*      A) WIEDERANLAUF-BER. AUSWERTEN
*         UND PHYS. NACHRICHT AUFBAUEN
*      B) RET.-CODE IN FORMAT.-KONTROLLBER. SETZEN
*
         B   END#EXIT
*
         EJECT
*
*  DSECTS FUER PARAMETERUEBERGABE VON UTM
*            >>>>>>>>>>>>>>>>>> NICHT VOLLSTAENDIG DEFINIERT
*
KB       KCKBA D
*
         SPACE 5
SPAB     KCPAA D
*
         EJECT
DFORMNAM DSECT
FORMNAME DS    CL8
*
DFORMSDE DSECT
FORMSDEV DS    C
FORMCLMO DS    C
FORMBA   DS    CL2
FORMQA   DS    C
FORMRB   DS    CL2
*
DADUSERA DSECT
         DS    0H
*
DAREAFMI DSECT
         DS    0H
*
DADRSRTA DSECT
         DS    0H
*
DMDCBUSE DSECT
         DS    0H
*
DFORMMOD DSECT
FORM#IND DS    X
         END