Aller au contenu principal

Jouer avec Docker et Pascal

Peut-on exécuter aujourd'hui du code Pascal vieux de 30 ans ? Oui ! Ce guide vous montre comment utiliser Docker et le Free Pascal Compiler (FPC) pour compiler et exécuter vos anciens programmes Turbo Pascal.

· 4 minutes de lecture
Voir la source
Christophe
Amoureux de Markdown, WSL et Docker ~ Curieux insatiable.
Cet article existe aussi en anglais — lire la version originale.

Traduction automatique

Cette traduction a été produite par une IA. Elle peut contenir des contresens ou des maladresses, en particulier sur les termes techniques. En cas de doute, consultez l'article de référence en anglais — c'est lui qui fait foi.

Cet article a plus d'un an, mais il a été relu le 30 juillet 2026 — son contenu est toujours exact.

Jouer avec Docker et Pascal

⚡
TL;DR

Cet article ressuscite du code source Turbo Pascal vieux de 30 ans (récupéré dans la vieille archive SWAG) en utilisant l'image Docker signumtemporis/fpc pour compiler des fichiers .pas en exécutables Windows, sans aucune installation locale. Au programme : un « Hello World » et une vieille fonction de conversion d'un octet en binaire écrite en 1992.

Que de bons souvenirs... Pendant mes études (en 1991-1993), j'étais un grand fan de Turbo Pascal 7.0. C'est le premier langage que j'ai vraiment appris, et je l'adorais. Je passais des dizaines d'heures derrière mon ordinateur à écrire tout et n'importe quoi.

Si vous vous souvenez encore de cette époque, Turbo Pascal 7.0 servait à créer des exécutables pour MS-DOS.

L'idée de cet article m'est venue après celui écrit sur le langage assembleur : est-il possible, en 2023, de faire tourner du code Pascal écrit 30 ans plus tôt ?

Turbo Pascal

La première chose à faire était de retrouver du vieux code source et, pour ça, je suis retourné voir le Sourceware Archive Group, plus connu sous le nom de SWAG.

La requête paramétrée suivante retrouve du code que j'ai publié il y a 30 ans : https://www.google.com/search?q=avonture+site%3Ahttp%3A%2F%2Fwww.retroarchive.org. Par nostalgie, j'ai aussi recopié ces sources ici : https://github.com/cavo789/swag.

Hello world​

Lancez mkdir C:\tmp\pascal && cd C:\tmp\pascal dans une console MS-DOS pour créer un dossier appelé pascal et vous y placer.

Créez un nouveau fichier appelé Hello.pas avec ce contenu :

begin
writeln('Hello world! I''m a Turbo Pascal source code');
end.

Ce programme Pascal affiche simplement un message texte à l'écran. C'est un exemple minimal qui démontre la structure de base d'un programme Pascal exécutable.

Comme vous le savez, Pascal est un langage compilé et doit donc être compilé en .exe. La commande ci-dessous s'en charge :

>Powershell

Notre exécutable a été créé. Il est temps de le lancer avec Hello.exe :

>Powershell

Voilà, nous avons créé avec succès notre premier code Pascal en 2023.

Ce blog possède une petite collection d'articles du type « faire tourner le langage X sans l'installer » : Java, Python et PHP.

Rappel sur la CLI Docker

Pour rappel, les commandes docker run utilisées sont (presque toujours les mêmes) :

  • -it pour démarrer Docker en mode interactif, ce qui permet au script exécuté dans le container de vous poser des questions par exemple,
  • --rm pour demander à Docker de tuer et supprimer le container dès que le script a été exécuté (sinon vous vous retrouverez avec une tonne de containers Docker arrêtés mais pas supprimés ; vous pouvez le vérifier en n'utilisant pas le flag --rm puis en lançant docker container list dans la console),
  • -v %CD%:/app pour partager votre dossier courant avec un dossier appelé /app dans le container Docker,
  • -w /app pour dire à Docker que le répertoire courant, dans le container, sera le dossier /app,
  • puis signumtemporis/fpc:cross.x86_64-win64.slim qui est le nom de l'image Docker à utiliser et, enfin,
  • Hello.pas c'est-à-dire notre fichier source (l'image fpc ne semble pas demander de préciser l'exécutable fpc ; juste le fichier source).

Convertir un nombre en octet​

Essayons quelque chose d'un peu plus complexe qu'un simple Hello world : une fonction de conversion pour déterminer la représentation binaire d'un nombre positif (soyez indulgent, c'était un devoir scolaire 😄).

J'ai écrit cette fonction en 1992 (publiée dans le SWAG en 1997) : https://github.com/cavo789/swag/blob/master/Byte2Bin/files/source.pas

Créez le fichier Byte2Bin.pas sur votre disque avec ce contenu :

Function Byte2Bin (Chiffre : Byte) : String;
Var I, Temp : Byte;
St : String;
Begin
St := '';
For I := 7 Downto 0 do Begin
Temp := (Chiffre and (1 shl I));
If (Temp = 0) then St := St + '0' Else St := St + '1';
End;
Byte2Bin := St;
End;
begin
WriteLn( Byte2Bin(197) );
end.

Cette fonction convertit un nombre entier (byte) en sa représentation binaire sous forme de chaîne de caractères. Elle examine chaque bit du nombre de gauche à droite en utilisant des opérations binaires et ajoute '0' ou '1' à une chaîne résultat selon que le bit est vide ou non.

SHL pour Shift left one position

L'instruction shl décale le nombre d'un octet vers la gauche.

Et compilez-le :

>Powershell

Comme vous pouvez le voir dans le code source, l'idée était d'afficher la représentation binaire de 197 et, oui !, c'est bien 11000101. Toujours en 2023.

>Powershell

OK, l'intérêt de faire tourner du code TP7 en 2023 est minime et inutile, mais c'est bien amusant de voir que ça marche encore.

Même idée, autre langage : j'ai aussi joué avec Python et Java en utilisant exactement la même approche Docker « zéro installation locale ».


Cet article vous a-t-il été utile ?
Avez-vous suivi les étapes de cet article ?