Szukaj…


Uwagi

Instrukcja COBOL CALL zapewnia dostęp do skompilowanych procedur bibliotecznych.

wprowadź opis zdjęcia tutaj

Oświadczenie CALL

COBOL może użyć statycznego powiązania dla następującej instrukcji. GnuCOBOL domyślnie używa dynamicznego łączenia dla wszystkich zewnętrznych symboli znanych w czasie kompilacji, nawet jeśli symbol jest dosłowny:

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

To stwierdzenie wymusza rozdzielczość edycji łącza czas kompilacji. (Niestandardowe, rozszerzenie składni) :

CALL STATIC "subprogram" USING a b c

Pola w języku COBOL można przekazać BY REFERENCE (domyślnie, dopóki nie zostaną zastąpione - zastąpienia są sticky w kolejności od lewej do prawej), BY CONTENT (kopia jest przekazywana W ODNIESIENIU), lub w niektórych przypadkach bezpośrednio 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 został zaprojektowany jako język BY REFERENCE , więc używanie BY VALUE może przedstawiać problemy. Na przykład, cyfry literalne nie mają wyraźnego typu, a specyfikacja COBOL nie ma wyraźnych reguł promocji typu. Dlatego programiści muszą się martwić ustawieniem ramki wywołania według BY VALUE literałów.

Więcej informacji można znaleźć na stronie http://open-cobol.sourceforge.net/faq/index.html#call .

CZAS UŚPIENIA

CALL to także sposób na rozszerzenie funkcjonalności języka COBOL, a także umożliwienie ponownego użycia kodu. Może również dać dostęp do funkcji „systemowej”.

Ten przykład ilustruje sposoby zapewnienia funkcji „uśpienia” COBOL-ów IBM Mainframe. Należy pamiętać, że wymóg taki jest rzadki w takim stopniu, że zwykle, gdy ktoś uważa, że z jakiegoś powodu musi „spać”, jest to niewłaściwe postępowanie.

ILBOWAT0 pochodzi ze starej ery środowiska wykonawczego specyficznej dla języka COBOL na komputerach mainframe. BXP1SLP i BXP4SLP są procedurami Unix System Services (USS), z których można korzystać w dowolnym języku. W rzeczywistości są to uniksowe żądania „uśpienia”.

Bieżące środowisko uruchomieniowe IBM Mainframe (środowisko językowe (LE)) zapewnia komunikację międzyjęzykową, a usługi LEE3DLY LE pokazano w innym przykładzie: Korzystanie z usługi opóźniania wątków w środowisku językowym z / OS .

ILBOWAT0 istnieje już od bardzo dawna (być może ponad 40 lat) i nadal możesz się z nim spotkać. Jego użycie powinno zostać zastąpione przez CEE3DLY lub BXP1SLP, w zależności od tego, który jest bardziej odpowiedni dla danego wymagania.

Czasami musisz spowodować uśpienie programu lub uśpienie zadania przez pewien czas (po kroku FTP lub NDM), które zwykle są uruchamiane jako osobne zadania, i trzeba było uśpić / zapętlić szukając wynikowych zestawów danych.

Oto uroczy mały program COBOL do wykonania tego zadania, wywołujący programy uśpienia COBOL dostępne w OS / VS i być może w innych starszych i obecnych środowiskach operacyjnych na komputerach mainframe.

       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     .

sposób mikrofokusa

W przypadku Microfocus wykorzystuje interfejs API „SleepEx”. Jako przykład;

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.

Korzystanie z usługi opóźniania wątków w środowisku językowym z / OS

Możesz wywołać usługę CEE3DLY w trybie 24- 31- lub 64-bitowym, aby opóźnić zadanie do najbliższej sekundy. Jest to zapisywanie w CICS i opóźnia tylko wątek.

Przykład:

    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.

Możesz zobaczyć więcej szczegółów tutaj:

Usługi na żądanie środowiska językowego IBM - tryb uśpienia



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow