Die Makro-Operanden können in zwei Gruppen eingeteilt werden:
Formatoperanden, die die Form und die Generierung des Makros festlegen; Formatoperanden sind im Handbuch „Makroaufrufe an den Ablaufteil“ [16] beschrieben. Ihre Metasyntax entspricht der üblichen von BS2000-Makro-Formatoperanden.
Funktionsoperanden, die schnittstellenspezifisch den Inhalt des Parameterbereichs festlegen.
Die Metasyntax der Funktionsoperanden und deren Werte sind in diesem Abschnitt beschrieben.
Beschreibung eines Funktionsoperanden
Die Beschreibung eines Funktionsoperanden hat die folgende Form:
operandenname = operandenwerte
Operanden mit Standardwerten sind optional. Operanden, die keinen Standardwert besitzen, sind für die Form MF=L Pflichtoperanden. Ausnahmen finden sich bei der Beschreibung der Operanden.
Operandenwerte können direkt oder indirekt angegeben werden. Bei der direkten Angabe wird der Wert als Literal oder als Schlüsselwort angegeben. Bei der indirekten Angabe wird der Wert über eine Variable oder in einem Register übergeben.
Direkte Angabe
Die Datentypen der Operandenwerte werden in spitzen Klammern eingeschlossen:
operandenname = <datentyp n..m>
operandenname = <c-string: sdf-datentyp n..m>
Der Zusatz n..m zu Datentypen ermöglicht die Angabe eines zulässigen Wertebereichs oder einer zulässigen Länge. Wenn für den Datentyp ein Wertebereich angegeben ist, gilt dieser auch für die Variablen- oder Registerangabe und wird dort nicht erneut angegeben.
Beispiel
im Syntaxdiagramm: TYPE=<integer 0..255>
bei der Eingabe: TYPE=100
im Syntaxdiagramm: NAME=<c-string: filename 1..40>
bei der Eingabe: NAME=’MYGUARD’
Variable Angabe
Wenn als Operandenwert auch eine Variable angegeben werden kann, wird der Typ der Variablen in spitze Klammern eingeschlossen und mit „var:“ eingeleitet. Dies bedeutet, dass der Inhalt der Variable dem angegebenen Typ entsprechen muss. Bei der Eingabe ist nur der Variablenname (Bezeichner) anzugeben.
operandenname = <var: variablentyp(n)>
Beispiel
im Syntaxdiagramm: NAME=<var: char(24)>
bei der Eingabe: NAME=MYGUARD
Dabei ist MYGUARD der Bezeichner für das Datenfeld der Länge 24, in dem der Name abgelegt ist.
Der Zusatz n in runden Klammern bezeichnet die Länge des Datenfelds.
Registerangabe
Wenn als Wert eines Operanden auch eine (in Klammern stehende) Registerangabe möglich ist, müssen zwei Fälle unterschieden werden:
Das Register enthält den Wert direkt:
operandenname = (<reg: variablentyp(n)>)
Beispiel
im Syntaxdiagramm: TYPE=(<reg: integer(1)>)
bei der Eingabe: TYPE=(9)
Dabei enthält Register 9 die entsprechende Zahl
Das Register enthält die Adresse, die auf das Datenfeld zeigt, in dem der Wert zu finden ist:
operandenname = (<reg: A(variablentyp(n))>)
Beispiel
Im Syntaxdiagramm: IOAREA=(reg: A(<char(8)>))
bei der Eingabe: IOAREA=(9)
wobei Register 9 die Adresse des Bereichs enthält.
Elemente der Metasyntax
Kennzeichen | Beschreibung |
GROSSBUCHSTABEN | Großbuchstaben bezeichnen Schlüsselwörter oder Konstanten, die in dieser Form vom Benutzer angegeben werden müssen. Schlüsselwörter beginnen mit *. |
Kleinbuchstaben | Kleinbuchstaben bezeichnen Typen der Werte oder Variablen, die vom Benutzer angegeben werden können. |
Unterstreichung | Der Unterstrich kennzeichnet den Standardwert eines Operanden für MF=L. |
Gleichheitszeichen = | Das Gleichheitszeichen „=“ trennt den Operanden vom Operandenwert. |
Schrägstrich / | Der Schrägstrich trennt einfache alternative Operandenwerte. |
< > | Spitze Klammern kennzeichnen den Datentyp des Operanden. |
list-poss(n): | Aus den Operandenwerten, die list-poss folgen, kann eine Liste gebildet werden. n beschreibt die maximale Anzahl Elemente in der Liste. |
structure(n): | Der Operandenwert besteht aus einer Liste von n Werten unterschiedlicher Bedeutung (vergl. array). Die Bedeutung der Werte ist von ihrer Stellung in der Liste abhängig. Der Datentyp der einzelnen Elemente wird unter „(m) elementbezeichner:“ beschrieben. Die Liste muss in runden Klammern eingeschlossen sein. |
(m) elementbezeichner: | Beschreibt das m-te Element einer „structure“-Liste. „elementbezeichner“ beschreibt die Bedeutung des Elements in der structure-Liste. |
array(n): | Der Operandenwert besteht aus einer Liste von maximal n gleichartigen Elementen. Die Liste muss in runde Klammern eingeschlossen sein, falls sie mehr als ein Element hat. |
Datentypen der Operandenwerte
Datentyp | Zeichenvorrat | Besonderheiten |
c-string | EBCDIC-Zeichen | ist in Hochkommata einzuschließen und ohne einleitendes „C“ anzugeben. Hochkommata in der Zeichenkette sind doppelt anzugeben. Eine inhaltliche Bedeutung der Angabe wird anschließend in SDF-Schreibweise angegeben, abgetrennt durch Doppelpunkt. Der Zusatz n..m beschreibt die Eingabelänge. |
x-string | Sedezimal | Ist in Hochkommata einzuschließen, der Buchstabe X muss vorangestellt werden: X’xxxx’. Der Zusatz n..m beschreibt die maximale Eingabelänge in Bytes |
name | A..Z, 0..9, $, #, @ | Bezeichner. Das Format ist der jeweiligen Operandenbeschreibung zu entnehmen. |
label | A..Z | Kennzeichnet eine Marke. |
integer | 0..9,+,- | „+“ bzw. „-“ kann nur erstes Zeichen sein. Der Zusatz n..m beschreibt den zulässigen Wertebereich. |
var: | Leitet eine variable Angabe ein. Nach dem Doppelpunkt folgt der Datentyp der Variablen. | |
reg: | Leitet eine Register-Angabe ein. Nach dem Doppelpunkt folgt der Datentyp des Registerinhalts. Bei der Eingabe kann ein Register oder ein Register-EQUATE verwendet werden. |
Datentypen der Variablen und Registerinhalte
Datentyp | Bedeutung |
char(n) | Kennzeichnet eine Zeichenkette der Länge n. Fehlt die Längenangabe, wird n=1 angenommen. |
integer (n) | Kennzeichnet eine Ganzzahl, die n byte belegt, wobei n<=4 gilt. Fehlt die Längenangabe, wird n=1 angenommen. |
enum NAME(n) | Kennzeichnet eine Aufzählung, die n byte belegt, wobei n<=4 gilt. Fehlt die Längenangabe, wird n=1 angenommen. |
A(variablentyp(n)) | Adresse des Datenfeldes. |
pointer | Zeiger (die Adresse wird übergeben). |