On avait déjà la possibilité d'exécuter des scripts avec VBScript (outil gratuit de Microsoft), mais cet outil n'est pas installé partout, et ce n'est pas si facile que ça à utiliser.
Quelques fois, on aimerait juste exécuter une expression, mais dont on ne connaît pas la formule au moment où on écrit le programme. On aimerait bien pouvoir construire des formules dynamiquement, et pourquoi pas, de petits morceaux de code.
J'ai trouvé un petit module en Delphi qui fait exactement ça, et je l'ai rendu accessible par une DLL nommée Scripting.dll. Tout est disponible sur mon WebDav;
Site:
http://www.mydrive.ch/Identifiant: panoramic@klausgunther
Mot de passe: panoramic123
Dossier: Scripting
Vous y trouverez les fichiers suivants:
CalcDemo.exe - un programme de démonstration fait en Delphi par l'auteur du module. Ce programme contient aussi une documentation succinte mais précise des possibilités du programme.
panoramic_script.bas - programme fait par moi pour montrer ces mêmes possibilités en Panoramic
Scripting.dll - la fameuse DLL
Scripting.txt - la doc (en anglais) extraite de CalcDemo.exe
Informations générales:Cette DLL permet d'évaluer une expression(numérique, logique ou texte), ou d'excuter un script réalisé dans un langage simple qui est documenté dans Scripting.txt. Pour cela, on a des variables qu'on peut utiliser en entrée et qui peuvent recevoir des valeurs en sortie. Ces variables sont définies dans le MEMO de gauche sous la forme:
mavariable=valeur
Un champ EDIT permet de saisir une formule, telle que
(x-3*sin(y))+20
Le bouton "Exec. Expr." donne le résultat de la formule à droite, et affiche les variables modifiées dans le MEMO de droite.
Le MEMO du milieu permet de saisir un programme (script) et de l'exécuter avec le bouton "Exec. script". En guise de résultat, on a cette fois les variables modifiées dans le MEMO de droite, et la remarque "OK" dans le champ de résultat. Un programme simple pourrait être celui-ci:
Variables:
pi=0
Programme:
pi := 4*arctg(1);
END.
Dans tous les cas, une erreur est signalée dans le champ de résultat, sous forme d'un message explicite.
La DLL se pilote par 5 fonctions:
Initialisation OBLIGATOIRE du système, après dll_on:
res%=dll_call0("ScriptInit")Arrêt du système (conseillé avantg dll_off):
res% = dll_call0("ScriptReset")Retour de l'état du système:
res% = dll_call0("ScriptStatus") retourne 1 si ScriptInit a été exécuté, et 0 sinon
Evaluation d'une expression:
res% = dll_call4("ScriptExpression",adr(var$),adr(expression$),adr(varout$),adr(res$))var$ est la liste des déclarations de variables, séparées per CR LF
expression$ est l'expression à évaluer
varout$ est une variable avsc suffisamment d'espaces pour recevoir les variables en sortie
res$ est une variable avec suffisamment d'espaces pour recevoir le résultat ou le message d'erreur.
Construisez ces variables par string$(255," ") avant l'appel de la fonction.
Exécution d'un programme:
res% = dll_call4("ScriptProgram",adr(var$),adr(script$),adr(varout$),adr(res$))script$ est la liste des lignes du programme, séparées par des CR LF
les autres paramètres sont identiques à ceux de la routine précédente.
Ce qui est sympa avec la fonction "programme", c'est qu'on peut définir ses propres sous-programmes et les utiliser dans ce script, et tout ça dynamiquement.
Je mets tout ça à disposition tel quel. Je vais regarder plus en détail comment on peut étendre le langage pour la programmation des scripts, en lui ajoutant des commandes.