cobol cics

of 61 /61
CICS Manual de CICS Pag. 1 / 61

Upload: roger-correa

Post on 02-Dec-2015

470 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Cobol CICS

CICS

Manual de CICS Pag. 1 / 52

Page 2: Cobol CICS

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

Page 3: Cobol CICS

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

Page 4: Cobol CICS

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.

Acesso a ficheiros

Manual de CICS Pag. 4 / 52

Page 5: Cobol CICS

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 REALCICS000900* EIBTIME TIME IN 0HHMMSS FORMAT001000* EIBDATE DATE IN 00YYDDD FORMAT001100* EIBTRNID TRANSACTION IDENTIFIER

Manual de CICS Pag. 5 / 52

Page 6: Cobol CICS

001200* EIBTASKN TASK NUMBER001300* EIBTRMID TERMINAL IDENTIFIER001400* DFHRSVD1 RESERVED001500* EIBCPOSN CURSOR POSITION001600* EIBCALEN COMMAREA LENGTH001700* EIBAID ATTENTION IDENTIFIER001800* EIBFN FUNCTION CODE001900* EIBRCODE RESPONSE CODE002000* EIBDS DATASET NAME002100* EIBREQID REQUEST IDENTIFIER002200* EIBRSRCE RESOURCE NAME002300* EIBSYNC SYNCPOINT REQUIRED002400* EIBFREE TERMINAL FREE REQUIRED002500* EIBRECV DATA RECEIVE REQUIRED002600* EIBSEND RESERVED002700* EIBATT ATTACH DATA EXISTS002800* EIBEOC GOTTEN DATA IS COMPLETE002900* EIBFMH GOTTEN DATA CONTAINS FMH003000* EIBCOMPL RECEIVE COMPLETE FLAG003100* EIBSIG SIGNAL FLAG003200* EIBCONF CONFIRM FLAG003300* EIBERR LU 6.2 ERROR FLAG003400* EIBERRCD LU 6.2 ERROR CODE003500* EIBSYNRB SYNCPOINT ROLLBACK FLAG003600* EIBNODAT NO DATA FLAG003700* EIBRESP ERROR CODE RESPONSE003800* EIBRESP2 MORE ERROR CODES003900* EIBRLDBK ROLLED BACK FLAG004000*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

Page 7: Cobol CICS

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

Page 8: Cobol CICS

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

Page 9: Cobol CICS

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

Page 10: Cobol CICS

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

Page 11: Cobol CICS

........

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

Page 12: Cobol CICS

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

Page 13: Cobol CICS

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

Page 14: Cobol CICS

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

Page 15: Cobol CICS

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

Page 16: Cobol CICS

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

Page 17: Cobol CICS

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

Page 18: Cobol CICS

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

Page 19: Cobol CICS

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

Page 20: Cobol CICS

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

Page 21: Cobol CICS

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

Page 22: Cobol CICS

......

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

Page 23: Cobol CICS

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

Page 24: Cobol CICS

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

Page 25: Cobol CICS

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

Page 26: Cobol CICS

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

Page 27: Cobol CICS

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 ) ]

LABELCumpre dois cometidos:Se se deixa em brancoDefine 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.

POSPosição do campo dentro da janela que define o mapa.

LENGTHA longitude do item.

ATTRBcontrol_cursor

ASKIPSalto automático.

UNPROTCampo não protegido; podem-se digitar dados.

PROTCampo protegido; só se podem premir as teclas de tabulação, retorno de carga e ENTER.

Manual de CICS Pag. 27 / 52

Page 28: Cobol CICS

tipo NUMCampo numérico.

representaçãoNORMIntensidade normal.

BRTBrilhante.

DRK Invisível.

ICO cursor aparecerá neste campo.

FSETCampo em estado activo.

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

JUSTIFYAlineação de dados dentro do campo e recheio de posições não significativas:

LEFT | RIGHTAlineação à direita | esquerda.

BLANK | ZERORecheio com brancos | zeros.

PICIN

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

GRPNAMEAssociação do campo a outro como nível superior.

OCCURSDefiniçã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

Page 29: Cobol CICS

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

Page 30: Cobol CICS

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

Page 31: Cobol CICS

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

Page 32: Cobol CICS

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

Page 33: Cobol CICS

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

Page 34: Cobol CICS

[ 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

Page 35: Cobol CICS

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

Page 36: Cobol CICS

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

Page 37: Cobol CICS

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

Page 38: Cobol CICS

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

Page 39: Cobol CICS

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

Page 40: Cobol CICS

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

Page 41: Cobol CICS

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

Page 42: Cobol CICS

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

Page 43: Cobol CICS

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

Page 44: Cobol CICS

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

Page 45: Cobol CICS

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

Page 46: Cobol CICS

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

Page 47: Cobol CICS

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

Page 48: Cobol CICS

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

Page 49: Cobol CICS

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

Page 50: Cobol CICS

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

Page 51: Cobol CICS

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

Page 52: Cobol CICS

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