Neste artigo veremos como configurar o ambiente COBOL 4.5, isso é importante para aqueles que querem dar um passo maior com a linguagem COBOL, fazendo do seu arquivo COBOL um executável.

Para tanto estaremos mostrando como configurar o compilador COBOL 4.5 dentro de um sistema operacional de 32 bits. Caso você tenha um sistema operacional de 64 bits, é indicado fazer um download da ferramenta que citaremos aqui, que é o DOSBox. Caso seu sistema operacional tenha um sistema de compatibilidade forte, que é muito difícil simular por si só a concatenação de bits, então você não precisará utilizar o DOSBox.

Por conveniência, veremos os passos com o prompt de comando do próprio Windows e da ferramenta DOSBox que vai ser baixada dentro do Windows também.

Primeiro passo: faça o download do COBOL 4.5 e descompacte-o na pasta raiz C:\. Em seguida acesse o prompt de comandos e depois a pasta raiz

Listagem 1: Acessando a pasta raíz no prompt

CD\

Se está montando uma partição com algum simulador de sistema de 32 bits, como o DOSBox, faça a montagem apenas como se fosse a pasta C:\ e depois acessando o diretório criado.

Listagem 2: Acessando a pasta raiz no DOSBox

mount c c:
c:
O resultado dos comandos no DOSBox

Figura 1: O resultado dos comandos no DOSBox

Isso porque as variáveis de configuração do arquivo em lotes "SETCOBOL.BAT" irão apontar exatamente para o caminho da pasta raiz padrão.

Listagem 3: Descrição do arquivo "SETCOBOL.BAT", que vai estar na pasta SOURCE

PATH=C:\COBOL45\BIN;
SET COBDIR=C:\COBOL45\BIN;
SET LIB=C:\COBOL45\LIB;
SET COBHNF=C:\COBOL45\HELP;
SET INCLUDE=C:\COBOL45\SOURCE;
SET HELPFILES=C:\COBOL45\HELP;
SET INIT=C:\COBOL45\INIT;

Caso tenha montado um outro diretório com outra nomenclatura, com “mount j c:\”, é só renomear o arquivo do SETCOBOL onde aponta o caminho de C:\ para j:\.

Listagem 4: Mudando o diretório de C:\ para j:\

PATH=j:\COBOL45\BIN;
SET COBDIR=j:\COBOL45\BIN;
SET LIB=j:\COBOL45\LIB;
SET COBHNF=j:\COBOL45\HELP;
SET INCLUDE=j:\COBOL45\SOURCE;
SET HELPFILES=j:\COBOL45\HELP;
SET INIT=j:\COBOL45\INIT;

Isso pode causar um trabalho imenso e o intuito não é esse, então se está usando o simulador DOSBox, faça conforme os passos iniciais montando um diretório com o mesmo nome da pasta raiz C, se não está usando despreze essa parte de montagem.

Feito isso, é só acessar a pasta SOURCE.

Veja que agora, em ambos os casos, você já está no diretório inicial c:\, então é só continuar com esses passos.

Listagem 5: Acessando a pasta SOURCE

C:\cd COBOL 4.5
C:\COBOL4.5\cd source
C:\COBOL4.5\SOURCE\

Essa parte de acessar a pasta SOURCE é muito importante. Caso tenha feito o download e o nome da pasta original seja COBOL45, o que fazer? É simples, substitua COBOL4.5 por COBOL45.

Digite dir par ver se o arquivo de configuração, "SETCOBOL.BAT", está dentro da pasta. Se estiver, é só chama-lo, assim:

Listagem 6: Acionando arquivo de configuração

C:\COBOL4.5\SOURCE\SETCOBOL.BAT

O resultado será conforme a Figura 2.

 Resultado da configuração para desenvolvimento COBOL 4.5

Figura 2: Resultado da configuração para desenvolvimento COBOL 4.5

Ele irá automaticamente configurar o ambiente para desenvolvimento COBOL. Como isso acontece? Ele habilita o compilador e outros programas que estão dentro da pasta bin e outras pastas, tornando-os visíveis na pasta SOURCE.

Agora já temos o ambiente configurado através do console, o que isso significa é que você já poderá programar no console. Se fechar o console, tem que configurar novamente, se não, siga os próximos passos.

Coloque os arquivos com extensão cbl e cob, dentro da pasta SOURCE.

Digamos que você acabou de salvar o MSPROG com extensão cbl na pasta SOURCE, então é só digitar dir, que seus arquivos vão ser listados.

Lista de arquivos na pasta SOURCE

Figura 3: Lista de arquivos na pasta SOURCE

Para compilar, digite o nome do compilador e o arquivo com a extensão depois do ponto e ponto e virgula no final.

Listagem 7: Primeira compilação

COBOL arquivo.extensão;

Assim ele estará criando o objeto, agora é só gerar o executável, chamando o link e o programa.

Listagem 8: Criando o executável

LINK arquivo.obj;

Agora, não tendo nenhum problema de compilação, você terá o executável.

Listagem 9: Chamando o executável

arquivo.exe

Com isso seu programa já é um executável, mas não significa que por não ter nenhum problema de compilação esteja correto ou por ter algum problema de compilação esteja errada a sintaxe dele.

Uma das explicações para isso, em um dos casos, é que tem erro que é mais frequente, como o erro do display e do accept.

Listagem 10: Código usado nas versões anteriores

DISPLAY (05, 05) "QUALQUER COISA". 
ACCEPT (05, 15) VARIAVEL. 

Listagem 11: Código usado nas versões atuais

DISPLAY "QUALQUER COISA" AT 0505. 
ACCEPT VARIAVELAT 0515.

Percebeu que as linhas e colunas estão juntas?

Você pode encontrar um programa completo de demonstração na pasta DEMO. A seguir desenvolvemos um programa de demonstração e que não está na pasta DEMO, que use poucos recursos da linguagem COBOL ao invés de não usarmos nenhum, como é o caso em que geralmente conhecemos de exemplos na internet, com programas "completos” com apenas mensagem.

Listagem 12: Programa executável completo

IDENTIFICATION DIVISION.
PROGRAM-ID.JALMOX.
      *
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
           DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
           SELECT FUNC ASSIGN TO "FUNC.DAT"
organization is line sequential
STATUS ST-ERRO.


data division.
       FILE SECTION.
       FD FUNC.
01 REG-FUNC.
           02RE PIC 9(06).
           02NOME   PIC X(30).
           02TIPO-SALARIO    PIC X(01).
           02SALARIO-BASE PIC 9(06)V99.
           02NUMERO-FILHOS    PIC 99.
WORKING-STORAGE SECTION.
       77 ST-ERRO PIC X(02) VALUE "00".
77MENS1 PIC X(01).
       01VARIAVEIS-SISTEMA.
02  WS-LIMPA       PIC X(30) VALUE SPACES.
02  WS-CONT        PIC 9(03) VALUE ZEROS.
02  ED-CONT        PIC ZZ9.
01  WS-DATA.
02WS-ANO         PIC 9(02) VALUE ZEROS.
           02WS-MES         PIC 9(02) VALUE ZEROS.
           02WS-DIA         PIC 9(02) VALUE ZEROS.
       01WS-HORA.
02  WS-HOR         PIC 9(02) VALUE ZEROS.
02  WS-MIN         PIC 9(02) VALUE ZEROS.
02  WS-SEG         PIC 9(02) VALUE ZEROS.
02  WS-CSE         PIC 9(02) VALUE ZEROS.

       SCREEN SECTION.
01  TELA.
02  BLANK SCREEN.
02  LINE  1 COLUMN  1  VALUE "DATA:".
02LINE  1 COLUMN 29  VALUE "Simulacao de cadastro".
02  LINE  5 COLUMN 07  VALUE "RE.......................:".
02  LINE  7 COLUMN 07  VALUE "NOME.....................:".
02  LINE  9 COLUMN 07  VALUE "TIPO SALARIO..H, M OU D..:".
02  LINE  11 COLUMN 07 VALUE "SALARIO BASE.............:".
02  LINE  13 COLUMN 07  VALUE "NUMERO DE FILHOS.........:".
02  LINE 21 COLUMN 07  VALUE "MENSAGEM: ".
02  LINE 21 COLUMN 60  VALUE "Contador<>".
02  TRE
               LINE 05  COLUMN 34  PIC 999999
USING  RE
               HIGHLIGHT.
02  TNOME
               LINE 07  COLUMN 34  PIC X(30)
USING  NOME
               HIGHLIGHT.
02  TPO-SALARIO
               LINE 09  COLUMN 34  PIC X(01)
USING  TIPO-SALARIO
               HIGHLIGHT.
02  TSALARIO
               LINE 11  COLUMN 34  PIC 9(06)V99
USING  SALARIO-BASE
               HIGHLIGHT.
02  NUMER-FILHOS
               LINE 13  COLUMN 34 PIC 99
USING  NUMERO-FILHOS
               HIGHLIGHT.


PROCEDURE DIVISION.
010-INICIO.
           OPEN I-O FUNC
           IF ST-ERRO = "30"
              OPEN OUTPUT FUNC
              CLOSE FUNC
              GO TO 010-INICIO
           ELSE
           MOVE ZEROS TO RE
           MOVE SPACES TO NOME
           MOVE SPACES TO TIPO-SALARIO
           MOVE ZEROS TO NUMERO-FILHOS
           ACCEPT WS-HORA FROM TIME.
           ACCEPT WS-DATA FROM DATE.


020-VIDEO.

           DISPLAY TELA.
           DISPLAYWS-DIA "/" WS-MES "/" WS-ANO at 0107.
       030-LIMPA-DADOS.

DISPLAY WS-LIMPA at 0534.
           DISPLAY WS-LIMPA at 0734.
           DISPLAY WS-LIMPA at 0934.
           DISPLAY WS-LIMPA at 1134.
           DISPLAY WS-LIMPA at 1334.
           DISPLAY WS-LIMPA at 2118.
           DISPLAY WS-LIMPA at 2340.

040-CODIGO.
ACCEPT  TRE
           READ FUNC
           IF RE = ZEROS
DISPLAY "Registro invalido - Redigite" at 2118
GO TO 040-CODIGO.
041-NOME.
           ACCEPT TNOME
IF NOME = SPACES
              DISPLAY"Nome em Branco - Redigite" at 2118
              GO TO 041-NOME.
       042-TIPO.
           ACCEPT TPO-SALARIO
           IF TIPO-SALARIO = "d" OR 
              TIPO-SALARIO = "H" OR
              TIPO-SALARIO = "h" OR 
              TIPO-SALARIO = "M" OR 
              TIPO-SALARIO = "m" OR
              TIPO-SALARIO = "D"
              GO TO 043-TSALAR-BASE
              ELSE
              DISPLAY"Tipo Invalido - Redigite" at 2118
GO TO 042-TIPO.
043-TSALAR-BASE.
           ACCEPT TSALARIO
IF SALARIO-BASE = ZEROS
              GO TO 043-TSALAR-BASE.
       044-CUSTO.
           ACCEPT NUMER-FILHOS
           IF NUMERO-FILHOS > 20
              GO TO 044-CUSTO.

       050-GRAVAR.
           DISPLAY "FUNCIONARIO GRAVADO COM SUCESSO" at 2034.
           CLOSE FUNC.
           STOP RUN.


      ***---------- FIM DO PROGRAMA JALMOX ---------***

Então esse foi um exemplo de programa completo para teste no seu ambiente COBOL 4.5. Você não precisará em embasar-se nele para todos os desenvolvimentos, o COBOL é fruto de muita pesquisa e análise, em que cada um pode construir sua lógica, mas também o COBOL é fruto de muita cópia de código pré-compilável. Como outras linguagens, ninguém irá dominar sem que tenha estudado o código de outro para entender a linguagem.

Então vamos quebrar todo o código e ver sua explicação por partes.

Aqui está a parte inicial de identificação do programa, você pode chama-lo de qualquer coisa, nós o chamamos de JALMOX.

Listagem 13: Identificação do programa

IDENTIFICATION DIVISION.

PROGRAM-ID.JALMOX.

Agora já começamos com configuração dentro da ENVIRONMENT DIVISION. Primeiro configuramos os nomes especiais, ou seja, vamos declarar que a vírgula é o ponto decimal, mudando o modo padrão Americano.

Listagem 14: Configurando ENVIRONMENT DIVISION

ENVIRONMENT DIVISION.

CONFIGURATION SECTION.

SPECIAL-NAMES.

DECIMAL-POINT IS COMMA.

Ainda dentro da ENVIRONMENT DIVISION, vamos configurar os arquivos de entrada e saída, utilizando uma SELECT para cada arquivo e apontando o endereço lógico, que nesse caso vai ser "FUNC.DAT".

Quando o arquivo for criado, você vai vê-lo com esse nome e extensão dentro da pasta SOURCE, a organização dele vai ser sequencial e a variável que vai retornar o status do arquivo vai ser ST-ERRO, com o status indicando uma informação. Você vai ver o status retornar dois dígitos, o ST-ERRO que vai ser declarado na WORKING, depois, caso necessite, é só imprimir esse status e procurar informação em uma tabela de status. A IBM tem algumas tabelas online, muitas vezes em inglês, mas ajudam muito.

Listagem 15: Configurando o arquivo

INPUT-OUTPUT SECTION.

FILE-CONTROL.

           SELECT FUNC ASSIGN TO "FUNC.DAT"

organization is line sequential

STATUS ST-ERRO.

Agora chegou a hora de entrarmos na estrutura do arquivo, isso se fará na DATA DIVISION. Quando você abrir uma file section, não precisará por mais de uma, é só declarar uma FD para cada arquivo.

Listagem 16: Declarando FD


data division.

       FILE SECTION.

       FD FUNC.

Embaixo da FD estará o registro com as variáveis. Perceba que sempre vai vir uma numeração na frente, os registros obrigatoriamente têm a numeração 01 na frente, as demais variáveis podem vir "geralmente" até o nível 77. Então a declaração da variável vai ser como segue embaixo, nível, nome da variável, PIC, de Picture (tipo 9 para inteiros e x para alfanuméricos) e, por último, tamanho (a vírgula indica os decimais).

Listagem 17: Registrando as variáveis

       01 REG-FUNC.

           02RE PIC 9(06).

           02NOME   PIC X(30).

           02TIPO-SALARIO    PIC X(01).

           02SALARIO-BASE PIC 9(06)V99.

           02NUMERO-FILHOS    PIC 99.

Agora estamos na parte da WORKING-STORAGE SECTION, que vai servir para declarar outras variáveis. Também tem estrutura de registro dentro da WORKING, veja o nível 01 aparecendo, essas variáveis de sistemas são as que vão colher algumas informações possíveis pelo teclado e outras como a data do sistema, que você vai poder observar quando executar o programa pela primeira vez no canto superior esquerdo.

Listagem 18: WORKING-STORAGE SECTION

WORKING-STORAGE SECTION.
       77 ST-ERRO PIC X(02) VALUE "00".
77MENS1 PIC X(01).
       01VARIAVEIS-SISTEMA.
02  WS-LIMPA       PIC X(30) VALUE SPACES.
02  WS-CONT        PIC 9(03) VALUE ZEROS.
02  ED-CONT        PIC ZZ9.
01  WS-DATA.
02WS-ANO         PIC 9(02) VALUE ZEROS.
           02WS-MES         PIC 9(02) VALUE ZEROS.
           02WS-DIA         PIC 9(02) VALUE ZEROS.
       01WS-HORA.
02  WS-HOR         PIC 9(02) VALUE ZEROS.
02  WS-MIN         PIC 9(02) VALUE ZEROS.
02  WS-SEG         PIC 9(02) VALUE ZEROS.
02  WS-CSE         PIC 9(02) VALUE ZEROS.

Então nós vamos criar a tela que estará dentro da SCREEN SECTION. Perceba que a linha aponta para a posição em tela do console e a coluna também, depois é só declarar o valor que aparecerá nessa posição.

Listagem 19: SCREEN SECTION

SCREEN SECTION.
01  TELA.
02  BLANK SCREEN.
02  LINE  1 COLUMN  1  VALUE "DATA:".
02LINE  1 COLUMN 29  VALUE "Simulacao de cadastro".
02  LINE  5 COLUMN 07  VALUE "RE.......................:".
02  LINE  7 COLUMN 07  VALUE "NOME.....................:".
02  LINE  9 COLUMN 07  VALUE "TIPO SALARIO..H, M OU D..:".
02  LINE  11 COLUMN 07 VALUE "SALARIO BASE.............:".
02  LINE  13 COLUMN 07  VALUE "NUMERO DE FILHOS.........:".
02LINE 21 COLUMN 07  VALUE "MENSAGEM: ".
           02LINE 21 COLUMN 60  VALUE "Contador <>".

Ainda como parte da configuração da tela estaremos chamando as variáveis que suportarão as variáveis do arquivo, uma espécie de LABLEs especiais, e devem ter o mesmo tamanho e mesmo tipo. É como se nós estivéssemos dizendo que aqui estará um inteiro com um número de posições pré determinada, inteiro para inteiro e alfanumérico para alfanumérico.

Listagem 20: Variáveis

02  TRE
               LINE 05  COLUMN 34  PIC 999999
USING  RE
               HIGHLIGHT.
02  TNOME
               LINE 07  COLUMN 34  PIC X(30)
USING  NOME
               HIGHLIGHT.
02  TPO-SALARIO
               LINE 09  COLUMN 34  PIC X(01)
USING  TIPO-SALARIO
               HIGHLIGHT.
02  TSALARIO
               LINE 11  COLUMN 34  PIC 9(06)V99
USING  SALARIO-BASE
               HIGHLIGHT.
02  NUMER-FILHOS
               LINE 13  COLUMN 34 PIC 99
USING  NUMERO-FILHOS
               HIGHLIGHT.

Chegamos então na parte final do PROCEDURE, que conterá todo o desenvolvimento, todos os métodos e funções. Aqui nós colocamos as LABLEs, por exemplo, 010-INICIO. terá a função de ser uma referência para esse trecho de código que está dentro dele até o ponto. O OPEN que é primordial para tratar com as variáveis do arquivo e com todo o arquivo, o CLOSE para fechar o arquivo.

O condicional IF continuará tratando situações de se sim ou se não. O GO TO irá apontar a LABLE para onde o processo será direcionado e o accept irá receber a informação. Já o display serve para exibir informações, enquanto o MOVE terá a função de preencher as variáveis com algum valor.

Listagem 21: SCREEN SECTION - Continuação

       PROCEDURE DIVISION.
010-INICIO.
           OPEN I-O FUNC
IF ST-ERRO = "30"
              OPEN OUTPUT FUNC
              CLOSE FUNC
              GO TO 010-INICIO
           ELSE
           MOVE ZEROS TO RE
           MOVE SPACES TO NOME
           MOVE SPACES TO TIPO-SALARIO
           MOVE ZEROS TO NUMERO-FILHOS
           ACCEPT WS-HORA FROM TIME.
           ACCEPT WS-DATA FROM DATE.


020-VIDEO.
           DISPLAY TELA.
           DISPLAYWS-DIA "/" WS-MES "/" WS-ANO at 0107.

Depois disso é puramente lógica, será a parte que você vai decidir como tratar e o que fazer com o seu programa. Limpamos cada espaço da tela que seria digitado com a variável WS-LIMPA, apontando a posição, e permitimos que as informações fossem digitadas em tela através do accept. Depois exibimos uma mensagem como se estivesse gravando através do display. Por último fechamos o arquivo FUNC.

Listagem 22: Finalizando FUNC.

030-LIMPA-DADOS.
           DISPLAY WS-LIMPA at 0534.
DISPLAY WS-LIMPA at 0734.
           DISPLAY WS-LIMPA at 0934.
           DISPLAY WS-LIMPA at 1134.
           DISPLAY WS-LIMPA at 1334.
           DISPLAY WS-LIMPA at 2118.
           DISPLAY WS-LIMPA at 2340.

040-CODIGO.
ACCEPT  TRE
           READ FUNC
           IF RE = ZEROS
DISPLAY "Registro invalido - Redigite" at 2118
GO TO 040-CODIGO.
041-NOME.
           ACCEPT TNOME
IF NOME = SPACES
              DISPLAY"Nome em Branco - Redigite" at 2118
              GO TO 041-NOME.
       042-TIPO.
           ACCEPT TPO-SALARIO
           IF TIPO-SALARIO = "d" OR 
              TIPO-SALARIO = "H" OR
              TIPO-SALARIO = "h" OR 
              TIPO-SALARIO = "M" OR 
              TIPO-SALARIO = "m" OR
              TIPO-SALARIO = "D"
              GO TO 043-TSALAR-BASE
              ELSE
              DISPLAY"Tipo Invalido - Redigite" at 2118
GO TO 042-TIPO.
043-TSALAR-BASE.
           ACCEPT TSALARIO
IF SALARIO-BASE = ZEROS
              GO TO 043-TSALAR-BASE.
       044-CUSTO.
           ACCEPT NUMER-FILHOS
           IF NUMERO-FILHOS > 20
              GO TO 044-CUSTO.

       050-GRAVAR.
           DISPLAY "FUNCIONARIO GRAVADO COM SUCESSO" at 2034.
           CLOSE FUNC.
           STOP RUN.


      ***---------- FIM DO PROGRAMA JALMOX ---------***

Outras dicas:

  • Lembre-se que a maior parte das configurações igual ao que vimos aqui.
  • Nunca coloque nada para ser executado antes da coluna 8, que não será reconhecível pelo compilador.
  • O comando de escrita WRITE continuará sendo processado em cima do registro do arquivo.
  • O de leitura READ, sempre em cima do arquivo.
  • Para ler ou escrever em cima de um arquivo ou registro, respectivamente, é necessário abrir o arquivo.
  • Se o arquivo não puder ser aberto, ele poderá ser criado, com o comando OPEN OUTPUT arquivo, mas lembrem-se, todas as vezes que o arquivo é aberto com o OUTPUT, ele vai criar um novo arquivo e apagar o antigo, se houver.
  • As Lables podem continuar na coluna 8, os demais códigos da procedure division podem ser executados a partir da coluna 12.
  • Os comentários pode-se fazer com os asteriscos na coluna 7.
  • Se o seu asterisco for posto na coluna errada, ou seja, na coluna 8 em diante, vai dar erro.

Essas pequenas alterações vão te ajudar como uma pequena introdução de configuração COBOL 4.5. E que todos tenham um ótimo proveito com o desenvolvimento COBOL 4.5.