Intégration de projet Delphi dans Turbo Pascal
Un projet écrit en Delphi ne peut généralement pas être intégré directement dans Turbo Pascal. Cela est dû à l'évolution importante du langage entre les deux environnements. Delphi utilise l'Object Pascal, une version enrichie du Pascal avec de nombreuses fonctionnalités modernes que Turbo Pascal ne reconnaît pas. Parmi ces ajouts figurent de nouveaux mots-clefs, une gestion avancée des classes, des propriétés, et des exceptions. Turbo Pascal, quant à lui, ne prend en charge que des objets simples et n'offre pas de support pour la programmation événementielle. En conséquence, tout code s'appuyant sur des structures comme class, try...except ou property provoquera des erreurs de compilation. Il est donc impossible de transposer tel quel un projet complexe de Delphi vers Turbo Pascal.
Une autre difficulté majeure réside dans l'utilisation de la VCL (Visual Component Library), coeur de l'interface graphique dans Delphi. Turbo Pascal, conçu bien avant l'apparition de la VCL, ne possède aucune bibliothèque graphique équivalente. Les composants tels que TButton, TForm ou TLabel n'ont aucun équivalent natif dans l'environnement Turbo Pascal. Cela signifie qu'un projet Delphi orienté interface graphique devra être entièrement repensé pour fonctionner en mode texte. Même les simples interactions utilisateur doivent être réécrites en mode console. Ainsi, seuls les projets purement logiques ou algorithmiques ont une chance d'être portés avec un effort raisonnable. Le reste nécessiterait un recodage complet.
Cependant, certains projets comme DELPHILIB-TP ont été développés pour faciliter la compatibilité. Cette bibliothèque ajoute à Turbo Pascal certaines fonctions standard de Delphi, comme Power, LowerCase, ou SetCurrentDir, ce qui permet de porter plus facilement du code simple. Elle aide à réduire l'écart entre les deux environnements, tant que l'on reste dans les limites du langage procédural. DELPHILIB-TP ne gère pas les classes ni la VCL, mais elle constitue un bon point de départ pour les projets consoles ou les unités de calcul. Elle offre ainsi un compromis utile pour adapter du code Delphi à Turbo Pascal. Toutefois, pour des projets complexes, cette approche ne saurait suffire. Il faudra toujours vérifier ligne par ligne ce qui est réellement transposable.
Les types de projets possible à migrer
Si votre projet Delphi est un programme console, avec une structure de départ comme celle-ci :
alors vous aurez davantage de chances de le porter avec succès vers Turbo Pascal. En combinant les unités proposées par DELPHILIB-TP et quelques ajustements, il devient possible d'exécuter un projet similaire. Il faudra toutefois ajouter l'unité Crt pour l'affichage dans le terminal DOS, et peut-être réécrire certains appels systèmes ou fonctions non supportées. Cette approche ne permet pas une compatibilité complète, mais constitue une passerelle utile pour adapter des projets simples ou des outils en ligne de commande.
Gestion des exceptions
Turbo Pascal ne possède pas de système de gestion d'exceptions comme Delphi avec try...except, mais il offre quelques mécanismes rudimentaires permettant de simuler un comportement similaire. Deux variables spéciales, HeapError et ExitProc, peuvent être utilisées à cette fin. HeapError est appelée automatiquement lors d'un échec d'allocation mémoire sur la mémoire de tas (heap), ce qui permet de personnaliser la réaction du programme à un New ou GetMem échouant. ExitProc, quant à elle, est un pointeur vers une procédure exécutée automatiquement juste avant la fin du programme, ce qui permet de centraliser certaines actions de nettoyage ou de journalisation d'erreur. En combinant ces deux outils, on peut créer une simulation partielle d'un système de gestion des erreurs contrôlé.
Voici un exemple simple d'utilisation de HeapError pour intercepter les erreurs d'allocation mémoire :
Parallèlement, ExitProc peut être utilisé pour effectuer des opérations de sortie conditionnelle en cas d'erreur détectée dans le programme. Par exemple, on peut déclarer une variable globale ErreurDetectee que l'on met à True en cas de problème, puis afficher un message dans une procédure de fin. Cette procédure est automatiquement appelée avant la sortie du programme, ce qui simule en quelque sorte un bloc finally de Delphi. Voici un exemple :
En résumé, bien que Turbo Pascal n'ait pas de gestion des exceptions structurée, il offre via HeapError et ExitProc un moyen minimaliste mais fonctionnel de réagir à certains événements d'exécution. Ces variables spéciales permettent d'implémenter des comportements personnalisés en cas d'erreur mémoire ou à la fin du programme. Cela permet par exemple d'afficher un message d'erreur, de libérer proprement des ressources, ou de tracer des journaux de bord avant de quitter. Cela reste loin des possibilités de Delphi, mais suffisant pour structurer un comportement plus robuste dans un environnement limité comme celui de Turbo Pascal.