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.
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.
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
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.
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.
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.
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. |
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.