2.4.4 CALL
| | | | | |
Format:
CALL {Programmname / Datenfeld / Literal}
[USING [[BY] {REFERENCE / CONTENT / VALUE}]
Datenfeld1 ...]
[{GIVING / RETURNING} [INTO] Returnfeld]
]
[[ON] {EXCEPTION /OVERFLOW} Befehlssequenz1]
[NOT [ON] EXCEPTION Befehlssequenz2]
[END-CALL][.]
| |
| | | |
Befindet sich der Name des Unterprogramms in einem Datenfeld, muß das Unterprogramm in Cobol geschrieben sein und mit c32 -n compiliert werden.
Mit CALL wird ein Unterprogramm aufgerufen, in dem die Verarbeitung des Programmes fortgesetzt wird.
Nach Beendigung des Unterprogrammes wird das Programm mit der nächsten COBOL-Anweisung fortgesetzt.
Unterprogramme können sowohl in COBOL geschriebene Programme oder C-Routinen aus der COBOL-Library sein.
Jeder Parameter kann Eingabe- oder Ausgabewert darstellen, die Definition erfolgt nur durch das Unterprogramm selbst.
Etwaige Übergabefehler (z.B. Angabe einer Konstanten anstelle eines Datenfeldes) werden mit einer Programmfehlermeldung abgewiesen.
Bei Cobol-Unterprogrammen erfolgt die Übergabe mit Hilfe der LINKAGE SECTION .
Die Reihenfolge der Parameter in der CALL-Anweisung muß mit der Reifenfolge der USING-Anweisung PROCEDURE USING übereinstimmen.
Der Inhalt der Datenfelder innerhalb des Unterprogrammes bleiben unverändert. Zum neu initialisieren muß der Befehl CANCEL verwendet werden.
Als Beispiel dient folgendes Unterprogramm:
*c32 -n call1.cob
identification division.
environment division.
data division.
working-storage section.
77 count pic 999 value 0.
linkage section.
01 wert pic x(20).
procedure division using wert.
call datum using wert.
add 1 to count.
move count to return-code.
call1 zählt nur einen internen Zähler hoch und gibt das Datum zurück.
Dieses Unterprogramm wird von folgendem Hauptprogramm aufgerufen:
*c32 callm;slink callm call1.o
identification division.
environment division.
data division.
working-storage section.
01 uname pic x(20).
01 cnt pic 9(5).
linkage section.
01 feld pic x(20).
procedure division.
move 'call1' to uname.
call uname using feld returning cnt.
display cnt ' ' feld.
accept omitted.
call uname using feld returning cnt.
display cnt ' ' feld.
accept omitted.
cancel uname.
call uname using feld returning cnt.
display cnt ' ' feld.
accept omitted.
Und hier die Ausgabe:
Zurück zu Acc-Cobol Alter Statement
Hoch zu Procedure Divison in COBOL
Weiter zu CANCEL
|