# GFA Basic

Le GFA BASIC (ou GfA BASIC), mis au point par Frank Ostrowski et édité par la Gesellschaft für Automatisierung (société d'automatisation), est un dialecte Basic à l'origine écrit pour l'Atari ST, micro-ordinateur ayant pour base un microprocesseur Motorola 68000 et fonctionnant sous environnement GEM.
Son succès a été tel qu'il a rapidement détrôné le ST-Basic pourtant fourni à l'époque avec le ST.
Par la suite, le GFA a été décliné tardivement pour l'Amiga puis pour PC Windows : il existe actuellement deux versions gratuites disponibles en tant qu'abandonware : 16 bits et 32 bits.

## Ses principales caractéristiques

Le succès du GFA est dû surtout à sa puissance, sa polyvalence et à son confort d'utilisation.
Le GFA BASIC à l'instar du langage Pascal est un langage de programmation structurée : il comporte des procédures et des fonctions repliables dans l'éditeur. Ses instructions couvrent à peu près tous les domaines (maths, édition, graphismes, fichiers) et toutes les ressources de la machine (BIOS, GEMDOS, XBIOS).
L'autre clef de son succès est la possibilité de décrire des instructions en « phrases » extrêmement courtes. Cela est dû à la grande souplesse des expressions algébriques et à la non déclaration des variables qui clarifie énormément les listings.
On peut facilement le comparer avec le langage C.
Avec et sans déclaration, ce que cela peut donner :
* en langage C : int carre(int a){return (a * a);} ;
* en langage GFA BASIC : fn carre(a%) = a%^2.
La non-déclaration des variables (et des fonctions) ajoute à la souplesse du GFA BASIC :
* en langage C : float b; float c; float a = 2 * b + 4 * c ;
* en langage GFA BASIC : a = 2 * b + 4 * c.
Les variables sans suffixe sont toutes float (paramétrables).
Un magazine de l'époque consacré à l'Atari, ST Magazine, avait même une rubrique intitulée « GFA PUNCH » qui proposait de publier les meilleurs programmes de moins de 20 lignes. Chaque mois il y avait 5 ou 6 listings envoyés par des lecteurs dont le résultat était relativement époustouflant pour l'époque.
Le GFA 16 bits pour Windows (Gfw Basic) était fourni avec un éditeur-interpréteur et un compilateur séparé. L'éditeur dédié permettait la vérification syntaxique instantanée, le lancement de l'interpréteur et le repliage des procédures et fonctions.
La version 32 bits intègre directement le compilateur, le menu fichier propose alors l'option « Compile To Exe… ». De plus, cette dernière version comporte un éditeur de « form » intégré permettant de gérer les évènements windows liés aux éléments visuels tels que les boutons, les fenêtres et les listes, l'intégration de ressources telles les bitmaps et les icônes et enfin un débogueur performant. Il est en outre possible de compiler un code GFA Basic 32 en bibliothèque portant alors l'extension « lg32 » réutilisable par la suite dans de futurs développements. L'éditeur de code dispose en outre d'un menu « Extra » dans lequel le programmeur peut ajouter ses propres extensions portant l'extension gll afin d'ajouter de nouvelles fonctionnalités.
Contrairement aux versions précédentes, la version 32 bits du GFA-BASIC instaure la déclaration des variables (qui jusqu'ici n'avait pas besoin d'être déclarées). Non pas que celle-ci apporte directement un plus mais cela permet une grande portabilité sous Windows et permet d'étendre les types de variables avec en particulier les types Double et Large.
La version 32 bits du GFA-BASIC est maintenue par Sjouke Hamstra depuis mars 2009 et la dernière version est la 2.62.

## Quelques commandes GFA BASIC pour Windows
### Exemple d'une expression algébrique valide

a = 2 * PI / (4 * 7 / sin(2 - 4 ^ x + 5.55 * 4.54E10+121 - cos(tan (asin (7.56 + x) + x * 7) * 2 * pi)))
Les expressions algébriques obéissent aux règles de mathématiques sur les priorités de calcul :
* les parenthèses les plus imbriquées en premier ;
* les puissances avant les factorisations ;
* la multiplication avant l'addition et la soustraction, etc.

### Exemple de dialogue simple

Commande : ALERT icone, texte,defaut,bouton,retour icone : numéro d'une icône prédéfinie.
texte : le texte à afficher dans la boîte de dialogue.
defaut : Le bouton qui répondra à la touche entrée.
bouton : une chaîne de caractères définissant les boutons.
retour : une variable numérique contenant le bouton cliqué une fois que l'instruction alert aura été exécutée.
Exemple : ALERT 1,"Voulez-vous continuer",1,"Oui|Non|Peut-être",r%
Dans ce cas, après la réponse de l'utilisateur r% contient le numéro du bouton cliqué.
Si r%=1 alors la réponse était « Oui », r%=2 pour « Non » et r%=3 pour « Peut-être ».
Si l'utilisateur appuie directement sur la touche « entrée » sans choisir un bouton alors r%=1 (valeur par défaut).

## Réalisations

L'éditeur de jeu d'Another World, un jeu vectoriel créé par Éric Chahi, a été réalisé en GFA BASIC, ce qui d'après l'auteur a permis de gagner du temps sur le développement de l'outil par rapport au développement de logiciels réalisés en assembleur, comme c'était le cas du jeu lui-même.