# COBOL/Structure du programme
## Introduction

Ce chapitre vous présente la structure de tous les programmes COBOL que vous rencontrerez.

## Structure d’une ligne
### Format fixe

Les premières versions étaient utilisées avec des cartes perforées et imposaient un format fixe où chaque ligne possède un en-tête (numéro de ligne) suivi d'une indentation faisant débuter le véritable contenu de la ligne selon l'instruction COBOL utilisée. Une carte perforée ne pouvant stocker qu'une ligne de code, chaque carte (chaque ligne) était numérotée afin de pouvoir les remettre dans l'ordre, ou afin que la machine puisse elle-même les remettre dans le bon ordre si elle le permettait.
Une ligne a un format fixe de 80 colonnes de long :
* Les colonnes 1 à 6, peu utilisées, peuvent contenir une numérotation COBOL (numéro de ligne) ou des annotations permettant de commenter le code (date de modification, référence de l'évolution, trigramme du développeur, initiales du développeur, etc.).
* La colonne 7 est réservée aux caractères particuliers suivants :
** * : ce qui suit doit être considéré comme un commentaire.
** d : indique que la phrase COBOL de cette ligne n'est à exécuter qu'en DEBBUGING-MODE.
** / : caractère reconnaissable par l'imprimante et commandant un saut de page dans le listing issu de la compilation.
** - : caractère de continuation d’un libellé (uniquement en WORKING-STORAGE SECTION).
** un espace : dans tous les autres cas.
* Les colonnes 8 à 11 incluses sont réservés pour commencer les noms de divisions, de sections et de paragraphes ainsi que certaines descriptions de données.
* Les colonnes 12 à 72 contiennent tous les autres verbes COBOL.
* Les colonnes 73 à 80 ne sont pas interprétées par le compilateur.
Le format fixe est adapté à l'utilisation des cartes perforées mais n'est pas pratique à utiliser sur les supports de stockages modernes. En particulier, il n'est pas facile d'insérer une nouvelle ligne de code au milieu du code existant. Une solution serait de numéroter de 10 en 10 ou plus afin de pouvoir insérer de nouvelles lignes si le compilateur le supporte.

### Format libre

Les versions modernes du langage COBOL permettent l'utilisation d'un format libre. Celui-ci supprime les contraintes du format fixe :
* Les numéros de lignes ne sont plus nécessaire (voire non autorisés avec certains compilateurs),
* Le type de ligne (colonne 7) est absent :
** La longueur de ligne n'est plus limitée à 80 caractères, ce qui rend inutile l'utilisation de continuation ;
** Le type * en colonne 7 introduisant un commentaire est remplacé par le préfixe *> ;
** Il n'y a plus de mode debug, ni de saut de page explicite dans le code source.
* Chaque ligne peut commencer à n'importe quelle colonne, quel que soit l'instruction.

## Structure du programme

Un programme est constitué de divisions (4 au total), elles-mêmes constituées de sections. Elles permettent de structurer le programme, par exemple de séparer la définition des variables du reste du code.
Les 4 divisions qui composent un programme sont les suivantes :
* IDENTIFICATION DIVISION, obligatoire, stocke les caractéristiques du programme (son nom par exemple). Elle doit obligatoirement contenir la clause PROGRAM-ID suivie du nom que vous donnez à votre programme, ce nom servira à le référencer : d'autres programmes pourront l’utiliser ;
* ENVIRONMENT DIVISION, facultative, définit l'environnement dans lequel s'exécute le programme ;
* DATA DIVISION, facultative, sert à définir les variables utilisées par le programme ;
* PROCEDURE DIVISION, facultative, contient les instructions du programme. Ces instructions sont regroupées en paragraphes, un paragraphe est formé d’un nom de paragraphe suivi d’un point, et d’une suite d'instructions, assimilées a des phrases, chaque phrase doit se terminer par un point.
L'identifiant du programme, les noms de paragraphes et de variables sont une suite de caractères alphanumériques, pouvant contenir des tirets (pas d'espaces ou autres caractères spéciaux).
La fin d’un programme est signalée par la phrase END PROGRAM suivie du nom que vous avez donné à votre programme. Pour mettre fin à l'exécution du programme, vous avez à votre disposition l'instruction STOP RUN, celle-ci doit être la dernière instruction d’une phrase, elle provoque la fermeture de tous les fichiers.
Les différentes sections d’un programme seront détaillées dans les chapitres suivants.

### Code minimal

Ce programme, appelé premier-programme, ne contient qu'un paragraphe : paragraphe-principal ne contenant lui-même que l'instruction STOP RUN.
Le même programme en format libre supporté par les versions récentes de COBOL :

### Hello World !

Traditionnellement, quand on vous apprend un langage, on vous fournit un "Hello World !", c’est un programme qui se contente d'afficher cette chaîne de caractères sur la console.
Pour afficher des données sur la sortie standard (la console), vous aurez besoin de l'instruction DISPLAY, elle s'utilise comme suit :
Conformément à tout un tas de conventions d'écriture, ce qui figure entre crochets est optionnel, nous pouvons donc l’utiliser de 2 manières différentes :
NO ADVANCING est facultatif et permet de garder le curseur positionné immédiatement derrière le dernier caractère écrit.
Les identificateurs sont des noms de variables, les littéraux sont des données brutes, manipulées sans l'intermédiaire de variables, par exemple des chaînes de caractères (délimitées par des guillemets) ou des valeurs numériques. Voici donc un exemple de Hello World ! :
| Introduction au COBOL | Variables |