Hinweis zur DYNAMIC-Klausel (COBOL85)
Die DYNAMIC-Klausel sollte nicht in Lademodulen, die ausgetauscht werden sollen, verwendet werden, da der durch diese Klausel dynamisch allokierte Arbeitsspeicher bei einem Austausch nicht wieder freigegeben wird.
Beim Austausch von Lademodulen, die diese dynamische Speicherbereitstellung nutzen, kann es zu einem Speicherüberlauf kommen.
Programmieren von Teilprogrammen mit COBOL2000
Die Lebensdauer der Objekte ist auf einen Teilprogrammlauf begrenzt. Daher werden beim PEND-Aufruf alle Objekte, die innerhalb eines Teilprogrammlaufs neu angelegt wurden, vom Laufzeitsystem freigegeben. Das gilt auch bei PEND-Varianten ohne Prozess-Wechsel.
Deshalb können Objekt-Referenzen nicht über einen Teilprogrammlauf hinaus aufbewahrt werden um sie an nachfolgende Teilprogramme zu übergeben, d.h. sie können auch nicht in UTM-Speicherbereichen aufbewahrt werden.
Alle LLMs, die COBOL2000-Module mit Klassen-Definitionen enthalten, nutzen oder erben, müssen immer gemeinsam mit der modifizierten Klassen-Definition ausgetauscht werden. D.h. wenn sich eine Klassendefinition ändert, müssen alle Nutzer dieser Klasse sowie die abgeleiteten Klassen und deren Nutzer usw. gemeinsam mit der modifizierten Klassendefinition ausgetauscht werden.
Übersetzen von COBOL-Teilprogrammen
COBOL-Teilprogramme können mit dem COBOL85- oder COBOL2000-Compiler übersetzt werden, siehe „COBOL85 Benutzerhandbuch“ bzw. „COBOL2000 Benutzerhandbuch“.
Beim Übersetzen mit COBOL85 müssen Sie den COMOPT-Parameter TRUNCATE-LITERAL=NO angeben. Der COMOPT-Parameter TRUNCATE-LITERAL=NO ist bei COBOL85 ab V1.2 nicht mehr beschrieben. Der Parameter wird jedoch aus Kompatibilitätsgründen von COBOL85 noch unterstützt. Beim Übersetzen eines UTM-Teilprogramms mit COBOL85 ist die Angabe von TRUNCATE-LITERAL=NO weiterhin Pflicht.
COBOL85 meldet dann, dass der Parameter nicht dem Standard ANS85 entspricht, was aber auf das Ergebnis des Compilerlaufs keinen Einfluss hat.
Beim Übersetzen mit COBOL2000 müssen Sie den COMOPT-Parameter MARK-LAST-PARAMETER=YES angeben.
Shareable Code nutzen
Wenn Sie beabsichtigen, COBOL-Programmteile shareable zu laden, müssen Sie bereits beim Übersetzen folgende Option angeben:
*COMOPT GENERATE-SHARED-CODE=YES
Der Shareable Code muss nicht unbedingt in einem eigenen Objektmodul abgelegt werden, sondern kann zusammen mit dem nicht-shareable Teil in einem Bindelademodul (LLM) stehen, der in eine Public und eine Private Slice unterteilt ist. Hierfür ist die Compileroption
COMOPT GEN-LLM=YES
anzugeben.
Die shareable Programmteile brauchen für alle Prozesse (Tasks) der Anwendung(en) gemeinsam nur einmal geladen werden. In den task-lokalen Speicher müssen dann nur noch die nicht-shareable Teile geladen werden.
openUTM bietet verschiedene Möglichkeiten, shareable Objekte zu laden:
als nicht-privilegiertes Subsystem,
in einen Common Memory Pool im Benutzerspeicher (Klasse 6-Speicher).
Weitere Informationen zum Übersetzen von Shareable Code finden Sie im Benutzerhandbuch Ihres Compilers. Über das Binden und Laden von Shareable Code informiert ausführlich das openUTM-Handbuch „Einsatz von UTM-Anwendungen auf BS2000-Systemen“.
Formaterstellung mit dem IFG
Wie Sie Formate mit dem IFG erstellen können, ist ausführlich im Handbuch „IFG für FHS“ beschrieben. Wenn diese Formate für den Einsatz mit openUTM erstellt werden, so beachten Sie bitte folgende Hinweise:
Der Formatname darf höchstens 7 Zeichen lang sein.
Im Benutzerprofil wählen Sie die "Struktur des Datenübergabebereichs"
für #Formate: getrennte Attributblöcke und Feldinhalte
für *Formate: nicht ausgerichtet, ohne Attributfelder
für +Formate: nicht ausgerichtet, mit Attributfeldern
Bei *Formaten und + Formaten vereinbaren Sie zwei Adressierungshilfen, je eine für Eingabe und Ausgabe. Definieren Sie für jede der Adressierungshilfen ein
Namenspräfix. Wie Sie die Adressierungshilfen einsetzen, zeigt folgendes Beispiel:LINKAGE SECTION. COPY KCKBC. 05 KBPROGAREA PIC X(100). COPY KCPAC. 03 NB-EINGABE. COPY IFORMA-LIB. 03 NB-AUSGABE. COPY OFORMA-LIB.
Dabei ist FORMA der mit IFG festgelegte Formatname, I der Namenspräfix für Eingabe und O der Namenspräfix für Ausgabe. Beim Einsatz dieses Formats geben Sie beim MPUT- bzw. FPUT- oder DPUT-Aufruf den Formatnamen im Feld KCMF an als "*FORMA" (bei Adressierungshilfen ohne Attributfelder) bzw. als "+FORMA" (bei Adressierungshilfen mit Attributfeldern).
Bitte beachten Sie bei der Definition der Adressierungshilfen, dass openUTM bei +Formaten und *Formaten zu Vorgangsbeginn beim MGET bzw. FGET den Transaktionscode aus der Nachricht entfernt (sofern dies nicht in einem INPUT-Exit explizit verhindert wird). Wenn das erste Feld im Format den Transaktionscode enthält, so müssen Sie dies bei den Adressierungshilfen für Eingabeformatierung berücksichtigen.
Das folgende Beispiel zeigt eine Möglichkeit, wie Sie dies bei einem *Format oder +Format erreichen können:LINKAGE SECTION. . . COPY KCPAC. 03 NB. 1) 05 TACA PIC X(002). 05 TAC PIC X(008). 05 DATEN PIC X(220). 03 FILLER REDEFINES NB. COPY FORMA-LIB. . . MOVE MGET TO KCOP. . IF KCKNZVG = "F" THEN CALL "KDCS" USING KCPAC, DATEN (Vorgangsanfang) ELSE CALL "KDCS" USING KCPAC, NB (innerhalb des Vorgangs) END-IF.
1)Bei +Formaten ist dieses Feld erforderlich, bei *Formaten muss dieses Feld entfallen.
Bei der Einsatzvorbereitung bringen Sie die Formate in die Formateinsatzdatei (Formatbibliothek). Diesen Namen geben Sie bei den FHS-Startparametern an.
Erweiterter Zeilenmodus
Für die Arbeit im erweiterten Zeilenmodus steht das COPY-Element TIAMCTRC zur Verfügung, es wird allerdings nicht mit openUTM ausgeliefert. Dieses COPY-Element enthält die Datenstruktur LINE-MODE-CONTROL-CHARACTERS mit den symbolischen Namen für die Steuerzeichen. TIAMCTRC kann in die WORKING-STORAGE SECTION kopiert werden.