Anwendungsgebiet: PROCEDURE
Kommandobeschreibung
Das Kommando DECLARE-CONSTANT deklariert eine oder mehrere Variablen und weist ihnen einen konstanten Wert zu. So sind diese Werte vor Überschreiben geschützt. Variablen mit konstantem Wert können nahezu so behandelt werden wie herkömmliche Variablen. Allerdings kann der Wert nicht mit SET-VARIABLE geändert und auch nicht mit FREE-VARIABLE entfernt werden.
Format
DECLARE-CONSTANT |
VARIABLE-NAME = list-poss(2000): <structured-name 1..20>(...) <structured-name 1..20>(...) VALUE = <text 0..1800 with-low expr> ,TYPE = *ANY / *STRING / *INTEGER / *BOOLEAN ,SCOPE = *CURRENT(...) / *PROCEDURE(...) / *TASK(...) *CURRENT(...) IMPORT-ALLOWED = *NO / *YES *PROCEDURE(...) IMPORT-ALLOWED = *NO / *YES *TASK(...) STATE = *ANY / *NEW / *OLD ,CONTAINER = *STD / <composed-name 1..64> / *VARIABLE(...) *VARIABLE(...) VARIABLE-NAME = <structured-name 1..20> ,SCOPE = *VISIBLE / *TASK |
Operandenbeschreibung
VARIABLE-NAME = list-poss (2000): <structured-name 1..20>(...)
Name der zu deklarierenden konstanten Variablen. Das darf allerdings nur eine einfache Variable, also keine zusammengesetzte Variable oder ein Variablenelement sein.
VALUE = <text 0..1800 with-low expr>
Weist einer Variablen einen konstanten Wert zu; der Wert muss zum Datentyp der Variablen passen, er kann auch als Ausdruck angegeben werden.
TYPE =
Weist der Variablen den Datentyp zu.
TYPE = *ANY
Der Variablen kann als Datentyp STRING, INTEGER oder BOOLEAN zugewiesen werden. Aber nach der Deklaration der konstanten Variablen kann er nicht mehr geändert werden.
TYPE = *STRING
Weist der Variablen den Datentyp STRING zu.
Wertebereich: beliebige Zeichenkette
TYPE = *INTEGER
Weist der Variablen den Datentyp INTEGER zu.
Wertebereich: Ganzzahl zwischen -231 und 231-1
TYPE = *BOOLEAN
Weist der Variablen den Datentyp BOOLEAN zu.
Wertebereich: TRUE, FALSE, YES, NO, ON, OFF.
SCOPE =
Definiert den Geltungsbereich der Variablen.
SCOPE = *CURRENT(...)
Die Variable ist eine prozedurlokale Variable.
Entspricht in Call-Prozeduren der Angabe PROCEDURE.
In Include-Prozeduren bedeutet CURRENT, dass die Variable in der aktuellen Include-Prozedur angelegt wird. Sie ist dann in dieser Include-Prozedur und in allen tiefergeschachtelten Include-Prozeduren sichtbar (= Geltungsbereich Include).
IMPORT-ALLOWED =
Gibt an, ob die Variable mit IMPORT-VARIABLE in einer gerufenen Prozedur importiert werden kann.
IMPORT-ALLOWED = *NO
Die Variable kann nicht mit IMPORT-VARIABLE in einer gerufenen Prozedur importiert werden.
IMPORT-ALLOWED = *YES
Die Variable kann mit IMPORT-VARIABLE in einer gerufenen Prozedur importiert werden.
SCOPE = *PROCEDURE(...)
Die Variable ist eine prozedurlokale Variable mit dem Geltungsbereich Prozedur.
Die Variable wird in der aktuellen Prozedur angelegt.
Bei Include-Prozeduren ist die aktuelle Prozedur jeweils die umgebende Call-Prozedur, von der aus die Include-Prozedur aufgerufen wurde.
Die Variable ist in dieser Prozedur sichtbar sowie in allen tiefergeschachtelten Include-Prozeduren.
IMPORT-ALLOWED =
Gibt an, ob die Variable mit IMPORT-VARIABLE in einer gerufenen Prozedur importiert werden kann.
IMPORT-ALLOWED = *NO
Die Variable kann nicht mit IMPORT-VARIABLE in einer gerufenen Prozedur importiert werden.
IMPORT-ALLOWED = *YES
Die Variable kann mit IMPORT-VARIABLE in einer gerufenen Prozedur importiert werden.
SCOPE = *TASK(...)
Die Variable ist eine taskglobale Variable.
Wird sie in einer Include-Prozedur angelegt, so ist sie auch in der umgebenden Call-Prozedur, von der aus die Include-Prozedur aufgerufen wurde, und in allen tiefergeschachtelten Include-Prozeduren sichtbar.
STATE = *ANY
Existiert in der Task bereits eine Variable mit dem angegebenen Namen, so wird diese verwendet, andernfalls wird eine neue Variable deklariert.
STATE = *NEW
In der Task darf keine Variable mit dem angegebenen Namen existieren.
STATE = *OLD
In der Task muss eine Variable mit dem angegebenen Namen existieren. Die aktuelle Variablendeklaration muss dann mit der Deklaration der bereits vorhandenen Variablen übereinstimmen.
CONTAINER = *STD
Der Variablen wird kein Variablenbehälter zugeordnet. Der Wert der Variablen wird im Klasse-5-Speicher abgelegt.
CONTAINER = <composed-name 1..64>
Verbindet die aktuell deklarierte Variable mit dem hier angegebenen Variablenbehälter. Dieser Variablenbehälter muss geöffnet sein. Die Angabe von „STD“ ist hier nicht erlaubt, da „STD“ nicht als permanent-bestehender Variablenbehälter interpretiert wird.
CONTAINER = *VARIABLE(...)
Verbindet die aktuell deklarierte Variable über einen Link-Mechanismus mit einer anderen Variablen, die in dieser Prozedur bereits definiert ist. Diese Variable wird dann als Variablenbehälter bezeichnet.
Strukturelemente können nicht als Variablenbehälter angegeben werden.
VARIABLE-NAME = <structured-name 1..20>
Name einer Variablen, die in der Prozedur bereits definiert wurde. Die Attribute der Variablen, die als Variablenbehälter dient, und die Attribute der aktuell deklarierten Variablen müssen miteinander verträglich sein. Diese Variable muss auch mit einem konstanten Wert (demselben konstanten Wert wie bei beim Operanden VARIABLE-NAME) und einem konstanten Datentyp deklariert sein.
SCOPE =
Geltungsbereich der Behälter-Variablen
SCOPE = *VISIBLE
Die Variable ist sichtbar.
SCOPE = *TASK
Task-Variable
Kommando-Returncode
(SC2) | SC1 | Maincode | Bedeutung / garantierte Meldungen |
0 | CMD0001 | Ohne Fehler | |
0 | CMD0001 | Warnung; Element schon deklariert | |
1 | CMD0202 | Syntaxfehler | |
3 | CMD2203 | Falsche Syntaxdatei | |
32 | CMD0221 | Systemfehler (interner Fehler) | |
64 | CMD0216 | Erforderliches Privileg fehlt | |
64 | SDP0091 | Semantikfehler garantierte Meldungen: SDP1018, SDP1030 | |
130 | SDP0099 | Kein Adressraum mehr verfügbar |
Beispiel
/DECLARE-CONSTANT KBYTE(TYPE=*INTEGER,VALUE=1024) /DECLARE-CONSTANT MBYTE(TYPE=*INTEGER,VALUE=KBYTE*KBYTE) /DECLARE-CONSTANT PAMPAGE(TYPE=*INTEGER,VALUE=2*KBYTE) /DECLARE-VARIABLE FILE(TYPE=*STRUCTURE) /DECLARE-VARIABLE FILES(TYPE=*STRUCTURE),MULTIPLE-ELEMENTS=*LIST /EXECUTE-CMD (SHOW-FILE-ATTRIBUTES *ALL),STRUCTURE-OUTPUT=FILES,- / TEXT-OUTPUT=*NO / /FOR FILE=*LIST(FILES) / IF (FILE.F-SIZE * PAMPAGE >= 5 * MBYTE) / WRITE-TEXT 'VERY HUGE FILE &(FILE.SHORT-F-NAME)' / ELSE-IF (FILE.F-SIZE * PAMPAGE >= 100 * KBYTE) / WRITE-TEXT 'HUGE FILE &(FILE.SHORT-F-NAME)' / END-IF /END-FOR
Diese Prozedur deklariert die drei Variablen KBYTE, MBYTE und PAMPAGE. Sie werden mit konstanten Werten deklariert, um ihre Korrektheit während der gesamten Prozedur sicherzustellen. Ihre Werte können nicht verändert werden.
Diese Variablen werden gebraucht, um die Größe von Dateien der gegenwärtigen Benutzerkennung zu testen.