Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Datentypen

&pagelevel(5)&pagelevel

PRODAMP kennt folgende drei Datentypen:

  • den numerischen Datentyp der Länge 1 bis 4,

  • den String der Länge 1 bis 133 und

  • das Bitmuster der Länge 1 bis 4 Byte.

Der numerische Datentyp der Länge 4 ist der einzige numerische Datentyp für Variablen und Konstanten und heißt kurz numerischer Datentyp. Er umfasst die ganzen Zahlen von -2147483648 bis +2147483647. Die Zahl -2147483648 wird als Literal allerdings nur in der sedezimalen Form (X'80000000') akzeptiert.

Er wird auch zur Adressierung von Diagnose-Daten benutzt, wobei zur Adressbildung bei /390-Objekten 31 Bit, bei x86-Objekten alle 32 Bit benutzt werden.

Der Adressierungsmodus ist für PRODAMP eine HSI-abhängige Konstante.

Die numerischen Datentypen der Länge 1 bis 3 treten nur bei Symbolen auf und sind die numerische Interpretation von Feldern der Länge 1 bis 3 Byte. Bei numerischen Datentypen der Länge 2 wird der Inhalt als vorzeichenbehaftete Zahl (arithmetische Halbwortarithmetik) aufgefasst.

Numerische Literale können dezimal oder sedezimal angegeben werden.

Beispiele

123,
-1234,
X'0AFFE'

Der String dient zur Darstellung von Zeichenketten, die durch Hochkommata begrenzt werden; innerhalb eines Strings gelten zwei aufeinander folgende Hochkommata als Ersatzdarstellung für ein Hochkomma. Die maximale Länge eines Strings beträgt bei PRODAMP 133 Zeichen. Enthält ein String nicht abdruckbare Zeichen, kann er als sedezimale Zeichenkette vereinbart werden; hierbei bildet - wie in Pascal üblich - die Zeichenfolge #' den linken und das Hochkomma ' den rechten Begrenzer.

Beispiele

'1',
'Langes String-Literal',
'Wert: X''01''',
#'C100C600C600C500';

Bitmuster sind 1 bis 4 Byte lange Daten, in denen jedes einzelne Bit ansprechbar ist. Bitmuster-Literale werden entweder binär (bis zu einem Byte Länge) oder sedezimal definiert. Die Schreibweise bei binärer Darstellung entspricht der Assembler-Schreibweise. Bei sedezimaler Darstellung wird, um Verwechslungen mit sedezimalen numerischen Literalen zu vermeiden, die Zeichenfolge P' als linker und das Hochkomma ' als rechter Begrenzer verwendet.

Außerdem gibt es die symbolischen Bitmuster-Konstanten TRUE und FALSE. 

Beispiele

B'10101001'  entspricht P'A9'
TRUE         entspricht P'01' bzw. B'1'
FALSE        entspricht P'00' bzw. B'0'

Verträglichkeit von Datentypen

Die folgende Tabelle enthält die erlaubten Typmischungen für Zuweisungen (siehe "Anweisungen") und Vergleichsoperationen. 

       rechts ->

links |     
       \/
undefiniertnumerischBitmusterString
undefiniertarithmet.arithmet.BitmusterString
numerischarithmet.arithmet.arithmet.-----
BitmusterBitmuster-----Bitmuster-----
StringString----------String

 
 
 

*)



Tabelle 9: Zulässige Typmischungen für Zuweisungen und Vergleichsoperationen

*)

Die Einträge in dieser Zeile gelten nur für Zuweisungen. Bei Vergleichen muss man ggf. durch Umgruppieren dafür sorgen, dass der linke Operand nicht „undefiniert“ ist.

Als Fundamentalregel gilt: der Typ eines Ausdrucks wird durch den Typ des ersten Terms bestimmt.

Bei Zuweisungen ist unter „links“ die Variable links vom Zuweisungsoperator zu verstehen, unter „rechts“ der Ausdruck rechts davon. Im Schnittpunkt ist zu sehen, ob die Zuweisung erlaubt oder verboten ist und von welchem Typ das Ergebnis ist (Letzteres ist nur interessant, wenn der Typ vorher undefiniert war).

Bei Vergleichsoperationen ist unter „links“ der Ausdruck links vom Vergleichsoperator und unter „rechts“ der Ausdruck rechts davon zu verstehen. Im Schnittpunkt steht, ob der Vergleich erlaubt und wie er zu interpretieren ist. (Bei einem arithmetischen Vergleich ist beispielsweise der Operator IN nicht zulässig.)

In Ausdrücken sind nur zwei Arten der Typmischung erlaubt:

<numerisch><operator><Bitmuster>
<String><operator><numerisch>

(ergibt numerisch) und
(ergibt String),

wobei im zweiten Fall nur der Operator „*“ akzeptiert wird (Stringvervielfältigung). Ausdrücke, in denen der erste Term undefiniert ist, bekommen den Typ „numerisch“.

Symbole haben grundsätzlich den Typ „undefiniert“, weil auf die Symboldatei erst zum Zeitpunkt des Prozedurablaufs zugegriffen wird. Das kann zu ungewünschten Effekten führen:

Beispiel

Interessiert man sich für das rechte Bit im Feld EXVTAUDI, will die höherwertigen Bits ausblenden und schreibt

MY_BITS:=.EXVTAUDI-P'FE';

IF MY_BITS=P'01' THEN

wird EXVTAUDI arithmetisch gesetzt, das Bitmuster-Literal arithmetisch uminterpretiert und als Ergebnis kommt für MY_BITS entweder der arithmetische Wert -253 (X'FFFFFF03') heraus (wenn das Bit gesetzt ist) oder -254 (wenn es nicht gesetzt ist). Die anschließende Abfrage wird vom Compiler ebenfalls akzeptiert, weil er MY_BITS als arithmetisch ansieht und das Bitmuster wieder arithmetisch umdeutet (siehe Tabelle 9). Das war jedoch nicht beabsichtigt.

Das gewünschte Ergebnis lässt sich hingegen folgendermaßen gewinnen:

MY_BITS:=P'0'+.EXVTAUDI-P'FE';

IF MY_BITS=P'01' THEN

Alternativ können Sie durch Vorinitialisieren von Variablen dafür Sorge tragen, dass bei Verwendung von Symbolen die richtigen Operationen generiert werden.

Beim Zugriff auf Daten des Diagnoseobjekts über Symbole, deren Typ zum Compilierungszeitpunkt noch nicht bekannt sein kann, bedarf es also einiger Überlegung, um vor Überraschungen sicher zu sein. Schematisches Umweisen der Diagnosedaten auf initialisierte Variable beispielsweise würde solche Probleme von vornherein ausschließen.

Die nachfolgende Tabelle gibt an, wie die Datentypen, die in den Symboldateien in Form von LSD-Codes (Assembler-Datentypen) hinterlegt sind, in die von PRODAMP verwendeten Datentypen umgesetzt werden.

LSD
code

Assemb.
Typ

Daten
Länge

PRODAMP
Typ

Daten
Beschreibung

00
01
03
04
05
0F
10

C
Z
E
D
P

n
n
4
8
n
n
n



STRING

Zeichen
entpackte Dezimalzahl
Gleitkommazahl, einfach genau
Gleitkommazahl, doppelt genau
gepackte Dezimalzahl
Maschinenbefehl
CSECT, COM, DSECT, XDSEC

06
07

H
F

2
4

NUMERIC
NUMERIC

Binärwert mit Vorzeichen
Binärwert mit Vorzeichen

0A

Y
A

2
4

PATTERN
NUMERIC

Binärwert ohne Vorzeichen
Binärwert ohne Vorzeichen

0A


X

1 - 3
4
sonst

PATTERN
NUMERIC
STRING


Binärwert ohne Vorzeichen

Tabelle 10: Umsetzung von Assembler-Datentypen in PRODAMP-Datentypen