Intégrer des scripts eFORTH dans une page web

publication: 12 mars 2023 / mis à jour 31 mars 2023

Read this page in english

 


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