Primeiro Programa

Editores

Como a maioria das linguagens de programação, um programa Cobol é exatamente um arquivo texto, que você pode editar em seu editor de textos favorito. Felizmente, para evitar algumas guerras de religião, ambos vim e Emacs funcionam com Cobol.

Emacs

Não há um modo Cobol que venha como padrão para o GNU Emacs. Ao invés disso, obtenha uma cópia do Cobol.el do projeto Cobol for GCC. Você pode obter o arquivo diretamente do CVS deles em http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/gcc/cobol/cobol.el?cvsroot=CobolForGCC.

Abra o emacs e compile o arquivo lisp com M-X byte-compile-file. Movimente o arquivo Cobol.elc resultante para /usr/share/emacs/20.7/lisp/textmodes/ ou o equivalente para sua instalação. Finalmente adicione este código para o arquivo .emacs ou .gnu-emacs em algumas distribuições) em seu diretório pessoal:

(autoload 'cobol-mode "cobol" "COBOL Editing mode" t)
    (setq auto-mode-alist
          (append '(("\\.cpp$" . c++-mode)
                    ("\\.hpp$" . c++-mode)
                    ("\\.lsp$" . lisp-mode)
                    ("\\.scm$" . scheme-mode)
                    ("\\.pl$"  . perl-mode)
                    ("\\.cbl$" . cobol-mode)
                    ("\\.CBL$" . cobol-mode)
                    ("\\.COB$" . cobol-mode)
                    ("\\.cob$" . cobol-mode)
	            ("\\.CPY$" . cobol-mode)
                    ("\\.cpy$" . cobol-mode)
                   ) auto-mode-alist))

;; Auto font lock mode
(defvar font-lock-auto-mode-list
  (list 'c-mode 'c++-mode 'c++-c-mode 'emacs-lisp-mode 'lisp-mode
'perl-mode 'scheme-mode 'scribe-mode 'shell-script-mode 'cobol-mode
'dired-mode)
  "List of modes to always start in font-lock-mode")

(defvar font-lock-mode-keyword-alist
  '((c++-c-mode . c-font-lock-keywords)
    (perl-mode . perl-font-lock-keywords)
    (cobol-mode . cobol-font-lock-keywords)
    (dired-mode . dired-font-lock-keywords))
  "Associations between modes and keywords")

(add-hook 'cobol-mode-hook
          '(lambda ()
             (set (make-local-variable 'dabbrev-case-fold-search) t)
             (set (make-local-variable 'dabbrev-case-replace) t))

Abra o arquivo Cobol no emacs e digite 'M-x cobol-mode' e 'M-x font-lock-mode' para recolher belas cores. Agradecimentos para a equipe do Cobol for GCC por fazer um modo para o emacs.

VIM

Para um guia para usar Cobol no VIM vá para http://dimensional.com/~sitaram/cobol/.

Outros

Há muitos outros editores lá fora. Um interessante é o THE, um editor que imita editores de mainframe semelhante ao Xedit. Ele está disponível em http://www.lightlink.com/hessling/

Primeiro Programa

Aqui está um programa Hello World em Cobol:

* Hello World Program
* GPL Copyleft Jonathan Riddell 2001
       IDENTIFICATION DIVISION.
       PROGRAM-ID.    hello.
       ENVIRONMENT DIVISION.
       DATA DIVISION.

       PROCEDURE DIVISION.
           DISPLAY "hello ," WITH NO ADVANCING 
           DISPLAY "world!"
           STOP RUN.

A estrutura do programa é bastante simples, quatro seções, duas que tem conteúdo. PROGRAM-ID é um nome simples para o programa, você pode opcionalmente ter outras informações na IDENTIFICATION DIVISION. A ENVIRONMENT DIVISION pode(opcionalmente agora) conter informações sobre sua configuração, semelhante ao do compilador que você está usando. A DATA DIVISION contém muitas declarações de variáveis que nós podemos precisar. Finalmente a PROCEDURE DIVISION são as atuais instruções do programa.

Você pode notar que há uma série de maiúsculas no código. Usar maiúsculas para palavras reservadas do COBOL mantém o programa mais compatível com outros compiladores e assegura às palavras reservadas uma posição contra as literais e variáveis. Com o Tiny Cobol você é perfeitamente livre para não usar maiúsculas que irão parar o seu Caps Lock desgastando a rapidez.

A outra coisa a notar é o espaçamento. Voltando aos dias dos cartões perfurados, cobol mantém um controle severo das partes onde o código deve estar:

column 1-6   : numeração de linhas.
column 7     : área de indicação,		
               asterisco para comentar linhas,
               menos para continuação de linhas,
               barra para pular páginas na listagem
	       de compilação caso contrário espaços.
column 8-11  : Margem A, aqui inicia divisões, seções,
	       identificadores de parágrafo e muitas 
	       numerações de nível.
column 12-72 : Margem B, para tudo que não pertencer
	       a margem A
column 73-80 : área de identificação do programa.  

O Tiny Cobol não força você a manter este regime mas ele pode manter seus programas mais bem arrumados, ele também para estardalhaços de alguns outros compiladores sobre espaçamento e ele mantém o modo Cobol no emacs felizmente. Tiny Cobol, entretanto, insiste em ter um asterisco que denota um comentário na primeira ou segunda coluna.

Agora compilaremos o programa. Salve o código acima como hello.cob e digite o seguinte comando:

	  htcobol hello

Há chances que o htcobol avise que $COBDIR não esteja setado, enquanto você instalar no diretório default não deve ser um problema mas se você mudar o diretório ou se você recebeu mensagens estranhas de aviso então adicione 'export $COBDIR=/usr/local/share/htcobol' ou similar para seu arquivo .bashrc ou .profile. Ele irá dizer isso também 'Processing compiler parameters', isto é uma boa coisa.

O Htcobol irá produzir os arquivos hello.lis e hello.s. hello.lis é a conversão do código Cobol em alguma coisa mais amigável para o compilador. hello.s é um código assembly, à leitura humana equivalente ao código de máquina.

Se seu shell não pode encontrar um programa chamado htcobol, primeiramente cheque sua variável $PATH apontando para /usr/local/bin/htcobol ou onde quer que você instalou-o (digite 'echo $PATH'). Se ele existir, então, cheque duplamente se ele está configurado, compilado e instalado corretamente.

Se você se embaraçou com o código abaixo, você vai notar que o Tiny Cobol não é ainda muito bom para reportar erros. De fato tudo que você receberá será uma "Falha de Segmentação". Cheque duplamente se você soletrou tudo corretamente, e se você não esqueceu de nenhuma pontuação e os asteriscos dos comentários da primeira coluna.

O próximo passo é compilar o arquivo assembly hello.s para código de máquina. O comando para isto é:

as -o hello.o hello.s

o AS é parte da coleção de compiladores GNU, GCC, e se você não o tem instalado, você tem uma distribuição de fato muito esquisita (dado que nós já compilamos o Tiny Cobol hoje). Cheque a documentação da sua distribuição para instalá-lo.

hello.o é um arquivo objeto, mas não é um executável que funciona por que ele não está sendo linkado com as bibliotecas necessárias. Este é o comando final:

gcc -o hello hello.o -lhtcobol -lm

Se você achou isso difícil, você provavelmente não tem tido nenhum problema com isso, mas se o gcc não encontrar as bibliotecas libhtcobol ou libm então você pode ter que atualizar a base de dados das bibliotecas com o comando ldconfig.

Finalmente há um programa funcional que pode ser chamado com:

./hello

E você deve ver na tela:

Hello, world!

Que será praticamente previsível. Se você olhar o código do programa, ele deve ser óbvio que DISPLAY mostra e que WITH NO ADVANCING mostra(sem quebrar a linha).