Você está na página 1de 52

CICS

Manual de CICS Pag. 1 / 52


GENERALIDADES.

A sigla CICS significa Customer Information Control System, o Sistema de


Controlo da Informação de Clientes.
CICS é um sistema que proporciona um ambiente de execução para programas on-
line, ou seja, orientados para o diálogo com o utilizador e proporciona um
suporte para o intercâmbio de informação com o terminal do utilizador.
O ambiente é de única execução, de modo que para o desenvolvimento há que
empregar as ferramentas e ambientes usuais.
O sistema é multi-utilizador, não só como tal, mas também permite que diferentes
utilizadores possam trabalhar com o mesmo programa, uma vez conectados com o
CICS.
Os utilizadores não usam o JCL para lançar a execução de programas: emitem
petições com o CICS e este encarrega-se do resto.
Em alguns casos o utilizador deverá identificar-se mediante um username e uma
password, antes de poder pedir a execução de um programa.
A estrutura do sistema consiste numa série de módulos de serviço que rodeiam uma
área de memória CICS, na qual se executam os programas do utilizador.

Os módulos fundamentais do CICS são:


TCP
Terminal Control Program o Controlador de Terminais.
Encarrega-se da protocolização das petições de execução, construindo uma pilha
com elas.
Este módulo é o que limita em última instância o número de conexões possíveis
com o CICS, já que controla um número finito de terminais.

Manual de CICS Pag. 2 / 52


KCP
Task Control Program o Controlador de Tarefas.
Encarrega-se da validação de acessos, da recuperação das petições de execução,
da multiprogramação e divide as ordens de carga de programas.
Controla mediante uma tabela os códigos de transacção que identificam programas
a executar por petição externa que, normalmente não são todos os programas
instalados.

FCP
File Control Program o Controlador de Ficheiros.
Encarrega-se da validação dos acessos a ficheiros e do intercâmbio de dados com
estes.
Controla mediante uma tabela os nomes simbólicos do ficheiro.

PCP
Program Control Program o Controlador de Programas.
Executa a carga de um programa na memória do CICS.
Controla mediante uma tabela os nomes de todos os programas que se podem
executar no ambiente CICS.

BMS
Basic Mapping Support o Suporte do Formato do Écran.
Encarrega-se dos intercâmbios de informação com os écrans, em conjunção com o
TCP.

O programa do utilizador utiliza os módulos de serviço para executar os


processos de intercâmbio da informação.
Na fase de arranque, o CICS põe em linha todos os recursos da informação de que
dispõe:
• Programas
• Ficheiros
• Terminais
• Impressoras
de forma que o programa do utilizador não abra nunca um recurso; limita-se a
utilizá-los.

PROGRAMAS EXECUTADOS DEPOIS DO CICS.


Generalidades
O programa estará orientado para o diálogo com o utilizador e a sua lógica de
execução será influenciada pelo desenvolvimento do dito diálogo, de tal forma
que o programa quase nunca será executado inteiro, como no caso dos programas
BATCH, mas, normalmente, cada passo do diálogo implicará só umas quantas
instruções.
O grupo de instruções que se executa num passo de diálogo denomina-se TAREFA, e
a actuação do utilizador que a desencadeia é uma TRANSACÇÃO.

Manual de CICS Pag. 3 / 52


Assim, se um programa pede num determinado momento:
Introduzir código da operação (A/M/B):
a resposta do utilizador (TRANSACÇÃO), desencadeará uma TAREFA que consiste em:
Validar o código e Bifurcar ao módulo de petição dos dados ou de erro

A execução de um programa não se faz mediante a submissão de um JCL, como no


caso dos programas BATCH; o CICS tem uma tabela em que se recolhem os nomes de
todos os programas que se podem executar, juntamente com os códigos
identificativos de quatro caracteres denominados códigos de transacção.
A primeira transacção que um utilizador deve executar é a identificação do
programa que deseja lançar digitando o seu código de transacção.
A manutenção da tabela a que se faz referência, é por conta do Departamento de
Sistemas, de modo que um novo desenvolvimento exige acordar o código da
transacção e o nome para o novo programa com o responsável da Manutenção do
CICS.

PECULIARIDADES DA PROGRAMAÇÃO:
Comandos
O programa só poderá aceder a recursos de informação através dos módulos de
serviço do CICS e só poderá manejar os recursos descritos aos ditos módulos.
A comunicação com os ditos módulos resultou mediante um conjunto de instruções
agrupadas num suporte denominado High Level Programming Interface o HLPI.
O HLPI contém os chamados comandos CICS, que são sentenças no COBOL dirigidas
especificamente aos módulos de serviço e que têm a seguinte estrutura:
EXEC CICS
comando
END-EXEC
O ponto não é necessário para terminar um comando; só se codificará se a lógica
COBOL o requerer.

Terminação da execução
Dado que o programa se executa dentro do CICS, é este quem supervisa a execução;
o programa, pode portanto, considerar-se como subrotina do CICS.
Isto significa que, se é ao CICS a quem se pede a execução de um programa,
também é ao CICS a quem se informa de que a execução terminou.
Por outras palavras, a finalização da execução de um programa faz-se devolvendo
o controlo ao CICS.
Um programa CICS não termina nunca com STOP RUN, desenvolve-se o controlo ao
CICS com o comando;
EXEC CICS
RETURN
END-EXEC
que, sendo igual ao STOP RUN dos programas BATCH, pode aparecer tantas vezes
como se requeira ao longo do programa.

Manual de CICS Pag. 4 / 52


Acesso a ficheiros
Desde o momento em que é o CICS, na fase de arranque, quem põe em linha todos os
recursos, na codificação dos programas será omitida toda a referência à
descrição, abertura e fecho de ficheiros.
Não existirão, portanto especificações como:
INPUT-OUTPUT SECTION
SELECT
FILE SECTION
FILE-CONTROL
FD
OPEN
CLOSE

Igualmente como os programas, o CICS tem uma tabela em que, para cada ficheiro,
estão descritos a sua estrutura física, os tipos de acesso (leitura, escrita)
válidos e um nome simbólico que se usará no acesso.
O acesso será feito mediante um comando:
EXEC CICS
comando_de_acesso_a_ficheiro_por_nome_simbólico
END-EXEC
e não se empregarão as instruções usuais READ, WRITE,.....

Se, no curso de um desenvolvimento, houver que usar ficheiros novos, não basta
só criá-los e carregá-los com dados; há que recorrer à mesma mecânica que no
caso dos programas para que sejam dados de alta nas tabelas do CICS.

Intercâmbios de informação com o écran


O écran também é um recurso manejado pelo CICS.
As instruções usuais ACCEPT, DISPLAY não são válidas e os intercâmbios fazem-se
através de um módulo de serviço mediante um comando:
EXEC CICS
comando_de_intercambio_com_ecran
END-EXEC

Diálogo CICS - programa


Dado que os comandos CICS se dirigem directamente a módulos de serviço do
ambiente, a análise do resultado da execução de um comando não se pode fazer
pelos métodos usuais, mas através de uma área de comunicações, subministrada
pelo próprio CICS, chamada Execution Interface Block ( EIB ), e por uma série de
códigos de retorno que se denominam condições excepcionais. A ambos pode aceder-
se ao programa, quer directamente, quer através de comandos CICS especiais.

Execution Interface Block ( EIB )


000100 DFHEIBLK REALCICS
000900* EIBTIME TIME IN 0HHMMSS FORMAT
001000* EIBDATE DATE IN 00YYDDD FORMAT

Manual de CICS Pag. 5 / 52


001100* EIBTRNID TRANSACTION IDENTIFIER
001200* EIBTASKN TASK NUMBER
001300* EIBTRMID TERMINAL IDENTIFIER
001400* DFHRSVD1 RESERVED
001500* EIBCPOSN CURSOR POSITION
001600* EIBCALEN COMMAREA LENGTH
001700* EIBAID ATTENTION IDENTIFIER
001800* EIBFN FUNCTION CODE
001900* EIBRCODE RESPONSE CODE
002000* EIBDS DATASET NAME
002100* EIBREQID REQUEST IDENTIFIER
002200* EIBRSRCE RESOURCE NAME
002300* EIBSYNC SYNCPOINT REQUIRED
002400* EIBFREE TERMINAL FREE REQUIRED
002500* EIBRECV DATA RECEIVE REQUIRED
002600* EIBSEND RESERVED
002700* EIBATT ATTACH DATA EXISTS
002800* EIBEOC GOTTEN DATA IS COMPLETE
002900* EIBFMH GOTTEN DATA CONTAINS FMH
003000* EIBCOMPL RECEIVE COMPLETE FLAG
003100* EIBSIG SIGNAL FLAG
003200* EIBCONF CONFIRM FLAG
003300* EIBERR LU 6.2 ERROR FLAG
003400* EIBERRCD LU 6.2 ERROR CODE
003500* EIBSYNRB SYNCPOINT ROLLBACK FLAG
003600* EIBNODAT NO DATA FLAG
003700* EIBRESP ERROR CODE RESPONSE
003800* EIBRESP2 MORE ERROR CODES
003900* EIBRLDBK ROLLED BACK FLAG
004000*
004100 EIBTIME PICTURE S9(7) COMP-3.
004200 EIBDATE PICTURE S9(7) COMP-3.
004300 EIBTRNID PICTURE X(4).
004400 EIBTASKN PICTURE S9(7) COMP-3.
004500 EIBTRMID PICTURE X(4).
004600 EIBRSVD1 PICTURE XX.
004700 EIBCPOSN PICTURE S9(4) COMP-4.
004800 EIBCALEN PICTURE S9(4) COMP-4.
004900 EIBAID PICTURE X.
005000 EIBFN PICTURE X(2).
005100 EIBRCODE PICTURE X(6).
005200 EIBDS PICTURE X(8).
005300 EIBREQID PICTURE X(8).
005400 EIBRSRCE PICTURE X(8).
005500 EIBSYNC PICTURE X.
005600 EIBFREE PICTURE X.
005700 EIBRECV PICTURE X.
005800 EIBSEND PICTURE X.
005900 EIBATT PICTURE X.
006000 EIBEOC PICTURE X.
006100 EIBFMH PICTURE X.
006200 EIBCOMPL PICTURE X.
006300 EIBSIG PICTURE X.
006400 EIBCONF PICTURE X.
006500 EIBERR PICTURE X.
006600 EIBERRCD PICTURE X(4).
006700 EIBSYNRB PICTURE X.
006800 EIBNODAT PICTURE X.
006900 EIBRESP PICTURE 9(8) COMP-4.
007000 EIBRESP2 PICTURE 9(8) COMP-4.
007100 EIBRLDBK PICTURE X.

Manual de CICS Pag. 6 / 52


Detecção de teclas de serviço.
Através do EIB o programa pode controlar a tecla de serviço (ENTER, CLEAR, PF)
com a que se terminou a transacção (campo EIBRCODE)

Manejo de códigos de retorno.


O EIB também proporciona informação sobre o resultado da execução de um comando
CICS (campo EIBAID).

Compilação.
Ao conter comandos, um programa CICS não se pode compilar como um compilador
normal, já que cada comando produziria um erro.
Os procedimentos da compilação antepõem ao compilador um TRADUTOR que analisa os
comandos CICS e os transforma em instruções COBOL, se estão correctos.
O processo consiste em asteriscar os comandos e incluir numa nova fonte as
linhas de código correspondentes; é a nova fonte a que passa à etapa de
compilação.
No exemplo seguinte mostra-se uma tradução executada pelo emulador CICS de
Realia:
000100* EXEC CICS RECEIVE
000200* MAP('MAPA1')
000300* MAPSET('GRMAP01')
000400* END-EXEC
000500*
000800 SET DFH0-CMD-RECEIVE-MAP TO TRUE
000900 MOVE 'MAPA1' TO DFH0-VAR-MAP
001000 SET DFH0-FLAG-MAPSET TO TRUE
001100 MOVE 'GRMAP01' TO DFH0-VAR-MAPSET
001200 SET DFH0-FLAG-INTO TO TRUE
001300 CALL 'MLI_GETADDR' USING MAPA1I DFH0-ADDR-INTO
001400 PERFORM DFH0-CALL-CICS

Ao rever os resultados da compilação haverá que procurar erros nas listas: na da


tradução e na da compilação. Muitos dos erros da compilação terão a sua origem
em comandos CICS erróneos e, portanto, não traduzidos.

Nota importante.
Normalmente, o executável resultado da compilação e montagem deposita-se
directamente na biblioteca de carga do CICS, mas não é reconhecido por este até
no que se caracteriza como versão actual mediante um dos programas especiais de
serviço.

Manual de CICS Pag. 7 / 52


Acesso ao CICS e execução de programas

Conexões e desconexões com CICS


Primeiro que tudo, o utilizador há que conectar-se ao CICS, ou seja, abrir uma
sessão de CICS no seu terminal. A conexão realiza-se, normalmente, por selecção
de opção no painel de TSO.
Uma vez em sessão, o CICS informa com uma mensagem de que está rápido para
admitir petições de execução.
Os códigos de transacção escrevem-se sempre nas primeiras posições do écran;
para posicionar o cursor (e em caso de apagar ) emprega-se a tecla CLEAR.
Antes de conectar-se, o utilizador deverá averiguar se necessita identificar-se.
Esta identificação pode não ser necessária nos ambientes CICS empregados para
provas de aplicações e sim para os CICS de exploração com dados reais.
Se o CICS a que se conectou requerer identificação, o primeiro programa que se
deve executar é o programa de SIGNON, cujo código de transacção é CSSN.
Este programa apresenta um écran em que se introduzem os dados:
USERNAME
PASSWORD
e que termina e volta ao CICS, se os dados estão correctos. Então o utilizador
apagará o écran com a tecla CLEAR e introduzirá os códigos de transacção dos
programas que deseje executar.
A desconexão realiza-se executando um programa cujo código de transacção é CSSF,
na forma:
CSSF LOGOFF
o qual termina a sessão do CICS e devolve o controlo ao TSO.

Manual de CICS Pag. 8 / 52


Execução de programas depois do controle do CICS
A introdução do código de transacção desencadeia uma série de actuações do CICS:
A transacção deposita-se na pilha da entrada do TCP.
No seu devido tempo, é processada pelo KCP:
Valida-se contra a tabela.
Controla-se que o programa associado exista e esteja disponível.
Se não está em memória, passa-se a uma ordem de carga ao PCP.
Cria-se uma TASK WORK AREA (TWA), específica do utilizador e leva-se uma conta
do uso do programa.
Se o programa está em memória, o CICS tende a utilizar a cópia carregada para
processar as transações que cheguem até ele.
A TWA servirá para saber para onde vai a execução das transações de cada
utilizador do programa.
Esta multiprogramação sobre executável, permite poupar memória. As transações
vão-se processando como coordenação a um sistema de interrupções por tempo e
aproveitando os tempos de certas entradas/saídas de dados.
Se esta multiprogramação não é possível, o PCP recebe ordem para carregar outra
cópia do programa; este caso dá-se quando o programa está detido à espera on-
line da introdução de dados a partir do écran.
O programa só se retira da memória do CICS quando o último utilizador realize
uma transacção que devolva o controle ao CICS.
A programação não necessita ter em conta a reutilização de uma cópia de um
programa por parte do CICS, para atender as transações de diversos utilizadores;
tanto os pontos de controle como os intercâmbios de informação estão controlados
através dos dados que o próprio CICS mantém nas TWAs dos distintos utilizadores
do programa.
O programador desenhará os seus programas como se fossem para um só utilizador.
Programação
Todas as instruções pertencem ao set de COBOL, excepto as que se codifiquem para
o intercâmbio de dados, que serão comandos CICS.

Gestão de códigos de retorno e anomalias.


O resultado da execução de um comando CICS, traça-se mediante a informação
contida no EIB. Para isso existem dois métodos:

Investigação directa.
Este método consiste em investigar directamente o conteúdo do campo EIBRCODE do
EIB, que conterá um valor distinto de zero em caso de anomalia.
Tem o inconveniente de que, para poder empreender diferentes actuações em base a
diferentes códigos de erro, há que conhecer o significado dos distintos valores.

Processo de condições excepcionais.


É o método mais usual. O CICS mantém nomes simbólicos para um bom número de
códigos de retorno e certos comandos CICS podem bifurcar a execução se se
produzir uma determinada anomalia.
Os comandos CICS de gestão de condições excepcionais funcionam como armadilhas,
ou seja que entram em acção, a partir do ponto do programa em que tenham sido

Manual de CICS Pag. 9 / 52


escritos e não é necessário especificá-los depois do comando cuja resposta se
quer analisar.
A forma genérica destes comandos é:
EXEC CICS
HANDLE CONDITION
condição( PARAGRAFO )
.......
END-EXEC
onde condição é o nome simbólico da anomalia e PARAGRAFO o nome do parágrafo de
tratamento da dita anomalia.
A partir do momento em que se execute o comando, sempre que se produza a
anomalia condição, a execução bifurcará ao PARÁGRAFO.
A bifurcação realiza-se por GO TO.
No comando pode-se incluir toda uma lista de anomalias a tratar, lista que pode
ampliar-se com outra ou outras. Pode ainda especificar-se uma lista total ou
parcialmente igual a uma activa, se se deseja, a partir de certo momento
processar umas anomalias de forma diferente:
EXEC CICS
HANDLE CONDITION
condição1( PARAGRAFO1 )
........
END-EXEC
.....
.....
EXEC CICS
HANDLE CONDITION
condição1( PARAGRAFO2 )
.......
END-EXEC
O aspecto de uma anomalia permanece activa até que termine o programa ou se
execute um comando especial para desactivá-la:
EXEC CICS
IGNORE CONDITION
condição1
.......
END-EXEC
Os nomes das condições excepcionais irão aparecendo à medida que se vejam os
comandos a que façam referência.

Por parâmetro no comando.


Em qualquer dos comandos CICS, pode-se aumentar o parâmetro RESP para forçar a
devolução do código de retorno no campo EIBRESP do EIB, na forma:
EXEC CICS
comando parâmetro(valor)

Manual de CICS Pag. 10 / 52


........
RESP(EIBRESP)
END-EXEC
IF EIBRESP NOT = 0
< ERROR >.

Notas no uso de HANDLE | IGNORE CONDITION.-


Toda a condição excepcional que se produza e não tenha sido explicitamente
HANDLEada ou IGNOREada, provocará uma terminação anormal da tarefa.
Para canalizar as condições excepcionais que não se explicitem, existe a
condição ERROR( PARAGRAFO ).

Gestão de teclas de serviço


O campo DFHAID do EIB contém um código hexadecimal que se corresponde com a
tecla de função que se empregou para terminar uma transacção. O programa pode
tomar decisões na base do dito código:

Por investigação directa.


Este método requer, conhecer bem os códigos correspondentes a cada tecla, ou
incluir bem no programa uma instrução COPY que inclua um ficheiro chamado
DFHAID, em que se tenha nomes simbólicos para cada tecla:
DFHENTER
DFHCLEAR
DFHPF1 - DFHPF12
DFHPA1, DFHPA2

Por processo mediante comando.


Como no caso das anomalias, o CICS reconhece as teclas de função por nomes
simbólicos, e tem um comando que permite bifurcar a execução do programa para um
parágrafo determinado, se se terminou a transacção que repele em programa com
uma delas:
EXEC CICS
HANDLE AID
ENTER(PARÁGRAFO1)
CLEAR(PARÁGRAFO2)
PF1(PARÁGRAFO3)
.....
PF12(PARÁGRAFO14)
PA1(PARÁGRAFO15)
PA2(PARÁGRAFO16)
END-EXEC
A filosofia de funcionamento é a mesma que a do comando HANDLE CONDITION; a
bifurcação realiza-se também pelo método GO TO.

Manual de CICS Pag. 11 / 52


A tecla CLEAR, que apaga o écran, atribui-se normalmente à função de terminação
da execução do programa. O PARÁGRAFO correspondente contém, para o geral, a
emissão de uma mensagem de fim de execução e um comando RETURN sem parâmetros.

Programação Conversacional e Pseudo-conversacional.


A programação orienta-se para o diálogo entre o programa e o utilizador de forma
que o final de cada tarefa emitirá uma mensagem sobre o seu resultado e pedirá
uma nova transacção.
A forma de pedir as transações condiciona fortemente as possibilidades do CICS
de poder reutilizar uma cópia de um programa determinado, se um utilizador
diferente reclama a execução do mesmo programa.
O esquema mais imediato, consiste em codificar os comandos de leitura de dados
do écran à continuação dos de envio de dados, que representa a forma de
programação chamada conversacional, introduz uma paragem no programa em espera
de dados do écran , que não é quantificável pelo CICS (o utilizador pode ter ido
tomar café).
Se durante esse tempo, outro utilizador solicita a execução desse programa, o
CICS manda carregar uma nova cópia, o qual pode criar graves problemas ao CICS
quando um programa está a ser utilizado por uma grande multidão de utilizadores
(p.ex.. um programa de caixa de um Banco ).
Se se esgota a memória do CICS, este começa a acumular transações no TCP e os
tempos de resposta começam a crescer e, dado que este processo não pode
continuar indefinidamente, chegará um momento em que o sistema se satura e se
'caia'.

A solução a este dilema consiste em não pôr o comando de leitura de dados do


écran imediatamente à continuação do comando que envia os dados.
Se faz uso de uma característica do CICS, que consiste em que depois de certas
condições, o CICS reconhece os dados digitados no écran como transacção para um
determinado programa. Estas condições dão-se:

Ao arrancar o programa.
Ao digitar o código de transacção, o CICS aceita dados iniciais para o programa.

Manual de CICS Pag. 12 / 52


Quando se cria um programa para este caso, deve ir um comando de leitura de
dados do écran ao início do programa.
Esta técnica, de escassa utilização, pode servir para introduzir por exemplo
contra-senhas que, verificadas pelo programa, validariam o acesso de um
determinado utilizador a um programa.

Ao devolver o controlo ao CICS com um comando de retorno ampliado.


Este comando é um RETURN com uma indicação expressa de programa com o que há que
processar a próxima transacção, em forma de código de transacção:
EXEC CICS
RETURN TRANSID( 'código_de_transacção' )
END-EXEC
Este comando devolve o controle ao CICS de forma explícita, de modo que seja
anulada a problemática do tempo incomensurável que possa levar a completar a
transacção seguinte.
O programa, sem embargo, não é retirado da conta de uso. O parâmetro TRANSID
indica ao CICS que a próxima transacção é para o programa associado a
código_de_transacção.
De modo, RETURN, este comando pode especificar-se em todos os pontos do programa
que se considere necessário.

Esta técnica conhece-se com o nome de programação pseudo-conversacional.

Há, sem embargo uma diferença fundamental com o método conversacional: quando o
utilizador completa a seguinte transacção, o CICS lança a execução do programa
desde o início, tal e como se o tivesse carregado de novo em memória: os dados
de WORKING perdem-se.

Programação Pseudo-conversacional e manutenção de dados de WORKING.

Manual de CICS Pag. 13 / 52


O problema da perda de dados de WORKING inerente a esta técnica de programação,
soluciona-se fazendo uso de outra facilidade que o CICS proporciona para guardar
dados.
Podem-se guardar dados em áreas do CICS chamadas COMMAREAs, empregando a
formulação seguinte no comando de retorno pseudo-conversacional:
EXEC CICS
RETURN TRANSID('código_de_transacção')
[ COMMAREA( identificativo )
[ LENGTH( n | longitude ) ] ]
END-EXEC

identificativo
O nome de um nível em WORKING.

longitude
Um valor numérico | uma variável em PIC S9(4) COMP.

O significado deste comando é:


Voltar ao CICS até à próxima transacção.
Guardar em COMMAREA longitude bytes a partir de identificativo.
Dado que o CICS está a relançar a execução do programa desde o início, como se o
houvesse carregado de novo, o comando de leitura de dados do écran deverá ir nas
sequências iniciais do programa e será único.
A devolução dos dados, faz-se no CICS sobre uma área chamada DFHCOMMAREA, que
espera encontrar na LINKAGE SECTION do programa e que deverá ser codificada com
nível 01 pelo programador com a longitude correspondente à maior longitude que
empregue no programa.

002700 01 W-LONG PIC S9(4) COMP.


002800 01 W-COMM.
002900 03 W-OPCION PIC X.
003000 03 W-REG.
003100 05 W-CLAVE-AN PIC X(6).
003200 05 W-CLAVE REDEFINES W-CLAVE-AN.
003300 07 W-TALLER PIC 9.
003400 07 W-FAMILIA PIC 9.
003500 07 W-CODIGO PIC 9(4).
003600 05 W-DESC PIC X(20).
003700 05 W-PRECIO PIC 9(5).
003800 05 W-STOCK PIC 9(5).
003900 05 FILLER PIC X(44).
004000 03 BORRADO PIC X.
004010 ..................
004100 LINKAGE SECTION.
004200 01 DFHCOMMAREA PIC X(82).

a sequência de uso seria:


< CARREGAR DADOS EM W-COMM >
MOVE 82 TO W-LONG

Manual de CICS Pag. 14 / 52


EXEC CICS
RETURN TRANSID(' XXXX' )
COMMAREA( W-COMM )
LENGTH( W-LONG )
END-EXEC

Notas no uso de COMMAREA


Os dados de DFHCOMMAREA devem mover-se para a WORKING, se interessa transmitir
todos ou alguns no próximo retorno ao CICS, já que o parâmetro COMMAREA do
comando faz referência a um item de WORKING.
Na COMMAREA guardaram-se não só dados numéricos e alfanuméricos, mas também
indicadores que possam servir para canalizar a execução quando o CICS relance o
programa.
A COMMAREA é específica da sessão utilizador-programa. O programador não
necessita ter em conta o multiuso do programa.
O parâmetro LENGTH é obrigatório.
Em cada retorno ao CICS, pode variar-se a longitude dos dados a guardar da forma
que mais convenha.
O CICS devolve a longitude dos dados actualmente guardados no campo EIBCALEN do
EIB, quando relança o programa.
O valor deste campo é zero a primeira vez que se executa o programa ou se em
RETURN TRANSID não se especifica COMMAREA.
A DFHCOMMAREA pode subdividir-se em níveis da forma que mais convenha.
Os níveis de identificativo e de longitude podem ser quaisquer, excepto 88.
O CICS interpreta a longitude dos dados a guardar em binário. Uma longitude de
82 numa variável PIC S9(4) COMP-3, pode originar resultados funestos na
execução.
No comando
EXEC CICS
RETURN
END-EXEC
não se pode empregar o parâmetro COMMAREA.
Ao especificar a longitude da COMMAREA, tenha-se em conta que o CICS não
reconhece que o item W-COMM tem 82 bytes de longitude; se neste caso se
especifica um número maior, enviar-se-ão dados a guardar em áreas próximas.

Manual de CICS Pag. 15 / 52


Comandos CICS

Intercâmbios com o Écran


O intercâmbio com o écran realiza-se através de um módulo do CICS chamado Basic
Mapping Support o BMS.
Este módulo encarrega-se de processar tanto a informação que se envia a um écran
, como os dados da transacção que realiza o utilizador.
No primeiro caso, em conjunção com o TCP, adapta-a ao écran à que há de
aparecer, e no segundo caso, transforma-a em dados processáveis pelo programa
que os vai receber.

Intercâmbios com o Écran (Não Formatada)

Manual de CICS Pag. 16 / 52


Envio de dados para o Écran.
EXEC CICS
SEND FROM( W-AREA )
LENGTH( n | W-LONG )
[ ERASE ]
END-EXEC

W-AREA
Área de WORKING que contém dados a enviar

n | W-LONG
Longitude da W-AREA que se deseja emitir, que pode ser um valor imediato ou o
nome de uma variável numérica no PIC S9(4) COMP, carregada com o valor
requerido.
Sobre o ajuste da longitude vale o que se diz no caso da COMMAREA.

ERASE
Provoca um apagamento no écran , antes de enviar os dados.

Recepção de dados do Écran


EXEC CICS
RECEIVE INTO( W-AREA )
[ LENGTH( W-LONG ) ]
END-EXEC

W-AREA
Área de WORKING na que se deseja receber os dados.

W-LONG
Deve referenciar uma variável numérica PIC S9(4) COMP, que se carregará com a
longitude do dado a receber ou a máxima esperada.

Condições excepcionais

LENGERR
A longitude dos dados é maior que W-LONG.
Destes dois comandos, emprega-se primeiro para indicar o fim de uma execução
quando o utilizador prime a tecla CLEAR.

Acesso a Ficheiros
Os ficheiros são abertos pelo CICS na fase de arranque, de modo que o programa
não incluirá nenhuma sentença usual de descrição, fecho, abertura ou acesso e
limitar-se-á a usá-los empregando os comandos CICS de acesso.

Manual de CICS Pag. 17 / 52


Cada acesso a um ficheiro faz com que o CICS comprove que se refenrencia um dos
ficheiros da tabela do FCP e que o tipo de acesso é um dos que tem registados.
O CICS só suporta ficheiros VSAM KSDS.

Leitura indexada.
EXEC CICS
READ DATASET( 'nome_do_ficheiro' | identificador )
INTO( W-REGISTRO )
[ LENGTH( W-LONG ) ]
RIDFLD( W-CLAVE )
[ KEYLENGTH( n ) GENERIC ]
[ GTEQ ]
END-EXEC

nome_do_ficheiro | identificador
Nome simbólico do ficheiro.
Pode escrever-se de forma explícita, entre aspas, ou carregar no identificador,
que será uma variável PIC X(8).
O nome do ficheiro há de estar registado na tabela de controle do FCP.

W-REGISTRO
Área do WORKING destino dos dados.

LENGTH
Indica ao CICS a longitude do registo que se vai ler ou a máxima esperada.
Deve referenciar uma variável numérica PIC S9(4) COMP.

RIDFLD
Procura-se o registo cuja chave está contida na área do WORKING

W-CLAVE.
W-CLAVE não tem que ser necessariamente uma subdivisão do W-REGISTRO.

KEYLENGTH( n ) GENERIC
Procuras por chave genérica.
Se se específica, o CICS ocupará só os n primeiros bytes do W-CLAVE.

GTEQ
Procura por maior ou igual. O defeito é procura por igual.

Condições excepcionais:

Manual de CICS Pag. 18 / 52


NOTOPEN
Ficheiro não aberto.
Pode ocorrer se o ficheiro está danificado, ou se foi posto fora da linha com
uma transacção de serviço.

DSIDERR
Nome do ficheiro não em tabela.

NOTFND
Registo não encontrado.

LENGERR
Se se há especificado LENGTH, longitude de registo maior que W-LONG; os dados
foram trocados.

INVREQ
Acesso não válido.

ILLOGIG
Erro lógico VSAM.

No seguimento deste apartado, só se irão comentar os parâmetros novos.

Leitura sequencial por ordem de chave.


Esta modalidade permite recuperar registos por ordem de chave, tanto ascendente
como descendente, é dizer, que se podem ler registos para a frente e para trás.
Antes de começar, sem embargo, há que criar um entorno BROWSE dentro do
ficheiro; a leitura sequencial será movida dentro do dito entorno.
O entorno BROWSE estabelece-se desde um determinado registo até ao final do
ficheiro.

Browse.
Estabelecer entorno.
EXEC CICS
STARTBR DATASET( 'nome_do_ficheiro' | identificador )
RIDFLD( W-CLAVE )
[ KEYLENGTH(n) GENERIC ]
[ GTEQ ]
END-EXEC
O entorno estabelece-se desde o registo que cumpre as especificações de procura,
até ao final do ficheiro.
Este comando não lê o registo, só põe um ponteiro no registo localizado.

Manual de CICS Pag. 19 / 52


Condições excepcionais
NOTOPEN
DSIDERR
NOTFND
Não se encontra registo no início do entorno.
Não se estabelece BROWSE.
ILLOGIC

Anular entorno.
EXEC CICS
ENDBR DATASET( 'nome_do_ficheiro' | identificador )
END-EXEC
O entorno fica anulado. Também o anulam os comandos RETURN e RETURN TRANSID.

Voltar ao registo do início do entorno.


EXEC CICS
RESETBR DATASET( 'nome_do_ficheiro' | identificador )
END-EXEC
Uma forma fácil de retomar o início do entorno, depois de ter-se movido lendo
dentro dele.

Condições excepcionais
Para estes dois comandos, são as mesmas que as do comando STARTBR, excepto
NOTFND.

Leitura sequencial no entorno.


EXEC CICS
READNEXT | READPREV
DATASET( 'nome_do_ficheiro' | identificador )
INTO( W-REGISTO )
[ LENGTH( W-LONG ) ]
RIDFLD( W-CLAVE )
[ KEYLENGTH( n ) ]
END-EXEC
O CICS utiliza o conteúdo do W-CLAVE para localizar o seguinte registo em ordem
de chave ascendente ( READNEXT ) ou descendente ( READPREV ), excepto se o
comando vai imediatamente atrás do STARTBR ou RESETBR, em cujo caso lê-se o
registo no início do entorno.

Esta peculiaridade faz com que sejam possíveis saltos tanto para a frente como
para trás, sem variar adequadamente o conteúdo do W-CLAVE antes de executar o
comando de leitura.

Manual de CICS Pag. 20 / 52


Condições excepcionais
NOTOPEN
DSIDERR
ENDFILE
Fim do ficheiro.
Se foi planeado ler depois do último registo do entorno; se se retrocede fora do
entorno, não se produz condição excepcional.
Este comando nunca produz a condição NOTFND.
ILLOGIC

Escritura de registos.
A escritura é sempre indexada, já que o CICS só suporta ficheiros VSAM KSDS.
EXEC CICS
WRITE DATASET( 'nome_do_ficheiro' | identificador )
FROM( W-REGISTO )
[ LENGTH( n | W-LONG ) ]
RIDFLD( W-CLAVE )
END-EXEC

LENGTH
Pode utilizar-se, bem como um valor imediato, ou como uma variável numérica em
PIC S9(4) COMP para indicar os bytes que se vão gravar em W-REGISTRO.
RIDFLD
Indica uma variável que contém o valor da chave do registo a gravar.

Condições excepcionais
NOTOPEN
DSIDERR
DUPREC
Chave repetida a nível do Indice Primário.
Não se grava o registo.
DUPKEY
Chave repetida a nível do Índice Alternativo.
Grava-se o registo se o Índice admite repetições.
ILLOGIC

Modificação de registos.
Previamente à modificação há que bloquear o registo a tratar. Isto faz-se com
uma variante do comando de leitura indexada:
EXEC CICS
READ .......

Manual de CICS Pag. 21 / 52


......
UPDATE
END-EXEC

Condições excepcionais
São as mesmas que as do comando de leitura.
INVREQ ( acesso não válido ) pode ocorrer também pelo facto de que outra tarefa
já tenha bloqueado o registo que se pretende bloquear.
O registo fica bloqueado, até que se modifique, se apague ou se anule o bloqueio
com um comando:

EXEC CICS
UNLOCK DATASET( 'nome_do_ficheiro' | identificador )
END-EXEC
ou se chegue a um comando RETURN ou RETURN TRANSID.
O bloqueio de um registo não deverá fazer-se mais quando já se tenha decidido
fazer a modificação, já que realmente não é possível bloquear um só registo. O
VSAM bloqueia todo um Intervalo de Control.
Por outra lado, num ambiente de programação pseudo-conversacional, a técnica de
bloqueio imediatamente antes da modificação, vem imposta pelo facto de que
depois da leitura de apresentação de um registo, se sai do programa com RETURN
TRANSID.
A modificação faz-se com o comando:

EXEC CICS
REWRITE DATASET( 'nome_do_ficheiro' | identificador )
FROM(W-REGISTO)
[ LENGTH( W-LONG ) ]
END-EXEC

Condições excepcionais
NOTOPEN
DSIDERR
ILLOGIC

Apagar registos.
Para apagar há dois métodos:

Registo bloqueado.
EXEC CICS
READ .......
......
UPDATE

Manual de CICS Pag. 22 / 52


END-EXEC

EXEC CICS
DELETE DATASET( 'nome_do_ficheiro' | identificador )
END-EXEC
Para este método vale o dito no comando REWRITE no que respeita aos bloqueios.

Por chave.
EXEC CICS
DELETE DATASET( 'nome_do_ficheiro' | identificador )
RIDFLD( W-CLAVE )
[ KEYLENGTH( n ) GENERIC ]
END-EXEC
Este comando pode apagar registos com chave única W-CLAVE através do Índice
Principal, chaves repetidas através de Índices Alternativos e chaves genéricas
através de ambos os tipos de conjuntos de índices.

Intercâmbios com o Écran ( Formatado )


O envio e recepção de dados formatados faz-se depois do controlo de umas
entidades de BMS chamadas mapas ( MAPS ).
Um mapa é um programa de controle que permite colocar displays sobre o écran
itens numa certa ordem e em posições pré-determinadas.
O mapa BMS, compõe-se de dois elementos:

Mapa físico
O programa de controlo em si.

Mapa lógico
Um subproduto da geração do anterior em forma de uma estrutura a incluir no
programa, e que define áreas de WORKING para a recepção e o envio dos dados.

Manual de CICS Pag. 23 / 52


Os mapas agrupam-se em grupos de mapas ou MAPSETS.
Dada a grande quantidade de mapas que se podem chegar a utilizar entre todos os
programas de todas as aplicações CICS, este não regista os mapas em si, senão os
MAPSETS, de modo que são estes os que se levam nas tabelas do entorno.
No caso de ter que desenvolver um mapa novo, o programador tem duas opções:
Incluir o mapa num dos MAPSETS já existentes.
Abrir um novo MAPSET, para o qual terá que pôr-se em contacto com a pessoa
responsável do CICS, para que pratique a entrada correspondente nas tabelas.

A descrição destas entidades faz-se mediante umas instruções chamadas macros


BMS, que têm o formato DFHMxx e às que se afectam com um número de parâmetros.
O formato de uma macro BMS é:

onde label é uma etiqueta opcional e o carácter X (pode variar segundo o


sistema), na coluna 72 indica continuação da instrução na coluna 16 da seguinte
linha.
Os parâmetros podem ver-se afectados por vários valores; e nesse caso escrevem-
se entre parêntesis e separados por vírgulas.

Descrição de mapas e grupos

MAPSET.
Define-se com a macro DFHMSD:
nomset DFHMSD TYPE=DSECT | MAP | &SYSPARM,
[ STORAGE=AUTO, ]
[ CTRL=( FSET | FRSET,FREEKB ), ]
DATA=FIELD | BLOCK,
[ EXTATT=YES, ]
TIOAPFX=YES | NO,
MODE=IN | OUT | INOUT,
LANG=ASM | COBOL | PLI | RPG,
[ VALIDN=( MUSTFILL,MUSTENTER ) ]

nomset
Nome do MAPSET ( máximo 7 caracteres ) e deve estar registado nas tabelas do
CICS.

TYPE
Tipo de mapas a criar:

Manual de CICS Pag. 24 / 52


DSECT
Só mapas físicos.

MAP
Só mapas lógicos.

&SYSPARM
Utilizar como guia o conteúdo da variável do sistema ( normalmente instala-se
com um valor que faz com que se criem ambos os tipos de mapas ).

STORAGE=AUTO
Cada mapa ocupa a sua própria memória e não se redefinem.
A alternativa é BASE=nome_área.

CTRL
Operações complementares ao display dos mapas:

FSET
Todos os campos em estado activo.

FRSET
Todos os campos em estado inactivo.
O significado dos termos activo e inactivo explica-se na recepção de dados.

FREEKB
Liberar o teclado, que o BMS bloqueia no princípio, obrigando a premir a tecla
RESET.

DATA
Formato dos dados na comunicação BMS-programa:

FIELD
Cada dado no formato e tamanho do seu campo respectivo. É o defeito.

BLOCK
Dados bloqueados com um prefixo de longitude.

EXTATT=YES
Incluir no mapa lógico campos para a gestão de atributos estendidos (cor, vídeo
inverso).

TIOAPFX

Manual de CICS Pag. 25 / 52


Deve especificar-se YES, se se deseja executar o intercâmbio de dados até, e
desde a área de mapa lógico de WORKING, já que o defeito é NÃO.

MODE
Tipo de operação de entrada/saída:

IN
Só entrada.

OUT
Só saída.

INOUT
Entrada e saída.

LANG
Linguagem de criação dos mapas simbólicos.
O defeito é ASM ( Assembler ).

VALIDN

MUSTFILL
Há que preencher todos os campos

MUSTENTER
Há que teclar ao menos uma posição em todos os campos.

Estes parâmetros afectam todos os mapas de MAPSET.

MAPA EN MAPSET.
Define-se com a macro DFHMDI:
nommap DFHMDI SIZE=( linhas,colunas) ,
[ LINE=linha,COLUMN=coluna, ]
[ CTRL=( FSET | FRSET,FREEKB ), ]
[ DATA=FIELD | BLOCK, ]
[ TIOAPFX=NO | YES, ]
[ VALIDN=( MUSTFILL,MUSTENTER ) ]

nommap
Nome do mapa ( máximo 7 caracteres ).

Manual de CICS Pag. 26 / 52


SIZE
Tamanho do mapa em linhas por colunas.

LINE,COLUMN
Posição do mapa no écran; posição da esquina superior esquerda.

Os restantes parâmetros têm o mesmo significado que no caso do MAPSET. A sua


especificação pode corrigir o que se tenha feito naquele.

ITEM EN MAPA.
Define-se com a macro DFHMDF:
[label] DFHMDF POS=número | ( linha,coluna ),
LENGTH=número,
[ ATTRB=( [ control_cursor ][,tipo][,representação][,]
[ IC ][ ,FSET ] ), ]
[ INITIAL='tira', ]
[ JUSTIFY=(LEFT | RIGHT,BLANK | ZERO), ]
[ PICIN='tira', ]
[ PICOUT='tira', ]
[ GRPNAME=nome_gupo, ]
[ OCCURS=número, ]
[ VALIDN=( MUSTFILL,MUSTENTER ) ]

LABEL
Cumpre dois cometidos:
Se se deixa em branco
Define o item como literal, sem reflexo no mapa lógico.
Se se especifica ( máximo 7 caracteres )
Define o item como campo de dados e o item refletir-se-á no mapa lógico para o
processo do seu conteúdo.
POS
Posição do campo dentro da janela que define o mapa.
LENGTH
A longitude do item.
ATTRB
control_cursor
ASKIP
Salto automático.
UNPROT
Campo não protegido; podem-se digitar dados.
PROT
Campo protegido; só se podem premir as teclas de tabulação, retorno de carga e
ENTER.

Manual de CICS Pag. 27 / 52


tipo
NUM
Campo numérico.

representação
NORM
Intensidade normal.
BRT
Brilhante.
DRK
Invisível.
IC
O cursor aparecerá neste campo.
FSET
Campo em estado activo.
INITIAL
Valor inicial que se quer atribuir ao campo.
Se se ultrapassa a coluna 71, põe-se o carácter de continuação na 72 e continua-
se na linha seguinte na coluna 16, sem abrir novas aspas.
JUSTIFY
Alineação de dados dentro do campo e recheio de posições não significativas:
LEFT | RIGHT
Alineação à direita | esquerda.
BLANK | ZERO
Recheio com brancos | zeros.
PICIN
PICOUT
Aspecto dos dados à entrada e saída. A máscara codifica-se entre aspas simples,
não se pode utilizar a fórmula de repetição.
GRPNAME
Associação do campo a outro como nível superior.
OCCURS
Definição de tabelas.

Notas
A omissão da etiqueta, declara o campo como um literal. Ao não reflexar-se este
no mapa lógico, é quase obrigatório empregar o parâmetro INITIAL e assinalar o
atributo ASKIP.
A utilização do PICOUT como formato de edição pode acarretar problemas na
recepção de dados numéricos, dado que os pontos e vírgulas da máscara não são
valores numéricos.
Veja-se o comando BIF DEEDIT na secção de comandos especiais.
A longitude do campo terá de especificar-se como conserto ao tamanho real que
vai a ocupar no écran, caracteres de edição incluidos.
O BMS representa fisicamente o atributo como uma posição mais no écran, à
esquerda do campo. Por isso há que ter-se a precaução para não cruzar campos
consecutivos.
A primeira coluna disponível de uma linha é a 2, pelo display de atributo.

Manual de CICS Pag. 28 / 52


Normalmente o campo define-se de modo que quepa inteiro numa linha.
O BMS não reconhece no écran mais que os inicios do campo, o qual faz com que se
possa seguir teclando mais além do fim.
Isto no princípio não apresenta inconveniente, pois só serão entregues na
recepção as posições definidas para o campo, pode ser causa de que se tecle fora
de um campo a informação correspondente. A solução normalmente adoptada consiste
em definir terminadores ( campos ASKIP,DRK ) de tal forma que o seu byte de
atributo caia imediatamente à continuação da última posição teclável de um
campo.

Fim da descrição.
No fim da descrição, a continuação da última DFHMDF, do último mapa, do grupo,
assinala-se com uma macro DFHMSD:
DFHMSD TYPE=FINAL
END

Geração do grupo de mapas. Estrutura do mapa lógico


A fonte de descrição, sempre de um grupo completo, processa-se mediante um
compilador especial, que gerará:

Só mapas físicos
TYPE=DSECT

Só mapas lógicos
TYPE=MAP

Ambos
TYPE=&SYSPARM

O mapa lógico contirá:


Uma só especificação da área
MODE IN e MODE OUT.

Duas especificações da área


MODE INOUT.

O gerador utiliza o nome do mapa para nomear as áreas do mapa lógico,


denominando a área de entrada MAPAI e a de saída MAPAO, se o nome do mapa é MAPA
e segundo o parâmetro TYPE da macro DFHMSD.
A estrutura do mapa lógico que se chama MAPA1, com MODE=INOUT, DATA=FIELD e dois
campos de dados CAMPO1 e CAMPO2, dos quais o primeiro é numérico de cinco
posições e o segundo alfanumérico de vinte, é:

Manual de CICS Pag. 29 / 52


Macros BMS.
...........
MAPA1 DFHMDI SIZE=( 24,80 ) ,
CTRL=( FRSET,FREEKB ),
DATA=FIELD,
TIOAPFX=YES

CAMPO1 DFHMDF POS=( linha,coluna ),


LENGTH=5,
ATTRB=( UNPROT,NUM )
CAMPO2 DFHMDF POS=( linha,coluna ),
LENGTH=20,
ATTRB=UNPROT

Mapa lógico em WORKING.


01 MAPA1I.
02 FILLER PIC X(12).
02 CAMPO1L PIC S9(4) COMP.
02 CAMPO1F PIC X.
02 FILLER REDEFINES CAMPO1F.
03 CAMPO1A PIC X.
02 CAMPO1I PIC 9(5).
02 CAMPO2L PIC S9(4) COMP.
02 CAMPO2F PIC X.
02 FILLER REDEFINES CAMPO2F.
03 CAMPO2A PIC X.
02 CAMPO2I PIC X(20).
01 MAPA1O REDEFINES MAPA1I.
02 FILLER PIC X(12).
02 FILLER PIC X(3).
02 CAMPO1O PIC 9(5).
02 FILLER PIC X(3).
02 CAMPO2O PIC X(20).

FILLER
É consequência de TIPOAPFX=YES e contém informação de controlo necessária para
entregar os dados no mapa lógico.

CAMPOxL
Contirá a longitude do campo em recepção.

Manual de CICS Pag. 30 / 52


CAMPOxA
Contirá em atributo do campo em recepção.

CAMPOxI
CAMPOxO
Contirão o dado.

Notas à Geração.
Os nomes do campo, mapa e grupo não podem exceder 7 caracteres de longitude.
Os nomes do campo e mapa têm de ser únicos em todo o grupo.
O primeiro mapa de um grupo pode levar o mesmo nome que o grupo.
O caso DATA=BLOCK não dá lugar a um mapa lógico como o de cima, mas só a uma
área seguida, na que os dados se entregarão precedidos de uma etiqueta que
indica a sua longitude real. Tem a vantagem de poupar caracteres em transmissão,
mas complica enormemente o processo, pelo que apenas se utiliza.
O mapa lógico inclui-se no programa COBOL codificado, normalmente na WORKING,
uma instrução COPY nomset.

Transmissão de dados e MDT.


Um dos pontos débeis do CICS é a sua sensibilidade a congestões na transmissão
de dados, sobretudo na recepção. A sobrecarga faz que o sistema funcione cada
vez mais devagar, e chegando à saturação, se produza uma caída.

Manual de CICS Pag. 31 / 52


Mediante técnicas adequadas, o programador deve evitar a transmissão
desnecessária de dados.
Uma destas técnicas consiste na gestão adequada de um indicador a nível de campo
chamado Modified Data Tag ou MDT. Este indicador toma os valores:
MDT=0
Não se há digitado nada.
MDT=1
Há-se digitado ao menos uma posição.
de tal modo que só se transmitem desde o terminal os campos cujo MDT valha 1, é
dizer todos os campos activos.
O MDT põe-se em 1:
Digitando ao menos uma posição do campo
Utilizando o atributo FSET na definição do campo, mapa ou grupo.
O MDT põe-se a 0:

Utilizando o atributo FRSET na definição de campo, mapa o grupo com um comando


de envio de dados.
O atributo FSET não deveria ser utilizado, já que tem como consequência a
transmissão do dado que contém um campo, ainda que não se tenha digitado nada.
O dado deverá ter sido melhor guardado em COMMAREA para o seu posterior
tratamento.
Os mapas deveriam definir-se sempre com os campos inactivos (FRSET).

Recepção de dados do écran.


EXEC CICS
RECEIVE MAP( 'nome_do_mapa' | identificador )
[ MAPSET( 'nome_do_mapset' | identificador ) ]
[ INTO( identificador ) ]
END-EXEC

Manual de CICS Pag. 32 / 52


MAPSET
Pode omitir-se, se o mapa tem o mesmo nome do grupo.

INTO
Pode omitir-se, se o mapa lógico de entrada tem o mesmo nome do mapa com o
sufixo I.

Identificador
Os nomes do mapa e grupo podem carregar-se numa variável PIC X(8).
O BMS lê do écran os campos activos (MDT=1), e utiliza os prefixos de cada campo
no mapa lógico para depositar neles a longitude do campo e o atributo
respectivamente.

Para DATA=FIELD, a longitude é a da definição.


O identificador de nome igual ao do campo com o sufixo I, contém o dado
encolunado como arranjo à natureza e/ou definição.

Para os campos inactivos, o BMS recebe um só carácter, e com base nele, efectua
o recheio dos identificadores associados ao campo seguinte forma:
0 - à longitude.
LOW-VALUES - ao atributo e ao campo de entrada.

Se um campo tiver sido apagado com a tecla EOF, o BMS envia:


0 - à longitude.
X '80' - ao atributo.
LOW-VALUES - ao campo de entrada.

Condições excepcionais.

MAPFAIL
Tem duas causas:
O écran não está formatado.
Tal é o caso quando se ensaia RECEIVE no início do programa e a transacção é la
inicial ( código de transacção ).

Não se recebeu nenhum dado


Os campos estão inactivos e não se digitou nada.

Envio de dados para o écran.


EXEC CICS
SEND MAP( 'nome_do_mapa' | identificador )
[ MAPSET( 'nome_do_set' | identificador ) ]

Manual de CICS Pag. 33 / 52


[ FROM( identificador ) ]
[ ERASE | ERASEUP ]
[ CURSOR( n ) | CURSOR ]
[ MAPONLY | DATAONLY ]
[ FRSET ]
[ ACCUM ]
END-EXEC

FROM
Pode omitir-se se o identificador contém o nome do mapa com o sufixo O.

ERASE
Apaga o écran antes do display.

ERASEUP
apaga os campos UNPROT antes do display.

CURSOR( n )
Coloca o cursor na posição n do mapa.

CURSOR
Coloca o cursor no primeiro campo cuja longitude, antes do envio dos dados, se
tenha carregado con -1.

MAPONLY
Envia só o mapa físico.

DATAONLY
Envia só o mapa lógico.

FRSET
Põe a zero os MDTs de todos os campos.

ACCUM
O envio retém-se e acumula-se a mensagem em forma de página, sinalizando-se a
acumulação com a condição excepcional OVERFLOW.
Finalizada a acumulação de mensagens, inicia-se o display invocando uma
transacção de serviço do CICS com o comando:

EXEC CICS
SEND PAGE
END-EXEC

Manual de CICS Pag. 34 / 52


que habilita a paginação mediante teclas PF.

Condições excepcionais.

INVMPSZ
Tamanho de mapa incorrecto.

OVERFLOW
Produz-se na acumulação de mensagens.

Notas no uso de SEND MAP.


Em mapas INOUT, é recomendável apagar com LOW-VALUES a área de saída, antes de
carregar os dados; os campos de saída não carregados não se transmitirão para o
écran.
Os itens com sufixo A o F podem empregar-se para mover para eles valores que
troquem para o próximo envio os atributos do campo.
Assim, se se detectou que um campo contém um valor que não se deve modificar
(p.ex. a chave de um registo cujos dados se apresentam para modificação), pode
actualizar-se o atributo do campo para ASKIP, de modo que o cursor não se
detenha.
O sistema subministra um ficheiro, que nos bytes de atributo, se os há designado
por nomes simbólicos, chamado DFHBMSCA; este fichero pode incluir-se na WORKING
do programa mediante uma instrucción COPY.
Se se há pedido a inclusão de atributos estendidos ( EXTATT=YES ), o gerador
inclui no prefixo de cada campo no mapa lógico um campo mais no que se
entrega/pode negociar-se o dito atributo.

DFHBMSCA
Atributos do campo.
DFHBMASK ASKIP
DFHBMUNP UNPROT
DFHBMUNN UNPROT,NUM
DFHBMPRO PROT
DFHBMBRY BRT
DFHBMDAR DRK
DFHBMFSE FSET
DFHBMPRF PROT,FSET
DFHBMASF ASKIP,FSET
DFHBMASB ASKIP,BRT

Atributos estendidos.

Manual de CICS Pag. 35 / 52


Cor.
DFHDFCOL Cor por defeito
DFHBLUE
DFHRED
DFHPINK
DFHGREEN
DFHTURQ
DFHYELLO
DFHNEUTR

Apresentação.
DFHDFHI Brilhante
DFHBLINK Pestanejo
DFHREVRS Vídeo inverso
DFHUNDLN Sombreado

Caracteres de controle para saída não formatadas à impressora.


DFHBMPNL New Line
DFHBMPEM Fim da mensagem.

Ferramentas Suplementares.

Filas de Registos.
As filas de registos empregam-se para a gestão de dados no CICS.
A sua utilização supõe uma análise prévia da adequação da ferramenta às
necessidades traçadas.
As ferramentas de manejo de Listas são TRANSIENT DATA ( TD ) e TEMPORARY STORAGE
( TS )

TANSIENT DATA ( TD ).
Gestão de Dados Transitários.
A função TD compreende basicamente:
Os módulos de controle de Dados Transitários
Uma tabela de destinos ( DCT ).
Uma série de mandatos para petições ao TD
e causa dos serviços:
Manejo de Listas ( Dados Intrapartição )
Suporte de ficheiros sequenciais ( Dados Extrapartição ).

Manual de CICS Pag. 36 / 52


Tanto num caso como no outro, o tipo de dado define-se numa Tabela de Destinos
na qual se identifica por meio de um código de quatro caracteres e se descreve o
tipo e configuração.

Dados Intrapartição ( TD INTRA ).


Listas de Registos armazenados em ficheiros VSAM ESDS e têm estas
características:
O programador do sistema pode defini-las como reusáveis ou não reusáveis.
Uma lista não reusável só permite uma leitura, já que só se mantém leitura
sequencial para a frente. A efeitos internos, o CICS considera como apagado um
registo lido.
Os registos podem ser de longitude variável.
As operações admitidas são: leitura, escrita de um registo e moldagem da lista.
Só se pode associar o arranque automático de uma tarefa quando o número de
registos armazenados na lista chegue a um valor determinado (trigger).

Dados extrapartição ( TD EXTRA ).


São ficheiros sequenciais definidos como tais na DCT.
Pode-se ler e escrever.
Não se pode vaziar o fichero.
As operações de intercâmbio de dados executam-se mediante os comandos:

Leitura.
EXEC CICS
READQ TD QUEUE( 'nome' | identificador )
INTO( identificador )
[ LENGTH( identificador ) ]
END-EXEC

nome
É o da lista a aceder, em forma explícita, entre vírgulas, ou carregado numa
variável PIC X(8). Há de existir na Tabela de Control de Destinos.

INTO
Aponta a uma área de WORKING, destino dos dados.

LENGTH
Especifica uma variável em PIC S9(4) COMP que contém a longitude dos dados a
ler, ou a maior esperada.

Condições excepcionais.
NOTOPEN
Lista não disponível.

Manual de CICS Pag. 37 / 52


O ficheiro que a suporta não está aberto.

LENGERR
Se se especifica LENGTH, longitude dos dados excede ao indicado.

QIDERR
Lista não existe.

QZERO
Lista não reusável vazia ou que há chegado ao fim.

Escrita.

EXEC CICS
WRITEQ TD QUEUE( 'nome' | identificador )
FROM( identificador )
[ LENGTH( n | identificador ) ]
END-EXEC

Condições excepcionais.

NOTOPEN

NOSPACE
Não há espaço no disco.

QIDERR

Vazio.
EXEC CICS
DELETEQ TD QUEUE( 'nome' | identificador )
END-EXEC

Condições excepcionais.

QIDERR

TEMPORARY STORAGE ( TS ).

Manual de CICS Pag. 38 / 52


Memória Temporária.
Listas de Registos, que não necessitam estar registadas em nenhuma tabela,
suportadas:
Em memória
Em disco ( VSAM ESDS ).
As características mais importantes são:
Criação dinâmica de listas.
Recuperação sequencial ou ao acaso.
Actualização.
Registos de longitude variável.
Apagamento e destruição de uma lista.
Os registos das listas TS ( itens ), podem recuperar-se mais de uma vez.
A lista em si pode definir-se de tal forma que o CICS a guarde de uma sessão
para outra, ainda que no princípio será uma lista que se perderá ao parar o
CICS.
O acesso faz-se com os comandos:
Leitura.

EXEC CICS
READQ TS QUEUE( 'nome' | identificador )
INTO( identificador )
[ LENTGH( identificador ) ]
ITEM( n ) | NEXT
END-EXEC

nome
Lista à que se quer aceder, é uma tira de até oito caracteres ou o valor de uma
variável PIC X(8).

INTO
Aponta a uma área em que se vai receber o item.

LENGTH
Referencia uma variável em PIC S9(4) COMP na que se deposita a longitude
desperada do item ou a máxima longitude que se pretende ler.

ITEM( n )
Recuperar o item número n.

NEXT
Recuperar o item seguinte ao último lido.

Condições excepcionais.-

Manual de CICS Pag. 39 / 52


QIDERR
Nome lista não encontrado.

ITEMERR
Com ITEM( n )
Item não encontrado.

Com NEXT
Fim da lista.

Escrita.
EXEC CICS
WRITEQ TS QUEUE( 'nome' | identificador )
FROM( identificador )
[ LENGTH( n | identificador ) ]
[ ITEM( n ) [ REWRITE ] ]
MAIN | AUXILIARY
END-EXEC

nome
É o da lista a aceder e será uma tira de até oito caracteres.
Pode escrever-se de forma explícita, entre vírgulas, ou carregá-lo numa variável
PIC X(8).
Se não se emprega o parâmetro REWRITE e a lista não existe, o CICS cria-a e
mantém-na acessível a todas as tarefas.
O problema de evitar compartições de dados não desejadas, soluciona-se gerando
nomes de lista únicos por tarefa, por exemplo, encadeando os conteúdos dos
campos TRNID e TRMID do EIB, ( respectivamente identificativo de transacção e do
terminal ).

ITEM( n )
Assinalar ao item a gravar o número n. Se não se específica, o CICS assinala o
número do último mais um.

REWRITE
Actualizar o item n. Se se específica, há que especificar também ITEM.

MAIN
Se a lista não existe, cria-se em memória. A alternativa e o defeito é
AUXILIARY, que cria a lista em disco.

Condições excepcionais.-

Manual de CICS Pag. 40 / 52


QIDERR
Com REWRITE, nome da lista não encontrado.

ITEMERR
Com ITEM
Item já existente.

Com ITEM e REWRITE


Item não encontrado.

Apagado.
EXEC CICS
DELETEQ TS QUEUE( 'nome' | identificador )
END-EXEC

Condições excepcionais.

QIDERR

Gestão de dados por pontos.


Este método permite a gestão de dados por acesso directo às áreas de dados do
CICS, evitando o trabalho ( e tempo ) de ter que transvasá-los às áreas do
WORKING do programa.
O método é uma alternativa ao visto, até agora chamado MODO MOVE e constitui o
MODO LOCATE em que as referências INTO que especificam áreas de WORKING,
substituem-se por referências a pontos.
O modo LOCATE consiste em utilizar directamente os dados que o CICS deposita na
COMMON WORK AREA ( CWA ) e que, no modo MOVE, transvasam-se a áreas de WORKING
do programa.
Por isso, utilizam-se espelhos das áreas de dados na LINKAGE SECTION do programa
em vez de áreas de WORKING e definem-se pontos.

Block Locator for Linkage.


Em geral, um programa montador (LINK), define por conta própria, um ponto para
cada nível 01 que encontre em LINKAGE, denominado BLL (Block Locator for
Linkage).
O conjunto destes BLLs forma uma lista apontada por um BLL adicional, também
gerado pelo próprio montador.

Manual de CICS Pag. 41 / 52


Um programa com:
LINKAGE SECTION.
01 AREA-1 PIC X(100).
daria lugar a que o montador gera-se uma lista com os elementos:
PIC S9(8) COMP. Ponto à lista
PIC S9(8) COMP. Ponto à AREA-1
e se modifica-se da seguinte forma:

LINKAGE SECTION.
01 BLL-CELLS.
02 FILLER PIC S9(8) COMP.
02 PUNT-AREA-1 PIC S9(8) COMP.

01 AREA-1 PIC X(100).


o item BLL-CELLS se superpondría à lista do BLL geradas pelo montador, de modo
que carregando convenientemente PUNT-AREA-1 poderá aceder-se à área AREA-1 do
programa invocante.
Na prática, sem obstáculo, isto não pode fazer-se desta forma tão intuitiva,
pois o COBOL trabalha por referência e não por valor, mas alguns entornos
operativos dispõem-se da forma de entregar um valor em lugar de uma referência.
Tal é o caso do CICS, em que o traductor incorpora sempre uma LINKAGE SECTION
com quatro níveis 01, se o programador não o faz, de forma que dá lugar a uma
lista:
BLL1 EIB
BLL2 COMMAREA
BLL3 FICTICIO1 aponta-se a si mesmo
BLL4 FICTICIO2

Se o programador codifica BLLs na LINKAGE SECTION do programa, fará-o na forma


que se descreve mais acima; o montador do enlace insere na BLL3 a direcção do
BLL-CELLS, de modo que BLL4 contirá a direcção da AREA-1.
No modo LOCATE, um comando:

EXEC CICS
READ DATASET( 'FICHERO' )
RIDFLD( W-CLAVE )
SET( PUNT-AREA-1 )
UPDATE
END-EXEC
põe no PUNT-AREA-1 a direcção do segmento da CWA que contém o registo lido, e
por tanto, é acessível ao programa COBOL o item AREA-1 e todas as subdivisiões e
redefinições que possa ter.

Se, depois de alterar o conteúdo da AREA-1 executa-se:

Manual de CICS Pag. 42 / 52


EXEC CICS
REWRITE DATASET('FICHEIRO')
FROM( AREA-1 )
END-EXEC
modifica-se o registo directamente desde AREA-1, apontada por PUNT-AREA-1.
Quando não existe o transvase de dados da CWA a WORKING, o processo é muito mais
rápido.
A longitude do ponteiro quase sempre é de 8 bytes, ainda que para determinados
acessos possa ser de 4.

Enlace com outros programas.


Quando as necessidades o requerem, um programa pode pedir a execução de outro: o
CICS seguirá considerando esta actividade como a mesma tarefa.
O passo do controle de um programa a outro pode fazer-se de duas maneiras:

Enlace a nível distinto.


De um programa pede-se a execução de outro, e o programa invocante fica detido
até que o invocado lhe devolve o controle.

Enlace ao mesmo nível.


Um programa cumpre com a sua função e pede a execução de outro de maneira que o
invocado substitua ao invocante.

O primeiro caso dá-se ao enlaçar com programas que executam funções muito
concretas, p.ex. ler um registo de um ficheiro; o programa invocante esperará
que o invocado recupere a informação que se lhe pede.
O segundo caso dá-se em programas que fazem de menú e apresentam uma selecção de
opções. Uma vez seleccionada uma opção, o programa não tem que cumprir missão e
a memória que ocupa poderia ser utilizada pelo que se carrega.
Em ambos os casos, pode passar-se dados ao programa invocado utilizando a
COMMAREA.
A referência ao programa invocado faz-se directamente pelo seu nome e não pelo
seu código de transacção; o controle faz-se através da tabela do PCP.

Enlace a nível distinto.


EXEC CICS
LINK PROGRAM( 'nome_do_programa' )
[ COMMAREA( identificador )
[ LENGTH( n | identificador ) ] ]
END-EXEC

Enlace ao mesmo nível.


EXEC CICS

Manual de CICS Pag. 43 / 52


XCTL PROGRAM( 'nome_do_programa' )
[ COMMAREA( identificador )
[ LENGTH( n | identificador ) ] ]
END-EXEC

Notas no uso de XCTL/LINK.-


O comando RETURN sem parâmetros leva ao programa de nível superior, ou ao CICS
se o nível é o mais alto. Se o programa invocado leva código de transacção
associado, não há nenhum impedimento em mantê-lo em sessão com RETURN TRANSID,
se as necessidades da aplicação o requerem.
Se o programa foi invocado com LINK, o programa invocante fica detido até que se
lhe devolva o controle. O único comando que devolve o controle é:

EXEC CICS
RETURN
END-EXEC
e também no caso de que o programa invocante leve código de transacção
associado.
Se um programa PROGTR03 com código de transacção TR03 emite um comando LINK, e o
programa invocado tenta devolver-lhe o controle com:

RETURN TRANSID('TR03')
o CICS carregará uma nova cópia de PROGTR03.
Se um programa LINKado recebe dados e deve contestar, utilizará a sua própria
DFHCOMMAREA para escrever nela os datos que deseja enviar ao programa invocante.
No caso deste tipo de enlace, a DFHCOMMAREA do programa invocado não é mais que
um ponteiro a uma área de WORKING do programa invocante. Se não recebe dados,
poderia contestar utilizando uma lista.

Arranque e Sincronização de Tarefas.

Arranque de Tarefas.

Manual de CICS Pag. 44 / 52


Uma tarefa pode iniciar outra ou outras diferentes, incluso em terminais
diferentes do actual, com planificação do tempo de arranque e passo de dados à
tarefa iniciada através de uma lista TS.
O CICS planifica a informação da tarefa a iniciar num bloco de controle AID que
logo utilizará.
A tarefa inicia-se com o comando START. Os dados passam-se mediante uma lista TS
e recuperam-se na tarefa iniciada com o comando RETRIEVE.
EXEC CICS
START INTERVAL( hhmmss ) | INTERVAL(0) | TIME( hhmmss )
TRANSID( 'código_de_transacção_a_arrancar' )
[ TERMID( 'código_de_terminal' ) ]
[ REQID( 'nome' ) ]
[ FROM( identificador )
[ LENGTH( n | identificador ) ]
QUEUE( 'nome_da_lista_TS' ) ]
[ RTRANSID( 'código_da_transacção_origem' ) ]
[ RTERMID( 'código_do_terminal_origem' ) ]
END-EXEC

INTERVAL
Marca o intervalo de tempo que há de decorrer para que a tarefa arranque.

hhmmss
É um número.

0 - Arranca instantaneamente a tarefa.

TIME
Especifica a hora de arranque da tarefa.
Se é maior ou igual ao tempo actual, arranca a tarefa quando corresponda.
Se está entre a hora actual e menos seis horas, assume a hora actual.
Se está atrasado em mais de seis horas em respeito à hora actual, assume a mesma
hora do dia seguinte.

TRANSID
Código de transacção da tarefa a arrancar.

TERMID
Código do terminal no qual se vai arrancar a tarefa.

REQID

Manual de CICS Pag. 45 / 52


Nome de quatro caracteres com o que se caracteriza o sucesso da execução deste
comando. É útil empregá-lo porque permite a cancelação do comando, se a tarefa
não foi arrancada ainda, fazendo referência a ele num comando CANCEL.

FROM LENGTH

QUEUE
Parâmetros para passar dados que se gravaram numa lista TS.
Se a lista não existe, cria-se. Neste caso é muito interessante que o nome da
lista se forme de maneira que seja única em todo o sistema.

RTERMID
RTRANSID
Identificam transacção e terminal desde que se arranca a tarefa.

Condições excepcionais.-

TERMIDERR
TRANSIDERR

No caso de que se passem dados e a tarefa arrancada esteja associada a um


terminal, podem emitir-se vários comandos START sucessivos, para provocar
acumulação de dados na lista QUEUE, mas só o primeiro inicia a tarefa.
Se a tarefa arrancada não está associada a um terminal e se emitem vários
comandos START, cada um deles arrancará uma nova tarefa e só poderá passar-se um
dado de cada vez.
Em caso de que se passem dados, a tarefa arrancada deverá executar o comando:
EXEC CICS
RETRIEVE INTO( identificador )
[ LENGTH( identificador ) ]
[ QUEUE( identificador ) ]
[ RTRANSID( identificador ) ]
[ RTERMID( identificador ) ]
[ WAIT ]
END-EXEC

identificativos associados a QUEUE, RTRANSID, RTERMID

Neles entregam-se os nomes da lista e os códigos de transacção e terminal


invocantes, se se codificaram os mesmos no comando START.

INTO
Aponta à área de recepção do dado.

Manual de CICS Pag. 46 / 52


WAIT
Faz com que a tarefa fique suspendida se se esgotaram os dados

Condições excepcionais.

ENDDATA
Se a tarefa está associada a um terminal e se passaram dados acumulados, pode
emitir-se uma série de comandos RETRIEVE, para recuperar todos os dados.

Sincronização de Tarefas.
O arranque de uma tarea até outra, não implica que a tarefa invocante fique
detida.
Só se a tarefa arrancada efectuar processos cujos resultados tenham de ser
processados pela tarefa invocante, esta terá de ser detida.

A detenção pode fazer-se:


Por espera de Tempo ( WAIT )
Por espera de Sucesso ( EVENT )

Por espera de Tempo.


Se específica uma suspensão da tarefa por um tempo determinado.

EXEC CICS
DELAY INTERVAL( hhmmss ) | INTERVAL( 0 ) | TIME( hhmmss )
REQID('nome')
END-EXEC

O significado dos parâmetros é o mesmo que para START.


Esta espera codifica-se depois de ter arrancado outra tarefa para parar a
actual.
A tarefa arrancada pode fazer terminar a espera da tarefa invocante com:

EXEC CICS
CANCEL REQID('nome')
[ TRANSID('código_de_transacção') ]
END-EXEC

REQID
Comando a anular ( neste caso, DELAY ) e pode ter sido passado nos dados tarefa
arrancada.

TRANSID

Manual de CICS Pag. 47 / 52


Identifica a transacção que deu o nome ao comando que se vai anular. É
conveniente especificar ambos para identificar de forma unívoca o comando.

Por espera de Sucesso.


Esta função suporta-se por meio de dois comandos:

POST
WAIT EVENT
EXEC CICS
POST INTERVAL( hhmmss ) | INTERVAL( 0 ) | TIME( hhmmss )
SET( puntero_ECA )
[ REQID('nome') ]
END-EXEC

Este comando cria um bloco de comunicação chamado Event Control Area ou ECA, de
quatro bytes de longitude de valor zero e inicia uma contagem de tempo.
Quando o tempo fixado em INTERVAL | TIME tenha expirado, o CICS introduz no
primeiro byte do ECA o valor 40.
A sintaxe do comado exige a referência SET (ponteiro), de modo que para este
caso há que escrever uma lista BLL na LINKAGE SECTION do programa.
O parâmetro REQID servirá para identificar o sucesso de ter estabelecido o ECA.
Sem obstáculo pelo facto de ter emitido um comando POST, a tarefa não se detém;
se houver que detê-la, há que executar o comando:

EXEC CICS
WAIT EVENT ECADDR( área_ECA )
END-EXEC
que detém a tarefa até que o primeiro byte do bloco ECA passe de 0 a 40, ou
seja, se cancele o POST.
A cancelação do POST ocorre, à parte da expiração do tempo:
Se a tarefa termina
Se a tarefa emite outro comando POST
Se se emite um comando CANCEL utilizando o REQID.
Este comando tem o mesmo formato que o já visto para o comando DELAY, e pode
emiti-lo à tarefa arrancada, para sinalizar que já terminou e ter que o CICS
voltar a dar controle à tarefa invocante

Comandos especiais.

ABEND
Emprega-se para induzir terminações anormais da tarefa:

Manual de CICS Pag. 48 / 52


EXEC CICS
ABEND ABCODE('código')
END-EXEC

código
Tira de quatro caracteres à eleição do programador, que pode indicar o ponto do
programa em que se provoca a terminação anormal.

BIF DEEDIT
É uma função interna ( Build In Function) do CICS muito útil quando se trabalha
com campos numéricos editados em mapas de entrada/saída, que podem acarretar
problemas na recepção.

EXEC CICS
BIF DEEDIT FIELD( campo )
[ LENGTH( n | identificador ) ]
END-EXEC

a actuação da função é:
Suprimem-se do campo os caracteres não numéricos.
Os caracteres numéricos escrevem-se juntos, da direita à esquerda a partir do
final do campo.
As posições até ao início do campo se reenchem com zeros.
Se não se específica LENGTH, tratam-se todas as posições do campo.

Saídas impressas em CICS.


Estam resolvidas na maioria das instalações mediante uma lista TD que inicia por
trigger uma transacção que se encarrega do envio dos dados à impressão.
Os programas do utilizador só têm de depositar os registos da impressão na
lista.

Hardcopy.
Ao definir os terminais ao CICS, pode assinalar-se a uma tecla de função, que
suele ser uma das PAs, a função de hardcopy.
A impressão realiza-se sobre uma impressora associada a um terminal ou a um
grupo de terminais.
O comando ISSUE PRINT cumpre o mesmo cometido por programa.

Notas.
O buffer da impressora tem de ter capacidade para alojar ao buffer do écran.
A impressora não pode estar associada a nenhuma tarefa.

Manual de CICS Pag. 49 / 52


Saídas impressas desde BMS.

Pode fazer-se impressões formatadas desde o BMS com uma variante do comando SEND
MAP ao que se lhe juntam alguns parâmetros:

SEND MAP
.....
PRINT
Lnn

onde nn é o número de linhas por página e pode tomar os valores 40, 64 e 80.

Transacções de serviço do CICS.-

CSSN
Sign-on do sistema.
Deve executar-se se é necessário identificar-se, antes de poder executar
qualquer outro programa do utilizador ou de serviço. Retorna automaticamente ao
CICS, se os dados que pede introduzem-se correctamente. Pode sair-se com F3.

CEMT
Executa múltiplas funções. Se o código se digita sem parâmetros, vai
apresentando opções.
Uma das mais usadas, INQUIRE ( I ), emprega-se para investigar o estado das
entidades do CICS:

CEMT I DAT
Apresenta uma lista dos ficheiros que maneja o CICS, dando, entre outros dados o
estado ( OPE | CLO ), que pode modificar-se movendo o cursor adequadamente.
Utiliza-se para desenganchar ficheiros do CICS, p.ex. para recarregá-los.

CEMT I PRO
Apresenta uma lista dos programas do utilizador e grupos de mapa, dando, entre
outros dados o seu estado ( ENA | DIS ), para indicar a disponibilidade do
programa ou grupo. Emprega-se para dar de alta novas versões, pondo o cursor ao
final da linha e teclando NEW.

Nota.
Os ficheiros que tenham sido fechados ou os programas que tenham sido
desabilitados, retém o seu estado, ainda que se re-arranque o CICS.

São válidas referências do tipo:

Manual de CICS Pag. 50 / 52


CEMT I PRO( PROG* )
para conseguir um display dos programas cujo nome comece por PROG.

CEMT S PRO( PROG* ) N


dá de alta todos os programas cujo nome comece por PROG.

Retorna ao CICS com F3.

CSMT
Teclando:

CSMT NEW,PGRMID=programa
dá de alta a nova versão de programa.
Retorna ao CICS com F3.

CEDF
Depurador on-line.
Deve arrancar-se antes de começar a execução do programa que se quer traçar:
CEDF o CICS responderá: This terminal EDF-Mode on
À continuação introduz-se o código do programa a traçar.
EDF apresenta um primeiro écran no qual aparecem as áreas EIB e DFHCOMMAREA.
EDF detém-se antes da execução de cada comando CICS, permitindo múltiplas
funções, entre elas:

Modificar parâmetros do comando


Aceder, mediante a pulsação da tecla F5, à imagem do programa em memória no
momento actual. Podem modificar-se, por exemplo, dados de WORKING para canalizar
a execução da forma mais conveniente. Pode paginar-se dentro da imagem para a
frente e para trás.
Em relação com a modificação de dados de WORKING, convém fazer notar a
dificuldade de encontrar esta num display em formato DUMP, parte em hexadecimal,
parte em carácter, e de localizar um item determinado dentro dela. Certos
truques, sem embaraço, fazem este trabalho mais fácil.
Os itens de WORKING com níveis 01 e 77 ensamblam-se à fronteira de meia palavra
ou palavra inteira; os demais, contíguos.
Por tanto escreva-se toda a WORKING empregando níveis do 02 em frente, na forma:

WORKING-STORAGE SECTION.
01 FILLER.
03 FILLER PIC X(19) VALUE '** START WORKING **'.
03 CAMPO1 PIC ...
..............

Manual de CICS Pag. 51 / 52


com o qual:
Localiza-se facilmente o início da WORKING.
Todos os dados seram contíguos e basta com contar bytes de longitude para passar
de um a outro.
Uma vez executado o comando, EDF informa o resultado. Este resultado também pode
modificar-se, bem para provocar o tratamento de uma condição excepcional, como
para impedi-lo.

Cancelar a execução com a tecla F12.


Retorna ao CICS com F3.

CECI
Permite a execução de comandos CICS sem necessidade de programa.
Primindo a tecla F5, acede-se a uma WORKING fictícia, na que se podem definir
variáveis, p.ex. para ler registos de um ficheiro.
Retorna ao CICS com F3.

CSSF
Desconexão do CICS:

CSSF LOGOFF

Manual de CICS Pag. 52 / 52