Der normierte Übergabebereich beginnt auf Wortgrenze. In Byte 0 bis 19 liegt das Kopffeld. Es enthält u.a. den internen Anweisungsnamen (siehe ADD-STMT ...,INTERNAL-NAME=...). Ab Byte 20 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 sechs 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 Ope-randen-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 (Bild 8 (Aufbau des normierten Übergabebereichs) ohne Standardheader, "Aufbau des normierten Übergabebereichs").
Leitet der Operandenwert eine Struktur ein (Bild 9 (Aufbau des normierten Übergabebereichs) ohne Standardheader, "Aufbau des normierten Übergabebereichs"), 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.
Von Operanden, die mit ADD-OPERAND...,LIST-POSSIBLE=*YES(...,FORM=*NORMAL) definiert sind, werden die Werte in der in Bild 10 (Aufbau des normierten Übergabebereichs) ("Aufbau des normierten Übergabebereichs", ohne Standardheader) 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 | fehlerhafte | Default- | ||
0 bis 1 | Länge des Übergabebereichs | Programm | unverändert | Programm |
2 bis 9 | interner Anweisungsname | SDF | unverändert | Programm |
10 bis 17 | reserviert | - | - | - |
18 bis 19 | Anzahl der Positionen im | SDF | unverändert | Programm |
Der interne Anweisungsname 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=...).
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 | fehlerhafte | Default- | ||
0 bis 1 | Wertbeschreibung |
|
|
|
2 bis 5 | Absolutadresse (unaligned | 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 unabghä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 Programm | fehlerhafte | Default-Werte | |||
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) |
36 | Long-integer |
Kopffeld einer Strukturbeschreibung
Byte | Inhalt | Feldinhalt kommt im Fall ... von | ||
analysierte | fehlerhafte | Default-Werte | ||
0 bis 1 | Anzahl der Positionen im Ope- | SDF | unverändert | Programm |
2 bis 3 2 | Wertbeschreibung für den |
|
|
|
4 bis 7 | Absolutadresse (unaligned | 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. Es ist genau so aufgebaut wie das für anweisungsglobale Operanden.
Listenelement
Byte | Inhalt | Feldinhalt kommt im Fall ... von | ||
analysierte | fehlerhafte | Default-Werte | ||
0 bis 1 | Wertbeschreibung |
|
|
|
2 bis 5 | Absolutadresse (unaligned | SDF | unverändert | Programm 1) |
6 bis 9 | Absolutadresse (unaligned | 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.
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 Programm | fehlerhafte | Default- | ||
0 bis 1 | Längenangabe | SDF | unverändert | Programm |
2 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 ein Byte für Minuten und Sekunden abgelegt.