Recherche…


Remarques

L'instruction COBOL CALL permet d'accéder aux routines de bibliothèque compilées.

entrer la description de l'image ici

Déclaration d'appel

COBOL peut utiliser un lien statique pour l'instruction suivante. GnuCOBOL utilise le lien dynamique par défaut pour tous les symboles externes connus au moment de la compilation, même si le symbole est un littéral:

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

Cette instruction force la résolution d'édition de la liaison temporelle de compilation. (Non standard, extension de syntaxe) :

CALL STATIC "subprogram" USING a b c

Les champs dans COBOL peuvent être transmis BY REFERENCE (la valeur par défaut, jusqu'à ce qu'elle soit remplacée - les remplacements sont sticky dans un ordre de gauche à droite), BY CONTENT (une copie est transmise PAR REFERENCE) ou dans certains cas directement 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 conçu pour être un langage BY REFERENCE , donc l'utilisation de BY VALUE peut présenter des problèmes. Par exemple, les nombres littéraux n'ont pas de type explicite et la spécification COBOL n'a pas de règles explicites de promotion du type. Par conséquent, les développeurs doivent s'inquiéter de la configuration du cadre d'appel avec BY VALUE des littéraux.

Voir http://open-cobol.sourceforge.net/faq/index.html#call pour plus de détails.

HEURE DE DORMIR

CALL est également un moyen d'étendre les fonctionnalités COBOL et également de permettre la réutilisation du code. Il peut également donner accès à la fonctionnalité "système".

Cet exemple illustre des manières de fournir des fonctionnalités de veille aux COBOL IBM Mainframe. Gardez à l'esprit que l'exigence de le faire est rare dans la mesure où, habituellement, lorsque quelqu'un pense avoir besoin de «dormir» pour une raison quelconque, c'est une erreur.

ILBOWAT0 est issu de l'ancienne période d'exécution spécifique à COBOL sur les mainframes. BXP1SLP et BXP4SLP sont des routines Unix System Services (USS) qui peuvent être utilisées par n'importe quel langage. Effectivement, ce sont des requêtes "sleep" Unix.

L'actuel IBM Mainframe Runtime (Language Environment) permet une communication inter-langage et les services CEE3DLY LE sont illustrés dans un autre exemple, Utilisation du service de délai des threads de z / OS Language Environment .

ILBOWAT0 existe depuis très longtemps (peut-être plus de 40 ans) et vous pouvez toujours le trouver. Son utilisation doit être remplacée par CEE3DLY ou BXP1SLP, selon ce qui convient le mieux à l'exigence particulière.

Parfois, vous devez mettre un programme en veille ou mettre un travail en veille pendant un certain temps (après une étape FTP ou NDM), qui sont généralement exécutés en tant que travaux distincts.

Voici un joli petit programme COBOL pour effectuer cette tâche, appelant les programmes de veille COBOL disponibles dans OS / VS et peut-être d'autres environnements d'exploitation mainframe existants et existants.

       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     .

manière de microfocus

Pour Microfocus, il utilise l'API "SleepEx". Par exemple;

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.

Utilisation du service de délai des threads de l'environnement de langage z / OS

Vous pouvez appeler le service CEE3DLY en mode 24-31 ou 64-bit pour retarder une tâche à la seconde près. C'est CICS save et ne retardera que le thread.

Un exemple:

    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.

Vous pouvez voir plus de détails ici:

IBM Language Environment Callable Services - Veille



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow