Microsoft COBOL 4.5
guillaume.tello@orange.fr

Retour aux téléchargements
Back to Downloads


Français
English


Installation
Compilation
Exemple
Download

Installation



Connaissant une programmeuse COBOL qui m'a parlé de son travail, j'ai eu l'envie de découvrir ce langage de programmation. J'ai été surpris à la fois par son archaïsme et sa puissance. Il est particulièrement adapté à la gestion de masses de données. Ce que nous allons voir dans l'exemple commenté.

On trouve facilement en téléchargement la version 4.5 du COBOL.

Tant qu'à faire du langage ancien, j'ai choisi de l'installer sur le Supercharger  il s'agit d'un émulateur PC XT à 8 MHz embarquant 1 Mo de RAM et relié à un Atari.


J'ai trouvé cet excellent livre qui couvre tous les aspects importants de la programmation COBOL avec de nombreux exemples.

Il aborde également l'utilisation des outils, la compilation, etc.

Références : Simplified Structured Cobol
with Microsoft/Microfocus COBOL
McCracken‑Golden
ISBN : 0‑471‑51407‑1
Having met a COBOL programmer, I wanted to know more about this programming language. I was surprised by its archaism and its power. This tool is specialized in managing data. We'll see that in the commented program.

One can easely find the COBOL V4.5 for download.

Using this old language, it seemed consistent to run it on an old system. I made the installation on my Superchager  a PC XT emulator clocked at 8 MHz with 1 MB RAM connected ton an Atari.


I found this very good book that covers all the aspects of COBOL programming with tons of commented examples.

It also covers the compilation and the use of various tools.

Références : Simplified Structured Cobol
with Microsoft/Microfocus COBOL
McCracken‑Golden
ISBN : 0‑471‑51407‑1


Une fois le logiciel installé, j'ai été un peu déçu car son environnement intégré ne tourne pas avec le Supercharger. Je me suis alors tourné vers une utilisation du compilateur en ligne de commande et de l'éditeur du PC‑DOS.

Toutes les copies d'écran N&B sont réalisées sur le Supercharger avec une version modifiée du pilote.
Once installed, I was disappointed ! The integrated interface doesn't work on the Supercharger. I had to go back to command line compilation and to use the standard PC‑DOS editor.

All screen copies in B&W are made directly on the Supercharger with a modified version of its driver.


Je lance donc un fichier Batch "COBOL.BAT" définissant les variables importantes pour que les outils retrouvent leurs librairies.

Ce fichier installe également le driver de souris pour l'éditeur, puis il définit comme répertoire courant celui où je sauve mes fichiers sources.

Remarquez finalement que le fichier AUTOEXEC.BAT a ajouté deux chemins dans le PATH.
I have to run COBOL.BAT, a batch file defining the environment variables required for every tool to find its librairies.

This file also installs the mouse driver for the editor and sets as current directory the one where my sources are saved.

Note that the PATH has also been added with two values (this is made in AUTOEXEC.BAT).



Compilation



Pour compiler un fichier, on fait appel au fichier COMPILE.BAT. On l'invoque ainsi :
COMPILE FICHIER
Et il lance la compilation de FICHIER.CBL (extension par défaut des sources COBOL). Ceci génère dans un premier temps un fichier objet et signale les éventuelles erreurs dans le source.
To compile a source file, you use COMPILE.BAT. Invoking line is :
COMPILE FILE
This runs compilation of FILE.CBL (standard extension for COBOL sources). The first step is to generate an object file and summarize the eventual errors that were encountered.


Vient ensuite la phase de LINK. À partir du fichier objet est généré un exécutable.

Par défaut, celui‑ci est dépendant d'une librairie cobol CODLIB.DLE.

Pour que l'exécutable soit complètement indépendant, il faut invoquer la compilation ainsi :
COMPILE FICHIER LCOBOL
The second step is the LINK phase. From the object file, an executable program is generated.

This program relies on an external library CODLIB.DLE to run.

If you want it to be independant, you must change the invoking line this way :
COMPILE FILE LCOBOL



Exemple



Les fichiers

On dispose d'un fichier en vrac contenant 1 000 enregistrements de relevés météorologiques. Pour chacun on a quatre valeurs 
  • L'année
  • Le mois
  • La température
  • Le taux d'humidité


On se propose d'utiliser les fonctions de tri du COBOL pour obtenir soit 
  • un fichier chronologique avec ou sans calcul de moyenne
  • un fichier chronologique en filtrant certaines valeurs avec ou sans calcul de moyenne
Ci‑contre vous voyez la définition des fichiers 
  • fichier : le fichier des 1 000 enregistrements non triés DONNEES.WRK
  • sortie : le fichier trié et filtré qu'on obtiendra en sortie TRI.WRK
  • sort‑file : un fichier temporaire de travail nécessaire à la fonction SORT
The Files

Suppose we have a file of 1 000 unsorted forecast records. Each one contains four values 
  • The year (année)
  • The month (mois)
  • The temperature
  • The humidity level (taux d'humidité)


We want to use the sorting facilities of COBOL to get either 
  • a chronological sorted file with or without computing the mean of temperatures.
  • a chronological sorted file of a filtered sample of those data with or without the mean
On the left, you can see the file definitions 
  • fichier : the input file with 1 000 unsorted records DONNEES.WRK
  • sortie : the output file we'll build TRI.WRK
  • sort‑file : a temporary file required by the function SORT


Les données

Ici c'est la section de définition des variables.
  • nombre : une valeur sur 4 chiffres d'après sa PICture, elle servira à compter les valeurs en sortie pour la moyenne
  • moyenne : une valeur signée de 7 chiffres avec une décimale, elle sert à calculer la somme puis la moyenne des températures
  • reponse : une valeur d'un seul caractère utilisée pour le choix du menu puis comme indicateur de fin
    • admirez les lignes 88  elles définissent des flags selon la valeur de reponse. Par exemple, si reponse="c", tri‑post=TRUE
  • dis‑temp : une variable pour afficher la température. En effet, pour les valeurs non entières et en plus signées, la représentation interne et la représentation visuelle sont différentes. Les autres variables sont des entiers positifs.
La ligne COPY inclut le fichier correspondant qui est la définition du tableau des noms de mois de l'année.


Les copies d'écran du source ont été affichées et colorées par Notepad++ sous Windows.
Data

Here starts the variable definitions.
  • nombre : a value with four digits according to its PICture, it's used to compute the number of values for the mean.
  • moyenne : a signed value with 7 digits including one decimal, used to compute the sum and then the mean of temperatures.
  • reponse : a one‑character value used for user choices and then used for end of file flag.
    • admire the lines starting with 88  they define some flags associated with the value of reponse. For example, if reponse="c", then tri‑post=TRUE
  • dis‑temp : a variable to display the temperature. As this walue is not a positive integer, then its internal representation differs from the display value I want to get.
The line COPY includes a file containing the array of the months names.


Les écrans



La section SCREEN définit les différents écrans qui seront utilisés. Pour la plupart ce sont des écrans fixes.

Seul l'écran resultat contient un lien vers la variable moyenne et la définition de son format d'affichage. Dans PIC, Le "Z" au lieu de 9 permet d'avoir un espace si les dizaines sont nulles  on évite ainsi l'affichage de 04,5 pour une température de 4,5.
Screens

The SCREEN section defines the various screens that will be displayed. Most of them are fixed.

The only one containing a variable reference is resultat. It uses the variable moyenne. Note that in its PIC definition a Z indicates that if this digit is nul, then it will be replaced by a space. For example, if the mean is 4,5, this avoids the display of 04,5.


Procédure principale

La procédure principale est extrêmement simple car les nombreuses définitions préliminaires ont préparé le travail.

On se contente d'afficher les écrans et saisir les choix.
Vous remarquez l'usage intensif des flags associés à la variable reponse afin d'orienter le programme vers les bonnes procédures.

Ci‑dessous l'écran quel‑travail de la procédure principale :

Main procedure

The main procedure is very simple as the numerous initializations have prepared the work.

Screens are displayed and choices are read from the keyboard.
Spot the intense use of the flags associated to the variable reponse to direct the program to the desired procedures.

Here a copy of the screen quel‑travail (which work) :



Procédures de tri



  • tri‑a : la fonction SORT va utiliser le fichier temporaire sort‑file avec deux clés de tri, l'année puis le mois, en prenant ses valeurs dans fichier et en enregistrant les donnes triées dans sortie. On aurait pu ajouter la température comme 3e clé de tri. Tout se fait en une seule instruction ! On obtient le fichier trié ci‑dessous (on ne voit que les dernières valeurs) :
  • tri‑b : même travail mais les données sont filtrées en entrée par la procédure pre‑choix. Il n'y aura donc pas 1 000 valeurs en sortie.
  • tri‑c : même travail qu'en tri‑a, mais en sortie on applique la procédure post‑traitement qui calcule la moyenne des données
  • tri‑d : combine tri‑c et tri‑b, les données sont d'abord filtrées puis la moyenne est calculée sur cet échantillon.
Sorting procedures



  • tri‑a : the SORT function will use the temporary file sort‑file with two sorting keys, year and month, taking its values from fichier and saving the sorted data in sortie. A 3rd key could have been used, the temperature for example. Everything is done in one only instruction ! Here is the sorted file (only the very last values are displayed) :
  • tri‑b : same work but data are filtered upon entry by the procedure pre‑choix. So there will be less than 1 000 values in output.
  • tri‑c : same work as with tri‑a, but upon output a procedure post‑traitement is applied, it computes the mean of the temperatures.
  • tri‑d : a combination of tri‑c and tri‑b, first data are filtered and then the mean is computed using this reduced set of values.


Procédure d'affichage

À la fin de chaque opération de la procédure principale, on vous demande si vous désirez voir le fichier de sortie. Si c'est le cas, le travail est réalisé ici.

Le fichier sortie est ouvert et on utilise le flag end‑of‑file associé à la variable reponse qui vaut TRUE si reponse="E".
Dans la lecture d'un enregistrement, on met reponse="E" si on atteint la fin du fichier.
Sinon, remarquez la copie de la variable temperature vers dis‑temp pour passer de son format interne à son format d'affichage.
Display procedure

At the end of every operation in the main procedure, you are asked if you want to display the output file or not. If so, this procedure is used.

The file sortie is opened and the flag end‑of‑file associated to the variable reponse is used : it is TRUE if reponse="E".
When reading a new record, we set reponse="E" if the end of file is reached.
Else, notice the copy of temperature into dis‑temp to get a displayable format for this decimal and negative value.


Pré‑sélection

C'est la procédure de filtage en entrée des tri‑b et tri‑d. Vous remarquez la même utilisation du flag end‑of‑file.

Chaque mesure est lue et on ne retient (avec RELEASE) que celles avec une température < 0 et un taux d'humidité > 50 %.

On obtient le fichier partiel suivant :

Pre‑selection

This is the filtering procedure for tri‑b and tri‑d. The flag end‑of‑file is used simingly.

Each record is read and we only save (with RELEASE) the records with temperature < 0 and a level of humidity > 50 %.

We get the following partial file :



Post‑traitement

Lorsque le calcul de moyenne est demandé, vous remarquez qu'on travaille sur le fichier temporaire sort‑file. En fait, tri‑c et tri‑d n'ont pas de spécification "GIVING sortie", donc le fichier de sortie n'est pas généré. On utilise simplement les données filtrées et triées pour le calcul.

On calcule la somme des températures ainsi que leur nombre, puis par division on obtient la moyenne.

Vous voyez affichées les moyennes pour tri‑c (celle des 1 000 valeurs) puis pour tri‑d (celle des valeurs filtrées).


Post‑treatment

When computing the mean is desired, notice that the work is done using the temprary file sort‑file. If you read carefuly, nor tri‑c neither tri‑d have the specification "GIVING sortie", so no output file is saved. Filtered data are used for the calculation.

The sum of the temperatures is accumulated in moyenne, and then the mean is obtained with a division.

On the left, you can see the means for tri‑c (the one with the 1 000 values) and then for tri‑d (the one with with filtered data).

Download

Téléchargement

Voici mon installation du Cobol avec les sources de mes programmes.
Cobol V4.5
Download

Here is my Cobol folder with my program sources.


15 décembre 2007