1. ADDRESS — escolhendo o ambiente de execução
O REXX pode enviar comandos para diferentes ambientes. O ADDRESS define qual ambiente recebe os comandos que não são instruções REXX:
💡 Aspas simples nos comandos TSO
Sempre coloque o comando TSO entre aspas simples: ADDRESS TSO 'LISTCAT ...'. Sem aspas, o REXX tenta interpretar as palavras como instrução REXX em vez de passar para o TSO. Quando o comando contém nomes de datasets com aspas (ex.: LISTDS 'USUARIO.DS'), use aspas duplas ao redor e simples dentro: ADDRESS TSO "LISTDS 'USUARIO.DS'".
2. Capturando RC de comandos TSO
Após qualquer ADDRESS TSO, a variável especial RC contém o return code do comando. Use isso para tratar erros:
3. OUTTRAP — capturando saída de comandos
O OUTTRAP redireciona a saída de um comando TSO para um stem (array) REXX em vez de exibi-la na tela. Isso permite processar a saída programaticamente:
🦕 Analogia — OUTTRAP como pipe do shell
No Linux você faz ls | grep ".txt" para filtrar a saída de um comando. No REXX com OUTTRAP você faz o mesmo: captura a saída do comando TSO no stem, depois percorre o stem com um loop e filtra as linhas que interessam. É o modelo de "pipeline" do mainframe.
4. LISTDSI — informações de datasets
A função LISTDSI é específica do REXX em TSO e retorna informações de um dataset em variáveis REXX prontas para usar — sem precisar parsear saída de texto:
Principais variáveis populadas pelo LISTDSI:
| Variável | Conteúdo |
|---|---|
SYSDSNAME | Nome completo do dataset |
SYSDSORG | PO, PS, VSAM... |
SYSRECFM | FB, VB, U... |
SYSLRECL | Logical record length |
SYSBLKSIZE | Block size |
SYSMEMBERS | Número de membros (PDS) |
SYSUSED | Percentual de espaço usado |
SYSCREATE | Data de criação |
SYSREFDATE | Data do último acesso |
5. ISPEXEC — serviços ISPF
Com ADDRESS ISPEXEC você acessa os serviços do ISPF de dentro do REXX — lê e escreve variáveis do pool, exibe mensagens e navega entre painéis:
💡 ZUSER e outras variáveis de sistema
O ISPF mantém dezenas de variáveis de sistema no pool compartilhado — ZUSER (user ID), ZDATE (data), ZTIME (hora), ZSYSID (ID do sistema), ZPFKEY (última PF key pressionada). Use VGET para lê-las. São ideais para personalizar execs e registrar logs com contexto do usuário.
6. Lendo datasets linha a linha com LMOPEN/LMGET
Os serviços LM (Library Management) do ISPF permitem ler e escrever datasets linha a linha de dentro do REXX — sem precisar de JCL ou OUTTRAP. Ideal para processar arquivos de configuração ou gerar relatórios:
✅ Sempre feche e libere o DATAID
Assim como arquivos em qualquer linguagem, DATAIDs abertos com LMINIT precisam ser fechados com LMCLOSE e liberados com LMFREE. Se o exec terminar sem liberar, o dataset pode ficar alocado na sessão TSO do usuário, impedindo outros jobs de acessá-lo. Use SIGNAL ON ERROR para garantir que o cleanup acontece mesmo em caso de erro.