|
A transmissão de dados entre a tarefa e o terminal é feita pelo TERMINAL CONTROL PROGRAM ( TCP ).
A principal finalidade do TCP é a de efetuar a comunicação dos programas de aplicação com os terminais.
Enquanto não for terminada a tarefa, a mesma fica 'ATACHADA' com o terminal e sempre que aquele terminal for 'ACIONADO' será verificado se há alguma
transação 'ATACHADA' e se houver, qual a transação que está atachada ao mesmo.
Suas principais funções sao:
- prover a inserção e retirada dos caracteres de controle de transmissão ( protocolo )
- requisitar o inicio de uma nova tarefa
- transferir informações do programa para o terminal através de interface com o BMS
- transferir informações do terminal para o programa tambem através de interface com o BMS
O TCP possui a TERMINAL CONTROL TABLE ( TCT ) que é a tabela de controle de terminais, onde todos os terminais (video, impressora) devem estar cadastrados.
A TCT contém as seguintes informações:
- caracteristicas do terminal
- endereco para o cics
- codigo do terminal
- informacoes de controle ( ex.: se já existe uma transação 'ATACHADA AO TERMINAL').
Comando SEND MAP
Formato do comando:
| EXEC CICS SEND |
Explicação do argumento |
| MAPSET ('MAPSET') |
Especifica o nome do MAPSET em que se encontra o mapa a ser enviado |
| MAP ('MAPA') |
Especifica o nome do mapa que deseja-se enviar |
| FROM (MP8601AO) |
Especifica a área onde estão os dados a serem enviados.
Se este para metro for omitido, o BMS considera que os dados estão na area de trabalho definida pelo mapa simbólico |
| MAPONLY |
Será enviado apenas o mapa, nenhum dado variável será enviado, sómente as constantes serão enviadas |
| DATAONLY |
Apenas os dados serão enviados. A opção 'FROM' deve ser especificada |
| CURSOR (VALOR) |
Especifica a posição absoluta do CURSOR na tela em relação a zero.
Esta opção pode ser utilizada quando desejarmos alterar a posição do CURSOR daquela definida na tela sendo que 'VALOR' deve ter a
PIC S9(04) COMP.
Quando não especificado 'VALOR', o CURSOR será posicionado no primeiro campo da tela que recebeu valor -1 (menos um) |
| ERASE |
Limpa toda a tela do terminal antes do mapa ser enviado.
Não é aconselhavel usar esta opção juntamente com a opção 'DATAONLY' |
| ERASEAUP |
Limpa todos os campos desprotegidos antes do mapa ser enviado |
| ALARM |
Emite um alarme ao enviar o mapa ( usado somente se não foi especificado 'CTRL=ALARM' no BMS |
| FREEKB |
Destrava o terminal para digitação de informações ( usado somente se não foi especificado 'CTRL= FREEKB' no BMS |
| FRSET |
Restaura o 'MDT'. Todos os campos serão transmitidos ( usado somente se não foi especificado 'CTRL=FRSET' no BMS |
| PRINT |
Envia para a impressora. Usado quando o terminal é uma impressora |
| TERMINAL |
Envia para o terminal. Usado quando o terminal é o vídeo ( DEFAULT ) |
| ACCUM |
'ACUMULA' mapas sem enviar ao terminal |
| PAGING |
Os mapas serão guardados em 'TEMPORARY STORAGE' ( TS ).
Esta opção é usada em conjunto com a opção 'ACCUM' para enviar um conjunto de mapas ao terminal |
Este comando é utilizado para 'enviar' um mapa para o terminal.
Exemplo do comando:
EXEC CICS
SEND MAP ('MP8601A')
MAPSET ('XP86851')
ERASE
CURSOR
END-EXEC.
|
Explicacao do exemplo:
Será enviado para o terminal o mapa MP8601A que pertence ao MAPSET XP86851 e o cursor ficará posicionado no primeiro campo da tela que recebeu valor -1
( menos um ), sendo que os dados que haviam na tela serão 'REMOVIDOS' antes da exibição do mapa MP8601A.
Condição de exceção:
INVPMSZ: ocorre se for enviado um mapa que nao cabe físicamente no terminal.
Este tipo de erro nao é detectado quando da compilação do mapa físico.
INVREQ: ocorre se após termos enviado vários mapas com as opções 'ACCUM' e 'PAGING', FOR feita uma tentativa de enviar mapa sem estas opções.
Como veremos adiante, todo o acúmulo de mapas deve ser terminado pelo comando 'SEND PAGE'.
OUTROS: TSIOERR, RETPAGE
Comando RECEIVE MAP
Formato do comando:
| EXEC CICS RECEIVE |
Explicação do argumento |
| MAPSET ('MAPSET') |
Especifica o nome do MAPSET em que se encontra o mapa a ser recebido. |
| MAP ('MAPA') |
Especifica o nome do mapa que deseja-se receber. |
| INTO (MP8601AI) |
Especifica a área onde o mapa lógico será recebido.
Se este parametro for omitido, o 'BMS' considera que os dados irão para a área de trabalho definida pelo mapa simbólico. |
Este comando é utilizado para 'receber' dados do último mapa exibido no terminal.
Pode ser codificado sem nenhum argumento, porém servirá apenas para o tratamento de funções programadas.
Exemplo do comando:
EXEC CICS
RECEIVE MAP ('MP8601A')
MAPSET ('XP86851')
END-EXEC.
|
Explicação do exemplo:
Será recebido do terminal o mapa MP8601A que pertence ao MAPSET XP86851.
Condição de exceção:
MAPFAIL: ocorre se, ao executar o comando, o bms verificar que nao foi digitado nenhum dado pelo operador na tela ( correspondente a tela vazia ).
Comando SEND PAGE
Formato do comando:
| EXEC CICS SEND PAGE |
Explicação do argumento |
| AUTOPAGE |
As telas serão enviadas ao terminal logo que este esteja disponível sem intervenção do operador. Usado para impressora. |
| NOAUTOPAGE |
As telas serão enviadas ao terminal, uma de cada vez, em respostas aos comandos de paginação do operador.
Normalmente é definida no sistema 'TECLAS PROGRAMADAS' (PF's) para a paginação. |
| RELEASE |
Transfere o controle para o nível lógico mais alto (pode ser um programa de aplicação ou o proprio CICS).
É a opção mais utilizada e poder ser utilizada com a opção 'TRANSID'. |
| TRANSID ('TRANSACAO') |
Transfere o controle para a transação indicada, logo após a operação se completar (pode ser codificado junto com a opção
'RELEASE' para fazer com que o terminal coloque-se na modalidade pseudo-conversacional, logo após a paginação se completar). |
| RETAIN |
Indica que após a paginação ser encerrada o controle será devolvido ao programa de aplicação e esta opção não é muito utilizada
pois ela torna o programa conversacional.
Não pode ser especificada juntamente com a opção 'RELEASE' ou 'TRANSID'. |
Este comando e' utilizado para 'ENVIAR' varios mapas para o terminal, mapas estes 'ACUMULADOS' anteriormente através da opção 'ACCUM' do comando 'SEND MAP'.
Exemplo do comando:
EXEC CICS
SEND PAGE
NOAUTOPAGE
RELEASE
TRANSID ('P851')
END-EXEC.
|
Explicação do exemplo:
Será enviado para o terminal o conjunto de mapas anteriormente 'acumulados' ficando a disposição do usuario para paginá-las e após o término da paginação,
o controle será devolvido a transacao 'P851'.
Condição de exceção:
- INVREQ: ocorre se tentar emitir o comando sem que tenha sido 'ACUMULADO' páginas através das opçoes 'ACCUM' E 'PAGING'.
- OUTROS: TSIOERR, RETPAGE
Comando PURGE MESSAGE
Formato do comando:
| EXEC CICS PURGE MESSAGE |
Não possui argumento |
Este comando deleta todas as paginas anteriormente 'ACUMULADAS' atraves da opcao 'ACCUM' do comando 'SEND MAP'.
Este comando deve ser utilizado sempre que ocorrer algum tipo de erro que haja a necessidade de abandonar a paginação, tendo sido emitido algum comando
'SEND MAP' com a opção 'ACCUM'.
Exemplo do comando:
EXEC CICS
PURGE MESSAGE
END-EXEC.
|
Explicacao do exemplo:
Será deletado todas as páginas anteriormente 'ACUMULADAS' através da opção 'ACCUM' do comando 'SEND MAP'.
Condição de exceção:
TSIOERR: erro de entrada/saida na memória tempóraria.
Observações sobre a transmissão de dados
Caso já esteja no vídeo do operador o mapa que irá enviar bastando sómente limpar os campos digitados, use a
opcao 'ERASEAUP'. neste caso 'NÃO SERAO TRANSMITIDOS' as constantes e nem os dados dos mapas, obtendo-se
assim uma melhor performance da transmissão do mapa.
Caso já esteja no vídeo do operador o mapa que irá enviar bastando sómente trocar os dados da tela,
mantendo o mesmo mapa, use a opção 'DATAONLY'. Neste caso serão transmitidos apenas os dados variáveis
do mapa.
Se não for especificado as opções 'DATAONLY' ou 'MAPONLY' no comando 'SEND MAP', será assumido as duas.
Se não for especificado as opções 'AUTOPAGE' ou 'NOAUTOPAGE' no comando 'SEND PAGE', a paginação obedecerá
as condições especificadas para o terminal quando da geração do sistema.
Considerações sobre paginação
Por paginação entende-se a açao de acumular uma determinada quantidade de linhas que varia a cada
execucão da tarefa.
Em cada tela haverá um mapa de cabeçalho que deverá ser definido no 'BMS' com as opções 'HEADER=YES'
e 'JUSTIFY=FIRST'.
Em cada tela haverá tambem um mapa de rodapé que deverá ser definido no 'BMS' com as opções 'TRAILER=YES' e
'JUSTIFY=LAST'.
As linhas restantes serão 'FLUTUANTES', ou seja serão usadas para acumular os dados que devem ser exibidos.
Deve ser definido um mapa contendo apenas uma linha e é esta linha que será acumulada. Será acumulado
para uma tela a quantidade máxima de linhas que couber entre o cabeçalho e o rodapé.
Caso a quantidade de linhas a serem acumuladas ultrapasse a quantidade máxima permitida para uma tela, no
momento em que estiver sendo tentado acumular a linha que ultrapassa a quantidade máxima permitida para
a tela, ocorrerá a condicação de exceção 'OVERFLOW'.
Ao ocorrer a condição de exceção 'OVERFLOW', deve-se terminar a construção da página atual e iniciar a
construção de nova página, ficando construindo páginas até terminar os dados a serem exibidos.
Após a construção da última página, deve-se emitir o comando 'SEND PAGE' para o término da paginação.
Apos a emissão do comando 'SEND PAGE', os dados ficarão 'ACUMULADOS' para o operador manusea-los.
Para o manuseio dos dados acumulados existem algumas funcões programadas que executam tal tarefa.
tais PF's não precisam ser especificadas no programa que acumulou os dados.
Procedimentos necessários para acumular páginas.
- 1 - Emite-se o comando 'SEND MAP' com a opção 'ERASE' para acumular o cabeçalho.
- 2 - Pesquisa-se os dados a serem exibidos e se existir, move-los para a linha que deseja-se acumular.
- 3 - Emite-se o comando 'SEND MAP' para acumular a linha montada no item 2.
- 4 - Se não ocorrer a condição de exceção 'OVERFLOW' voltar para item 2.
- 5 - Ocorrendo a condição de exceção 'OVERFLOW', emite-se o comando 'SEND MAP' sem a opção 'ERASE'
Para acumular o rodapé e tambem emite-se o comando 'SEND MAP' com a opção 'ERASE' para
acumular o cabeçalho para o inicio da construção de uma nova página. Em virtude de termos uma
linha não acumulada ( a que provocou o OVERFLOW ) volta-se para o item 3.
- 6 - Quando não existir mais dados a serem acumulados emite-se o comando 'SEND MAP' sem a opção
'ERASE' para acumular o rodapé e o comando'SEND PAGE' para indicar o término de construção de páginas.
-
Obs: Todos os comandos 'SEND MAP' deverão ser emitidos com as opções 'PAGING' e 'ACCUM'.
Tratamento de teclas programadas ( PF'S )
Para verificar qual a tecla programada ( PF ) que foi digitada pelo operador existem duas maneiras:
1 - O campo do EIB - 'EIBAID'
2 - O comando - 'HANDLE AID'
O EIBAID é atualizado toda vez que é acionada alguma função programada.
Existe um book catalogado que contem os campos a serem comparados com o EIBAID para a checagem da PF que foi
digitada pelo operador. Este book é o DFHAID e pode ser copiado atraves do comando COPY no programa de aplicacao.
01 DFHAID.
02 DFHNULL PIC X(001) VALUE IS '.'.
02 DFHENTER PIC X(001) VALUE IS QUOTE.
02 DFHCLEAR PIC X(001) VALUE IS '_'.
02 DFHCLRP PIC X(001) VALUE IS '.'.
02 DFHPEN PIC X(001) VALUE IS '='.
02 DFHOPID PIC X(001) VALUE IS 'W'.
02 DFHMSRE PIC X(001) VALUE IS 'X'.
02 DFHSTRF PIC X(001) VALUE IS 'H'.
02 DFHTRIG PIC X(001) VALUE IS '''.
02 DFHPA1 PIC X(001) VALUE IS '%'.
02 DFHPA2 PIC X(001) VALUE IS '>'.
02 DFHPA3 PIC X(001) VALUE IS ','.
02 DFHPF1 PIC X(001) VALUE IS '1'.
02 DFHPF2 PIC X(001) VALUE IS '2'.
02 DFHPF3 PIC X(001) VALUE IS '3'.
02 DFHPF4 PIC X(001) VALUE IS '4'.
02 DFHPF5 PIC X(001) VALUE IS '5'.
02 DFHPF6 PIC X(001) VALUE IS '6'.
02 DFHPF7 PIC X(001) VALUE IS '7'.
02 DFHPF8 PIC X(001) VALUE IS '8'.
02 DFHPF9 PIC X(001) VALUE IS '9'.
02 DFHPF10 PIC X(001) VALUE IS ':'.
02 DFHPF11 PIC X(001) VALUE IS '#'.
02 DFHPF12 PIC X(001) VALUE IS '@'.
02 DFHPF13 PIC X(001) VALUE IS 'A'.
02 DFHPF14 PIC X(001) VALUE IS 'B'.
02 DFHPF15 PIC X(001) VALUE IS 'C'.
02 DFHPF16 PIC X(001) VALUE IS 'D'.
02 DFHPF17 PIC X(001) VALUE IS 'E'.
02 DFHPF18 PIC X(001) VALUE IS 'F'.
02 DFHPF19 PIC X(001) VALUE IS 'G'.
02 DFHPF20 PIC X(001) VALUE IS 'H'.
02 DFHPF21 PIC X(001) VALUE IS 'I'.
02 DFHPF22 PIC X(001) VALUE IS '-'.
02 DFHPF23 PIC X(001) VALUE IS '.'.
02 DFHPF24 PIC X(001) VALUE IS '<'.
Comando HANDLE AID
Formato do comando:
| EXEC CICS HANDLE AID |
Explicação do argumento |
| OPTION (PARAGRAFO) |
Especifica-se uma opção (tecla), associando-se a ela um parágrafo que receberá o controle do programa caso a tecla seja digitada. |
O comando acima é utilizado para especificar um parágrafo que receberá o controle caso seja digitada a tecla especificada na opção.
Existe uma opção especial que engloba todas as PF'S, PA'S E CLEAR, com exceço do ENTER. Caso seja digitado uma tecla que n~ao foi especificada no
programa de aplicação, o controle irá para o parágrafo especificado nesta opção.
Esta opção é o ANYKEY.
Uma vez estabelecidas as condiçães de manipulacao de funçães programadas, elas só serão acionadas quando for executado o comando RECEIVE.
Exemplo do comando:
EXEC CICS
HANDLE AID PA1 (0100-PA1)
PA2 (0200-PA2)
ENTER (0300-ENTER)
ANYKEY (0400-ANYKEY)
END-EXEC.
|
Explicacao do exemplo:
- caso seja digitado a tecla PA1, o controle do programa será desviado para o parágrafo 0100-PA1,
- caso seja digitado a tecla PA2, o controle do programa será desviado para o parágrafo 0200-PA2,
- caso seja digitado a tecla ENTER, o controle do programa será desviado para o parágrafo 0300-ENTER e
- caso seja digitado qualquer outra tecla, o controle do programa será desviado para o parágrafo 0400-ANYKEY.
|