Les scripts CGI, Bash et Forth

Les scripts CGI permettent d'appeler des commandes Unix, ou de lancer l'exécution d'un programme Perl, C... et pourquoi pas en Forth ?

26. Un script Forth élémentaire


Voici un tout petit script en Forth écrit pour pouvoir être appelé par Bash.

Code du script cuicui.fs


#! /usr/local/bin/gforth

256 Constant max-line
Create chaine max-line allot
variable n1 0
s" Depuis le script Forth : Ceci est un texte stocké dans une chaîne..." dup n1 ! chaine swap cmove
chaine n1 @ stdout write-file throw

bye
Avant de pouvoir exécuter le script, penser à faire :
chmod +x cuicui.fs

Commentaires et discussion sur les dialectes de Forth


La seule notion nouvelle est celle de fichier STDOUT.
Dans Unix (et ses dérivés libres : Linux, FreeBSD) "tout est fichier" (ce n'est pas moi qui l'invente).
Les fichiers communiquent par le moyen de "tuyaux".
Tois tuyaux existent au moins :
- le tuyau de lecture du clavier (STDIN) ;
- le tuyau d'écriture sur la console (STDOUT) ;
- le tuyau de sortie des erreurs (STDERR).
Unix (et ses descendants) est programmé en langage C, l'affinité entre eux datant de la création d'Unix et ce n'est pas un hasard si l'on trouve ces notions dans le langage C. On les trouve également dans des langages tels que Perl et PhP qui ont une affinité prononcée pour Unix et C.
Mais qu'en est-il de Forth, qui est "né sur une toute autre planète" et, qui pour certaines de ses déclinaisons, est tout à fait autonome (tels sont 4IM, colorForth, Enth...). Chuck Moore proclame d'ailleurs que "le système n'est pas la solution mais qu'il est le problème".

Ce que je propose ici n'est pas d'engager une polémique sur les vertus de tel ou tel. Non que ces débats ne m'intéressent pas, mais je pourrai en débattre tout à loisir quand le "Site Forth en Forth" existera, en utilisant les fonctionnalités qu'il offrira.
GForth a été choisi par défaut, parce qu'il propose STDIN, STDOUT et permet donc de communiquer avec navigateur et serveur web.

27. Le script Bash qui l'appelle


Code du script coucou2.cgi


#!/bin/sh
echo "Content-Type: text/plain"
echo
echo "Depuis Bash : Vous avez cliqué sur le bouton Valider"
# appel du script en Forth
./cuicui.fs
Avant de pouvoir appeler le script Bash, il faut le rendre exécutable par :
chmod +x coucou2.cgi
Remarquer le mode d'appel du script Forth : ./cuicui.fs

28. La page web qui lance les scripts


Elle s'appelle "formul2.html" et le seul changement par rapport à la précédente est le nom du script appelé :
<form ACTION="http://localhost/cgi-bin/coucou2.cgi" METHOD=POST ENCTYPE="multipart/form-data">

Rappelons que pour visionner le résultat il faut :

- copier "formul2.html" dans le dossier /var/www/html
- copier coucou2.cgi et cuicui.fs dans le dossier /var/www/cgi-bin
- rendre les scripts exécutables
- lancer l'exécution du navigateur et entrer l'URL http://localhost/formul2.html

Conclusion provisoire


A condition d'avoir un Apache qui va bien, cela marche !!!
Et là on peut commencer à rêver un peu :
- nous avons Forth (et chacun ne doit pas oublier combien ce langage est, en mode compilé, extraordinairement efficace)
- nous avons une ébauche d'interactivité.

Si l'on se dit que la configuration d'Apache est du ressort de l'hébergeur, on peut presque s'imaginer que nous avons presque tout.
J'allais oublier l'essentiel : rester humble, ne pas se laisser abuser par l'idéalisation de son égo.
Humble. Pas facile... mais nécessaire.



Haut de page