Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

CLIEXPR

&pagelevel(4)&pagelevel

Der Makro CLIEXPR wertet arithmetische, logische und String-Ausdrücke aus. Der Ausdruck wird in einem Input-Feld übergeben, das Ergebnis wird in ein Output-Feld zurückgeschrieben. Es kann spezifiziert werden, wie das Ergebnis zurückgeliefert werden soll (Dualzahl, boolsche Konstante, String).

Der Makro kann auch mit MF=M aufgerufen werden. Nähere Erläuterungen zum Operanden MF=... siehe Handbuch „Makroaufrufe an den Ablaufteil“ [7].

Operation

Operanden

CLIEXPR

MF = E
,PARAM = <name 1..27> / (<integer 1..15>)

MF = D

[,PREFIX = C / prefix ]

MF = C

,PREFIX = C / prefix

[,MACID = LIE / macid]

MF = L

,INPUT@ = <pointer>

,INPUTL = <integer 0..2147483647>

,OUTPUT@ = <pointer>

,OUTPUTL = <integer 0..2147483647>

,VFORM = *BY-VALUE / *STRING

,OTYPE = <pointer>

,OACTL = <pointer>

,PROT@ = NULL / <pointer>

,PROTL = 0 / <integer 0..2147483647>

,OPROTL = NULL / <pointer>

Operandenbeschreibung

Die in der Beschreibung benutzte Bezeichnung <pointer> bedeutet immer eine Adressangabe in der Form A(symbolische Adresse) oder Register mit der Adresse. Diese Registerangabe ist nur in Verbindung mit MF=M möglich.

MF = E
E-Form; erzeugt einen SVC.

PARAM
Bezeichnet die Adresse der Operandenliste. (Makroaufruf mit MF=L).

= <name 1..27>
Bezeichnet die symbolische Adresse der Operandenliste

= (<integer 1..15>)
Register, das die Adresse der Operandenliste enthält.

MF = D
DSECT-Form; es wird eine DSECT zur Operandenliste generiert. Jedes Feld hat einen Feldnamen und erläuternde Equates, falls erforderlich.

PREFIX = C / prefix
Bezeichnet das erste Zeichen der Feldnamen; Voreinstellung = C.

MF = C
C-Form; es wird nur der Datenbereich (Operandenliste) generiert. Jedes Feld hat einen Feldnamen und erläuternde Equates, falls erforderlich. Der Standardheader muss vom Anwender initialisiert werden.

PREFIX = C / prefix
Bezeichnet das erste Zeichen der Feldnamen; Voreinstellung = C.

MACID = LIE / macid
Bezeichnet das zweite, dritte und vierte Zeichen der Feldnamen; Voreinstellung = LIE.

MF = L
List-Form; es wird nur der Datenbereich (Operandenliste) generiert, unter Beachtung der im Makroaufruf angegebenen Operandenwerte. Der Datenbereich enthält keine Feldnamen und keine erläuternden Equates. Der Standardheader ist initialisiert.

INPUT@ = <pointer>
Adresse des Feldes, das den auszuwertenden Ausdruck enthält. Der Ausdruck muss als String-Ausdruck angegeben werden. Das Feld muss auf Wortgrenze ausgerichtet sein.

INPUTL = <integer 0..2147483647>
Länge des Feldes mit dem auszuwertenden Ausdruck.

OUTPUT@ = <pointer>
Adresse des Feldes, in das das Ergebnis der Auswertung geschrieben werden soll. Das Feld muss auf Wortgrenze ausgerichtet sein.

OUTPUTL = <integer 0..2147483647>
Länge des Feldes für das Ergebnis. Die (wirkliche) Länge des Ergebnisses wird in das bei OACTL=... angegebene Feld eingetragen.

VFORM =
Bezeichnet die Art, wie das Ergebnis dargestellt werden soll (Dualzahl, boolsche Konstante oder String).

VFORM = *BY-VALUE
Integer-Zahlen werden als Dualzahl (4 Byte - Zahl) dargestellt.
Boolsche Konstanten werden durch X'00' (für FALSE) oder X'01' (für TRUE) dargestellt.

VFORM = *STRING
Integer-Zahlen werden als Folge von Dezimalziffern dargestellt.
Boolsche Konstanten werden durch den String 'FALSE' oder 'TRUE' dargestellt.

PROT@ = NULL / <pointer>
Adresse des Feldes, in das SDF-P-Meldungen geschrieben werden sollen. Mehrere Meldungen werden hintereinander geschrieben. Jeder Eintrag beginnt mit einem 2-Byte-Längenfeld, gefolgt von 2 Byte mit Füllzeichen und dem anschließenden Meldungstext. Voreinstellung: Ausgabe nach SYSOUT
Hinweis

  • Es werden nur Meldungen der Meldungsklasse SDP eingetragen; alle anderen Meldungen werden nach SYSOUT ausgegeben.

  • Die Meldungsform (Sprache, Kurz- oder Langform, usw.) ist abhängig von den Einstellungen des Kommandos /MODIFY-MSG-ATTRIBUTES.

PROTL = 0 / <integer 0..2147483647>
Länge des Feldes für die Meldungen. Überschreitet die Meldungsausgabe die angegebene Feldlänge, wird die Meldung nicht abgeschnitten, sondern die letzte Meldung nicht eingetragen. Voreinstellung: kein Eintrag.
Die (real) benötigte Länge wird in das bei OPROTL=... angegebene Feld eingetragen.

OACTL = <pointer>
Adresse eines Feldes, in das die wirkliche Länge des Ergebnisses eingetragen wird. Das Feld muss 4 Byte lang und auf Wortgrenze ausgerichtet sein.

OTYPE = <pointer>
Adresse eines Feldes, in das der Typ des Ergebnisses eingetragen wird. Das Feld muss 1 Byte lang sein. Die Einträge beginnen mit dem bei PREFIX=.. und MACID=.. angegebenen Zeichen. Bedeutung der Einträge:

Eintrag

Bedeutung (Typ)

<prefix, macid>VSTR

String

<prefix, macid>VINT

Integerzahl

<prefix, macid>VBOO

boolsche Konstante

OPROTL = NULL / <pointer>
Adresse eines Feldes, in das die wirkliche Meldungslänge eingetragen wird. Das Feld muss 4 Byte lang sein. Voreinstellung: kein Eintrag.

Hinweise

  • Die Ergebnisse sind immer einfache Werte (Basisterme). Es werden keine zusammengesetzten Ausdrücke zurückgeliefert.

  • Der auszuwertende Ausdruck darf keine &-Ersetzungen enthalten.

  • In das bei OTYPE=.. angegebene Feld wird immer der wirkliche Ergebnistyp eingetragen, auch wenn VFORM=*STRING angegeben wurde. Der Benutzer kann dadurch eine Ziffernfolge von einer Integerzahl oder den String „FALSE“ von dem boolschen Wert FALSE unterscheiden.

Returncodes

Die folgende Tabelle listet die Returncodes in hexadezimaler Schreibweise auf

Subcode2

Subcode1

Maincode

Bedeutung

00000000Normale Ausführung
01000000Überlauf: PROT-Feld  (Warnung)
00400001Syntaxfehler im auszuwertenden Ausdruck
01400001Überlauf PROT-Feld
00400002Fehler beim Auswerten des Ausdrucks
01400002Überlauf: PROT-Feld
00400003OUTPUT-Feld zu klein
00010004INPUT-Feld nicht spezifiziert oder nicht ausgerichtet
01010004OUTPUT-Feld nicht spezifiziert oder nicht ausgerichtet
02010004Protokoll-Feld (nicht ausgerichtet)
03010004andere Felder (nicht ausgerichtet)
04010004Feldadresse angegeben, aber kein Zugriff möglich
00400005Kein ausreichend freier Platz im Adressraum des Aufrufers
01200006Systemfehler
00400007Ungültiges Prozedurformat; Makroausführung abgebrochen
0001FFFFFalsche Angabe für UNIT oder FUNCTION im Standardheader
0002FFFFDie angeforderte Funktion wird nicht unterstützt
0003FFFFFalsche Versionsangabe im Standardheader

Layout der Dsect (Operandenliste)

   CLIEXPR MF=D,PREFIX=N
1          MFTST MF=D,PREFIX=N,MACID=LIE,ALIGN=F,
1                DMACID=LIE,SUPPORT=(E,D,C,M,L),DNAME=LIEMDL
2 NLIEMDL  DSECT ,
2                *,##### PREFIX=N, MACID=LIE #####
1 *   Which type has the output
1 NLIEVSTR EQU   1                         *STRING
1 NLIEVINT EQU   2                         *INTEGER
1 NLIEVBOO EQU   3                         *BOOLEAN
1 *
1 *   parameterarea description
1 NLIEHDR  FHDR  MF=(C,NLIE),EQUATES=NO                    Standardheader
2 NLIEHDR  DS    0A
2 NLIEFHE  DS    0XL8            0   GENERAL PARAMETER AREA HEADER
2 *
2 NLIEIFID DS    0A              0   INTERFACE IDENTIFIER
2 NLIEFCTU DS    AL2             0   FUNCTION UNIT NUMBER
2 *                                  BIT 15    HEADER FLAG BIT,
2 *                                  MUST BE RESET UNTIL FURTHER NOTICE
2 *                                  BIT 14-12 UNUSED, MUST BE RESET
2 *                                  BIT 11-0  REAL FUNCTION UNIT NUMBER
2 NLIEFCT  DS    AL1             2   FUNCTION NUMBER
2 NLIEFCTV DS    AL1             3   FUNCTION INTERFACE VERSION NUMBER
2 *
2 NLIERET  DS    0A              4   GENERAL RETURN CODE
2 NLIESRET DS    0AL2            4   SUB RETURN CODE
2 NLIESR2  DS    AL1             4   SUB RETURN CODE 2
2 NLIESR1  DS    AL1             5   SUB RETURN CODE 1
2 NLIEMRET DS    0AL2            6   MAIN RETURN CODE
2 NLIEMR2  DS    AL1             6   MAIN RETURN CODE 2
2 NLIEMR1  DS    AL1             7   MAIN RETURN CODE 1
2 NLIEFHL  EQU   8               8   GENERAL OPERAND LIST HEADER LENGTH
2 *
1 *   main return codes
1 NLIESUCC EQU   0                         No error detected
1 NLIESYNT EQU   1                         Syntax error
1 NLIEEVAL EQU   2                         Semantic error
1 NLIETRUN EQU   3                         Output buffer too small
1 NLIEAREA EQU   4                         Buffer missing or not aligned
1 *                                        or not accessible
1 NLIEREQM EQU   5                         Out of memory
1 NLIEDUMP EQU   6                         Invalid SDF-P-BASYS
1 *                                        processing
1 NLIECTXT EQU   7                         Old procedure context
1 *
1 NLIEIPTR DS    A                         SDF-P expression
1 NLIEOPTR DS    A                         Resulting Value
1 NLIEPPTR DS    A                         Resulting Protocol
1 NLIEILEN DS    F                         SDF-P expression
1 NLIEOMAX DS    F                         Value attribute (maximum
1 *                                        length)
1 NLIEPMAX DS    F                         Protocol attribute (maximum
1 *                                        length)
1 NLIEFORM DS    FL1                       Value attribute ( string
1 *                                        generation )
1 *   Wished output form
1 NLIEFVAL EQU   0                         *BY-VALUE
1 NLIEFSTR EQU   1                         *STRING
1 *
1 NLIERES1 DS    CL7                       Alignement
1 NLIEOLEN DS    A                         Value length as FW-aligned 4
1 *                                        bytes field
1 NLIEOTYP DS    A                         Value type as 1 byte field
1 NLIEPLEN DS    A                         Protocol length as FW-aligned
1 *                                        4 bytes field
1 NLIE#    EQU   *-NLIEHDR

Beispiel

CLIEXPR  START
         BALR  3,0
         USING *,3
         CLIEXPR MF=E,PARAM=OPLISTE
WROUT    WROUT  AUSG,TERM,PARMOD=31
TERM     TERM
*****    DEFINITIONEN   *****
OPLISTE  CLIEXPR MF=L,INPUT@=A(IF),INPUTL=10,OUTPUT@=A(OF),OUTPUTL=10,V-
               FORM=*BY-VALUE,OACTL=A(H1),OTYPE=A(H2)
         DS    0F
IF       DC    CL10'(8+3)'
         DS    0F
AUSG     DC    Y(AUSGE-AUSG)
         DS    3X
         DC    C'AUSGABE:  '
OF       DS    cl10
AUSGE    EQU   *
         DS    CL10
         DS    0F
H1       DS    CL4
         DS    0F
H2       DS    CL1
         END