Zoeken…


Opmerkingen

De COBOL CALL-instructie biedt toegang tot gecompileerde bibliotheekroutines.

voer hier de afbeeldingsbeschrijving in

CALL-verklaring

COBOL kan statische koppeling gebruiken voor de volgende verklaring. GnuCOBOL gebruikt standaard dynamische koppeling voor alle externe symbolen die bekend zijn tijdens het compileren, zelfs wanneer het symbool letterlijk is:

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

Deze verklaring dwingt compileren tijd link bewerken resolutie. (Niet standaard, syntax-extensie) :

CALL STATIC "subprogram" USING a b c

Velden in COBOL kunnen worden doorgegeven BY REFERENCE (de standaardinstelling, tot overschreven - overschrijvingen sticky in een volgorde van links naar rechts), BY CONTENT (een kopie wordt doorgegeven DOOR REFERENTIE), of in sommige gevallen rechtstreeks 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 is ontworpen als een BY REFERENCE taal, dus het gebruik van BY VALUE kan problemen opleveren. Letterlijke cijfers hebben bijvoorbeeld geen expliciet type en de COBOL-specificatie heeft geen expliciete regels voor typepromotie. Daarom moeten ontwikkelaars zich zorgen maken over de oproepframe-instellingen met BY VALUE van literals.

Zie http://open-cobol.sourceforge.net/faq/index.html#call voor meer informatie.

TIJD OM TE SLAPEN

CALL is ook een manier om de COBOL-functionaliteit uit te breiden en ook om de herbruikbaarheid van code mogelijk te maken. Het kan ook toegang geven tot "systeem" -functionaliteit.

Dit voorbeeld illustreert manieren om "slaap" -functionaliteit te bieden aan IBM Mainframe COBOLs. Houd er rekening mee dat de vereiste om dit te doen zeldzaam is in de mate dat meestal wanneer iemand denkt dat hij om een of andere reden moet "slapen", het verkeerd is om te doen.

ILBOWAT0 komt uit het oude COBOL-specifieke runtime-tijdperk op Mainframes. BXP1SLP en BXP4SLP zijn Unix System Services (USS) -routines die door elke taal kunnen worden gebruikt. Het zijn in feite Unix-slaapverzoeken.

De huidige IBM Mainframe Runtime (Language Environment (LE)) zorgt voor communicatie tussen de talen, en de CEE3DLY LE-services worden getoond in een ander voorbeeld, thread vertragingsservice met z / OS Language Environment gebruiken .

ILBOWAT0 bestaat al heel lang (misschien meer dan 40 jaar) en u kunt het nog steeds tegenkomen. Het gebruik ervan moet worden vervangen door CEE3DLY of BXP1SLP, afhankelijk van wat het meest geschikt is voor de specifieke vereiste.

Soms moet u ervoor zorgen dat een programma slaapt, of een Job een tijdje laat slapen (na een FTP- of NDM-stap), die meestal als afzonderlijke taken worden uitgevoerd, en u moet slapen / loop zoeken naar de resulterende datasets.

Hier is een schattig klein COBOL-programma om de genoemde taak uit te voeren en roept de COBOL-slaapprogramma's op die beschikbaar zijn in OS / VS en misschien in andere oudere en huidige mainframe-besturingsomgevingen.

       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 manier

Voor Microfocus gebruikt het de "SleepEx" API. Als voorbeeld;

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.

Gebruik van z / OS Taalomgeving thread-vertragingsservice

U kunt de CEE3DLY-service in 24- 31- of 64-bits modus bellen om een taak tot de dichtstbijzijnde seconde uit te stellen. Het is CICS opslaan en zal de thread alleen vertragen.

Een voorbeeld:

    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.

U kunt hier meer details zien:

IBM Language Environment Callable Services - Sleep



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow