|
Para a execução de um programa on-line, normalmente há uma tela, onde o usuario interage com o terminal.
Nesta tela ele digita os dados e recebe as informações que necessita.
Esta tela é definida pelo programador, utilizando os recursos oferecidos pelo BASIC MAPPING SUPPORT ( BMS ),
que tem a função de fazer o interface entre o programa de aplicação e o 'TERMINAL CONTROL PROGRAM ( TCP )'.
O BMS oferece algumas vantagens tais como, independência de dispositivos e independência de formato de dados.
O BMS trabalha com dois tipos de mapas:
1 - Mapa físico ( MAPSET ) que é catalogado na CIL em formato de 'PHASE'. E' constituído por caracteres
de controle, constantes e dados variáveis do aplicativo.
2 - Mapa lógico ( MAP ) catalogado na SOURCE ( BIBLIOTECA DE DADOS ) em formato de 'BOOK'. e' constituído
somente pelos dados variáveis.
O BMS na entrada remove os caracteres de controle e transfere somente os dados para o programa de aplicação.
na saida, o BMS obtem os dados variáveis do programa de aplicação e intercala com os caracteres de controle
mais as constantes do mapa.
A definição de mapas físicos e lógicos é feita utilizando-se 'MACROS' que seguem a regra 'ASSEMBLER' para
a sua codificação.
Para a codificação, deve-se respeitar algumas regras de sintaxe, as quais trancreve-se abaixo:
O nome dos mapas e campos devem comecar na coluna 1 e a codificação das macros, apesar de poder começar na
coluna 2, costuma-se codificar começando na coluna 10. costuma-se, tambem, codificar os parâmetros necessários
para cada macro, a partir da coluna 16, exceto na primeira linha onde comeca-se a definir na coluna 17.
A codificaçao pode ir até a coluna 71.
A coluna 72 é reservada para ser usada quando deseja-se continuar a definição de uma macro em uma outra
linha, sendo que, a linha a ser continuada deve ter, na coluna 72, um caracter de continuação diferente de
branco e a linha de continuação deve ter a sua codificação iniciada na coluna 16.
MACRO DFHMSD
Esta macro é utilizada para definir o conjunto de mapas ( MAPSET ).
Um MAPSET pode conter 'um ou mais' mapas.
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
LABEL DFHMSD TYPE=(MAP/DSECT/FINAL), *
LANG=(ASM/COBOL/PL/I), *
TIOAPFX=(YES/NO), *
MODE=(IN/OUT/INOUT), *
STORAGE=AUTO, *
CTRL=OPCOES, *
TERM=MODELO, *
DATA=(FIELD/BLOCK)
Parâmetros para a macro DFHMSD:
LABEL : deve ser especificado o nome do MAPSET, com, no máximo 7 caracteres
TYPE : MAP - criar mapa fásico.
DSECT - criar mapa lógico.
FINAL - encerra a definição do conjunto de mapas.
LANG : ASM - será gerado o mapa lógico em ASSEMBLER ( DEFAULT ).
COBOL - será gerado o mapa lógico em COBOL.
PL/I - será gerado o mapa lógico em PL/I.
TIOAPFX : YES - indica que deve ser reservada uma área de 12 bytes no início do mapa,
para o prefixo da TIOA ( TERMINAL INPUT OUTPUT AREA ). Nesta área
existem caracteres de controle que um programa em COMMAND LEVEL não
pode utilizar.
NO - sem bytes de controle ( DEFAULT ).
MODE : indica o tipo de utilização do MAPSET. Também será utilizado na geração do
mapa lógico.
IN - indica que qualquer mapa do MAPSET somente poderá ser recebido pelo
programa de aplicação.
OUT - Indica que qualquer mapa do MAPSET somente poderá ser enviado pelo
programa de aplicação.
INOUT - Indica que o programa de aplicação poderá receber e enviar qualquer
mapa do MAPSET.
STORAGE : AUTO - Será alocada automaticamente uma área para cada mapa do MAPSET. Se
este parâmetro nao for especificado, os mapas dentro de um MAPSET
serao 'redefinidos'.
CTRL : Define as caracteristicas a serem aplicadas ao terminal quando do envio de
qualquer mapa do MAPSET.
ALARM - emite o sinal sonoro ( alarme ) ao enviar o mapa.
FREEKB - destrava o teclado logo apos o envio do mapa para permitir ao opera-
dor entrar com os dados.
FRSET - restaura o MDT (MODIFIED DATA TAG) de todos os campos variaveis do
mapa, ou seja, os dados variaveis do mapa sempre serao transmitidos
para o programa de aplicacao, mesmo que o operador nao tenha
'alterado' nenhum dado.
TERM : MODELO - modelo do terminal (3270 / 3270-2 / 3270-4, etc)
DATA : Especifica o formato dos dados FIELD - area de trabalho em formato de campos.
formato:
+----------------+
I LL I A I DADOS I
+----------------+
onde: LL - tamanho do campo ( 2 bytes binarios - HALF - WORD -
PIC S9(04) COMP.
A - byte de atributo do campo
BLOCK - Área de trabalho em formato de bloco. seu uso nao É recomendado.
MACRO DFHMDI
Esta macro é utilizada para definir um mapa dentro de um conjunto de mapas.
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
LABEL DFHMDI SIZE=(LINHAS,COLUNAS), *
LINE=LINHA, *
COLUMN=COLUNA, *
JUSTIFY=(LEFT/RIGHT,FIRST/LAST), *
HEADER=YES/TRAILER=YES, *
TIOAPFX=(YES/NO)
Parâmetros para a macro DFHMDI:
LABEL : Deve ser especificado o nome do mapa lógico, com, no máximo 7 caracteres.
SIZE : Especifica as dimensões do mapa, e termos de linhas e colunas.
LINHAS - número máximo de linhas do mapa.
COLUNAS - número máximo de colunas do mapa.
LINE : Especifica qual é a linha inicial do mapa no terminal.
COLUMN : Especifica qual é a coluna inicial do mapa no terminal.
JUSTIFY : Especifica qual é o alinhamento do mapa:
LEFT - O alinhamento do mapa será a esquerda ( DEFAULT ).
RIGHT - O alinhamento do mapa será a direita.
FIRST - Especifica que o mapa é para ser posicionado como o primeiro mapa de uma nova tela.
LAST - Especifica que o mapa é para ser posicionado no final da tela que está sendo montada.
HEADER : Especifica que o mapa é um mapa de cabeçalho. Deve ser usado em conjunto com a opção
'JUSTIFY=FIRST'. Usado em paginação.
TRAILER : Especifica que o mapa é um mapa de rodapé. Deve ser usado em conjunto com a opção
'JUSTIFY=LAST'. Usado em paginação.
TIOAPFX : YES - Indica que deve ser reservada uma área de 12 bytes no inicio do mapa, para o prefixo
da TIOA ( TERMINAL INPUT OUTPUT AREA ). Nesta área existem caracteres de controle que
um programa em COMMAND LEVEL não pode utilizar.
NO - Sem bytes de controle ( DEFAULT )
MACRO DFHMF
Esta macro é utilizada para definir os campos variáves e as constantes dentro do mapa.
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
LABEL DFHMDF POS=(LINHA,COLUNA), *
LENGTH=TAMANHO, *
ATTRB=LISTA DE ATRIBUTOS, *
INITIAL='CONSTANTE', *
JUSTIFY=(LEFT/RIGHT,BLANK/ZERO), *
GRPNAME=ITEM DE GRUPO, *
OCCURS=NNN, *
PICIN='MASCARA', *
PICOUT='MASCARA'
Parâmetros para a macro DFHMDF:
LABEL : Deve ser especificado o nome do campo, com, no máximo 7 caracteres. Se o label for omitido,
o campo nao poderá ser acessado pelo programa de aplicação, ou seja, será definido apenas
uma constante para o mapa.
POS : Especifica a posição do atributo do campo em relação ao mapa e não a posicao fisica. Em todas
as macros DFHMDF de um determinado mapa, as posições dos campos devem estar definidos em uma
sequencia crescente, sendo definidos de cima para baixo e da esquerda para a direita.
LENGTH : Especifica o tamanho do campo ( nao considerar a posição utilizada pelo atributo ). O tamanho
pode variar de 1 a 256 caracteres.
ATTRB : Especifica as caracteristicas do campo. Somente para terminais do tipo 3270-X. Para determinar
as caracteristicas do campo, os atributos podem ser combinados
ASKIP - Provoca um salto automático do CURSOR, ou seja, não é possível o operador entrar com
dados neste campo. Pode ser utilizado para definir constantes. O campo fica protegido
e com brilho normal.
PROT - O campo fica protegido.
UNPROT - O campo fica disponível para a entrada de dados. É UTilizado para definir campos variáveis.
O campo fica desprotegido, com brilho normal e alfanumerico.
NUM - O campo fica disponível para a entrada de dados numéricos e o hífen ( - ). É utilizado em
conjunto com o atributo UNPROT. O campo fica desprotegido, com brilho normal e numérico.
BRT - O campo fica brilhante.
NORM - O campo fica com brilho normal.
DRK - Indica que embora o campo exista na tela, não será exibido, mesmo que existam dados.
É utilizado, por exemplo para definir campos onde será digitada uma senha.
IC - Indica que o CURSOR ficará posicionado no campo após o envio do mapa. Caso haja mais de
um IC, o CURSOR ficará posicionado no campo em que estiver o ultimo IC. Se este parâmetro
for omitido, o CURSOR será posicionado na primeira linha e na primeira coluna.
FSET - Liga o MDT, ou seja, o campo será transmitido no envio e na recepção do mapa, independente
se o campo foi ou nao alterado. O DEFAULT é o MDT desligado.
Observacao - Qualquer um dos atributos poderá ser alterado pelo programa de aplicação.
- Se o parâmetro ATTRB for omitido, o campo será considerado com o atributo ASKIP.
- Se qualquer das opções de ATTRB for codificada, o campo terá as opções de UNPROT e NORM em
acréscimo ao atributo especificado.
INITIAL : Define um conteudo inicial para o campo.
JUSTIFY : Define o alinhamento/preenchimento do campo
LEFT - O alinhamento do campo será a esquerda.
RIGHT - O alinhamento do campo será a direita.
BLANK - O campo será preenchido com brancos.
ZERO - O campo será preenchido com zeros.
Observação - O DEFAULT para JUSTIFY é:
RIGHT, ZERO se o campo for numérico
LEFT, BLANK se o campo for alfanumérico
GRPNAME : Permite que um campo seja subdividido e manipulado pelo programa de aplicação, ou seja, permite
que seja definido um item de grupo com itens elementares. As caracterpisticas físicas do item de
grupo são igualmente aplicáveis a todos os itens elementares. Todos os itens elementares do item
de grupo devem ter os mesmos parâmetros, caso isto não ocorra será considerado as características
do primeiro item elementar deste item de grupo.
OCCURS : Define n campos de uma só vez. Semelhante a cláusula OCCURS do COBOL. este parâmetro não pode ser
utilizado em conjunto com o parâmetro 'GRPNAME' na mesma macro DFHMDF.
PICIN : Define uma máscara de entrada de dados para o campo.
PICOUT : Define uma máscara de saida de dados para o campo.
OBSERVACAO - Caso seja especificado os parâmetros PICIN e PICOUT para um mesmo campo, as máscaras devem ser do
mesmo tamanho quanto ao número de posições ocupadas.
Exemplo de definicao de MAPSET
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
XZ00001 DFHMSD TYPE=&SYSPARM, *
LANG=COBOL, *
CTRL=(FREEKB,FRSET,ALARM), *
MODE=INOUT, *
STORAGE=AUTO
*
MZ0001A DFHMDI SIZE=(22,80),LINE=1,COLUMN=1,JUSTIFY=(LEFT,FIRST)
TRANS DFHMDF POS=(01,01),LENGTH=04,ATTRB=(ASKIP,BRT,FSET), *
INITIAL='CURS'
SALVA DFHMDF POS=(01,08),LENGTH=04,ATTRB=(ASKIP,DRK)
DFHMDF POS=(01,20),LENGTH=40,ATTRB=(ASKIP,BRT), *
INITIAL='*** EXEMPLO DE DEFINICAO DE MAPSET ***'
DIA DFHMDF POS=(01,70),LENGTH=02,ATTRB=ASKIP,GRPNAME=DATA
MES DFHMDF POS=(01,72),LENGTH=02,GRPNAME=DATA
ANO DFHMDF POS=(01,74),LENGTH=02,GRPNAME=DATA
DFHMDF POS=(05,01),LENGTH=10,ATTRB=ASKIP,INITIAL='COD. ALUNO'
DFHMDF POS=(05,15),LENGTH=13,ATTRB=ASKIP, *
INITIAL='NOME DO ALUNO'
DFHMDF POS=(05,39),LENGTH=29,ATTRB=(ASKIP,BRT), *
INITIAL='NOTA1 NOTA2 NOTA3 NOTA4 NOTA5'
CODAL DFHMDF POS=(07,01),LENGTH=05,ATTRB=(UNPROT,NUM)
DFHMDF POS=(07,07),LENGTH=01,ATTRB=ASKIP,INITIAL=' '
NOMEAL DFHMDF POS=(07,15),LENGTH=20,ATTRB=ASKIP
NOTAS DFHMDF POS=(07,40),LENGTH=05,ATTRB=ASKIP,OCCURS=5, *
PICOUT='ZZ9,9'
DFHMDF POS=(22,21),LENGTH=40,ATTRB=(PROT,BRT), *
INITIAL='PF3 RETORNAR PA2 SAIR'
*
DFHMSD TYPE=FINAL
END
BOOK retornado com a compilação do MAPSET
1 2 3 4 5 6 7 8
1234567890123456789012345678901234567890123456789012345678901234567890123456780
01 MZ0001AI.
02 FILLER PIC X(012).
02 TRANSL COMP PIC S9(004).
02 TRANSF PIC X(001).
02 FILLER REDEFINES TRANSF.
03 TRANSA PIC X(001).
02 TRANSI PIC X(004).
02 SALVAL COMP PIC S9(004).
02 SALVAF PIC X(001).
02 FILLER REDEFINES SALVAF.
03 SALVAA PIC X(001).
02 SALVAI PIC X(004).
02 DATAL COMP PIC S9(004).
02 DATAF PIC X(001).
02 FILLER REDEFINES DATAF.
03 DATAA PIC X(001).
02 DATAI.
03 DIAI PIC X(002).
03 MESI PIC X(002).
03 ANOI PIC X(002).
02 CODALL COMP PIC S9(004).
02 CODALF PIC X(001).
02 FILLER REDEFINES CODALF.
03 CODALA PIC X(001).
02 CODALI PIC X(005).
02 NOMEALL COMP PIC S9(004).
02 NOMEALF PIC X(001).
02 FILLER REDEFINES NOMEALF.
03 NOMEALA PIC X(001).
02 NOMEALI PIC X(020).
02 NOTASD OCCURS 5 TIMES.
03 NOTASL COMP PIC S9(004).
03 NOTASF PIC X(001).
03 NOTASI PIC X(005).
01 MZ0001AO REDEFINES MZ0001AI.
02 FILLER PIC X(012).
02 FILLER PIC X(003).
02 TRANSO PIC X(004).
02 FILLER PIC X(003).
02 SALVAO PIC X(004).
02 FILLER PIC X(003).
02 DATAO.
03 DIAO PIC X(002).
03 MESO PIC X(002).
03 ANOO PIC X(002).
02 FILLER PIC X(003).
02 CODALO PIC X(005).
02 FILLER PIC X(003).
02 NOMEALO PIC X(020).
02 DFHMS1 OCCURS 5 TIMES.
03 FILLER PIC X(002).
03 NOTASA PIC X(001).
03 NOTASO PIC ZZ9,9.
Explicação da geração do mapa lógico
Para cada macro DFHMDI codificada é criado em COBOL, um NIVEL 01, com o label especificado na macro, acrescido
do sufixo 'I' se for usada a opção 'MODE=IN' ou acrescido do sufixo 'O' se for usada a opção 'MODE=OUT'.
Para o MAPSET em que foi especificado 'MODE=INOUT', são gerados DOIS NIVEIS 01, um com o sufixo 'I' e outro
com o sufixo 'O'. O segundo NIVEL 01 é uma redefinição do primeiro.
Para cada macro dfhmdf codificada são criados UM NIVEL 02 e UM NIVEL 03 com o label especificado na macro
acrescido com sufixos específicos. Notar que o campo só será gerado caso seja codificado na macro um label.
No NIVEL 02 foi gerado um campo com o label especificado acrescido do sufixo 'L' para identificar o tamanho do
campo. Foi tambem gerado um campo com o label especificado acrescido do sufixo 'I' para recepção de dados do campo.
No NIVEL 03 foi gerado um campo com o label especificado acrescido do sufixo 'A' para identificar o atributo
do campo.
A area MZ0001AO é uma redefinição da área MZ0001AI, por ter sido especificado na macro DFHMSD o parâmetro
'MODE=INOUT'.
Para cada macro DFHMDF que possui um label especificado, foi gerado um campo de tamanho (SUFIXO L), um campo de
atributo (SUFIXO A) e um campo de dados (SUFIXO I E/OU O).
Observar que foi gerado o item de grupo 'DATAI' em virtude de termos codificado o parâmetro 'GRPNAME=DATA' na
macro DFHMDF dos campo DIA, MES E ANO.
Observar que foi gerado uma tabela 'NOTASD' em virtude de termos codificado o parâmetro 'OCCURS=5' no campo
'NOTAS'. Neste, o sufixo do item de grupo da tabela será 'D' ao inves de 'I'.
Para cada campo foram gerados:
LABEL + SUFIXO L - Nessa área será colocado pelo BMS, o tamanho do campo ( LENGTH ), ou seja, quantas
posições foram tecladas pelo operador. O campo com sufixo l é também usado para o
posicionamento do CURSOR, bastando para isso movimentar -1 ( menos um ) para o mesmo.
LABEL + SUFIXO F - Essa área é um byte de flag. Usado pelo CICS para saber se o campo foi alterado ou nao.
LABEL + SUFIXO A - Essa area é utilizada pelo programa de aplicação para alterar o atributo do campo
( ATTRIBUTE ), isto é, quando deseja-se um atributo diferente do que foi especificado
na codificação da macro DFHMDF.
LABEL + SUFIXO I - Essa area é utilizada pelo programa de aplicação para trabalhar com os dados de entrada
( INPUT ).
LABEL + SUFIXO O - Essa area é utilizada pelo programa de aplicação para trabalhar com os dados de saida
( OUTPUT ), sendo esta area uma redefinição da area de sufixo 'I'.
A seguir estão os atributos que pode-se mover para o campo de sufixo 'A' pelo programa de aplicação.
Para ter estes campos no programa deve-se copiar o layout catalogado 'DFHBMSCA'.
1 2 3 4 5 6 7 8
1234567890123456789012345678901234567890123456789012345678901234567890123456780
01 DFHBMSCA.
02 DFHBMPEM PIC X(001) VALUE IS '.'.
02 DFHBMPNL PIC X(001) VALUE IS '.'.
02 DFHBMASK PIC X(001) VALUE IS '0'.
02 DFHBMUNP PIC X(001) VALUE IS ' '.
02 DFHBMUNN PIC X(001) VALUE IS '&'.
02 DFHBMPRO PIC X(001) VALUE IS '-'.
02 DFHBMBRY PIC X(001) VALUE IS 'H'.
02 DFHBMDAR PIC X(001) VALUE IS '<'.
02 DFHBMFSE PIC X(001) VALUE IS 'A'.
02 DFHBMPRF PIC X(001) VALUE IS '/'.
02 DFHBMASF PIC X(001) VALUE IS '1'.
02 DFHBMASB PIC X(001) VALUE IS '8'.
02 DFHBMEOF PIC X(001) VALUE IS '.'.
02 DFHBMDET PIC X(001) VALUE IS '.'.
02 DFHBMPSO PIC X(001) VALUE IS '.'.
02 DFHBMPSI PIC X(001) VALUE IS '.'.
02 DFHSA PIC X(001) VALUE IS '.'.
02 DFHCOLOR PIC X(001) VALUE IS '.'.
02 DFHPS PIC X(001) VALUE IS '.'.
02 DFHHLT PIC X(001) VALUE IS '.'.
02 DFH3270 PIC X(001) VALUE IS '.'.
02 DFHVAL PIC X(001) VALUE IS 'A'.
02 DFHOUTLN PIC X(001) VALUE IS 'B'.
02 DFHBKTRN PIC X(001) VALUE IS '.'.
02 DFHALL PIC X(001) VALUE IS '.'.
02 DFHERROR PIC X(001) VALUE IS '.'.
02 DFHDFT PIC X(001) VALUE IS '.'.
02 DFHDFCOL PIC X(001) VALUE IS '.'.
02 DFHBLUE PIC X(001) VALUE IS '1'.
02 DFHRED PIC X(001) VALUE IS '2'.
02 DFHPINK PIC X(001) VALUE IS '3'.
02 DFHGREEN PIC X(001) VALUE IS '4'.
02 DFHTURQ PIC X(001) VALUE IS '5'.
02 DFHYELLO PIC X(001) VALUE IS '6'.
02 DFHNEUTR PIC X(001) VALUE IS '7'.
02 DFHBASE PIC X(001) VALUE IS '.'.
02 DFHDFHI PIC X(001) VALUE IS '.'.
02 DFHBLINK PIC X(001) VALUE IS '1'.
02 DFHREVRS PIC X(001) VALUE IS '2'.
02 DFHUNDLN PIC X(001) VALUE IS '4'.
02 DFHMFIL PIC X(001) VALUE IS '.'.
02 DFHMENT PIC X(001) VALUE IS '.'.
02 DFHMFE PIC X(001) VALUE IS '.'.
02 DFHUNNOD PIC X(001) VALUE IS '('.
02 DFHUNIMD PIC X(001) VALUE IS 'I'.
02 DFHUNNUM PIC X(001) VALUE IS 'J'.
02 DFHUNINT PIC X(001) VALUE IS 'R'.
02 DFHUNNON PIC X(001) VALUE IS ')'.
02 DFHPROTI PIC X(001) VALUE IS 'Y'.
02 DFHPROTN PIC X(001) VALUE IS '%'.
02 DFHMT PIC X(001) VALUE IS '.'.
02 DFHMFT PIC X(001) VALUE IS '.'.
02 DFHMET PIC X(001) VALUE IS '.'.
02 DFHMFET PIC X(001) VALUE IS '.'.
02 DFHDFFR PIC X(001) VALUE IS '.'.
02 DFHLEFT PIC X(001) VALUE IS '.'.
02 DFHOVER PIC X(001) VALUE IS '.'.
02 DFHRIGHT PIC X(001) VALUE IS '.'.
02 DFHUNDER PIC X(001) VALUE IS '.'.
02 DFHBOX PIC X(001) VALUE IS '.'.
02 DFHSOSI PIC X(001) VALUE IS '.'.
02 DFHTRANS PIC X(001) VALUE IS '0'.
02 DFHOPAQ PIC X(001) VALUE IS '.'.
|