Funktion
Innerhalb eines aufgerufenen Programms (Unterprogramms) oder einer Methode bestimmt die Prozedurteilüberschrift die Standard-Einsprungstelle. Wahlweise können Datennamen angegeben werden, wenn vom aufrufenden Programm Daten als Parameter übergeben werden.
Format 1
PROCEDURE DIVISION [USING-Angabe]
[RETURNING datenname-2]
.
wobei die USING-Angabe wie folgt definiert ist:
USING {[BY REFERENCE] {[OPTIONAL] datenname-1}... | BY VALUE {
datenname
-1}... }...
Format 2
Für Objekt-, Fabrik(Factory)- oder Schnittstellendefinition.
PROCEDURE DIVISION.
Syntaxregeln
Die USING-Angabe darf nur geschrieben werden, wenn das aufgerufene Programm von einer CALL-Anweisung oder eine Methode von einer INVOKE-Anweisung aufgerufen wird und die CALL-/INVOKE-Anweisung in der aufrufenden Quelleinheit eine
USING-Angabe enthält. Für Aufrufe als Unterprogramm von „fremdsprachigen Programmen“ aus siehe [2] CRTE-Handbuch.Die RETURNING-Angabe darf nur geschrieben werden, wenn das aufgerufene Programm von einer CALL-Anweisung oder eine Methode von einer INVOKE-Anweisung aufgerufen wird und die CALL- /INVOKE-Anweisung in der aufrufenden Quelleinheit eine RETURNING-Angabe enthält.
Jeder in der USING- bzw. -RETURNING-Angabe der PROCEDURE DIVISION-Überschrift angegebene Datenname muss in der LINKAGE SECTION der Quelleinheit, die diese Überschrift enthält, definiert sein und die Stufennummer 01 oder 77 haben.
Die Datenbeschreibung von datenname-1 bzw. datenname-2 darf keine REDEFINES-oder BASED-Klausel enthalten.Jeder datenname-1, der mit der BY VALUE-Angabe definiert wird, darf nur ein Datenelement von der Klasse numerisch, objekt oder zeiger bezeichnen.
Die RETURNING-Angabe kann in einer Methoden-Definition, einer Programm- oder Programmprototyp-Definition spezifiziert werden.
datenname-2 darf nicht identisch sein mit datenname-1.
Allgemeine Regeln
Die Standard-Einsprungstelle innerhalb eines aufgerufenen Programms oder einer aufgerufenen Methode wird durch die PROCEDURE DIVISION-Überschrift bestimmt. Um die Verknüpfung von einer aufrufenden Quelleinheit zu dieser Einsprungstelle herzustellen, muss die aufrufende Quelleinheit eine CALL- bzw. INVOKE-Anweisung enthalten. Der Name in dieser CALL- bzw. INVOKE-Anweisung muss mit dem Namen im PROGRAM-ID bzw. METHOD-ID Paragrafen der IDENTIFICATION DIVISION des aufgerufenen Programms bzw. der aufgerufenen Methode übereinstimmen.
Die USING-Angabe bewirkt, dass sich während des Ablaufs datenname-1 der PROCEDURE DIVISION-Überschrift im aufgerufenen Programm/Methode und bezeichner-2 bzw. bezeichner-5 in der USING-Angabe der CALL- bzw. INVOKE-Anweisung in der aufrufenden Quelleinheit auf dieselben Daten beziehen, die in gleicher Weise für die aufgerufene und für die aufrufende Quelleinheit verfügbar sind. Die Gleichheit der Namen ist nicht erforderlich.
In der PROCEDURE DIVISION-Überschrift des aufgerufenen Programms bzw. der aufgerufenen Methode darf ein Datenname nur ein einziges Mal vorkommen; in der USING-Angabe der CALL- bzw. INVOKE-Anweisung darf derselbe Bezeichner hingegen öfter angegeben werden.
Im aufgerufenen Programm /Methode werden die Operanden der USING-Angabe entsprechend ihren in der LINKAGE SECTION angegebenen Datenbeschreibungen behandelt.
Eine Quelleinheit kann zur Ausführungszeit sowohl als aufgerufene als auch als aufrufende Quelleinheit ablaufen. Einen Sonderfall bildet die erste Quelleinheit im Ablauf (die auf Systemebene gestartet wird); sie darf in der PROCEDURE DIVISION-Überschrift keine USING-Angabe enthalten.
Beispiel 8-1
Aufrufendes Programm: IDENTIFICATION DIVISION PROGRAM-ID. A-PROG. ... WORKING-STORAGE SECTION. 01 ALPHA ... 01 BETA ... 77 GAMMA ... ... PROCEDURE DIVISION. ... CALL "B-PROG" USING ALPHA BETA GAMMA. (1) ... Aufgerufenes Programm: IDENTIFICATION DIVISION. PROGRAM-ID. B-PROG. ... LINKAGE SECTION. 01 DELTA ... 01 EPSILON ... 77 THETA ... ... PROCEDURE DIVISION USING DELTA EPSILON THETA. (1) ...
(1) | Die Parameter der USING-Angaben sind paarweise aufeinander bezogen, d.h. ALPHA und DELTA, BETA und EPSILON, GAMMA und THETA beziehen sich jeweils auf dasselbe Datenfeld. |
Details zur Parameterübergabe zwischen ILCS-Programmen siehe Handbuch „CRTE“ [2].