Translate

segunda-feira, 11 de agosto de 2025

Programa COBOL usando ponteiro de memória

 

Programa COBOL usando ponteiro de memória

4,424 followers

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:


  1. Working Storage Section
  2. 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.


Article content


  • 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.


Article content
 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.


domingo, 10 de agosto de 2025

Principais Erros do CICS e Suas Possíveis Soluções

 

Principais Erros do CICS e Suas Possíveis Soluções

4,424 followers

Salve jovem padawan, na aula de hoje, entre muitos abends da transação de teste no CICS de desenvolvimento, fiquei pensativo em como ajudar minha turma, deste pensamento, após um loop que quase derrubou o CICS, mapset faltante, conteiner inexistente, erro de logica na navegação. Resolvi criar um mini tour, sobre os erros mais comuns e possiveis soluções.

Introdução

O CICS (Customer Information Control System) é um monitor de transações extremamente robusto e confiável, amplamente utilizado em ambientes corporativos com mainframes IBM. No entanto, como qualquer sistema complexo, ele pode gerar mensagens de erro que desafiam até os analistas mais experientes. Muitas vezes bugs simples, que causam grande dor de cabeça ao iniciante.

Neste artigo, vamos explorar os principais erros do CICS, o que significam, e como resolvê-los de forma prática. Se você é um dos alunos da formação, ira se recordar destes erros ocorridos na aula. Nosso trabalho de Analista de Sistemas e isso, sermos os Freuds do Sistema Z, identificando os erros e corrigindo, num trabalho de idas e vindas, com muita reviravolta.


🔧 1. APCT (Program Not Found)

🛑 Erro:

DFHAP0001 CICSTRN Transaction abended with abend code APCT.

📌 Causa:

O programa especificado na transação não foi encontrado ou não foi definido no CICS (via RDO ou CSD).

✅ Soluções:

  • Verifique se o programa foi definido corretamente via RDO (CEDA) ou no DFHCSD.
  • Confira se o programa foi link-editado como reentrant.
  • Assegure que o LOADLIB onde o programa reside esteja no DFHRPL.


🔧 2. AEI0 (Map Not Found)

🛑 Erro:

DFHAC2001 CICSTRN Transaction abended with abend code AEI0.

📌 Causa:

O mapa solicitado com o comando EXEC CICS SEND MAP não foi encontrado.

✅ Soluções:

  • Verifique se o mapa foi montado e link-editado corretamente.
  • Certifique-se de que o mapa está presente na biblioteca mapset associada ao CICS.
  • Use o comando CEDA DISPLAY MAPSET(...) para validar se o mapset está definido no CICS.


🔧 3. AEY9 (DB2 Not Available)

🛑 Erro:

DFHAC2001 CICSTRN Transaction abended with abend code AEY9.

📌 Causa:

Erro relacionado ao DB2, geralmente porque:

  • O DB2 está inativo;
  • A thread não está alocada corretamente;
  • A autorização RACF está faltando.

✅ Soluções:

  • Verifique o status da conexão DB2/CICS com DSNC DISPLAY THREAD.
  • Certifique-se de que o usuário da transação tem permissão RACF para acessar o plano do DB2.
  • Verifique se o recurso está definido com o parâmetro correto no RDO (DB2ENTRY, DB2TRAN).


🔧 4. AEIP (Security Violation)

🛑 Erro:

DFHAC2001 CICSTRN Transaction abended with abend code AEIP.

📌 Causa:

Violação de segurança – usuário sem permissão para a transação, recurso, ou dataset.

✅ Soluções:

  • Analise o log do RACF (SMF 80 ou comandos SEARCH CLASS(...)) para identificar a violação.
  • Verifique as regras no RACF para a transação (TCICSTRN, PROGRAM, DATASET, etc).
  • Utilize RACFIND ou RACROUTE para testes com permissões temporárias.


🔧 5. AEZC (Web Service Error)

🛑 Erro:

DFHAC2001 CICSTRN Transaction abended with abend code AEZC.

📌 Causa:

Erro durante invocação ou resposta de um CICS Web Service.

✅ Soluções:

  • Verifique os arquivos PIPELINE e as definições de WEBSERVICE.
  • Analise os logs do SIT (System Initialization Table) para mensagens associadas ao WS.
  • Revise o SOAPMessage para erros de XML/SOAP malformado.


🔧 6. ASRA (Program Check - ABEND 0Cxx)

🛑 Erro:

DFHAC2206 CICSTRN Transaction abended with abend code ASRA.

📌 Causa:

Erro de execução em linguagem de programação (COBOL/PLI) – divisão por zero, index inválido, etc.

✅ Soluções:

  • Execute um TRACE ou veja o auxiliary trace para identificar o ponto de falha.
  • Compile com TEST ou NOSSRANGE e utilize um debugger como CEEDUMP ou CEDF.
  • Avalie o uso de variáveis não inicializadas ou ponteiros incorretos.


🔧 7. AEIM (Invalid Request)

🛑 Erro:

DFHAC2001 CICSTRN Transaction abended with abend code AEIM.

📌 Causa:

Comando CICS inválido para o contexto (ex: RECEIVE fora de uma transação terminal).

✅ Soluções:

  • Revise a lógica do programa. Alguns comandos devem estar dentro de contexto apropriado.
  • Habilite CEDF para debug em tempo real da transação.


Extras: Outras Mensagens Comuns e Dicas

AEIO
Terminal indisponível
Use CEMT I TERM(...) para verificar o status

AEYD
Erro ao iniciar DB2
Reanalise parâmetros DB2ENTRY

AICA
Loop detectado no programa
Confirme presença de comandos EXEC CICS RETURN

ASRB
Interrupção por usuário (ex: ATTN)
Pode indicar travamento
Article content

Conclusão

Não entre em panico, os erros no CICS fazem parte do dia a dia de qualquer analista mainframe. A chave é entender o contexto do abend, dominar ferramentas como CEDF, CEEDUMP, CEDA, CEMT e manter boas práticas de logging e rastreamento.

Por isso é importante testar, fazer um check-list dos elementos a serem criados no CEDA, verificar a Instalação dos mesmo, usar o CEMT para atualizar as novas versões do executavel.

Ter muita, mas muita paciência, regados a café e no pior cenário, levante-se da cadeira, vá caminhar um pouco, relaxe e a solução surgirá na mente. Quando estiver muito difícil, consulte o manual da IBM, converse com colegas e chame o professor. Juntos iremos mais longe.

💡 Dica de ouro:

Mantenha uma tabela interna de erros recorrentes no seu ambiente, com soluções testadas e links de documentação. Isso acelera o diagnóstico e reduz o retrabalho.