VON SCOTT KLEMENT
Seit einigen Releases gibt es numerische Nachrichtenfelder, die als Datentyp *UBIN defi niert sind. *UBIN-Felder sind vorzeichenfreie 8-Bit Integerfelder, die erst ab Release IBM i 7.1 in CL direkt unterstützt werden. Ein Beispiel für eine solche Nachricht ist CPC7061 (&4 Einträge von Journal &1 in &2 empfangen), die als Diagnosenachricht des Befehls RCVJRNE gesendet wird. Ein
DSPMSGD CPC7061
und die anschließende Auswahl 2 („Felddaten anzeigen“) ergibt
Dezimal- Var. Feld Datenart Länge stellen Länge Dump &1 *CHAR 10 *NO &2 *CHAR 10 *NO &3 *BIN 4 *NO &4 *UBIN 8 *NO
Feld 4 gibt sich als *UBIN zu erkennen, dessen Wert in den Nachrichtendaten ab Stelle 25 auszulesen ist. (Die drei davor liegenden Felder nehmen die ersten 24 Byte der Nachrichtendaten ein.) Wollen Sie dieses numerische 8 Byte Feld bis inklusive Release IBM i 6.1 korrekt auswerten, müssen Sie das traditionelle Verfahren der Zerlegung in zwei 4 Byte Felder mit anschließendem Rechenvorgang anwenden.
Auf das konkrete Beispiel der Nachricht CPC7061 angewendet, bietet sich folgender CL Code an:
DCL &MsgDta *char 32 DCL &CountL *uint 4 + Stg(*defined) defvar(&MsgDta 25) DCL &CountR *uint 4 + Stg(*defined) defvar(&MsgDta 29)
Die beiden letzten Dcl-Anweisungen sind Unterdefi nitionen des 32 Byte Feldes &MsgDta, vergleichbar mit Datenstruktur-Subfeldern in RPG, mit denen die ersten und letzten 4 Byte des vierten Nachrichtenfeldes explizit angesprochen werden. Um aus diesen beiden 4 Byte Feldern den Wert des 8 Byte *UBIN Feldes zu berechnen, ergänzen wir folgenden CL-Code:
Noch nicht Abonnent? Sonderaktion nutzen.
Scott Klement ist technischer Redakteur für NEWSolutions. Außerdem ist er IS Manager der Klement Sausage Co., Inc. Sie erreichen ihn unter iSN (ät) Scott- Klement.com.