Primo programma

Gli editor

Come la maggior parte dei linguaggi di programmazione, un programma Cobol è soltanto un file di testo che potete scrivere con il vostro editor preferito. Sia vim che Emacs fanno un buon lavoro col codice Cobol, e questo ci evita le guerre di religione.

Emacs

Non esiste una modalità Cobol che venga fornita come standard in GNU Emacs. In compenso, scaricatevi una copia del file cobol.el dal progetto 'Cobol for GCC'. Potete scaricare il file direttamente dal loro CVS presso http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/gcc/cobol/cobol.el?cvsroot=CobolForGCC.

Aprite Emacs e compilate il file Lisp con M-x byte-compile-file. Spostate il file risultante Cobol.elc nella directory /usr/share/emacs/20.7/lisp/textmodes/ oppure nella directory equivalente per la vostra installazione. Aggiungete infine questo codice al file .emacs (o al .gnu-emacs di qualche distribuzione) situato nella vostra directory personale (in /home):

(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))

Aprite un file Cobol in Emacs, e digitate `M-x cobol-mode' e `M-x font-lock-mode' per ottenere la sintassi a colori. Grazie alla squadra 'Cobol for GCC' per aver realizzato questa modalità di Emacs.

VIM

Una guida per scrivere in Cobol con VIM, si trova in http://dimensional.com/~sitaram/cobol/.

Altri editor

Oltre a quelli detti, ci sono moltissimi altri editor. Tra questi, è interessante THE, un editor che imita gli editor del mainframe come Xedit. É disponibile presso http://www.lightlink.com/hessling/

un primo programma

Ecco il programma Hello World in 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.

La struttura del programma, alquanto semplice, è composta di quattro sezioni, due delle quali hanno un qualche contenuto. Il PROGRAM-ID è semplicemente un nome per il programma, ma nella IDENTIFICATION DIVISION possono esserci anche altre informazioni. La ENVIRONMENT DIVISION può (è facoltativo) contenere informazioni riguardo la vostra configurazione, come il compilatore che state usando. La DATA DIVISION contiene tutte le dichiarazioni delle variabili di cui avete bisogno. Infine, la PROCEDURE DIVISION contiene le istruzioni vere e proprie del programma.

Si noti l'uso abbondante di lettere maiuscole nel codice. L'uso delle maiuscole per le parore chiave del Cobol, permette di mantenere la compatibilità con altri compilatori e garantisce che le parole riservate siano in risalto rispetto alle stringhe e alle variabili. Con Tiny Cobol siete completamente liberi di non usare le maiuscole, così da evitarvi il rapido logorìo del tasto di Caps Lock.

L'altra cosa da notare è la spaziatura. Fin dai tempi andati delle schede perforate, il Cobol ha mantenuto un controllo stretto sull'incolonnamento delle varie parti di codice:

colonna 1-6  : numero di riga.
colonna 7    : indicatore dell'area,		
               asterisco per righe di commento,
               segno meno per la continuazione delle righe,
               barra diagonale per salto-pagina del listato 
               altrimenti spazio.
colonna 8-11 : Margine A, ove iniziano le divisioni, le sezioni,
               gli identificatori di paragrafo e qualche numero di livello.
colonna 12-72: Margine B, per tutto ciò che non va messo
               in Margine A.
colonna 73-80: area di identificazione del programma.  

Tiny Cobol non vi forza a mantenere questo regime, ma in questo modo potete mantenere più puliti i vostri programmi, e potete anche evitare che tutti gli altri compilatori facciano storie riguardo alla spaziatura, e inoltre la modalità Cobol di Emacs ne sarà lieta. Tiny Cobol, tuttavia, persiste sull'uso dell'asterisco nella prima o nella seconda colonna a rappresentare un commento.

Adesso passiamo alla compilazione del programma. Salvate il codice sopra riportato come hello.cob e digitate il seguente comando:

	  htcobol hello

htcobol potrebbe emettere l'avvertimento (warning) che $COBDIR non è impostato; fintanto che l'installazione è avvenuta nella directory predefinita, questo non dovrebbe essere un problema; ma se avete modificato la directory, o se siete disturbati da strani messaggi di warning, aggiungete `export COBDIR=/usr/local/share/htcobol' o qualcosa di simile al vostro file .bashrc (o a .profile). Se poi vi si presenta il messaggio `Processing compiler parameters', si tratta di un buon segno.

htcobol produrrà i file hello.lis e hello.s. hello.lis è una conversione del codice Cobol in qualcos'altro di più gestibile da parte del compilatore. hello.s è il codice assembly, il codice in linguaggio-macchina in formato leggibile.

Se la vostra shell non riesce a trovare un programma di nome htcobol, verificate prima di tutto che la vostra variabile $PATH punti a /usr/local/bin/htcobol o comunque alla directory in cui avete fatto l'installazione (digitate echo $PATH). Se punta correttamente, allora verificate attentamente che sia stato tutto configurato, compilato e installato correttamente.

Se avete scritto scorrettamente il codice sopra riportato, vi renderete conto che Tiny Cobol non è ancora molto bravo a riferire gli errori. Infatti, tutto quello che otterrete è un Segmentation Fault. Verificate attentamente di aver scritto tutto correttamente, non tralasciate alcuna punteggiatura, e mettete gli asterischi dei commenti nella prima colonna.

Il prossimo passo è la compilazione del file assembly hello.s in codice macchina. il comando per farlo è:

as -o hello.o hello.s

as fa parte della collezione di compilatori GNU GCC, e se non l'avete installato dovete proprio avere una strana distribuzione (visto che avete appena adesso compilato Tiny Cobol). Cercate informazioni sull'installazione di as nella documentazione della vostra distribuzione.

hello.o è un file oggetto, ma non è eseguibile direttamente perché non è stato linkato con le librerie necessarie. Questo è il comando finale:

gcc -o hello hello.o -lhtcobol -lm

Se siete arrivati fin qui non dovreste avere avuto i problemi trattati prima ma, se gcc non ha trovato le librerie libhtcobol o libm, potreste dover aggiornare il database delle librerie con il comando ldconfig.

Alla fine avrete un programma funzionante che potrà essere eseguito con:

./hello

Dovreste poterne vedere l'output:

Hello, world!

Era facilmente prevedibile. Se osservate il codice del programma dovrebbe essere ovvio quello che fanno DISPLAY e WITH NO ADVANCING (stampa senza andare a capo).