Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Makrosyntax

&pagelevel(3)&pagelevel

Die Makro-Operanden werden in zwei Gruppen eingeteilt:

  • Formatoperanden, die die Form und die Generierung des Makros festlegen

  • Funktionsoperanden, die schnittstellenspezifisch den Inhalt des Parameterbereichs festlegen

Syntax der Formatoperanden

Die Syntax der Formatoperanden entspricht den BS2000-Regeln (siehe Handbuch „Makroaufrufe an den Ablaufteil“ [7]).

MF

steuert die Code-Generierung („Makroform“)

PREFIXsteuert die Generierung der Namen (erster Buchstabe)
MACIDsteuert die Generierung der Namen (zweiter bis vierter Buchstabe)
PARAMsteuert die Adressierung des Parameterbereichs
XPAND

steuert die Expansion einzelner Datenstrukturen;

Ist XPAND in der Makrosyntax enthalten, muss ihm ein Wert zugeordnet werden, da er keine Voreinstellung hat (Pflichtoperand).

Makroformen

Der Operand MF legt die Form des Makros fest. Er kann folgende Werte annehmen:

MF=C / D / L / E / M / S

MF=C

Das Layout der Datenstruktur (in der Regel der Parameterbereich) wird erzeugt, wobei jedes Feld und jedes Equate benannt sind. Diese Datenstruktur wird Teil des aktuellen Programmabschnitts (CSECT/DSECT).

Die Funktionsoperanden des Makros werden nicht ausgewertet.

XPAND

Soweit dies für die Schnittstelle erforderlich ist, kann die Expansion einzelner Datenstrukturen durch Steueroperanden ausgewählt werden - etwa, wenn an einer Schnittstelle verschiedene Ausgabebereiche auswählbar sind (z.B. XPAND=PARAM / out1).

PREFIX

Der Operand PREFIX dient zur Generierung der zu erzeugenden Namen. PREFIX, der genau ein Buchstabe ist, wird als erster Buchstabe aller Namen verwendet. Default-Wert ist der Kennbuchstabe der Funktionseinheit, dem der Makro angehört. Um Namensgleichheit zu vermeiden, ist PREFIX zu verwenden, wenn dieselbe Datenstruktur mehrfach innerhalb eines Moduls verwendet wird.

MACID

Der Operand MACID dient zur Generierung der zu erzeugenden Namen und bestimmt das zweite bis vierte Zeichen des Namens.

Default-Wert: zwei Zeichen als Entwicklungsgruppenkennzeichen und ein Zeichen als makrospezifisches Kennzeichen. Der Default-Wert garantiert die Kollisionsfreiheit der Namen innerhalb der Komponentengruppe.

MF=DErzeugt das Layout der Datenstruktur wie bei MF=C. Zusätzlich wird ein DSECT-Statement erzeugt. Der MACID-Operand wird ignoriert, der Standard-Wert wird angenommen.
MF=LErzeugt eine Instanz des Parameterbereichs unter Auswertung der Funktionsoperanden. Diese Makroform erzeugt keine Feldnamen. Die Label-Angabe wird zur Benennung der erzeugten Konstanten verwendet.
MF=EErzeugt die zum Aufruf der Funktion notwendigen Befehle. Die Funktionsoperanden werden ignoriert. Die Adressierung des Parameterbereichs muss mit dem Steueroperanden PARAM sichergestellt werden:

PARAM

Der Operand PARAM steuert die Adressierung des Parameterbereichs.

=<adr>

Adresse des Parameterbereichs als Name

=(<reg>)

Adresse des Parameterbereichs ist im Register mit dem Namen

<reg> enthalten

MF=M

Modifiziert einen durch Kopieren einer MF=L - Form vorher initialisierten Parameterbereich unter Auswertung der angegebenen Funktionsoperanden. Nicht angegebene Operanden bleiben im ursprünglichen Zustand. Die Konsistenz des Parameterbereichs liegt in der Verantwortung des Makro-Aufrufers.

MF=M setzt voraus, dass die MF=D - Form oder MF=C - Form mit denselben Werten der PREFIX- und MACID-Operanden aufgerufen wurde, und dass vor der Adressierung der DSECT (MF=D - Form) ein USING-Statement abgesetzt worden ist.

MF=S

Erzeugt eine Instanz des Parameterbereichs unter Auswertung der Funktionsoperanden, wie bei MF=L. Zusätzlich werden Befehle generiert, die - falls erforderlich - die Parameterbereichsinstanz überspringen und die Funktion aufrufen.

Elemente der Makrosyntax

Kennzeichnung

Bedeutung

Beispiel

GROSSBUCHSTABEN

Großbuchstaben bezeichnen Schlüsselwörter

oder Konstanten, die in dieser Form vom

Benutzer angegeben werden müssen.

Schlüsselwörter müssen mit * beginnen, falls

alternativ sowohl Schlüsselwörter als auch

Namen von Konstanten oder Variablen

angegeben werden können.

DELETE=*NO / *YES

Kleinbuchstaben

Kleinbuchstaben bezeichnen Datentypen der

Werte oder Variablen, die vom Benutzer

angegeben werden können.

COUNT=<integer 1..8>

=

Das Gleichheitszeichen verbindet einen

Operanden mit dem dazugehörigen

Operandenwert.

FILE=<c-string>

< >

Spitze Klammern kennzeichnen Variablen,

deren Wertevorrat durch die Datentypen

beschrieben wird.

REPEAT=<integer>

Unterstreichung

Der Unterstrich kennzeichnet den Standardwert

eines Operanden. Hat der Operand

keinen Standardwert, ist die Angabe des

Operanden Pflicht!

ACTION=*ADD / *MOD

/

Der Schrägstrich trennt alternative

Operandenwerte.

CHECK=*NO / *YES

list-poss(n)

Aus den Operandenwerten, die list-poss

folgen, kann eine Liste gebildet werden. Ist n

angegeben, können maximal n Elemente in

der Liste vorkommen (für den Typ Keylist).

Die Liste muss in runden Klammern

eingeschlossen werden, falls mehr als ein Element

spezifiziert wird.

OUTPUT=list-poss(2):

*SYSOUT / *SYSLST

Angabe:

OUTPUT=*SYSOUT

OUTPUT=(*SYSOUT,

*SYSLST)

Tabelle 4:  Makrosyntax: Elemente

Einem Operanden wird durch ein Gleichheitszeichen ein Operandenwert zugewiesen, welcher aus einem definierten Wertevorrat stammt.

Dieser Wertevorrat wird durch einen Datentyp bestimmt. Nachfolgende Tabelle enthält die Datentypen der Operandenwerte.

Datentypen der Operandenwerte

Datentyp

Zeichenvorrat

Anmerkungen

c-string

EBCDIC-Zeichen

ist in Hochkommata

einzuschließen

integer

[+-] 0..2147483647

ist eine dezimale Zahl

var:

leitet eine variable Angabe ein.

Nach dem Doppelpunkt folgt der Typ der

Variablen (siehe Tabelle 7)

<var:var-type>

reg:

Register 0..15

Verwendung:

(<reg:var-type>)

Tabelle 5: Makro-Syntax: Datentypen der Operandenwerte

Zusätze zu Datentypen

Zusatz

Bedeutung

n..m

für Datentyp integer bedeutet n..m eine Intervallangabe;

n: Mindestwert

m: Maximalwert

für Datentyp c-string bedeutet n..m eine Längenangabe in Bytes;

n: Mindestlänge

m: Maximallänge

mit n < m

n

bei Datentyp c-string bedeutet n eine Längenangabe in Bytes;

n muss exakt eingehalten werden.

Tabelle 6: Makro-Syntax: Zusätze zu Datentypen

Die Operandenwerte können direkt als Zeichenkette oder Integer-Zahl (siehe Datentypen c-string und integer ) eingegeben werden oder indirekt über eine Variable (siehe Datentyp var:) bezeichnet werden. Die nachfolgende Tabelle enthält die Datentypen, die für Variablen möglich sind.

Datentypen der Variablen

Datentyp

Beschreibung

Definition im

Programm

char:n

Die Variable ist eine Zeichenkette von n Zeichen.

Fehlt die Längenangabe, wird n=1 angenommen.

CLn

int:n

Die Variable ist eine Integer-Zahl, die n Bytes belegt.

Fehlt die Längenangabe, wird n=1 angenommen.

Bedingung: n ≤ 4

FLn

enum-of E:n

Die Variable ist die Aufzählung E, die n Bytes belegt.

Fehlt die Längenangabe, wird n=1 angenommen. (n ≤ 4)

XLn

pointer

Die Variable ist eine Adresse oder ein Adresswert.

A

Tabelle 7: Makrosyntax: Datentypen der Variablen

Standardheader

Alle Makros benutzen zur Identifikation ihrer Schnittstelle den Standardheader.

Der Standardheader ist ein 8 Byte langes Feld am Beginn des Parameterbereichs mit der (normierten) Bezeichnung der Schnittstelle und 4 Byte zur Aufnahme eines Returncodes.

Der Standardheader wird vom jeweiligen Makro erzeugt und initialisiert. Er wird mit den gültigen Werten für UNIT, FUNCTION und VERSION versorgt.

Aufbau des Standardheaders

Byte

Feldinhalt und Bedeutung

0 - 1

Bezeichnung der Funktionseinheit (UNIT) mit der verlangten Funktion

2

Bezeichnung der Funktion (FUNCTION) innerhalb der Funktionseinheit

3

Bezeichnung des Änderungsstandes (VERSION) der Funktion

4

Unterwert 2 des Returncodes (Subcode2)

5

Unterwert 1 des Returncodes (Subcode1)

6 - 7

Hauptwert des Returncodes (Maincode)

Folgende Werte des Returncodes gelten für alle Makros:

(SC2)

SC1

Maincode

Bedeutung / garantierte Meldungen

X‘00‘

X‘00‘

X‘0000‘

Erfolgreiche Funktionsausführung.

Es gibt keine zusätzlichen Informationen zum Maincode.

X‘01‘

X‘00‘

X‘0000‘

Erfolgreiche Funktionsausführung.

Es sind keine weiteren Aktionen erforderlich.

X‘00‘

X‘01‘

X‘FFFF‘

Die angeforderte Funktion wird nicht unterstützt

(falsche Angabe für UNIT oder FUNCTION im Standardheader).


Nicht behebbarer Fehler.

X‘00‘

X‘02‘

X‘FFFF‘

Die angeforderte Funktion ist nicht verfügbar.

Nicht behebbarer Fehler.

X‘00‘

X‘03‘

X‘FFFF‘

Die angegebene Version der Schnittstelle wird nicht

unterstützt (falsche Versionsangabe im Standardheader).

Nicht behebbarer Fehler.

X‘00‘

X‘04‘

X‘FFFF‘

Parameterblock nicht auf Wortgrenze ausgerichtet.

X‘00‘

X‘41‘

X‘FFFF‘

Das Subsystem ist nicht vorhanden; es muss explizit

erzeugt werden.

X‘00‘

X‘42‘

X‘FFFF‘

Die aufrufende Task ist mit dieser Schnittstelle nicht

konnektiert; sie muss explizit konnektiert werden.

X‘00‘

X‘81‘

X‘FFFF‘

Das Subsystem ist zurzeit nicht verfügbar.

X‘00‘

X‘82‘

X‘FFFF‘

Das Subsystem ist im DELETE- oder HOLD-Zustand.

Maincode kennzeichnet das Ergebnis der Funktionsausführung. Subcode1 dient der Klassifizierung des Hauptwertes. Subcode2 dient der weiteren Unterteilung des Fehlers in Fehlerklassen oder enthält zusätzliche Diagnoseinformationen.