|
Enterprise COBOL for z/OS, Version 4.2, Programming Guide
Este exemplo mostra como você pode codificar chamadas estáticas e dinâmicas.
O exemplo tem três partes:
- Código que usa uma chamada estática para chamar um subprograma
- Código que usa uma chamada dinâmica para chamar o mesmo subprograma
- O subprograma que é chamado pelos dois tipos de chamadas
O exemplo a seguir mostra como você codificaria chamadas estáticas:
PROCESS NODYNAM NODLL
IDENTIFICATION DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 RECORD-2 PIC X. (6)
01 RECORD-1. (2)
05 PAY PICTURE S9(5)V99.
05 HOURLY-RATE PICTURE S9V99.
05 HOURS PICTURE S99V9.
. . .
PROCEDURE DIVISION.
CALL "SUBPROG" USING RECORD-1. (1)
CALL "PAYMASTR" USING RECORD-1 RECORD-2. (5)
STOP RUN.
O exemplo a seguir mostra como você codificaria chamadas dinâmicas:
DATA DIVISION.
WORKING-STORAGE SECTION.
77 PGM-NAME PICTURE X(8).
01 RECORD-2 PIC x. (6)
01 RECORD-1. (2)
05 PAY PICTURE S9(5)V99.
05 HOURLY-RATE PICTURE S9V99.
05 HOURS PICTURE S99V9.
. . .
PROCEDURE DIVISION.
. . .
MOVE "SUBPROG" TO PGM-NAME.
CALL PGM-NAME USING RECORD-1. (1)
CANCEL PGM-NAME.
MOVE "PAYMASTR" TO PGM-NAME. (4)
CALL PGM-NAME USING RECORD-1 RECORD-2. (5)
STOP RUN.
O exemplo a seguir mostra um subprograma chamado que é chamado por cada um dos dois programas de chamada anteriores:
IDENTIFICATION DIVISION.
PROGRAM-ID. SUBPROG.
DATA DIVISION.
LINKAGE SECTION.
01 PAYREC. (2)
10 PAY PICTURE S9(5)V99.
10 HOURLY-RATE PICTURE S9V99.
10 HOURS PICTURE S99V9.
77 PAY-CODE PICTURE 9. (6)
PROCEDURE DIVISION USING PAYREC. (1)
. . .
EXIT PROGRAM. (3)
ENTRY "PAYMASTR" USING PAYREC PAY-CODE. (5)
. . .
GOBACK. (7)
- (1)
- O processamento começa no programa de chamada.
Quando a primeira instrução CALL é executada, o controle é transferido para a primeira instrução de PROCEDURE DIVISION em SUBPROG, que é o programa chamado.
Em cada uma das instruções CALL, o operando da primeira opção USING é identificado como RECORD-1.
- (2)
- Quando SUBPROG recebe o controle, os valores em RECORD-1 são disponibilizados para SUBPROG; no entanto, em SUBPROG, eles são chamados de PAYREC.
As sequências de caracteres PICTURE em PAYREC e PAY-CODE contêm o mesmo número de caracteres que RECORD-1 e RECORD-2, embora as descrições não sejam idênticas.
- (3)
- Quando o processamento em SUBPROG atinge a instrução EXIT PROGRAM, o controle é retornado ao programa de chamada.
O processamento continua naquele programa até que a segunda instrução CALL seja emitida.
- (4)
- No exemplo de um programa chamado dinamicamente, porque a segunda instrução CALL se refere a outro ponto de entrada em SUBPROG, uma instrução CANCEL é emitida
antes da segunda instrução CALL.
- (5)
- Com a segunda instrução CALL no programa de chamada, o controle é novamente transferido para SUBPROG, mas desta vez o processamento começa na instrução seguinte
à instrução ENTRY em SUBPROG.
- (6)
- Os valores em RECORD-1 são novamente disponibilizados para PAYREC.
Além disso, o valor em RECORD-2 agora é disponibilizado para SUBPROG por meio do operando USING correspondente, PAY-CODE.
Quando o controle é transferido pela segunda vez do programa vinculado estaticamente, SUBPROG é disponibilizado em seu último estado usado (ou seja, se algum
valor no armazenamento de SUBPROG foi alterado durante a primeira execução, esses valores alterados ainda estão em vigor).
Quando o controle é transferido do programa vinculado dinamicamente, no entanto, SUBPROG é disponibilizado em seu estado inicial, por causa da instrução CANCEL
que foi executada.
- (7)
- Quando o processamento atinge a instrução GOBACK, o controle é retornado ao programa de chamada na instrução imediatamente após a segunda instrução CALL.
Em qualquer execução do programa chamado e em qualquer um dos dois programas de chamada, se os valores em RECORD-1 forem alterados entre o momento da primeira CALL
e a segunda, os valores passados no momento da segunda instrução CALL serão valores alterados, não os originais.
Se quiser usar os valores originais, você deve salvá-los.
© Copyright IBM Corp.
|