- identifier-1, literal-1
- literal-1 deve ser um literal alfanumérico.
O identifier-1 deve ser um item de dados alfanumérico, alfabético ou numérico descrito em USAGE DISPLAY, para que seu valor possa ser um nome de programa.
As regras de formação para nomes de programas dependem da opção do compilador PGMNAME.
Para obter detalhes, consulte a discussão dos nomes de programas no parágrafo PROGRAM-ID e também a descrição de PGMNAME no Enterprise COBOL Programming Guide.
Nota de uso: Não especifique o nome de uma classe ou método na instrução CALL.
- procedure-pointer-1
- Deve ser definido com USAGE IS PROCEDURE-POINTER e deve ser definido como um ponto de entrada válido do programa; caso contrário, os resultados da instrução
CALL serão indefinidos.
Depois que um programa é cancelado pelo COBOL, liberado por PL / I ou C ou excluído pelo assembler, qualquer ponteiro de procedimento definido no ponto de
entrada desse programa não é mais válido.
- function-pointer-1
- Deve ser definido com USAGE IS FUNCTION-POINTER e deve ser definido como uma função ou ponto de entrada do programa válido; caso contrário, os resultados da
instrução CALL serão indefinidos.
Após um programa ter sido cancelado pelo COBOL, liberado por PL / I ou C ou excluído pelo assembler, qualquer ponteiro de função que foi definido para essa
função ou ponto de entrada do programa não será mais válido.
Quando o subprograma chamado for inserido no início da PROCEDURE DIVISION, o literal-1 ou o conteúdo do identifier-1 deve especificar o nome do programa
do subprograma chamado.
Quando o subprograma chamado é inserido por meio de uma instrução ENTRY, o literal-1 ou o conteúdo do identifier-1 deve ser o mesmo que o nome especificado
na instrução ENTRY do subprograma chamado.
- USING
A frase USING especifica argumentos que são passados para o programa de destino.
Inclua a frase USING na instrução CALL apenas se houver uma frase USING no cabeçalho PROCEDURE DIVISION ou na instrução ENTRY através da qual o programa chamado
é executado.
O número de operandos em cada frase USING deve ser idêntico.
A sequência dos operandos na frase USING da instrução CALL e na frase USING correspondente no cabeçalho PROCEDURE DIVISION do subprograma chamado ou na instrução
ENTRY determina a correspondência entre os operandos usados pelos programas de chamada e chamada.
Essa correspondência é posicional.
Os valores dos parâmetros referenciados na frase USING da instrução CALL são disponibilizados para o subprograma chamado no momento em que a instrução CALL é
executada.
A descrição dos itens de dados no programa chamado deve descrever o mesmo número de posições de caracteres que a descrição dos itens de dados correspondentes no
programa de chamada.
As frases BY CONTENT, BY REFERENCE e BY VALUE se aplicam a parâmetros que os seguem até que outra frase BY CONTENT, BY REFERENCE ou BY VALUE seja encontrada.
BY REFERENCE será assumido se você não especificar uma frase BY CONTENT, BY REFERENCE ou BY VALUE antes do primeiro parâmetro.
- BY REFERENCE
Se a frase BY REFERENCE for especificada ou implícita para um parâmetro, o item de dados correspondente no programa de chamada ocupará a mesma área de
armazenamento que o item de dados no programa chamado.
- identifier-2
- Pode ser qualquer item de dados de qualquer nível na DATA DIVISION.
identifier-2 não pode ser um identificador de função.
Se estiver definido na LINKAGE SECTION ou FILE SECTION, você já deve ter fornecido a capacidade de endereçamento para o identifier-2 antes da chamada da
instrução CALL.
Você pode fazer isso codificando um dos seguintes itens:
- SET ADDRESS OF identifier-2 TO pointer
- PROCEDURE DIVISION USING
- ENTRY USING
- file-name-1
- Um nome de arquivo para um arquivo QSAM
- ADDRESS OF identifier-2
- o identifier-2 deve ser um item de nível 01 ou nível 77 definido na SEÇÃO LINKAGE.
- OMITTED
- Indica que nenhum argumento é passado.
- BY CONTENT
Se a frase BY CONTENT for especificada ou implícita para um parâmetro, o programa chamado não poderá alterar o valor desse parâmetro, conforme mencionado na frase
USING da instrução CALL, embora o programa chamado possa alterar o valor do item de dados referenciado pelo correspondente data- nome no cabeçalho PROCEDURE
DIVISION do programa chamado.
Alterações no parâmetro no programa chamado não afetam o argumento correspondente no programa de chamada.
- identifier-3
- Pode ser qualquer item de dados de qualquer nível na DATA DIVISION.
O identifier-3 não pode ser um identificador de função ou um grupo ilimitado.
Se definido na LINKAGE SECTION ou FILE SECTION, você já deve ter fornecido a capacidade de endereçamento para o identifier-3 antes da chamada da instrução
CALL.
Você pode fazer isso codificando uma das seguintes frases:
- SET ADDRESS OF identifier-3 TO pointer
- PROCEDURE DIVISION USING
- ENTRY USING
- literal-2
- Pode ser:
- Um literal alfanumérico
- Uma constante figurativa (exceto ALL literal ou NULL / NULLS)
- Um literal DBCS
- Um literal national
- LENGTH OF
- Para obter informações sobre o registro especial LENGTH OF, consulte LENGTH OF (special_registers).
- ADDRESS OF identifier-3
- O identifier-3 deve ser um item de dados de qualquer nível, exceto 66 ou 88, definido na LINKAGE SECTION, na WORKING-STORAGE SECTION, ou na LOCAL-STORAGE SECTION.
- OMITTED
- Indica que nenhum argumento é passado.
Para literais alfanuméricos, o subprograma chamado deve descrever o parâmetro como PIC X ( n ) USAGE DISPLAY, onde n é o número de caracteres no literal.
Para literais DBCS, o subprograma chamado deve descrever o parâmetro como PIC G ( n ) USAGE DISPLAY-1 ou PIC N ( n )com USAGE DISPLAY-1 implícito ou
explícito, em que n é o comprimento do literal.
Para literais nacionais, o subprograma chamado deve descrever o parâmetro como PIC N ( n )com USAGE NATIONAL implícito ou explícito, em que n é o comprimento
do literal.
- BY VALUE
A frase BY VALUE se aplica a todos os argumentos que se seguem até serem substituídos por outra frase BY REFERENCE ou BY CONTENT.
Se a frase BY VALUE for especificada ou implícita para um argumento, o valor do argumento será passado, não uma referência ao item de dados de envio.
O programa chamado pode modificar o parâmetro formal que corresponde ao argumento BY VALUE, mas essas alterações não afetam o argumento porque o programa
chamado tem acesso a uma cópia temporária do item de dados de envio.
Embora os argumentos BY VALUE sejam destinados principalmente à comunicação com programas não-COBOL (como C), eles também podem ser usados para invocações de
COBOL para COBOL.
Nesse caso, BY VALUE deve ser especificado ou implícito para o argumento na frase CALL USING e o parâmetro formal correspondente na frase PROCEDURE DIVISION USING.
- identifier-4
- Deve ser um item de dados elementar na DATA DIVISION.
Deve ser um dos seguintes itens:
- Binário (USAGE BINARY, COMP, COMP-4 ou COMP-5)
- Ponto flutuante (USAGE COMP-1 ou COMP-2)
- Ponteiro de função (USAGE FUNCTION-POINTER)
- Ponteiro (USAGE POINTER)
- Procedimento-ponteiro (USAGE PROCEDURE-POINTER)
- Referência de objeto (USAGE OBJECT REFERENCE)
- Um caractere alfanumérico de byte único (como PIC X ou PIC A)
- Um caráter national (PIC N), descrito como um item de dados elementar da categoria national.
Os seguintes itens também podem ser passados por VALUE:
- Item modificado por referência de USAGE DISPLAY e comprimento 1
- Item modificado por referência de USAGE NATIONAL e comprimento 1
- Registros especiais SHIFT-IN e SHIFT-OUT
- Registro especial LINAGE-COUNTER quando for USAGE BINARY
- ADDRESS OF identifier-4
- O identifier-4 deve ser um item de dados de qualquer nível, exceto 66 ou 88, definido na LINKAGE SECTION, na WORKING-STORAGE SECTION, ou na
LOCAL-STORAGE SECTION.
- LENGTH OF
- Um LENGTH OF registro especial passado por VALUE é tratado como um binário PIC 9 (9).
Para obter informações sobre o registro especial LENGTH OF, consulte LENGTH OF (Special Registres).
- literal-3
- Deve ser de um dos seguintes tipos:
- Um literal numérico
- Uma constante figurativa ZERO
- Um literal alfanumérico de um caractere
- Um literal nacional de um caractere
- Um caráter simbólico
- Uma constante figurativa de byte único
- SPACE
- QUOTE
- HIGH-VALUE
- LOW-VALUE
ZERO é tratado como um valor numérico; um zero binário de palavra completa é passado.
Se o literal-3 for um literal numérico de ponto fixo, ele deverá ter uma precisão de nove ou menos dígitos.
Nesse caso, uma representação binária de palavra completa do valor literal é passada.
Se literal-3 for um literal numérico de ponto flutuante, uma representação interna de ponto flutuante (COMP-2) de 8 bytes do valor será passada.
O literal-3 não deve ser um literal DBCS.
- RETURNING
- identifier-5
- O item de dados RETURNING, que pode ser qualquer item de dados definido na DATA DIVISION.
O valor de retorno do programa chamado é implicitamente armazenado no identifier-5 .
Você pode especificar a frase RETURNING para chamadas para funções escritas em COBOL, C ou em outras linguagens de programação que usem convenções de ligação em C.
Se você especificar a frase RETURNING em um subprograma CALL to COBOL:
- O subprograma chamado deve especificar a frase RETURNING no cabeçalho PROCEDURE DIVISION.
- identifier-5 e o identificador correspondente de PROCEDURE DIVISION RETURNING no programa de destino devem ter as mesmas cláusulas PICTURE, USAGE,
SIGN, SYNCHRONIZE, JUSTIFIED e BLANK WHEN ZERO (exceto que os símbolos de moeda da cláusula PICTURE podem diferir e os períodos e vírgulas podem ser trocados
devido à cláusula DECIMAL POINT IS COMMA).
Quando o destino retorna, seu valor de retorno é atribuído ao identificador-5 usando as regras para a instrução SET se o identificador-6 for útil INDEX,
POINTER, FUNCTION-POINTER, PROCEDURE-POINTER ou OBJECT REFERENCE Quando o identifier-5 é de qualquer outro uso, as regras para a instrução MOVE são usadas.
O item de dados CALL ... RETURNING é um parâmetro somente de saída.
Na entrada para o programa chamado, o estado inicial do item de dados PROCEDURE DIVISION RETURNING possui um valor indefinido e imprevisível.
Você deve inicializar o item de dados PROCEDURE DIVISION RETURNING no programa chamado antes de referenciar seu valor.
O valor que é passado de volta ao programa de chamada é o valor final do item de dados PROCEDURE DIVISION RETURNING quando o programa chamado retorna.
Nota: Se um programa COBOL retornar um item binário de palavra dupla por meio de um cabeçalho PROCEDURE DIVISION RETURNING para um programa COBOL de chamada com
uma instrução CALL ... RETURNING, ocorrerá um problema se apenas um dos programas for recompilado com o Enterprise COBOL V5.
Os programas chamados e de chamada devem ser recompilados com o Enterprise COBOL V5 juntos, para que a convenção de vinculação do item RETURNING seja consistente.
Se ocorrer uma exceção ou excesso de fluxo, o identifier-5 não será alterado.
O identifier-5 não deve ser modificado por referência.
O registro especial RETURN-CODE não é definido pela execução de instruções CALL que incluem a frase RETURNING.
- ON EXCEPTION
- Uma condição de exceção ocorre quando o subprograma chamado não pode ser disponibilizado.
Nesse momento, uma das duas ações a seguir ocorrerá:
- Se a frase ON EXCEPTION for especificada, o controle será transferido para imperative-statement-1 .
A execução continua de acordo com as regras para cada instrução especificada na imperative-statement-1 .
Se uma ramificação de procedimento ou instrução condicional que causa transferência explícita de controle for executada, o controle será transferido de
acordo com as regras para essa instrução.
Caso contrário, após a conclusão da execução da imperative-statement-1 , o controle será transferido para o final da instrução CALL e a frase NOT ON
EXCEPTION, se especificada, será ignorada.
- Se a frase ON EXCEPTION não for especificada na instrução CALL, a frase NOT ON EXCEPTION, se especificada, será ignorada.
- NOT ON EXCEPTION
- Se uma condição de exceção não ocorrer (ou seja, o subprograma chamado pode ser disponibilizado), o controle será transferido para o programa chamado.
Depois que o controle é retornado do programa chamado, o controle é transferido para:
- imperative-statement-2 , se a frase NOT ON EXCEPTION for especificada.
- O final da instrução CALL em qualquer outro caso. (Se a frase ON EXCEPTION for especificada, ela será ignorada.)
Se o controle for transferido para a imperative-statement-2 , a execução continuará de acordo com as regras para cada instrução especificada na
imperative-statement-2 .
Se uma ramificação de procedimento ou instrução condicional que causa transferência explícita de controle for executada, o controle será transferido de acordo
com as regras para essa instrução.
Caso contrário, após a conclusão da execução da imperative-statement-2 , o controle é transferido para o final da instrução CALL.
- ON OVERFLOW
- A frase ON OVERFLOW tem o mesmo efeito que a frase ON EXCEPTION.
- END-CALL
- Esse terminador de escopo explícito serve para delimitar o escopo da instrução CALL.
END-CALL permite que uma instrução CALL condicional seja aninhada em outra instrução condicional.
END-CALL também pode ser usado com uma instrução CALL imperativa.