COBOL - Comando SET - www.cadcobol.com.br



Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

SET

A instrução SET é usada para executar uma operação.

As operações são:

  • Colocando valores associados aos elementos da tabela em índices associados aos nomes de índices
  • Incrementando ou decrementando um número de ocorrência
  • Configurando o status de um switch externo para ON ou OFF
  • Movendo dados para nomes de condição para tornar as condições verdadeiras
  • Configurando itens de dados USAGE POINTER para um endereço de dados
  • Configurando itens de dados do USAGE PROCEDURE-POINTER para um endereço de entrada
  • Definir itens de dados USAGE FUNCTION-POINTER para um endereço de entrada
  • Configurando itens de dados USAGE OBJECT REFERENCE para se referir a uma instância do objeto

Os Index-names estão relacionados a uma determinada tabela através da frase INDEXED BY da cláusula OCCURS; eles não estão mais definidos no programa.

Quando os campos de envio e recebimento em uma instrução SET compartilham parte de seu armazenamento (ou seja, os operandos se sobrepõem), o resultado da execução dessa instrução SET é indefinido.


SET - Formato 1

Quando essa instrução SET é executada, o valor atual do campo de recebimento é substituído pelo valor do campo de envio (com conversão).

index-name-1
Campo de recebimento.
Deve nomear um índice especificado na frase INDEXED BY de uma cláusula OCCURS.

identifier-1
Campo de recebimento.
Deve nomear um item de dados de índice ou um item inteiro numérico elementar.
Um campo de recebimento não pode ser um campo de data em janela.

index-name-2
Campo de envio.
Deve nomear um índice especificado na frase INDEXED BY de uma cláusula OCCURS.
O valor do índice antes da execução da instrução SET deve corresponder a um número de ocorrência da sua tabela associada.

identifier-2
Campo de envio.
Deve nomear um item de dados de índice ou um item inteiro numérico elementar.
Um campo de envio não pode ser um campo de data em janela.

integer-1
Campo de envio.
Deve ser um número inteiro positivo.

A tabela a seguir mostra combinações válidas de campos de envio e recebimento em uma instrução SET formato 1.

Campo de envio Campo de recebimento do nome do índice Campo de recebimento do item de dados do índice Campo de recebimento de item de dados inteiro
Nome do índice * Válido Válido ** Válido
Item de dados do índice * Válido ** Válido ** Inválido
Item de dados inteiro Válido Inválido Inválido
Literal inteiro Válido Inválido Inválido
* Um nome de índice refere-se a um índice nomeado na frase INDEXED BY de uma cláusula OCCURS.
Um item de dados de índice é definido com a cláusula USAGE IS INDEX.

** Nenhuma conversão ocorre.

Os campos de recebimento são tratados na ordem da esquerda para a direita em que são especificados.
Qualquer subscrição ou indexação associada ao identifier-1 é avaliada imediatamente antes da ação do campo de recebimento.

O valor usado para o campo de envio é o valor no início da execução da instrução SET.

O valor de um índice após a execução de uma instrução SEARCH ou PERFORM pode ser indefinido; portanto, use uma instrução SET formato 1 para reinicializar esses índices antes de tentar outras operações de manipulação de tabela.

Se o index-name-2 for para uma tabela que possui um item subordinado que contém uma cláusula OCCURS DEPENDING ON, os valores indefinidos podem ser recebidos no identifier-1 .


SET - Formato 2

Quando essa instrução SET é executada, o valor do índice de recebimento é aumentado (UP BY) ou diminuído (DOWN BY) por um valor que corresponde ao valor no campo de envio.

O campo de recebimento é um índice especificado por index-name-3 .
O valor do índice antes e depois da execução da instrução SET deve corresponder a um número de ocorrência em uma tabela associada.

O campo de envio pode ser especificado como identifier-3 , que deve ser um item de dados inteiro elementar ou como número integer-2 , que deve ser um número inteiro diferente de zero.
O identifier-3 não pode ser um campo de data em janela.

Quando a instrução SET formato 2 é executada, o conteúdo do campo de recebimento é aumentado (UP BY) ou diminuído (DOWN BY) por um valor que corresponde ao número de ocorrências representadas pelo valor do identifier-3 ou do número integer-2 .
Os campos de recebimento são tratados na ordem da esquerda para a direita em que são especificados.
O valor do campo de incremento ou decremento no início da execução da instrução SET é usado para todos os campos de recebimento.

Se index-name-3 for para uma tabela que possui um item subordinado que contém uma cláusula OCCURS DEPENDING ON e se o objeto ODO for alterado antes de executar uma instrução SET do formato 2, o index-name-3 não poderá conter um valor que corresponde a um número de ocorrência da sua tabela associada.


SET - Formato 3

Quando esse formato da instrução SET é executado, o status de cada comutador externo associado ao nome mnemônico especificado é ativado ou desativado.

mnemonic-name-1
Deve estar associado a um comutador externo (switch), cujo status pode ser alterado.

SET - Formato 4

Quando esse formato da instrução SET é executado, o valor associado a um nome da condição é colocado em sua variável condicional de acordo com as regras da cláusula VALUE.

condition-name-1
Deve estar associado a uma variável condicional.

Se mais de um literal for especificado na cláusula VALUE da condition-name-1 , sua variável condicional associada será configurada igual ao primeiro literal.

Se vários nomes de condições forem especificados, os resultados serão os mesmos que se uma instrução SET separada tivesse sido gravada para cada nome de condição na mesma ordem em que são especificados na instrução SET.


SET - Formato 5

Quando esse formato da instrução SET é executado, o valor atual do campo de recebimento é substituído pelo valor do endereço contido no campo de envio.

identifier-4
Recebendo campos.
Deve ser descrito como USAGE IS POINTER.

ADDRESS OF identifier-5
Recebendo campos.
o identifier-5 deve ter itens de nível 01 ou nível 77 definidos na seção de ligação.
Os endereços desses itens são definidos para o valor do operando especificado na frase TO.
O identifier-5 não deve ser modificado por referência.

identifier-6
Campo de envio.
Deve ser descrito como USAGE IS POINTER.
Não pode conter um endereço na working-storage section, file section, or local-storage section do próprio programa.

ADDRESS OF identifier-7
Campo de envio. identificador-7 deve nomear um item de qualquer nível, exceto 66 ou 88 na working-storage section, file section, or local-storage section.
ADDRESS OF identifier-7 contém o endereço do identificador, e não o conteúdo do identificador.

NULL , NULLS
Campo de envio.
Define o campo de recebimento para conter o valor de um endereço inválido.

A tabela a seguir mostra combinações válidas de campos de envio e recebimento em uma instrução SET no formato 5.

Campo de envio USAGE IS POINTER campo de recebimento ENDEREÇO DO campo de recebimento NULL / NULLS campo de recebimento
USAGE IS POINTER Válido Válido ** Inválido
ADDRESS OF Válido ** Válido ** Inválido
NULL/NULLS Válido Válido Inválido

SET - Formato 6

Quando esse formato da instrução SET é executado, o valor atual do campo de recebimento é substituído pelo valor do endereço especificado pelo campo de envio.

Em tempo de execução, ponteiros de função (function-pointers) e ponteiros de procedimento (procedure-pointers) podem fazer referência ao endereço do ponto de entrada principal de um programa COBOL, um ponto de entrada alternativo em um programa COBOL ou um ponto de entrada em um programa não-COBOL; ou eles podem ser nulos (NULL).

Ponteiros de função COBOL são mais facilmente usados do que ponteiros de procedimento para inter-operação com funções C.

procedure-pointer-data-item-1, procedure-pointer-data-item-2
Deve ser descrito como USAGE IS PROCEDURE POINTER. procedure-pointer-data-item-1 é um campo de recebimento; procedure-pointer-data-item-2 é um campo de envio.

function-pointer-data-item-1, function-pointer-data-item-2
Deve ser descrito como USAGE IS FUNCTION-POINTER. function-pointer-data-item-1 é um campo de recebimento; function-pointer-data-item-2 é um campo de envio.

identifier-8
Deve ser definido como um item alfabético ou alfanumérico, para que o valor possa ser um nome de programa.
Para mais informações, consulte o parágrafo PROGRAM-ID .
Para pontos de entrada em programas não-COBOL, o identifier-8 pode conter os caracteres @ , # e, $.

literal-1
Deve ser alfanumérico e deve estar em conformidade com as regras para formação de nomes de programas.
Para detalhes sobre regras de formação, consulte a discussão sobre o nome do programa no parágrafo PROGRAM-ID .

identifier-8 ou literal-1 deve se referir a um dos seguintes tipos de pontos de entrada:
  • O ponto de entrada principal de um programa COBOL, conforme definido no parágrafo PROGRAM-ID.
    O ID do PROGRAMA deve fazer referência ao programa mais externo de uma unidade de compilação; ele não deve fazer referência a um programa aninhado.
  • Um ponto de entrada alternativo de um programa COBOL, conforme definido por uma instrução COBOL ENTRY.
  • Um ponto de entrada em um programa não-COBOL.
O nome do programa referenciado pela instrução SET ... TO ENTRY pode ser afetado pela opção do compilador PGMNAME.

NULL , NULLS
Define o campo de recebimento para conter o valor de um endereço inválido.

pointer-data-item-3
Deve ser definido com USAGE POINTER.
Você deve definir o pointer-data-item-3 em um programa não-COBOL para apontar para um ponto de entrada válido do programa.

Exemplo de interoperabilidade COBOL / C

O exemplo a seguir demonstra uma COBOL CALL para uma função C que retorna um ponteiro de função para um serviço, seguido por uma COBOL CALL para o serviço:

       IDENTIFICATION DIVISION.
       PROGRAM-ID DEMO.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 FP USAGE FUNCTION-POINTER.

       PROCEDURE DIVISION.
           CALL "c-function" RETURNING FP.
           CALL FP.

SET - Formato 7

Quando esse formato da instrução SET é executado, o valor no item de recebimento é substituído pelo valor no item de envio.

O object-reference-id-1 e o object-reference-id-2 devem ser definidos como USAGE OBJECT REFERENCE.
object-reference-id-1 é o item de recebimento e object-reference-id-2 é o item de envio.
Se object-reference-id-1 for definido como uma referência de objeto de uma determinada classe (definida como "USAGE OBJECT REFERENCE class-name"), object-reference-id-2 deve ser uma referência de objeto da mesma classe ou classe derivado dessa classe.

Se a constante figurativa NULL for especificada, o objeto de object-reference-id-1 será definido como o valor NULL.

Se SELF for especificado, a instrução SET deverá aparecer na divisão do procedimento de um método.
object-reference-id-1 é definido para referenciar o objeto no qual o método atualmente em execução foi chamado.