Inhaltsverzeichnis

EXEC TAA INTERN

Achtung:
Die hier beschriebene Funktionalität darf nicht außerhalb von Architekturkomponenten verwendet werden. Es besteht weder eine Kompatibilitätsgarantie noch eine Funktionalitätsgewährleistung bei nachfolgenden Auslieferungen.

INTERN OM

SYNTAX:

EXEC TAA INTERN OM
OM-OPERATION = (<variable> | <literal>) 
OM-OBJECT = (<variable> | <literal>) 
[ OM-POSITION = (<variable> | <literal>) ]
[ OM-POSTYPE = (<variable> | <literal>) ]
[ OM-INDEX = (<numeric variable> | <numeric literal>) ]
[ INFO-ITEMS = (<variable> ) ] 
[ INFO-LENGTH = (<variable> ) ]
[ INFO-TYPE = (<variable> ) ] 
[ INFO-CLASS = (<variable> ) ]
[ INFO-SCHWEBE = (<variable> ) ]
END-EXEC

Hinweise:

Warnung:

Wenn ungültige Angaben für eine Operation gemacht werden (z.B. GET FIRST auf ein Record-Objekt, oder ABS-Positionstyp mit Positionsangabe „FIRST“, oder Kleinbuchstaben), wird dies bei Generierung und Compilierung nicht erkannt. Wie sich dies zur Laufzeit auswirkt, ist nicht definiert. Da die Laufzeit-Infrastrukturen bisher davon ausgehen konnten, daß die Angaben in gewissem Umfang geprüft sind, werden dort keine entsprechenden Überprüfungen mehr vorgenommen. Es kann daher zu Laufzeitfehlern kommen, aber auch zu einer stillschweigenden Nicht-Ausführung des Befehls; die Reaktion kann unter verschiedenen Laufzeitumgebungen unterschiedlich sein. Es ist deshalb wichtig, sicherzustellen, daß nur sinnvolle Operations/Objekt-Kombinationen übergeben werden.

Intern Sort

Syntax:

EXEC TAA INTERN SORT 
     OM-OBJECT=<NAME>
     SORTFIELDTABLE = <TABELLENNAME>
     SORTFIELDCOUNT =  {<num. variable> | <num. literal> }
     [ SORTORDER =  {0 | 1 | <num. variable> } ]
 END-EXEC

Die dynamische Sortierung ist ein Sonderfall der OM-Intern-Aufrufe. Sie bietet die Möglichkeit, die Kriterien, nach denen ein Objekt sortiert werden soll, zur Laufzeit festzulegen.

Als Tabelle für die Sortierkriterien (Angabe SORTFIELDTABLE) muss im Programm eine Tabelle angelegt werden, die wie folgt aufgebaut ist

sample.cbl
01 <name>.
     02 <name-rec> OCCURS <anzahl>.
         05 FIELDNAME   PIC X(24).
         05 SORTORDER   PIC S9(9) COMP.

Diese Tabelle muss im Programm mit den Namen der Sortierfelder und der für das jeweilige Feld geltende Sortierreihenfolge bestückt werden. Dabei ist zu beachten:

Achtung: Wenn die Tabelle einen Feldnamen enthält, der in dem Objekt nicht vorkommt, wird eine Condition mit Severity Warning ausgegeben; es wird keine Sortierung durchgeführt oder das Sortierergebnis ist undefiniert.

Intern Modulecall

Syntax:

EXEC TAA INTERN MODULECALL 
  MODULENAME =   {<variable> | <literal>}
  MODULEEVENT =   {<variable> | <literal> }
  MODULEAPPL = "<literal>" 
  MODULETYPE = "<literal>" 
  [BYVALUEn = TRUE]
  PARMn = "<literal>" 
  ARGn = "<literal>" 
  [...]
END-EXEC

Zu beachten:

Daraus wird generiert:

Daraus wird generiert:

Es ist auch möglich, für MODULENAME oder MODULEEVENT einen String (in Anführungszeichen) anzugeben, um entweder ein Modul mit verschiedenen Events, oder mehrere Module mit gleichem Event aufrufen zu können. Das ist natürlich auch durch entsprechende Bestückung von COBOL-Variablen erreichbar, aber: Wenn der Modulname ein String ist, wird kein Evaluate generiert, nur einfache Moves.

Die Evaluates berücksichtigen alle Module, die in der Aufrufstruktur definiert sind, und die dem angegebenen MODULTYPE entsprechen.

Auswirkung, wenn ein Modul aufgerufen wird, das nicht in der Aufrufstruktur definiert ist: Auf dem PC erfolgt die Überprüfung der Aufrufstruktur zur Laufzeit, sodass dort der Fehler entsprechend gemeldet wird. Auf dem Host zu wird es zu einem Fehler kommen, da der Shortname = Space und damit ungültig ist.

TimeStamp-Offset

Zu Testzwecken ist es möglich 1), einen Timestamp-Offset zu setzen:

 EXEC TAA INTERN TIMESTAMPOFFSET
    OFFSET = <wert>
 END-EXEC  

<wert> muss einen String im gültigen Timestampoffset-Format enthalten (vgl. hier). Dieser Wert darf, wenn er als Konstante übergeben wird, nicht länger als 59 Stellen sein, wegen der max. Länge der Cobol-Zeile. Wenn der Wert als Cobol-Feld übergeben wird, sind bis zu 128 Stellen möglich (Begrenzung durch Übergabebereich in der TXTAA), was in aller Regel mehr als genug sein dürfte. Da es sich um einen Intern-Befehl handelt, erfolgt im Generator keine Überprüfung von Länge oder Syntax des Werts; beim Setzen des Offset für den BC wird die Gültigkeit natürlich geprüft.

Die Funktionalität zum Setzen des Timestampoffset im BC ist nur für nicht-Enduser ausführbar. Sollte die Anweisung in produktiven Modulen benutzt werden, wird geOOpst und der Timestampoffset ignoriert.

Intern Resize und FillRaw

Resize

Syntax:

EXEC TAA INTERN RESIZE
      OM-OBJECT   = <Objektname>
      OM-INDEX      = <Anzahl Sätze>       
      [OM-INITIALIZED = TRUE]
 END-EXEC

Gibt an, wie viele Sätze in einem Listobjekt anschließend vorhanden sein sollen. Enthält das Objekt mehr Sätze, werden (von vorn anfangend) die Sätze, die über die angegebene Anzahl hinausgehen, gelöscht. Enthält es weniger Sätze, wird die entsprechende Anzahl leerer Sätze hinzugefügt.

Wenn die Sätze initialisiert werden sollen, enthält das Objekt anschließend die angegebene Anzahl initialisierter Sätze; ggf. in den Sätzen enthalten Daten werden dabei gelöscht.

Wenn die Sätze nicht initialisiert werden sollen, bleiben bereits vorhandene Dateninhalte erhalten; der Inhalt von neu hinzugefügten Sätzen ist undefiniert.

Beim Initialisieren wird auch der Inhalt der Datenstruktur im COBOL-Programm initialisiert. Ohne Initialisierung wird der Inhalt der Datenstruktur im COBOL-Programm nicht verändert.

Nach dem RESIZE ist die aktuelle Position im Objekt (Currency) undefiniert.

Regeln:

In der TX-TAA enthält:

TX-SRC-INDEX Die Anzahl gewünschter Sätze,
TX-SRC-TYPE Spaces oder „INI“, letzteres wenn Initialisierung gewünscht ist. Wenn Initialisierung gewünscht ist, wird die Satzstruktur initialisiert.
TX-SRC-POINTER die Adresse der Satzstruktur, oder NULL, wenn keine Initialisierung gewünscht ist.

FillRaw

Syntax:

EXEC TAA INTERN FILLRAW
         OM-OBJECT         = <Objektname>
         SOURCENAME     = <Pointer auf die Daten>       
         SOURCESIZE       = <Gesamtlänge der Daten>         
         [OM-OFFSET        = <Offset zum Einfügepunkt ab Satzanfang]
         [OM-SIZE              = <Länge der einzufügenden Daten pro Satz>]
 END-EXEC

Regeln:

Es werden am Ende des Objekts, also hinter ggf. bereits vorhandene Sätze, solange neue Sätze hinzugefügt (ADD) und gefüllt, wie Daten vorhanden sind.

Mindest-Voraussetzungen, die überprüft werden, damit der FillRaw ausgeführt wird:

In der TX-TAA enthält:

TX-SRC-LENGTH die Länge der Daten pro Satz, falls angegeben. Default ist Gesamt-Satzlänge. Die müsstet ihr eigentlich kennen, steht aber sonst auch nochmal hier drin.
TX-SRC-INDEX den Offset, falls angegeben, sonst 0.
TX-SRC-POINTER die Adresse des Datenbereichs, der die einzufügenden Objektdaten enthält. Nicht (!!) die Adresse der Objektdatenstruktur.
TX-INFO-LENGTH die Länge des Datenbereichs.

Achtung:
Die hier beschriebene Funktionalität darf nicht außerhalb von Architekturkomponenten verwendet werden. Es besteht weder eine Kompatibilitätsgarantie noch eine Funktionalitätsgewährleistung bei nachfolgenden Auslieferungen.

1)
ab V8.12