Ricerca…


Osservazioni

L'istruzione COBOL CALL fornisce l'accesso alle routine di libreria compilate.

inserisci la descrizione dell'immagine qui

Dichiarazione di CHIAMATA

COBOL può utilizzare il collegamento statico per la seguente dichiarazione. GnuCOBOL utilizza il collegamento dinamico per impostazione predefinita per tutti i simboli esterni noti al momento della compilazione, anche quando il simbolo è letterale:

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

Questa affermazione impone la risoluzione di modifica del collegamento al tempo di compilazione. (Estensione standard, non sintassi) :

CALL STATIC "subprogram" USING a b c

I campi in COBOL possono essere passati BY REFERENCE (l'impostazione predefinita, fino a quando non viene sovrascritta - le sostituzioni sono sticky in un ordine da sinistra a destra), BY CONTENT (una copia viene passata DA RIFERIMENTO), o in alcuni casi direttamente 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 è progettato per essere un linguaggio BY REFERENCE , pertanto l'utilizzo di BY VALUE può presentare problemi. Ad esempio, i valori numerici letterali non hanno un tipo esplicito e la specifica COBOL non ha regole di promozione del tipo esplicito. Pertanto gli sviluppatori devono preoccuparsi della configurazione del frame di chiamata con BY VALUE di letterali.

Vedi http://open-cobol.sourceforge.net/faq/index.html#call per maggiori dettagli.

TEMPO DI DORMIRE

CALL è anche un modo per estendere la funzionalità COBOL e anche per consentire la riusabilità del codice. Può anche dare accesso alle funzionalità di "sistema".

Questo esempio illustra come fornire funzionalità "sleep" ai COBOL IBM Mainframe. Tieni presente che l'obbligo di farlo è raro nella misura in cui, di solito, quando qualcuno pensa di aver bisogno di "dormire" per qualche motivo, è la cosa sbagliata da fare.

ILBOWAT0 proviene dalla vecchia era di runtime COBOL specifica su mainframe. BXP1SLP e BXP4SLP sono routine di Unix System Services (USS) che possono essere utilizzate da qualsiasi lingua. Effettivamente sono richieste di "sonno" Unix.

L'attuale IBM Mainframe Runtime (Language Environment (LE)) prevede la comunicazione tra le lingue ei servizi CEE3DLY LE sono mostrati in un altro esempio, utilizzando il servizio di ritardo del thread Ambiente linguaggio z / OS .

ILBOWAT0 è in circolazione da moltissimo tempo (forse più di 40 anni) e potresti ancora incontrarlo. Il suo uso dovrebbe essere sostituito da CEE3DLY o BXP1SLP, a seconda di quale sia il più appropriato per il particolare requisito.

A volte è necessario far dormire un programma o far dormire un lavoro per un po '(dopo un passaggio FTP o NDM), che di solito vengono eseguiti come processi separati e sarà necessario eseguire il sleep / loop alla ricerca dei set di dati risultanti.

Ecco un simpatico piccolo programma COBOL per svolgere tale compito, chiamando i programmi di sospensione COBOL disponibili in OS / VS e forse in altri ambienti operativi legacy e attuali del mainframe.

       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     .

modo microfocus

Per Microfocus, utilizza l'API "SleepEx". Come esempio;

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.

Utilizzo del servizio di ritardo del thread Ambiente linguaggio z / OS

È possibile chiamare il servizio CEE3DLY in modalità 24- 31 o 64 bit per ritardare un'attività al secondo più vicino. È il salvataggio di CICS e ritarderà solo il thread.

Un esempio:

    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.

Puoi vedere più dettagli qui:

IBM Language Environment Callable Services - Sleep



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow