4IM sous DOSEMU - 2

Rappel : Ce texte s'appuie sur le contenu du site d'Astrobe, à l'adresse : http://membres.lycos.fr/astrobe/

1. Intro

Maintenant que nous avons réglé une première difficulté, nous allons effectuer les manipulations proposées par le tutorial d'Astrobe, dans la partie "French" de son site.
Par convention, le texte en bleu sera extrait du tutoriel et le texte en noir contiendra mes compléments.

Entrer des nombres

Concrètement, si on tape 1 2 3 à l'invite de 4IM, le système va successivement "empiler" les nombres 1, 2 et 3. Le nombre au sommet de la pile est 3. On peut le voir en tapant "?", qui permet d'afficher l'élément au sommet de la pile.

Cela marche bien : réponse 3 ready

Si on tape à nouveau "?", le système affichera '2': le point d'interrogation, comme la plupart des mots du langage, "consomme" ses arguments, qui sont toujours au sommet de la pile: de même qu'il est mal aisé de prendre une feuille au milieu d'une pile plutôt que celle du dessus, pour le système est il est plus facile de traiter avec les données au sommet de la pile plutôt qu'avec celles qui se trouve au milieu. Tapez "?" jusqu'à ce que le système signale une erreur ...

Oui. Le message est 0 3 ABORT!

...puis remettez 1 2 3 sur la pile. Maintenant si on tape "+" le système additionne les 2 premiers éléments de la pile et dépose le résultat sur la pile. Si bien que que l'on a dans la pile 1 et 5. Si on fait "+" à nouveau, il ne reste plus que 6. On peut faire cela en une seule fois: 1 2 3 + + ? ( affiche 6 ) mais on peut aussi écrire: 1 2 + 3 + ?

Les deux sont vrais

Quelques opérateurs

Il en est de même pour tous les opérateurs arithmétiques et logiques usuels:
+ - * / OR AND XOR
On a aussi des opérateurs unaires:
NEG ( a -- -a )
NOT ( a -- \a )

Vérification sous dosemu

2 3 OR ? donne
3 Ready
2 3 AND ? donne
2 Ready
2 3 XOR ? donne
1 Ready
1 NEG ? donne
65535 Ready
1 NOT ? donne
65534 Ready

Définir un nouvel opérateur

Lors d'une tentative antérieure, c'est là que le programme avait "planté" sous Dosemu. Espérons que cela va mieux se passer.

"...comment définir de nouveaux opérateurs? Par exemple, si on veut un opérateur pour calculer le cube d'un nombre:
CUBE ( a -- a*a*a )
Il suffit de 2 signes de ponctuation: : CUBE DUP DUP * * .
Voilà! Le deux-point indique à l'interpréteur qu'on commence la définition d'un nouveau mot, ici CUBE. Ensuite, on indique les opérations que ce mot devra faire ( DUP DUP * * ) et enfin, on termine la définition par un point.
2 CUBE ? ( affiche 8 )

Réalisation :
: CUBE DUP DUP * * .
Ready
2 CUBE
Ready
?
8 Ready
3 CUBE ?
27 Ready

Intermède

Dispositif d'expérimentation

Certains des lecteurs de ces notes d'expérimentation (s'il y en a...) vont se demander pourquoi je fais fonctionner 4IM sous Linux, en passant par un émulateur. C'est vrai que cela paraît tordu :-)
Remarquons que si on effectue la même chose depuis une session Dos sous Windows, on se retrouve dans une logique comparable.

Revenons à l'essentiel :

Sous Linux, j'ai deux bureaux virtuels.

Dans le premier j'exécute :
* l'éditeur de texte qui me permet de composer cette page (en ce moment Bluefish 0,12)
* un navigateur qui me permet de tester la page résultant du code HTML frappé (en ce moment Mozilla Firefox 1.0).

Dans le second j'exécute :
* 4IM, dans une fenêtre console
* un afficheur de texte, qui me permet de lire le texte d'Astrobe, et ce copier le texte qui m'intéresse pour le remettre (après passage dans le premier bureau) dans le code HTML de ma page.

Un plus non négligeable

Sous Linux, le shell me permet de copier un texte copié d'une application vers une autre.
Je procède ainsi :
* dans l'application A : sélection à la souris du texte concerné,
* dans l'application B : clic-bouton du milieu

Le plus est ici, que je peux sélectionner le code des exemples d'Astrobe et les copier dans la fenêtre de 4IM.
Et cela marche !

En voici l'illustration :

copier coller avec shell


A suivre...