Programa COBOL usando ponteiro de memória
Salve jovem padawan, nesta inspirada sexta-feira resolvi explorar um tema um pouco mais complexo.
Em minhas aulas sinto uma certa dificuldade em apresentar o tema, às vezes, a explicação acaba confundindo ainda mais. Por isso nada melhor que colocarmos a mão na massa, digo no teclado.
Relebrando conceitos
SET - O comando SET designa um valor para uma referência COBOL.
ADDRESS - Método simples de obter capacidade de endereçamento para áreas de dados de memoria definidas na LINKAGE SECTION usando variáveis de ponteiro e o registro especial ADDRESS
Programa COBOL120.
O programa COBOL120 é bem interessante, no DATA DIVISION teremos duas áreas de memórias distintas:
- Working Storage Section
- Linkage Section
As variáveis na Working são do gênero Grupo com 4 variáveis do tipo string e inicializadas com valores. Um ponteiro de memória e um índice contador.
Na Linkage temos uma Tabela interna com string de 4 bytes e com 4 ocorrências.
Processamento
O código é simples, contem alguns displays, dois laço Perform Varying e comandos SET e Address of, para capturar o endereço da memória e alocar na nova variáveis. Ao final faço novo display mostrando a tabela inicializada sem MOVE/ACCEPT/REDEFINES.
*****************************************************************
* DATA : 06/09/2024
* AUTOR : VAGNER RENATO BELLACOSA
* OBJETIVO : PROGRAMA EXEMPLO ARQUIVO QSAM LOOP
* USO DE ENDERECO DE MEMORIA E TABELA INTERNA
* USO DE ALOCACAO DINAMICA
* CPD : INEFE
*****************************************************************
IDENTIFICATION DIVISION.
*************************
PROGRAM-ID. COBOL120.
AUTHOR. VAGNER BELLACOSA.
DATE-WRITTEN. 06/09/24 @ 21:18:00.
DATE-COMPILED. 2024-09-06.
SECURITY. TESTE INEFE
INSTALLATION. INEFE MARIST
**********************
ENVIRONMENT DIVISION.
**********************
*
CONFIGURATION SECTION.
*
SOURCE-COMPUTER. IBM-I.
OBJECT-COMPUTER. IBM-I.
SPECIAL-NAMES. DECIMAL-POINT IS COMMA.
*
INPUT-OUTPUT SECTION.
*
***************
DATA DIVISION.
***************
*
WORKING-STORAGE SECTION.
*
01 WORK-AREA.
05 WSS-DATA1 PIC X(4) VALUE 'AAAA'.
05 WSS-DATA2 PIC X(4) VALUE 'BBBB'.
05 WSS-DATA3 PIC X(4) VALUE 'CCCC'.
05 WSS-DATA4 PIC X(4) VALUE 'ZZZZ'.
*
77 WSS-PTR POINTER.
77 WSS-IDX PIC 9.
*
LINKAGE SECTION.
*
01 TBL-DATA.
05 TBL-DATA-ALPHA PIC X(4) OCCURS 4 TIMES.
*
********************
PROCEDURE DIVISION. 00210000
********************
DISPLAY ' '
DISPLAY ' '
DISPLAY ' COBOL120'
DISPLAY ' USO DE TABELA INTERNA E MOVIMENTACAO POR PONTEIRO'
DISPLAY ' DE MEMORIA.'
DISPLAY ' '
*
DISPLAY ' TABELA INICIAL - VAZIA'.
DISPLAY ' '.
PERFORM VARYING WSS-IDX FROM 1 BY 1
UNTIL WSS-IDX > 4
DISPLAY ' TBL-DATA-ALPHA [' WSS-IDX '] = '
TBL-DATA-ALPHA(WSS-IDX)
END-PERFORM.
DISPLAY ' '.
*
SET WSS-PTR TO ADDRESS OF WORK-AREA.
SET ADDRESS OF TBL-DATA TO WSS-PTR.
*
DISPLAY ' RECEBI O MESMO ENDERECO DA WORKING'
DISPLAY ' TABELA INTERNA INICIALIZADA PELO ADDRESS E SET'
DISPLAY ' '.
PERFORM VARYING WSS-IDX FROM 1 BY 1
UNTIL WSS-IDX > 4
DISPLAY ' TBL-DATA-ALPHA [' WSS-IDX '] = '
TBL-DATA-ALPHA(WSS-IDX)
END-PERFORM.
DISPLAY ' '.
STOP RUN.
END PROGRAM COBOL120.
********************** FIM PROGRAMA **************************** Como funciona.
- SET WSS-PTR TO ADDRESS OF WORK-AREA.
O comando acima obtém o ponteiro de memória da WORK-AREA e aloca na variável WSS-PTR.
- SET ADDRESS OF TBL-DATA TO WSS-PTR.
No segundo comando SET ADDRESS atribui o endereço do ponteiro na tabela TBL-DATA, que a partir de agora tem o mesmo conteúdo das variáveis.
PERFORM VARYING WSS-IDX FROM 1 BY 1
UNTIL WSS-IDX > 4
DISPLAY ' TBL-DATA-ALPHA [' WSS-IDX '] = '
TBL-DATA-ALPHA(WSS-IDX)
END-PERFORM.Esse laço lista todas as ocorrencias da Tabela Interna na Sysout.
Espero ter ajudado.
Sem comentários:
Enviar um comentário