Translate

quarta-feira, 13 de agosto de 2025

🧾 BMS no CICS – A Arte de Conversar com o Usuário no Terminal

 

🧾 BMS no CICS – A Arte de Conversar com o Usuário no Terminal

4,424 followers

Salve jovem padawan, continuando nossas aula de CICS, vamos falar sobre as antigas interfaces de usuario, usando o Terminal 3270 e as telas de CICS em BMS (Assembly). Vamos entender o que eram, o que fazem e seu futuro em computação moderna.

Hoje temos webservices muito mais poderosos, o javascript, css e html 5, permitem criação de Front-end poderosos, bonitos com cores, ícones, sons e melhorias admiradas e desejadas pelos usuários, porém antes delas surgirem tudo era tela negra e letras verdes. Esse é o papel do BMS, hoje relegado, em sistemas legados e soluções, que serão migradas e evoluidas.

O BMS serviu bem seu papel, auxiliando na modernização dos processos em papel, para processos em informática, saber sobre BMS permite auxiliar em sua manutenção e possivel migração.

🏛️ O que é BMS?

BMS (Basic Mapping Support) é a linguagem do CICS para criar telas (ou maps) que serão exibidas em terminais 3270, através dos emuladores. Em um tempo onde interface gráfica era um sonho distante, o BMS era (e ainda é!) a ponte entre o usuário e os programas COBOL que rodam por trás das cortinas.

O BMS cuida de dois papéis fundamentais:

  • Montar a tela para o usuário (mapa de saída)
  • Coletar os dados digitados (mapa de entrada)


🧬 Origem Histórica

Lá pelos anos 70, a IBM percebeu que os desenvolvedores precisavam padronizar a forma de comunicação entre as aplicações e os terminais físicos. Ao invés de escrever código para cada modelo de terminal (e seus offsets malucos), surgiu o BMS como uma abstração amigável. Porém, difícil de programar, por isso criou um sistema simples de macro com somente 3 comandos, para construir essas telas. Ao longo das décadas foram criadas ferramentas para aumentar a produtividade e facilitar esse processo de criação.

É como se a IBM dissesse:

“Relaxa, cria um MAP que a gente cuida de conversar com o terminal!”

💡 Curiosidades que só quem viveu sabe

  • A extensão .MAP (ou .BMS) é traduzida por um assembler em três artefatos: MAP, DSECT, e COPYBOOK para uso no COBOL.
  • Existe o conceito de symbolic map, que permite que o programa COBOL leia e escreva dados usando nomes de campos legíveis como TELA1-NOMEI (entrada) e TELA1-NOMEO (saída) presentes num copybook/include a ser declarados no programa.
  • Um erro clássico de padawan é não alinhar corretamente o LENGTH com o tamanho do campo no MAP. Resultado? Truncamento e dor de cabeça!
  • Existem 3 formatos para mapset: physical map, symbolic map e BMS source.


📐 Estrutura do BMS

Um MAPSET básico tem esta carinha:

DFHMSD   TYPE=MAP, MODE=INOUT, STORAGE=AUTO, LANG=COBOL, TIOAPFX=YES
TELA1    DFHMDI  SIZE=(24,80)
         DFHMDF  POS=(5,10), LENGTH=10, ATTRB=ASKIP, INITIAL='NOME.....',    FIELD=NOME
         DFHMDF  POS=(5,25), LENGTH=20, ATTRB=UNPROT,                       FIELD=NOMEI
         DFHMSD  TYPE=FINAL

Tradução:

  • DFHMSD define o mapset
  • DFHMDI define o mapa
  • DFHMDF define cada campo
  • ATTRB controla comportamento (ASKIP = protegido, UNPROT = digitável)


🛠️ Dicas Práticas de Quem Já Apanhou

  1. Use COPYBOOKs/Includes gerados pelo BMS assembler no seu programa COBOL com COPY TELA1.
  2. TIOAPFX=YES permite acessar o cabeçalho do terminal (AID key, cursor position, etc).
  3. Quer bloquear um campo em tempo de execução? Altere dinamicamente o atributo de vídeo via COBOL.
  4. Utilize MAPONLY ou DATAONLY em EXEC CICS SEND/RECEIVE para performance otimizada.
  5. Campos HIDDEN (através de ATTRB=PROT, DARK) são ótimos para carregar dados invisíveis ao usuário.


🎯 Exemplo de Programa COBOL com BMS

EXEC CICS SEND MAP('TELA1')
    MAPSET('TELA1')
    CURSOR
END-EXEC.

EXEC CICS RECEIVE MAP('TELA1')
    MAPSET('TELA1')
END-EXEC.

IF TELA1-NOMEI (WS-MAPAREA) = SPACES
    DISPLAY 'Nome não informado'
ELSE
    DISPLAY 'Nome recebido: ', TELA1-NOMEI
END-IF.

🧙♂️ Bellacosa Tips: Segredos da Ordem Jedi do BMS

  • Evite MAPs com mais de 20 campos visíveis – isso sobrecarrega o terminal e confunde o usuário.
  • Use nomes padronizados, como XXXX-NOMEI, XXXX-IDADEI, etc., para facilitar manutenção.
  • Separe MAPSETS por tela/função, evitando mapsets monstruosos com dezenas de mapas.
  • Campos numéricos? Valide com COBOL antes de continuar – o BMS não impede letras em campos UNPROT.
  • Crie um painel no ISPF para gerar mapas BMS automaticamente com templates – produtividade voa!
  • Use e abuse das teclas PF-keys


📚 Conclusão

O BMS é uma joia do legado mainframe. Mesmo parecendo arcaico para os olhos modernos, ele ainda é a base de milhares de sistemas críticos em bancos, governos e indústrias. Dominar BMS é um dos passos para se tornar um Jedi no universo CICS.

Com este artigo, apresentei o legado, pensando no futuro, lembre-se que muitas instituições continuam a usar essa joia do legado, dedique-se a estudar, conhece-la melhor. Visite o site da IBM, inscreva-se nos cursos, aprenda e evolua.

Mais uma vez agradeço sua presença e estarei de olho nos comentarios, para melhorar ainda mais o conteúdo.


☕ Gostou do conteúdo?

Então siga o "Um Café no Bellacosa Mainframe" e compartilhe esse artigo com aquele colega que ainda sofre com o mapa que pisca na tela. 😅

💬 "Quem domina o BMS, domina a comunicação entre o COBOL e o mundo."

 




terça-feira, 12 de agosto de 2025

O que é Address Space?

 

O que é Address Space?

4,424 followers

Salve jovem padawan, prosseguindo em nossa jornada de descobrimento e compartilhamento de conhecimento, hoje escreverei sobre um tema dificil, tentarei ser claro e ajudar com exemplos fáceis de entender.

Em minhas aulas percebo que os alunos ficam confusos por ser um tema muito abstrato, porém de máxima importância para um desenvolvedor Mainframe, a questão da memória, lembrando que um Z17 tem 16 exabytes de endereço de memória disponível.

Ao codificar, devemos dominar o espaço, ser econômicos em seu uso e dar o máximo de performance para um programa, por isso entender o conceito ajudará bastante.

✅ O que é Address Space?

Um Address Space é um ambiente isolado de execução fornecido pelo z/OS para que um job, um programa ou uma tarefa rode com sua própria memória e recursos protegidos. Pense nele como um "container" de memória virtual onde o seu programa COBOL roda. Esse cointainer será alocado no DATA DIVISION do Cobol e o programa ao ser enviado para o processamento na CPU, reservará esse espaço para usar durante todo o processo.


🧠 Por que isso é importante para COBOL?

Quando você submete um job COBOL batch, ou inicia um programa via CICS, o sistema cria um address space para:

  • Carregar os programas COBOL compilados (load modules).
  • Alocar memória para as variáveis.
  • Abrir arquivos (datasets, VSAM, etc.).
  • Comunicar com o CICS, DB2 ou IMS.
  • Controlar segurança, permissões e acesso via RACF.
  • Garantir que um job não interfira em outro (isolamento de execução).

Esse espaço estará isolado de outras aplicações e protegido contra interferências durante todo o processamento dos dados, porém devemos criá-lo com cuidado. Afinal muitas outras aplicações criarão os delas, esse espaço tende a ser continuo e para seu uso mais racional, o endereçamento renumera em tempo de execução para 1 até o ultimo byte reservado.


📌 Tipos de Address Space comuns no ambiente z/OS:



Article content

Tipo de EspaçoDescriçãoJob Address SpaceCriado quando um JCL é submetido. Executa seu programa COBOL.TSO Address SpaceQuando um usuário entra via TSO (ISPF), um espaço é criado.CICS RegionCICS cria um espaço para executar programas COBOL online.STC (Started Task)Tasks como SDSF, VTAM ou WebSphere são address spaces.


🛠️ Dica prática para COBOListas

Se você estiver enfrentando erros de memória, como abend S0C4, S0C1, S80A, saiba que o problema pode estar relacionado à forma como o seu programa está usando (ou ultrapassando) os limites do Address Space.

Sempre recomendo o uso dos Bug traps do COBOL, nunca deixe de validar returns codes, sql codes e validar os valores resultantes. Evitando abends descontralados em tempo de execução.


💡 Curiosidade Bellacosa Mainframe:

Cada address space tem sua própria área de memória protegida, mas todos compartilham o mesmo sistema de I/O, JES e catálogo. O z/OS garante que um job de um programador "distraído" não corrompa o ambiente do colega — um isolamento que já existia décadas antes dos containers Docker!

💡 Conclusão

Esse artigo teve como objetivo fornecer os primeiros passos para o futuro Mainframer, mas para obter maiores conhecimentos recomendo visitar o site da IBM , ler os manuais e participar da comunidade para evoluir sempre.

Espero ter ajudado e contem comigo para mais artigos, participe de nossa comunidade.

Ajude-nos a evoluir sempre.

Obrigado.