cobol
CALL-Anweisung
Suche…
Bemerkungen
CALL-Anweisung
COBOL kann für die folgende Anweisung eine statische Verknüpfung verwenden. GnuCOBOL verwendet standardmäßig für alle externen Symbole, die zur Kompilierzeit bekannt sind, die dynamische Verknüpfung, selbst wenn das Symbol ein Literal ist:
CALL "subprogram" USING a b c *> run a (possibly static linked) sub program
*> passing three fields
CALL some-prog USING a b c *> some-prog is a PIC X item and can be changed
*> at run-time to do a dynamic lookup
Diese Anweisung erzwingt die Kompilierzeit für die Link-Auflösung. (Nicht standardmäßige Syntaxerweiterung) :
CALL STATIC "subprogram" USING a b c
Die Felder in COBOL können weitergegeben werden BY REFERENCE
(Standardeinstellung, bis außer Kraft gesetzt - Überschreibungen sind sticky
in einem von links nach rechts Reihenfolge), BY CONTENT
(eine Kopie wird als Referenz übergeben), oder in einigen Fällen direkt BY VALUE
:
CALL "calculation" USING BY REFERENCE a BY VALUE b BY CONTENT c RETURNING d
ON EXCEPTION DISPLAY 'No linkage to "calculation"' UPON SYSERR
END-CALL
COBOL ist eine Sprache mit dem Namen BY VALUE
BY REFERENCE
, daher kann die Verwendung von BY VALUE
Probleme verursachen. Literalzahlen haben beispielsweise keinen expliziten Typ, und die COBOL-Spezifikation enthält keine expliziten Typaufstiegsregeln. Daher müssen sich Entwickler mit dem BY VALUE
von Literalen um das Einrichten von Call-Frames kümmern.
Weitere Informationen finden Sie unter http://open-cobol.sourceforge.net/faq/index.html#call .
SCHLAFENSZEIT
CALL ist auch eine Möglichkeit, die COBOL-Funktionalität zu erweitern und die Wiederverwendbarkeit von Code zu ermöglichen. Es kann auch Zugriff auf die "System" -Funktionalität gewährt werden.
In diesem Beispiel werden Möglichkeiten beschrieben, um IBM Mainframe-COBOLs "Ruhezustand" bereitzustellen. Denken Sie daran, dass die Anforderung, dies zu tun, selten ist, insofern, wenn jemand denkt, dass er aus irgendeinem Grund "schlafen" muss, dies die falsche Entscheidung ist.
ILBOWAT0 stammt aus der alten COBOL-spezifischen Laufzeit von Mainframes. BXP1SLP und BXP4SLP sind Unix System Services-Routinen (USS), die von jeder Sprache verwendet werden können. Tatsächlich handelt es sich dabei um Unix-Anfragen zum "Schlaf".
Die aktuelle IBM Mainframe-Laufzeitumgebung (Language Environment (LE)) ermöglicht die sprachübergreifende Kommunikation, und die CEE3DLY LE-Dienste werden in einem anderen Beispiel gezeigt: Thread-Verzögerungsdienst z / OS -Sprachumgebung verwenden.
ILBOWAT0 gibt es schon sehr lange (vielleicht mehr als 40 Jahre), und vielleicht stoßen Sie darauf. Die Verwendung sollte durch CEE3DLY oder BXP1SLP ersetzt werden, je nachdem, welcher der jeweiligen Anforderungen am besten entspricht.
Manchmal müssen Sie ein Programm in den Ruhezustand versetzen oder einen Job für eine Weile in den Ruhezustand versetzen (nach einem FTP- oder NDM-Schritt), die normalerweise als separate Jobs ausgeführt werden, und Sie müssten nach den resultierenden Datensätzen in den Ruhezustand wechseln.
Hier ist ein kleines COBOL-Programm, das diese Aufgabe ausführt, indem die in OS / VS verfügbaren COBOL-Schlafprogramme und möglicherweise andere ältere und aktuelle Mainframe-Betriebsumgebungen aufgerufen werden.
IDENTIFICATION DIVISION.
PROGRAM-ID. SLEEPYTM.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WAIT-PARM.
05 WAIT-TIME PIC S9(8) COMP VALUE 90.
05 WAIT-RESPONSE PIC S9(8) COMP VALUE 0.
05 WAIT-PROGRAM-24BIT PIC X(8) VALUE 'ILBOWAT0'.
05 WAIT-PROGRAM-31BIT PIC X(8) VALUE 'BPX1SLP '.
05 WAIT-PROGRAM-64BIT PIC X(8) VALUE 'BPX4SLP '.
PROCEDURE DIVISION.
GENESIS.
DISPLAY 'START CALLING WAIT PROGRAM'
CALL WAIT-PROGRAM-24BIT USING WAIT-TIME WAIT-RESPONSE
DISPLAY 'END CALLING WAIT PROGRAM'
GOBACK
PERIOD .
mikrofokus weg
Für Microfocus wird die API "SleepEx" verwendet. Als Beispiel;
environment division.
special-names.
call-convention 74 is winAPI.
:
:
01 wSleep-time pic 9(8) comp-5.
01 wSleep-ok pic 9(8) comp-5.
:
:
move 10000 to wSleep-time *>10seconds
call winAPI "SleepEx" using by value wSleep-time
by value 0 size 4
returning wSleep-ok
end-call.
Thread-Verzögerungsdienst der z / OS-Sprachumgebung verwenden
Sie können den CEE3DLY-Dienst im 24-31- oder 64-Bit-Modus aufrufen, um eine Task auf die nächste Sekunde zu verzögern. Es ist CICS speichern und verzögert nur den Thread.
Ein Beispiel:
IDENTIFICATION DIVISION.
PROGRAM-ID. SLEEPYTM.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WAIT-PARM.
05 WAIT-SECS PIC S9(8) COMP VALUE 90.
05 WAIT-FC PIC X(12).
PROCEDURE DIVISION.
CALL CEE3DLY USING WAIT-SECS WAIT-FC
GOBACK.
Sie können mehr Details hier sehen:
Callable Services der IBM Sprachumgebung - Ruhezustand