Suche…


Bemerkungen

Die Anweisung COBOL CALL ermöglicht den Zugriff auf kompilierte Bibliotheksroutinen.

Geben Sie hier die Bildbeschreibung ein

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



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow