Aufrufschema
Nicht-ILCS-Assemblerprogramm CALLINTF --> ILCS-Assemblerprogramm ILCSINTF --> ILCS-C-Programm CUPRO --> ILCS-COBOL-Programm COBUPRO
Die C- und COBOL-Programme werden im Assemblerprogramm ILCSINTF mittels des BIND-Makros dynamisch nachgeladen.
Nicht-ILCS-Assemblerprogramm CALLINTF
Abbildung des Quellprogramms:
"Nicht-ILCS-Assemblerprogramm CALLINTF" in "Abbildung der Quellprogramme"
Ablaufprotokoll zum Übersetzen:
"Übersetzen der Assemblerprogramme CALLINTF (Nicht-ILCS-Hauptprogramm) und ILCSINTF (ILCS-Unterprogramm)" in "Ablaufprotokolle"
Im Beispiel ist CALLINTF das Hauptprogramm. Wenn CALLINTF seinerseits durch ein Nicht-ILCS-Programm aufrufbar sein soll, muss es folgendermaßen modifiziert werden:
Beim Aufruf Register sichern, die später benötigt werden
Vor dem Rücksprung Register wiederherstellen, die zuvor gesichert wurden
Rücksprung in das rufende Nicht-ILCS-Programm (RETURN)
Beschreibung von CALLINTF
Es wird die Initialisierungsroutine IT0INITS aufgerufen, um ILCS nachzuinitialisieren. Register 0 muss mit dem Wert 0 belegt werden (Anzahl der Parameter = 0).
IT0INITS liefert in Register 0 die Adresse der generierten PCD. Diese Adresse muss in der Save Area gesichert werden. Die Save Area selbst wird mit dem CRTE-Makro IT0VSA generiert.
Register 13 wird mit der Adresse der Save Area geladen (ILCS-Konvention).
Ein ILCS-Assemblerprogramm wird aufgerufen, in diesem Beispiel ein Programm mit dem Namen „ILCSINTF“.
ILCS-Assemblerprogramm ILCSINTF
Abbildung des Quellprogramms:
"ILCS-Assemblerprogramm ILCSINTF" in "Abbildung der Quellprogramme"
Ablaufprotokoll zum Übersetzen:
"Übersetzen der Assemblerprogramme CALLINTF (Nicht-ILCS-Hauptprogramm) und ILCSINTF (ILCS-Unterprogramm)" in "Ablaufprotokolle"
Beschreibung von ILCSINTF
Um zu vermeiden, dass die ILCS-C- und COBOL-Module mehrmals in den Speicher geladen werden, wird ein Test durchgeführt, ob die C- und COBOL-Module bereits geladen sind.
Wenn die Module bereits geladen sind, wird lediglich das C-Modul aufgerufen.
Wenn die Module nicht geladen sind,
werden die BIND-Makros ausgeführt,
wird die ILCS-Routine IT0ININ mit dem Strukturmakro @ININ aufgerufen, um die Laufzeitumgebung für die Sprachen C und COBOL zu initialisieren,
wird das C-Modul aufgerufen.
ILCS-C-Programm CUPRO und ILCS-COBOL-Programm COBUPRO
Abbildung der Quellprogramme:
"ILCS-C-Programm CUPRO" und "ILCS-COBOL-Programm COBUPRO" in "Abbildung der Quellprogramme"
Ablaufprotokolle zum Übersetzen und Binden:
"Übersetzen und Vorbinden des COBOL-Unterprogramms COBUPRO" und "Übersetzen und Vorbinden des C-Unterprogramms CUPRO" in "Ablaufprotokolle"
Beschreibung der Programme
Das C-Programm ruft lediglich das COBOL-Programm auf, das COBOL-Programm quittiert den erfolgreichen Aufruf mit einer Meldung am Terminal.
Da die Programme mit dem BIND-Makro nachgeladen und in den Klasse-4/5-Speicher vorgeladen werden sollen, wird bei der Übersetzung mit dem C++- bzw. COBOL85-Compiler folgende Option angegeben:
COMPILER-ACTION=MODULE-GEN(MOD-FORM=LLM,SHAREABLE-CODE=YES)
In einem anschließenden Bindelauf mit dem BINDER werden aus der Code-CSECT eine PUBLIC-Slice und aus der Daten-CSECT eine PRIVATE-Slice gebildet.