Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

ETABLE - Ladeinformation übergeben

&pagelevel(3)&pagelevel

Allgemeines

Anwendungsgebiet:

Binden und Laden; siehe "Binden und Laden"

Makrotyp:

S-Typ, MF-Format 2: Standardform/C-/D-/L-/E-/M-Form;

siehe "S-Typ-Makroaufrufe"

Anwendungsgebiet: Binden und Laden; siehe "Binden und Laden"

Makrotyp: S-Typ, MF-Format 2: Standardform/C-/D-/L-/E-/M-Form siehe "S-Typ-Makroaufrufe"

Zum dynamischen Bindelader DBL siehe auch Handbuch „BLSSERV“ [4].

Makrobeschreibung

Mit dem Makroaufruf ETABLE übergibt das Benutzerprogramm dem DBL eine Symboltabelle, die in die Symboltabelle des angegebenen Kontextes eingemischt wird. Die übergebene Tabelle informiert den DBL über Namen und Attribute von CSECTs, ENTRYs und COMMON-Bereichen des Benutzerprogramms.

Der Makroaufruf ist nicht kompatibel zu dem früheren Makroaufruf TABLE.

Makroaufrufformat und Operandenbeschreibung

ETABLE

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

,ACTION=*CREATE / *UPDATE / *DELETE

,CONTEXT_NAME=' ' / <char 1..32>

,CONTEXT_STATE=*DBL-OPTIONS / *ANY / *NEW / *OLD

,TABLE_ADDRESS=NULL-1 / <var: pointer>

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

,PARAM=<var: pointer> / (reg: pointer>)

,PREFIX=P / p

,MACID=BEI / macid

In der nachfolgenden Operandenbeschreibung sind die Operanden alphabetisch geordnet.

ACTION=
Aktion, die für die einzelnen Symbole in der übergebenen Tabelle ausgeführt werden soll.

*CREATE
Die Symbole werden in die Symboltabelle des Kontextes eingetragen. Sie dürfen darin noch nicht enthalten sein.

*UPDATE
Die Symbole werden mit den neuen Eigenschaften in die Symboltabelle des Kontextes eingetragen. Sie müssen bereits darin enthalten sein. Hierbei wird auch die Sichtbarkeit von Symbolen geändert, die nicht mit einem vorangegangenen Aufruf des ETABLE

  • Makros eingetragen wurden.

    *DELETE
    Die Symbole sind aus der Symboltabelle des Kontextes zu löschen.

CONTEXT_NAME=' ' / <char 1..32>

Name des Kontextes, dem die Symbole zugeordnet werden. Das erste Zeichen muss ein Buchstabe sein.

CONTEXT_STATE=
Status des bei CONTEXT_NAME angegebenen Kontextes

*DBL-OPTIONS
Der Operandenwert wird aus dem letzten Aufruf des Kommandos MODIFY-DBL-DEFAULTS übernommen. Falls für den betreffenden Operanden mit MODIFY-DBL-DEFAULTS noch kein Wert festgelegt wurde, gilt der Wert, der in der Makro-Syntaxbeschreibung auf *DBL-OPTIONS folgt.

*ANY
Wenn der Kontext bereits existiert, wird dieser verwendet; ansonsten wird ein neuer Kontext erzeugt.

*NEW
Der Kontext wird angelegt. Er darf noch nicht existieren.

*OLD
Der Kontext existiert bereits.

MF=
Zur allgemeinen Beschreibung des Operanden MF, der dazugehörenden Operandenwerte und der evtl. angegebenen Operanden PARAM, PREFIX und MACID siehe Abschnitt „S-Typ-Makroaufrufe“. Die gültigen MF-Werte sind zu Beginn der Makrobeschreibung bei „Makrotyp“ angegeben und aus dem Aufrufformat ersichtlich.
Bei der C-Form, D-Form oder M-Form des Makroaufrufs kann ein Präfix PREFIX und bei der C-Form oder M-Form zusätzlich eine Macid MACID angegeben werden (siehe AAbschnitt „S-Typ-Makroaufrufe“).

TABLE_ADDRESS=NULL-1 / <var: pointer>
Adresse einer Tabelle von Symbolen, die an DBL übergeben werden soll.

TABLE_LENGTH=0 / <integer 0..2147483647>
Tatsächliche Länge der Tabelle (in Byte)

Hinweise zum Makroaufruf

  • Typ und Name eines Symbols können mit ETABLE nicht geändert werden.

  • Die Adresse im Feld LOAD_ADDR muss eine gültige Klasse-6-Speicher-Adresse sein.

  • Ein Symbol, das mit ETABLE in die Symboltabelle des Kontextes eingetragen wurde, kann nicht mit dem Makro UNBIND aus der Symboltabelle gelöscht werden. Symbole, die mit den Kommandos LOAD-/START-EXECUTABLE-PROGRAM (oder LOAD-/ START-PROGRAM) oder mit den Makros BIND und TABLE eingeführt wurden, können dagegen nicht mit ETABLE ACTION=*DELETE gelöscht werden.

  • Bei ACTION=*DELETE wird der Operand CONTEXT_STATE ignoriert. Nur die Symbolnamen werden beachtet.

  • Symbole, die mit ETABLE in die Symboltabelle eingetragen wurden, liegen in der Verantwortung des Benutzers und sind nur für die aktuelle Task sichtbar.

  • Wenn ein COMMON-Bereich mit ETABLE eingeführt wird, geht der DBL davon aus, dass der COMMON-Bereich bereits geladen ist und das Feld LOAD_ADDR auf einen zugewiesenen Speicherbereich verweist.

  • Wenn ACTION=UPDATE auf ein Symbol angewandt wird, das nicht von ETABLE erzeugt wurde, werden bei der Bearbeitung nur Symbolname, Symboltyp und das Attribut INVISIBLE berücksichtigt.

  • Für ein Symbol, das nicht von ETABLE erzeugt wurde, kann nur die Sichtbarkeit aktualisiert werden.

  • Da die Sichtbarkeit auch für Symbole aktualisiert werden kann, die nicht von ETABLE erzeugt wurden, wird grundsätzlich die Sichtbarkeit des ersten gefundenen Symbols aktualisiert.

Format der Symboltabelle

Die bei TABLE_ADDRESS angegebene Adresse zeigt auf eine Symboltabelle, die mehrere Einträge haben kann. Ein einzelner Eintrag hat folgendes Format:

Byte

Länge

Feldname

Bedeutung und/oder Wert

0

8

HDR

Standardheader

8

1

TYPE

/ CSECT (X'F0') oder
/ ENTRY (X'F1') oder
/ COMMON (X'F3')

9

7

ATTRIBUTE

Attribute wie bei CSECTs (je 1 Byte pro Attribut mit folgender
Bedeutung):

  1. INVISIBLE:
    X'01' entspricht NO, X'02' entspricht YES

  2. AMODE:
    X'01' entspricht 31, X'02' entspricht 24, X'03' entspricht
    ANY

  3. RESIDENT:
    X'01' entspricht NO, X'02' entspricht YES

  4. PAGE_ALIGNED
    X'01' entspricht NO, X'02' entspricht YES

  5. READ_ONLY:
    X'01' entspricht NO, X'02' entspricht YES

  6. PUBLIC:
    X'01' entspricht NO, X'02' entspricht YES

  7. PRIVILEGED:
    X'01' entspricht NO, X'02' entspricht YES

16

4

LOAD_ADDR

Ladeadresse des Symbols

20

2

LEN

Länge der CSECT / des COMMON-Bereiches

22

32

SYMBOL_NAME

Name des Symbols

54

1

HSI_CODE

390 (X'01') oder
X86E (X'09')

55

1

MMODE

TU_4K_DEPENDENT (X'02') oder
COMPATIBLE (X'03) oder
NATIVE (X'04')

Die DSECT für einen solchen Symboleintrag wird mit ETABIT MF=D erzeugt.

Behandlung von Namenskonflikten

Die folgende Tabelle zeigt, wie Namenskonflikte zwischen Symbolen behandelt werden, die durch die Makros ETABLE, TABLE und BIND eingeführt wurden:


Existierendes Symbol wurde eingeführt durch

ACTION

ETABLE

TABLE

BIND

*CREATE

1.

2.

2.

*UPDATE

3.

4.

4.

*DELETE

5.

6.

6.

  1. Ein vorhandenes ETABLE-Symbol hat den gleichen Namen.
    Folgender Returncode wird übergeben: ETABLE_SYMB_DUPLICATE

  2. Ein Namenskonflikt tritt auf. Folgender Returncode wird übergeben: ETABLE_NAME_-COLLISION

  3. Das Symbol wird geändert (kein Namenskonflikt).

  4. Nur die Sichtbarkeit (visibility) des Symbols ist aktualisierbar.

  5. Das Symbol wird gelöscht (kein Namenskonflikt).

  6. Unzulässige Aktion.

Rückinformation und Fehleranzeigen

Wenn bei der Verarbeitung der Tabelleneinträge ein Fehler auftritt, wird im HDR-Feld des fehlerhaften Tabelleneintrags ein entsprechender Returncode eingetragen. Im Standardheader der Parameterliste wird der Returncode FUNCTION_PARTIALLY_PROCESSED übergeben und die Verarbeitung der Tabelleneinträge wird fortgesetzt.

Das Feld PROCESSED_ITEMS der Parameterliste enthält die Anzahl korrekt bearbeiteter Einträge.

Standardheader:

+---------------+
|   |   |   |   |
|c|c|b|b|a|a|a|a|
+---------------+

Über die Ausführung des Makros ETABLE wird im Standardheader folgender Returncode übergeben (cc=Subcode2, bb=Subcode1, aaaa=Maincode):

X'cc'

X'bb'

X'aaaa'

Erläuterung

X'00'

X'00'

X'0000'

Der Makro wurde normal ausgeführt.

X'01'

X'00'

X'0000'

Die Funktion wurde bereits ausgeführt.

X'02'

X'00'

X'0001'

Die Funktion wurde teilweise ausgeführt.

X'60'

X'01'

X'0001'

Ungültiger Operand TABLE_LENGTH

X'60'

X'01'

X'0002'

Ungültige Angaben bei TABLE_ADDRESS oder TABLE_LENGTH.

X'60'

X'01'

X'0008'

Ungültiger Operand ACTION

X'60'

X'01'

X'000A'

Interner ETABLE-Fehler.

X'60'

X'01'

X'0019'

Ein reserviertes Feld enthält keine binären Nullen.

X'60'

X'01'

X'0040'

Der Kontext ist noch nicht vorhanden und es wurde CONTEXT_STA-
TE=*OLD angegeben.

X'60'

X'01'

X'0048'

Der Kontext ist bereits vorhanden und es wurde CONTEXT_STA-
TE=*NEW angegeben.

X'60'

X'01'

X'0134'

Ungültiger Parameter CONTEXT_STATE

X'60'

X'01'

X'0148'

Ungültiger Kontextname

X'60'

X'40'

X'0158'

Maximale Anzahl von Benutzerkontexten ist erreicht.

X'60'

X'20'

X'0200'

Interner DBL-Fehler

X'60'

X'20'

X'0300'

Systemfehler

X'00'

X'01'

X'FFFF'

Die Funktion wird nicht mehr oder noch nicht unterstützt.

X'00'

X'03'

X'FFFF'

Die Version der Schnittstelle wird nicht unterstützt.

Weitere Returncodes, deren Bedeutung durch Konvention makroübergreifend festgelegt ist, können der Tabelle „Standard-Returncodes“ (Standardheader) entnommen werden.

Beispiel

Dieses Beispiel soll die Anwendung der ETABLE/ETABIT-Schnittstellen verdeutlichen:

* DSECT of ETABLE item 
* 
         ETABIT MF=D 
         ... 
* Inititialisierung der ETABLE Parameterliste 
* 
         MVC   ETAPL(PBEI#),ETAPLI 
         LA    1,ETATAB 
         LA    2,ETATABL 
         ETABLE MF=M,TABLE_ADDRESS=(1),TABLE_LENGTH=(2) 
* 
* Initialisierung der Eintraege 
* 
         USING PBETDS,1                 reg 1 = Adresse des ersten Eintrags 
*                                       PBETDS = DSECT fuer den Eintrag 
* 
* Erster Eintrag 
* 
         MVC   0(PBET#,1),ETAITEMI                 Eintrag initialisieren 
         ETABIT MF=M,SYMBOL_NAME=CS1NAM,LEN=CS1L, 
               LOAD_ADDR=CS1@,SYMBOL_TYPE=*COMMON 
*
* Zweiter Eintrag
*
         LA    1,PBET#(1)               reg 1 = Adresse des zweiten Eintrags 
         L     2,CS2@ 
         MVC   0(PBET#,1),ETAITEMI                Eintrag initialisieren 
         ETABIT MF=M,SYMBOL_NAME='CS2',LEN=200, 
               LOAD_ADDR=(2),SYMBOL_TYPE=*CSECT 
*
* ETABLE aufrufen 
* 
         ETABLE MF=E,PARAM=ETAPL 
*
* Returncode-Auswertung 
*
         ...
*
* ETABLE-Tabelle
*
ETATAB   DS    XL(2*PBET#)    Tabelle fuer zwei Eintraege
ETATABL  EQU   *-ETATAB       Tabellenlaenge 
         DS    0F 
CS1@     DS    F              Adresse des ersten eingefuegten Symbols
CS1NAM   DS    CL32           Name des ersten eingefuegten Symbols 
CS1L     DS    Y              Laenge des ersten eingefuegten Symbols 
CS2@     DS    F              Adresse des zweiten eingefuegten Symbols 
* 
ETAPL    ETABLE MF=C          Parameterliste 
* 
* Struktur zur Initialisierung der ETABLE-Parameterliste 
* 
ETAPLI   ETABLE MF=L,ACTION=*CREATE,CONTEXT_STATE=*NEW, 
              CONTEXT_NAME='ETACTX' 
* 
* Struktur zur Initialisierung eines ETABLE-Eintrags 
*
 ETAITEMI ETABIT MF=L