Поиск…


замечания

Оператор COBOL CALL обеспечивает доступ к скомпилированным библиотечным программам.

введите описание изображения здесь

Вызов CALL

COBOL может использовать статическую связь для следующего оператора. GnuCOBOL использует динамическую привязку по умолчанию для всех внешних символов, известных во время компиляции, даже если символ является буквальным:

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

Этот оператор заставляет время редактирования ссылки на компиляцию. (Нестандартное расширение синтаксиса) :

CALL STATIC "subprogram" USING a b c

Поля в COBOL могут передаваться по BY REFERENCE (по умолчанию, до переопределения - переопределения являются sticky в порядке слева направо), BY CONTENT (копия передается по ссылке) или в некоторых случаях непосредственно 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 предназначен для языка BY REFERENCE , поэтому использование функции BY VALUE может представлять проблемы. Например, литеральные численные значения не имеют явного типа, а спецификация COBOL не имеет правил продвижения по явному типу. Поэтому разработчикам приходится беспокоиться о настройке кадра вызова с помощью BY VALUE литералов.

Подробнее см. Http://open-cobol.sourceforge.net/faq/index.html#call .

ВРЕМЯ СПАТЬ

CALL также способ расширить функциональность COBOL, а также обеспечить повторное использование кода. Он также может предоставить доступ к функциональности «системы».

Этот пример иллюстрирует способы обеспечения функциональности «спящего режима» для COBOL IBM Mainframe. Имейте в виду, что требование сделать это редко в той степени, что обычно, когда кто-то думает, что им нужно «поспать» по какой-то причине, это неправильно.

ILBOWAT0 - это старая эпоха исполнения, основанная на COBOL, на мэйнфреймах. BXP1SLP и BXP4SLP - это подпрограммы Unix System Services (USS), которые могут использоваться на любом языке. Фактически это Unix-запросы «сна».

Текущая среда IBM Mainframe Runtime (языковая среда (LE)) обеспечивает межязычную связь, а услуги CEE3DLY LE показаны в другом примере, используя службу задержки потоков z / OS Language Environment .

ILBOWAT0 существует очень долго (возможно, более 40 лет), и вы все равно можете столкнуться с этим. Его использование должно быть заменено CEE3DLY или BXP1SLP, в зависимости от того, что больше подходит для конкретного требования.

Иногда вам нужно вызвать спать в программе или заставить Job спать некоторое время (после этапа FTP или NDM), которые обычно запускаются как отдельные задания, и вам нужно будет спать / петля, ища результирующие наборы данных.

Вот небольшая небольшая программа COBOL для выполнения указанной задачи, вызывая программы сна COBOL, доступные в OS / VS и, возможно, в других устаревших и текущих операционных средах мэйнфрейма.

       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     .

микрофокусный путь

Для Microfocus он использует API «SleepEx». В качестве примера;

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.

Использование службы задержки времени среды z / OS

Вы можете вызвать услугу CEE3DLY в режиме 24-31 или 64 бит, чтобы отложить задачу до ближайшей секунды. Это CICS сохраняет и будет только задерживать поток.

Пример:

    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.

Вы можете увидеть более подробно здесь:

IBM Language Environment Callable Services - Сон



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow