Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Aufbau des normierten Übergabebereichs

&pagelevel(3)&pagelevel

Normierte Übergabebereiche werden für drei Zwecke benötigt.

  1. SDF übergibt an das Programm eine analysierte Anweisung. Im Programm ist Speicherplatz für mindestens einen solchen Bereich zu reservieren. Der Bereich ist so groß anzulegen, dass er jede mögliche Anweisungseingabe, die SDF für das Programm analysiert hat, aufnehmen kann. Die Adresse dieses Bereichs ist bei den Makros CMDRST und CMDTST im Operanden OUTPUT anzugeben, beim Makro CMDCST im Operanden INOUT.

  2. Das Programm gibt an SDF eine semantisch fehlerhafte Anweisung zurück. Im Programm ist dafür kein besonderer Speicherplatz zu reservieren. Das Programm nimmt denselben Bereich, in den SDF zuvor die analysierte Anweisung geschrieben hat. Nachdem das Programm in dieser Anweisung Semantikfehler erkannt hat, ergänzt es die Anweisung um Informationen für den Semantikfehlerdialog und gibt sie an SDF zurück. Die Adresse dieses Bereichs ist beim Makro CMDCST im Operanden INOUT anzugeben.

  3. Das Programm übergibt an SDF Werte, die eingegebene Operandenwerte oder den Default-Wert ersetzen sollen. Für jede Anweisung, in der derartige Operandenwerte vorkommen können (siehe ADD-VALUE...,VALUE=<string>(OVERWRITE-POSSIBLE=*YES),... bzw. ADD-OPERAND...,OVERWRITE-POSSIBLE=*YES) ist im Programm genau ein solcher Bereich anzulegen und vom Programm zu versorgen. Die Adressen dieser Bereiche sind bei den Makros CMDRST und CMDTST im Operanden DEFAULT anzugeben.

Mit SDF V4.1 hat sich das Format des normierten Übergabebereiches geändert.

Das neue Layout wird mit dem Makro CMDTA erzeugt und muss mit den neuen Makros CMDRST, CMDTST und CMDCST verwendet werden.

Für alle drei Fälle hat der Übergabebereich den gleichen formalen Aufbau (siehe Bild 7).

Der normierte Übergabebereich beginnt auf Wortgrenze. In Byte 0 bis 39 liegt das Kopffeld. Es enthält u.a. den internen Anweisungsnamen und die Version der Anweisung (siehe ADD-STMT ...,INTERNAL-NAME=...,STMT-VERSION=...).
Ab Byte 40 beginnt das Array für anweisungsglobale Operanden, d.h. für Operanden, die mit RESULT-OPERAND-LEVEL=1 definiert sind (siehe ADD-OPERAND). In ihm steht für jeden dieser Operanden eine 8 Byte lange Beschreibung. Die Operandenbeschreibungen sind in der Reihenfolge angeordnet, die sich aus den in der Anweisungsdefinition festgelegten Operandenpositionen ergibt (siehe ADD-OPERAND ...,RESULT-OPERAND-NAME=*POSITION(POSITION=<integer>)). Jede Operandenbeschreibung enthält u.a. die Absolutadresse, unter der der zugehörige Operandenwert bzw. die Beschreibung der zugehörigen Liste oder nichtlinearisierten Struktur im Übergabebereich abgelegt ist. In der Beschreibung einer nichtlinearisierten Struktur steht ein Operanden-Array, das die in der Struktur enthaltenen Operanden beschreibt. Es ist genauso aufgebaut, wie das Array für die anweisungsglobalen Operanden.

Im einfachsten Fall hat ein Operand lediglich einen einfachen Wert (siehe Bild 8). Eine Operandenbeschreibung mit einfachem Wert enthält auch die Syntax-Attribute für diesen Wert.

Leitet der Operandenwert eine Struktur ein (Bild 9), so gibt es für ihn eine Strukturbeschreibung. Diese enthält ein Operanden-Array mit Beschreibungen für alle Operanden der Struktur sowie für die Operanden aus linearisierten Unterstrukturen. Die Operandenbeschreibungen sind in der Reihenfolge angeordnet, die sich aus den in der Anweisungsdefinition festgelegten strukturrelativen Operandenpositionen ergibt (siehe ADD-OPERAND ...,RESULT-OPERAND-NAME=*POSITION(POSITION=<integer>)). Die zu den Operanden der Struktur gehörenden Operandenwerte können eine weitere Struktur einleiten und/oder aus einer Liste von Werten bestehen.

Bild 9: anweisungsglobaler Operand mit Struktur

Von Operanden, die mit ADD-OPERAND...,LIST-POSSIBLE=*YES(...,FORM=*NORMAL) definiert sind, werden die Werte in der in Bild 10 gezeigten Form übergeben. An einem Listenelement kann eine Struktur hängen. In diesem Fall ist „Wert des Listenelements“ eine Strukturbeschreibung.

Kopffeld des normierten Übergabebereichs

Byte

Inhalt

Feldinhalt kommt im Fall ... von

analysierte
Anweisung an
Programm

fehlerhafte
Anweisung
zurück an SDF

Default-
Werte an
SDF

0 bis 7

Standardheader

Programm

unverändert

Programm

8 bis 11

Länge des Übergabebereichs

Programm

unverändert

Programm

12 bis 19

interner Anweisungsname

SDF

unverändert

Programm

20 bis 23

reserviert




24 bis 26

Version der Anweisung

SDF

unverändert

Programm

27 bis 35

reserviert




36 bis 37

Anzahl der Positionen im
Operanden-Array

SDF

unverändert

Programm

38 bis 39

reserviert




Der interne Anweisungsname, die Version der Anweisung und die Anzahl der Positionen in dem Operanden-Array sind in der Syntaxdatei in der Anweisungsdefinition abgelegt (siehe ADD-STMT...,INTERNAL-NAME=...,MAX-STRUC-OPERAND=...,STMT-VERSION=...). Wenn die tatsächliche Anzahl von Operanden größer ist als der bei MAX-STRUC-OPERAND angegebene Wert, dann wird die tatsächliche Anzahl im Übergabebereich vermerkt.

Übergibt das Programm Default-Werte für eine Anweisung, so muss die Version der Anweisung im Übergabebereich mit der Version der Anweisung in der Syntaxdatei übereinstimmen. Wenn in der Syntaxdatei keine Version vermerkt ist, muss im Übergabebereich '000' (oder binäre Nullen) eingetragen werden, ansonsten wird der Default-Wert zurückgewiesen.

Unterstützt das Programm mehrere Versionen einer Anweisung, dann muss für jede Version der Anweisung ein Default-Wert übergeben werden.

Operandenbeschreibung

Das Operanden-Array und die in ihm stehenden Beschreibungen für die Operanden einer Struktur sind genau so aufgebaut wie bei den anweisungsglobalen Operanden.

Byte

Inhalt

Feldinhalt kommt im Fall ... von

analysierte
Anweisung an
Programm

fehlerhafte
Anweisung
zurück an SDF

Default-
Werte an
SDF

0 bis 3

0

1

2

3

Wertbeschreibung

Zusatzinformation

Typbeschreibung

Globale Syntaxattribute

Typspezifische Syntaxattribute


siehe unten

SDF

SDF

SDF


siehe unten

unverändert

-

-


siehe unten

Programm 1)

-

-

  • 4 bis 7

Absolutadresse (aligned abgelegt)
des zu dem Operanden gehörenden
Werts bzw. bei Strukturen oder Listen
der weiteren Beschreibung

SDF

unverändert

Programm 1)

1)Angabe nur für Operanden, zu denen umzusetzende Operandenwerte gehören, d.h. wenn Bit 0 der Zusatzinformation gesetzt ist.

Zusatzinformation

Die Zusatzinformation steht im ersten Byte der Wertbeschreibung. Die folgenden Angaben über die Zusatzinformation gelten unabhängig davon, ob die Zusatzinformation in einer Operandenbeschreibung, im Kopffeld einer Strukturbeschreibung, in der Beschreibung eines Listenelements oder in einer OR-Listenbeschreibung vorkommt.

Bit

Wert

Inhalt

Feldinhalt kommt im Fall ... von

analysierte
Anweisung an
Programm

fehlerhafte
Anweisung
zurück an SDF

Default-Werte
an SDF

0

0

Wert ist nicht vorhanden

SDF 1)

unverändert

Programm 2)

0

1

Wert ist vorhanden

SDF

unverändert

Programm 2)

1

0

Wert ist änderbar

-

Programm 3)

-

1

1

Wert ist nicht änderbar

-

Programm 3)

-

2

0

Wert ist nicht fehlerhaft

-

Programm

-

2

1

Wert ist fehlerhaft

-

Programm

-

3

0

Wert soll nicht als Default
eingesetzt werden

--

Programm

3

1

Wert soll als Default eingesetzt
werden

--

Programm

4 bis 7

-

reserviert

--

Programm

1)z.B. Werte zu Operanden, die mit ADD-OPERAND...,PRESENCE=*EXTERNAL-ONLY definiert sind, oder Werte in nicht angesprochenen Strukturen.
2)0 für Operanden, zu denen weder umzusetzende Operandenwerte gehören noch Strukturen, die Operanden mit umzusetzenden Werten enthalten. 1 für Operanden, zu denen entweder umzusetzende Operandenwerte gehören oder Strukturen, die Operanden mit umzusetzenden Werten enthalten.
3)Alle Listenwerte, die nach dem ersten änderbaren Listenwert kommen, betrachtet SDF unabhängig davon, wie Bit 1 gesetzt ist, als änderbar. Dadurch werden schon bearbeitete Listenelemente gegen Überschreiben geschützt.

Typbeschreibung

Die Typbeschreibung steht im zweiten Byte der Wertbeschreibung. Die Angaben über die Typbeschreibung gelten unabhängig davon, ob die Typbeschreibung in einer Operandenbeschreibung, im Kopffeld einer Strukturbeschreibung, in der Beschreibung eines Listenelements oder in einer OR-Listenbeschreibung vorkommt.

Strukturbeschreibungen können durch ein Programm eingegeben werden, um eigene Default-Werte anzugeben. Die Eingabe der Default-Werte ist möglich:

  • im internen Format (wie beim Operanden OUTPUT der SDF-A-Anweisung ADD-VALUE) oder

  • im externen Format als Zeichenfolge analog der Operandenbeschreibung. Dabei muss der Hilfsdatentyp <input-text> benutzt werden. Der Wert wird dann so analysiert, als ob er über die Benutzerschnittstelle eingegeben worden wäre.

Wert (dezimal)

Bedeutung

1

Kommandorest (Command-Rest)

2

Ganzzahl (Integer)

4

X-Zeichenkette (X-String)

5

C-Zeichenkette (C-String)

6

Name (Name)

7

alphanumerischer Name (Alphanumeric-Name)

8

strukturierter Name (Structured-Name)

9

Marke (Label)

11

Dateiname (Filename)

12

teilqualifizierter Dateiname (Partial-Filename)

13

Uhrzeit (Time)

14

Datum (Date)

15

zusammengesetzter Name (Composed-Name)

16

Text (Text)

17

Katalog-Kennung (Cat-Id)

18

Eingabe-Text (Input-Text)

19

Struktur

20

Liste

21

OR-Liste

22

Schlüsselwort (Keyword)

23

reserviert für internen Gebrauch

24

VSN

25

X-Text (X-Text)

26

Festpunktzahl (Fixed)

27

Gerät (Device)

28

Produkt-Version (Product-Version)

29

POSIX-Pfadname (Posix-Pathname)

35

POSIX-Dateiname (Posix-Filename)

36Long-integer

Globale Syntaxattribute

Die Beschreibung der globalen Syntaxattribute eines Operandenwerts steht im dritten Byte der Wertbeschreibung. Es handelt sich dabei um Attribute, die für mehrere Datentypen festgelegt werden können (siehe ADD-VALUE Operandenwert definieren).

Globale Attribute sind immer Ausgabe-Attribute. Sie werden ignoriert, falls das Programm Default-Werte liefert, oder in Korrekturdialogen.

Bit

Bedeutung, wenn das Bit gesetzt ist

0

Wert ist ein Wildcard-Suchmuster

1

Wert ist ein Wildcard-Konstruktor

2 bis 7

reserviert

Datentypspezifische Syntaxattribute

Die Beschreibung der datentypspezifischen Syntaxattribute steht im vierten Byte der Wertbeschreibung. Es handelt sich dabei um Attribute, die nur für einen Datentyp oder wenige Datentypen festgelegt werden können.

Datentypspezifische Attribute sind ebenfalls Ausgabe-Attribute. Sie werden ignoriert, falls das Programm Default-Werte liefert, oder in Korrekturdialogen.

Datentyp FILENAME / PARTIAL-FILENAME:

Bit

Bedeutung, wenn das Bit gesetzt ist

0

Dateiname enthält catid

1

Dateiname enthält userid

2

Dateiname enthält Dateigeneration oder Dateigenerationsgruppe

3

Dateiname enthält Version

4

Dateiname ist temporär

5 bis 7

reserviert

Datentyp NAME:

Bit

Bedeutung, wenn das Bit gesetzt ist

0

Name enthält Unterstrich (_)

1 bis 7

reserviert

Datentyp COMPOSED-NAME:

Bit

Bedeutung, wenn das Bit gesetzt ist

0

zusammengesetzter Name enthält Unterstrich (_)

1

zusammengesetzter Name enthält catid

2 bis 7

reserviert

Datentyp TEXT:

Bit

Bedeutung, wenn das Bit gesetzt ist

0

Text enthält Trennzeichen

1 bis 7

reserviert

Datentyp X-TEXT:

Bit

Bedeutung, wenn das Bit gesetzt ist

0

X-Text hat eine ungerade Anzahl von Bytes

1 bis 7

reserviert

Datentyp POSIX-PATHNAME / POSIX-FILENAME:

Bit

Bedeutung, wenn das Bit gesetzt ist

0

POSIX-Pfad- oder Dateiname ist absolut

1

POSIX-Pfad- oder Dateiname ist relativ

2

POSIX-Pfad- oder Dateiname wurde in Hochkommas eingegeben

3 bis 7

reserviert

Datentyp C-STRING:

Bit

Bedeutung, wenn das Bit gesetzt ist

0

C-String enthält ein Hochkomma

1 bis 7

reserviert

Datentyp PRODUCT-VERSION:

Bit

Bedeutung, wenn das Bit gesetzt ist

0

Produktversion enthält Korrekturstand

1

Produktversion enthält Freigabestand

2 bis 7

reserviert

Kopffeld einer Strukturbeschreibung

Byte

     

Inhalt

                            

Feldinhalt kommt im Fall ... von

analysierte
Anweisung an Programm

fehlerhafte
Anweisung
zurück an SDF

Default-Werte
an SDF

0 bis 1

Anzahl der Positionen

im Operanden-Array

SDF

unverändert

Programm

2 bis 3

reserviert

---

4 bis 7



4


5

6
7

Wertbeschreibung für

den struktureinleitenden

Operandenwert

Zusatzinformation


Typbeschreibung

Globale Syntaxattribute

Typspezifische Syntaxattribute




-


SDF

SDF

SDF




siehe "Aufbau des normierten

Ubergabebereichs"

unverändert

-

-




siehe "Aufbau des normierten

Übergabebereichs"

Programm

-

-

8 bis 11

Absolutadresse (aligned abgelegt)
des struktureinleitenden
Operandenwerts

SDF

unverändert

Programm

Die Anzahl der Positionen in dem Operanden-Array ist in der Syntaxdatei in der Anweisungsdefinition abgelegt (siehe ADD-VALUE...,STRUCTURE=*YES(...,MAX-STRUC-OPERAND=...).

Das zu der Struktur gehörende Operanden-Array beginnt unmittelbar hinter dem Kopffeld (siehe Bild 9). Es ist genau so aufgebaut wie das für anweisungsglobale Operanden.

Listenelement

Byte

     

Inhalt

                            

Feldinhalt kommt im Fall ... von

analysierte
Anweisung an
Programm

fehlerhafte
Anweisung
zurück an SDF

Default-Werte
an SDF

0 bis 3

0


1

2

3

Wertbeschreibung

Zusatzinformation


Typbeschreibung

Globale Syntaxattribute

Typspezifische Syntaxattribute


siehe "Aufbau des normierten

Ubergabebereichs"

SDF

SDF

SDF


siehe "Aufbau des normierten

Übergabebereichs"

unverändert

-

-


siehe "Aufbau des normierten

Übergabebereichs"

Programm 1)

-

-

4 bis 7

Absolutadresse (unaligned
abgelegt) des zu dem Listenelement
gehörenden Werts bzw. bei Strukturen
der weiteren Beschreibung

SDF

unverändert

Programm 1)

8 bis 11

Absolutadresse (aligned
abgelegt) des nächsten Listenelements

SDF

unverändert

Programm 1)

1)Angabe nur für Operanden, zu denen umzusetzende Operandenwerte gehören, d.h. wenn Bit 0 der Zusatzinformation gesetzt ist.

Im letzten Element der Liste hat die „Absolutadresse des nächsten Listenelements“ den

Wert 0 (siehe Bild 10).

Eine OR-Liste besteht nur aus einem Element. Bei diesem Element entfällt die „Absolutadresse des nächsten Listenelements“.

Für einen Operanden, der mit LIST-POSSIBLE=*YES(FORM=*NORMAL) definiert ist, muss die Anzahl der Listenelemente begrenzt werden (LIMIT=...), damit es nicht zum Überlauf des normierten Übergabebereiches kommt. Die Größe einer Liste im normierten Übergabebereich kann nach folgender Formel berechnet werden:

n * (10 + 2 + l)


wobei:

n

l

die Anzahl der Listenelemente und

die Länge eines einzelnen Listenelementes (aufgerundet auf ein
Vielfaches von 2) ist.


Beispiel:

ADD-OPERAND ... LIST-POSSIBLE=*YES(LIMIT=100,FORM=*NORMAL)

  ADD-VALUE *NAME(1,8)

Eine so definierte Liste kann im normierten Übergabebereich bis zu 2000 Byte belegen (100 * (10 + 2 + 8) = 2000).

Ablage der Werte

Byte

Inhalt

Feldinhalt kommt im Fall ... von

analysierte
Anweisung an

Programm

fehlerhafte
Anweisung
zurück an SDF

Default-
Werte an
SDF

0 bis 1

Längenangabe

SDF

unverändert

Programm

2 bis 3

reserviert

---

4 bis ...

Wert

SDF

unverändert

Programm

Wie die Werte übergeben werden, hängt ab von der Definition in der Syntaxdatei (siehe ADD-VALUE...,OUTPUT=*NORMAL(...). Dabei gelten folgende Besonderheiten:

  • Ein Wert, der mit ADD-VALUE TYPE=*INTEGER(...,OUT-FORM=*BINARY) definiert ist, wird als 4-Byte-String mit Vorzeichen abgelegt.

  • Ein Wert, der mit ADD-VALUE TYPE=*TIME definiert ist, wird als 4-Byte-String mit 2 Bytes (binär) für Stunden und je 1 Byte für Minuten und Sekunden abgelegt.