Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Allgemeine Beispielbeschreibung

&pagelevel(3)&pagelevel

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

  1. Es wird die Initialisierungsroutine IT0INITS aufgerufen, um ILCS nachzuinitialisieren. Register 0 muss mit dem Wert 0 belegt werden (Anzahl der Parameter = 0).

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

  3. Register 13 wird mit der Adresse der Save Area geladen (ILCS-Konvention).

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

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

  2. Wenn die Module bereits geladen sind, wird lediglich das C-Modul aufgerufen.

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