Intégrer des scripts eFORTH dans une page web
publication: 12 mars 2023 / mis à jour 31 mars 2023
Définition de scripts de type text/forth
En HTML, la balise <script> admet différents paramètres. Celui qui nous intéresse est le paramètre type.
Pour exécuter du code JavaScript, le type défini est text/javascript. Si le type n'est pas défini, le contenu de la balise HTML <script> sera considéré comme code JavaScript.
Ici, nous allons faire preuve d'audace en utilisant un type que personne nulle part sur Internet utilise: text/forth
<script type="text/forth">
Normalement, ce type text/forth est inconnu. Pour pouvoir en traiter le contenu, cette définition de <script> doit être précédée du script qui charge eFORTH:
<script src="public/js/ueforth.js"></script> <script type="text/forth"> ...here FORTH code.... </script>
A partir de maintenant, le code FORTH sera interprété. Exemple, ici on a intégré le code du mot dump
:
<script src="public/js/ueforth.js"></script> <script type="text/forth"> : dump ( start len -- ) cr cr ." --addr--- " ." 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ------chars-----" \ .....[CUT]...... myBASE base ! \ restore current base cr cr ; </script>
Le code complet du mot dump
est disponible ici.
On sauvegarde notre page HTML et on la récupère dans notre navigateur web.
L'exécution de words
montre que notre définition de dump
a été parfaitement compilée:
ok --> words dump FORTH ok colors ms start-task task pause tasks ENDOF OF ENDCASE CASE +to to exit ; { (local) asm words vlist order see .s startswith? str= :noname forget dump spaces assert set-title page at-xy normal bg fg ansi ms-ticks ......
Charger les scripts depuis des fichiers
Il est possible de définir la source d'un script de type text/forth:
<script src="public/js/ueforth.js"></script> <script type="text/forth" src="public/js/dumpTool.fs"> </script>
Il suffit d'installer le fichier dumpTool.fs sur le serveur. Ici, le fichier dumpTool.fs a été installé dans le même répertoire que celui du fichier ueforth.js.
En procédant de cette manière, un même script FORTH peut être partagé sur plusieurs pages web. La modification d'un script sera prise enc ompte par toutes les pages web utilisant ce script.
Il est possible d'appeler plusieurs scripts FORTH:
<script src="public/js/ueforth.js"></script> <script type="text/forth" src="public/js/myScript01.fs"></script> <script type="text/forth" src="public/js/myScript02.fs"></script> <script type="text/forth" src="public/js/myScript03.fs"></script> <script type="text/forth" src="public/js/myScript04.fs"></script> <script type="text/forth" src="public/js/myScript05.fs"></script>
ATTENTION
Cette méthode d'intégration du code eFORTH ne fonctionne pas en local. C'est dû à des raisons de sécurité.
Si vous souhaitez faire des tests approfondis en local, vous devrez intégrer les codes sources comme expliqué en début d'article.
Il devient donc possible d'exécuter des programmes eFORTH très longs et complexes depuis une page HTML.
Bonne programmation.
Extension du vocabulaire web de eFORTH
Le vocabulaire web est très incomplet. Vous pouvez l'étendre en récupérant le contenu du fichier
additional definitions for eFORTH web
Installez ce fichier dans le répertoire de votre choix. Pour notre part, nous avons une préférence pour le nom de répertoire fs (pour Forth Script). Pour appeler le contenu de ce fichier additionalDefs.fs depuis votre application web:
<div id="ueforth"></div> <script src="../js/ueforth.js"></script> <script type="text/forth" src="fs/additionnalDefs.fs"></script> <script type="text/forth"> \ here additionnal Forth Code </script>
Dans notre page web, c'est cette troisième ligne qui chargera le code contenu dans fs/additionalDefs.fs.
Mots non définis dans eForth
Ces mots peuvent être utiles pour étendre les vocabulaires.
web vocabulary
arc arcTo circle clip closePath clearRect date@ drawImage ellipse imageSize lineDashOffset globalAlpha! rect resetTransform setLineDash shadowBlur shadowColor shadowoffsetX shadowoffsetY strokeText textAlign time@
Legal: site web personnel sans commerce / personal site without seling