cobol
Oświadczenie CALL
Szukaj…
Uwagi
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