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:
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.
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.
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.