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.
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.
Para um guia para usar Cobol no VIM vá para http://dimensional.com/~sitaram/cobol/.
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/
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).