CTAC

Codificador de Telas de Aplicação para COBOL

Comparada com a técnica de tratamento de telas via DISPLAY/ACCEPT posicionados, o uso dos recursos da SCREEN SECTION facilita bastante a identificação dos elementos das telas já que ficam concentrados em um só bloco independente da lógica do programa, mas ainda assim não se pode visualizar a tela e a declaração dos números de posicionando é pouco amigável.

Utilizando um gabarito de tela que pode ser definido com um editor de textos qualquer e transformando-o em declarações SCREEN SECTION com o CTAC,  ganha-se bastante produtividade e legibilidade.

A linguagem de definição do gabarito é praticamente a mesma tradicionalmente usada nas antigas folhas de codificação.

A letra X maiúscula equivale a uma posição de um campo alfanumérico. Para que o codificador não interprete palavras que contenham a letra X como declaração de variáveis (Máscara de edição), é necessário que a cadeia de caracteres apresente pelo menos uma repetição de si próprio ou de outro caractere reconhecido como PICTURE COBOL, ou entre espaços, do contrário será tratada como literal. Para definir uma variável com apenas um byte de tamanho, foi convencionado o caractere @.

Para os campos numéricos, é aplicado o mesmo princípio utilizando os caracteres 9 e   #. Para campos numéricos com supressão de zeros não significativos, os caracteres são Z e ?.

Para atribuir nomes a variáveis criadas na codificação, é necessário definir uma tabela de nomes que será previamente carregada, e durante a codificação os nomes serão atribuídos a cada máscara de edição na mesma sequencia.

O símbolo =( posicionado na primeira coluna indica início da tabela de nomes, a vírgula indica fim do nome. Apesar da linguagem COBOL não aceitar nomes com espaços, um espaço em branco não indica fim do nome pois além do nome outros atributos suportados pela linguagem COBOL podem ser declarados na sequencia.

Por fim, o símbolo )= indica o fim do último campo e da tabela de nomes.

Espaços em brancos só tem efeito para posicionamento. Para declarar um espaço em branco na tela, é preciso utilizar o caractere undescore "_".

Exemplo:

Gabarito definido com o editor.

   Matrícula    XXXX X

   Nome         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

   Sexo         X

   Cargo        XBXBXBXBXBXBXBXBXBX

   Salário      ZZ.ZZZ.ZZ9,99

   Situação     X

   Tipos        X X X X X

   Admissão     99/99/9999

   Obs          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

=(
CTAC-MATRICULA  USING FILE-MATRICULA
CTAC-MATRICULA  USING FILE-DV
CTAC-NOME       USING FILE-NOME
CTAC-SEXO       USING FILE-SEXO
CTAC-CARGO      USING FILE-CARGO
CTAC-SALARIO    USING FILE-SALARIO BLANK ZERO
CTAC-SITUACAO   USING FILE-SITUACAO
CTAC-TIPOS      USING FILE-TIPO1
CTAC-TIPOS      USING FILE-TIPO2
CTAC-TIPOS      USING FILE-TIPO3
CTAC-TIPOS      USING FILE-TIPO4
CTAC-TIPOS      USING FILE-TIPO5
CTAC-ADMISSAO   USING FILE-ADMISSAO
CTAC-OBSERVACAO USING FILE-OBSERVACAO
CTAC-MENSAGEM    FROM MENSAGEM-ERRO)=

Se o editor em uso for o Kedit, basta comandar CTAC na linha de comando em plena edição do gabarito.

Supondo que o gabarito tenha sido salvo como EXEMPLO.CTA,  o comando CTAC EXEMPLO teria o seguinte efeito:

COBOLware 6.2 C:\COBOLware>CTAC EXEMPLO
CTAC Codificador de Telas de Aplicação para COBOL

COBOLware 6.0
Copyright (C) 1984-2020 COBOLware Services Ltda.

Codificando EXEMPLO.CTA...
Trecho de SCREEN SECTION codificado em: EXEMPLO.LAY

COBOLware C:\COBOLware>

Conteúdo do arquivo gerado [EXEMPLO.LAY]:

    01  CTAC-LIT-EXEMPLO.
        05 LINE 02 COLUMN 04 VALUE "Matrícula".
        05 LINE 04 COLUMN 04 VALUE "Nome".
        05 LINE 06 COLUMN 04 VALUE "Sexo".
        05 LINE 08 COLUMN 04 VALUE "Cargo".
        05 LINE 10 COLUMN 04 VALUE "Salário".
        05 LINE 12 COLUMN 04 VALUE "Situação".
        05 LINE 14 COLUMN 04 VALUE "Tipos".
        05 LINE 16 COLUMN 04 VALUE "Admissão".
        05 LINE 18 COLUMN 04 VALUE "Obs".

    01  CTAC-VAR-EXEMPLO.
        05 CTAC-MATRICULA.
           10 LINE 02 COLUMN 17 PIC X(004) USING FILE-MATRICULA.
           10 LINE 02 COLUMN 22 PIC X(001) USING FILE-DV.
        05 CTAC-NOME.
           10 LINE 04 COLUMN 17 PIC X(030) USING FILE-NOME.
        05 CTAC-SEXO.
           10 LINE 06 COLUMN 17 PIC X(001) USING FILE-SEXO.
        05 CTAC-CARGO.
           10 LINE 08 COLUMN 17 PIC XBXBXBXBXBXBXBXBXBX
              USING FILE-CARGO.
        05 CTAC-SALARIO.
           10 LINE 10 COLUMN 17 PIC ZZ.ZZZ.ZZ9,99
              USING FILE-SALARIO BLANK ZERO.
        05 CTAC-SITUACAO.
           10 LINE 12 COLUMN 17 PIC X(001) USING FILE-SITUACAO.
        05 CTAC-TIPOS.
           10 LINE 14 COLUMN 17 PIC X(001) USING FILE-TIPO1.
           10 LINE 14 COLUMN 19 PIC X(001) USING FILE-TIPO2.
           10 LINE 14 COLUMN 21 PIC X(001) USING FILE-TIPO3.
           10 LINE 14 COLUMN 23 PIC X(001) USING FILE-TIPO4.
           10 LINE 14 COLUMN 25 PIC X(001) USING FILE-TIPO5.
        05 CTAC-ADMISSAO.
           10 LINE 16 COLUMN 17 PIC 99/99/9999 USING FILE-ADMISSAO.
        05 CTAC-OBSERVACAO.
           10 LINE 18 COLUMN 17 PIC X(030) USING FILE-OBSERVACAO.

Se o gabarito original for preservado, manutenções futuras também serão bem mais simples bastando retificar o gabarito e tornar a executar o codificador.

Caracteres especiais como molduras podem ser utilizados e serão tratados como literais, contudo este procedimento é pouco recomendável pois a codificação ASCII das molduras pode variar de um ambiente para outro prejudicando a portabilidade.