Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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.
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.
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
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.
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.
Ao arrancar o programa.
Ao digitar o código de transacção, o CICS aceita dados iniciais para o programa.
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.
identificativo
O nome de um nível em WORKING.
longitude
Um valor numérico | uma variável em PIC S9(4) COMP.
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.
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.
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:
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.
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.
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.
Condições excepcionais
Para estes dois comandos, são as mesmas que as do comando STARTBR, excepto
NOTFND.
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.
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 .......
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
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.
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.
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:
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
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.
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 ).
LINE,COLUMN
Posição do mapa no écran; posição da esquina superior esquerda.
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.
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.
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
Só mapas físicos
TYPE=DSECT
Só mapas lógicos
TYPE=MAP
Ambos
TYPE=&SYSPARM
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.
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.
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 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.
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 ).
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
Condições excepcionais.
INVMPSZ
Tamanho de mapa incorrecto.
OVERFLOW
Produz-se na acumulação de mensagens.
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.
Apresentação.
DFHDFHI Brilhante
DFHBLINK Pestanejo
DFHREVRS Vídeo inverso
DFHUNDLN Sombreado
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 ).
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.
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 ).
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.-
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.-
ITEMERR
Com ITEM
Item já existente.
Apagado.
EXEC CICS
DELETEQ TS QUEUE( 'nome' | identificador )
END-EXEC
Condições excepcionais.
QIDERR
LINKAGE SECTION.
01 BLL-CELLS.
02 FILLER PIC S9(8) COMP.
02 PUNT-AREA-1 PIC S9(8) COMP.
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.
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.
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 de Tarefas.
INTERVAL
Marca o intervalo de tempo que há de decorrer para que a tarefa arranque.
hhmmss
É um número.
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
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
INTO
Aponta à área de recepção do dado.
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.
EXEC CICS
DELAY INTERVAL( hhmmss ) | INTERVAL( 0 ) | TIME( hhmmss )
REQID('nome')
END-EXEC
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
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:
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.
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.
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.
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.
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:
WORKING-STORAGE SECTION.
01 FILLER.
03 FILLER PIC X(19) VALUE '** START WORKING **'.
03 CAMPO1 PIC ...
..............
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