cobol
CALL-verklaring
Zoeken…
Opmerkingen
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