Buscar..


Observaciones

La instrucción COBOL CALL proporciona acceso a las rutinas de la biblioteca compilada.

introduzca la descripción de la imagen aquí

Declaración CALL

COBOL puede usar enlaces estáticos para la siguiente declaración. GnuCOBOL utiliza el enlace dinámico de forma predeterminada para todos los símbolos externos conocidos en el momento de la compilación, incluso cuando el símbolo es un literal:

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

Esta declaración obliga a compilar la resolución de edición del enlace de tiempo. (No estándar, extensión de sintaxis) :

CALL STATIC "subprogram" USING a b c

Los campos en COBOL se pueden pasar BY REFERENCE (el valor predeterminado, hasta que se invalida - las anulaciones se sticky en un orden de izquierda a derecha), BY CONTENT (se pasa una copia POR REFERENCIA), o en algunos casos directamente 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 está diseñado para ser un lenguaje BY REFERENCE , por lo que el uso de BY VALUE puede presentar problemas. Por ejemplo, los números literales no tienen un tipo explícito y la especificación COBOL no tiene reglas de promoción de tipo explícitas. Por lo tanto, los desarrolladores tienen que preocuparse por la configuración del marco de llamada con BY VALUE de los literales.

Consulte http://open-cobol.sourceforge.net/faq/index.html#call para obtener más detalles.

TIEMPO DE DORMIR

CALL también es una forma de ampliar la funcionalidad COBOL, y también para permitir la reutilización del código. También puede dar acceso a la funcionalidad del "sistema".

Este ejemplo ilustra las formas de proporcionar la funcionalidad de "suspensión" a los COBOL de mainframe de IBM. Tenga en cuenta que el requisito de hacerlo es raro en la medida en que, por lo general, cuando alguien piensa que necesita "dormir" por alguna razón, es algo incorrecto.

ILBOWAT0 es de la antigua era del tiempo de ejecución específica de COBOL en Mainframes. BXP1SLP y BXP4SLP son rutinas de Servicios del Sistema Unix (USS) que pueden ser utilizadas por cualquier idioma. En efecto, son solicitudes de "dormir" de Unix.

El actual IBM Mainframe Runtime (Language Environment (LE)) proporciona comunicación entre idiomas, y los servicios de CEE3DLY LE se muestran en otro ejemplo, Uso del servicio de retardo de subprocesos de z / OS Language Environment .

ILBOWAT0 ha existido por mucho tiempo (quizás más de 40 años), y todavía puedes encontrarlo. Su uso debe ser reemplazado por CEE3DLY o BXP1SLP, lo que sea más apropiado para el requisito particular.

A veces, necesita hacer que un programa se duerma, o hacer que un Trabajo se duerma por un tiempo (después de un paso de FTP o NDM), que generalmente se ejecutan como trabajos separados, y tendría que estar en modo de suspensión / bucle buscando los conjuntos de datos resultantes.

Aquí hay un pequeño y lindo programa COBOL para realizar dicha tarea, llamando a los programas de suspensión COBOL disponibles en OS / VS y quizás en otros entornos operativos heredados y de mainframe actuales.

       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     .

forma de microfoco

Para Microfocus, utiliza la API "SleepEx". Como ejemplo;

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.

Uso del servicio de retardo de subprocesos del entorno de idioma de z / OS

Puede llamar al servicio CEE3DLY en modo de 24-31 o 64 bits para retrasar una tarea al segundo más cercano. Es guardar CICS y solo retrasará el hilo.

Un ejemplo:

    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.

Puedes ver más detalles aquí:

Servicios invocables de IBM Language Environment - Suspender



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow