Tuesday 8 October 2024

A macro DFHMDF define os atributos sobre a tela. É necessario uma macro DFHMDF para cada atributo da tela.

Como exemplo, suponhamos que na coluna 10 de uma tela desejamos criar uma caixa de texto para digitar o codigo do produto. A caixa de texto terá ‘a sua esquerda um literal descritivo do campo. A linha 10 terá o seguinte aspecto:

0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3

1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 

x C O D I G O D O P R O D U T O x _ _ _ _ _ x

Note na ilustração que criamos 3 atributos representados pelas letras (x). O codigo BMS para esta linha terá 3 macros DFHMDF:

DFHMDF  POS=(10,3),INITIAL=´CODIGO DO PRODUTO’,... CODPROD

DFHMDF POS=(10,21),....

DFHMDF POS=(10,27, LENGTH=0,..... 

A sintaxe da macro DFHMDF é:

campo DFHMDF argumentos

Campo (na coluna 1) é opcional, e informa o nome do campo nos casos em que ele deve aparecer no programa Cobol.

Os argumentos da macro DFHMDF podem ser:

POS=posição,

Define a localização do campo na tela. Esta será a posição ocupada pelo atributo descrito. Pode ser informada em um dos formatos:

POS=numero,

deslocamento do campo na tela. Ex.: POS=81,

O atributo do campo esta na linha 2 coluna 2.

(Para linha=1 e coluna = 1, POS=0)

ou

POS=(linha,coluna),

Ex.: POS=(2,2),

O atributo do campo esta na linha 2 coluna 2.

LENGTH=comprimento, 

Este é o comprimento do campo, não incluindo o atributo. Os campos podem ter comprimento máximo de 256 caracteres. Quando o comprimento de um campo faz com que ele ultrapasse a coluna 80 da linha (overflow), o campo continuará na linha seguinte. Se o overflow ocorrer na última linha o campo, ele continuará na linha 1.

Pode-se definir um campo de comprimento zero se a macro DFHMDF não tiver label (campo sem nome). Este pseudo-campo não aparecerá na área copy da tela, e servirá somente para criar um atributo limitador para o campo anterior da tela.

LENGTH=comprimento, Ex.: LENGTH=4,

ATTRB=(proteção,brilho,acesso),

Este argumento define as características do atributo do campo. Os valores permitidos em cada opção do argumento, todos opcionais, são:

ATTRB=(proteção, ASKIP, – Campo protegido. O cursor não parará neste campo com o uso ta tecla TAB.
PROT, – O campo será protegido, isto é, será bloqueado para digitação.
UNPROT, – Campo desprotegido, aceitando digitação normal.
UNPROT,NUM – Campo desprotegido somente para teclas numéricas.
brilho, NORM – Campo com brilho normal.
BRT – Campo com brilho intenso.
DRK – Campo invisível.
acesso), FSET – O campo deve ter o atributo MDT sempre ligado (ON). O terminal transmite seu conteúdo para o programa Cics, mesmo que o operador não altere o campo.
IC – O cursor deve ser colocado neste campo.

INITIAL=literal,

Esta clausula (opcional), define o conteúdo inicial do campo. Literal deve ser definido com aspas simples. Ex.:

INITIAL=literal, Ex.: INITIAL=’XYZ’,

PICIN=mascara,

PICIN define o formato da PICTURE que sera gerada na area COBOL do mapa de entrada da tela. 

PICIN=mascara, Ex.:  PICIN=’999999V99’,

Por ex., para a linha do mapa BMS:

VALOR    DFHMDF POS=(5,10),PICIN=’999999V99’,LENGTH=8,

Sera gerada o fonte COBOL:

        03  VALOR       PIC 999999V99.  

 PICOUT=mascara,

PICOUT define o formato da PICTURE que sera gerada na area COBOL do mapa de saida da tela. 

PICOUT=mascara, Ex.: PICOUT=’$$$$$9,99’, 

Por ex., para a linha do mapa BMS:

VALOR    DFHMDF POS=(5,10),PICOUT=’$$$$$9,99’,

Sera gerada o fonte

        03  VALOR       PIC $$$$$9,99.  

Os parametros a seguir são de uso pouco frequente:

JUSTIFY=(posição,preenchimento),

  • JUSTIFY define como o terminal posicionará os dados no campo durante a digitação. O argumento posição pode ser RIGHT ou LEFT, e o preenchimento pode ser BLANK ou ZERO.
  • JUSTIFY=(LEFT,), alinha os dados à esquerda do campo.
  • JUSTIFY=(RIGHT,), alinha os dados à direita do campo.
  • JUSTIFY=(,BLANK), preenche as posições não digitadas do campo com espaços.
  • JUSTIFY=(,ZERO), preenche as posições não digitadas do campo com zeros.

 GRPNAME=nome,

O argumento GRPNAME serve para agrupar sub-campos de um campo, como por exemplo, o dia, mês e ano formando uma data. Para se criar sub-campos, use macros DFHMDF para criar cada um dos sub-campos. Todas as macros DFHMDF dos sub-campos devem ter o argumento GRPNAME com o mesmo nome, que será usado como identificação do grupo. Somente o primeiro sub-campo pode ter o argumento ATTRB, os outros sub-campos vão usar o ATTRB do primeiro sub-campo. Ex.:

DD DFHMDF POS=(5,10), GRPNAME=DATA,ATTRB=(BRT)
MM DFHMDF POS=(5,13), GRPNAME=DATA
AA DFHMDF POS=(5,16), GRPNAME=DATA