Apprendre le sysRPL (3)
Le 30 juillet 2001

Au départ, je voulais faire un tableau avec tous les mnémoniques que connaît EXT49 par défaut ... mais comme il y en plus de 2000, ça m'aurait pris trop de temps, alors g décider de sélectionner celles dont je me sert le plus souvent ...
Pour les choisir, j'ai recensé tous les mnémoniques dont je me suis servi pour programmer PrépaZ ...
Et il n'y en a que 34 !!!
C'est assez peu, mais cela prouve que l'on peut faire des choses compliquées avec très peu de mnémoniques ...
L'ordre de classement des mnémoniques dans le tableau est à peu près aléatoire ... en fait, c'est leur ordre d'apparition dans le source de PrépaZ ...

Dans ce tableau, tous les arguments sont notés sous forme de mnémonique, et non sous la forme qu'ils apparaissent effectivement sur la pile... Ce ci est un abus de notation ...
Pourquoi ? Pour faciliter la compréhension ... en effet, la plupart des arguments apparaissent sous la forme External lorsqu'ils sont compilés sur la pile ...
On ne peut donc pas savoir ce qui se cache derrière simplement en les regardant (pour le savoir, il suffit de faire ->mn, si EXT49 est installé sur votre calculatrice)
Voila, j'espère que vous me pardonnerez ce manque de rigueur ...

S'il y a un truc que vous ne comprenez pas, vous pouvez m'écrire à superbebert2000@yahoo.fr

Petits rappels:
Ces mnémoniques sont ceux de EXT49; si vous voulez compiler des sources écrits avec ces mnémoniques, il vous faut donc utiliser EXT49...
Si vous ne l'avez pas, vous pouvez le télécharger sur
hp49g.multimania.com , le site de Yoann Désir, auteur de EXT49; ou sur
www.lebebert.fr.st , mon site entièrement consacré à la hp49g; ou sur
www.hp-network.com , le site le plus actif de la communauté HP, qui propose un test d'EXT49

Les SysRPL est un langage relativement dangereux, et, si vous vous vous trompez dans un programme, il y a de forte chance que vous perdiez la mémoire de Home et du port 0; c'est pourquoi je vous conseille de faire des sauvegardes dans le port 2, ou sur un ordinateur

Nom du mnémonique description exemple d'utilisation remarques
begin sert à indiquer le début d'un programme ou d'un sous-programme begin
...prog...
end
il doit toujours y avoir un end à la fin d'un programme qui commence par begin
cllcd efface l'écran cllcd
=>écran effacé
 
MenuOff "efface" le menu MenuOff
=> plus de menu
 
¤ insère des données dans un prog lors de la compilation et les mets sur la pile lors de l'exécution du programme ¤VARIABLE
=>le contenu de VARIABLE est dans la prog, et lors de l'exécution du prog, il est
placé au niveau 1 de la pile
 
wait(r) attend un certain temps <1d> wait(r)
=>attend pendant une seconde
 
RclStkGrob Rappelle le grob de
la pile
RclStkGrob
=> le grob de la pile est au niveau 1 de la pile
 
repl(2go,2s) Affiche un grob dans un "environnement" donné ¤MON_GROB (grob qu'on veut afficher)
RclStkGrob  (environnement de la pile)
<0d> (abscisse)
<0d> (ordonnée)
repl(2go,2s)
=> MON_GROB affiché dans l'environnement de la pile
L'environnement de la pile est celui quie st vu courramment, si on veut afficher un grob dans PICT, il faudra une instruction de plus pour "voir" ce grob
drop efface l'argument
au niveau 1 de la pile
   
pdim(2s) définit la "taille" de l'environnement PICT <131d>
<64d>
pdim(2s)
=> la taille de PICT est 131*64
Il faut toujours définir la taille de PICT avant d'afficher un grob dans cet environnement
~ pas d'évaluation 1:          Un programme
~ =>
1:          Un programme
 
en ascii, c le caractère 130, et c dessiné comme un triangle isocèle avec le sommet en lequel le triangle est isocèle dirrigé vers le bas ...
hum hum
_
\/
c à peu près ça ...
sert à rappeler le contenu d'une variable globale sur la pile, sans que ce contenu soit intégré au programme une fois compilé _
\/Chose
=> le contenu de la variable chose sera rappelé sur la pile à chaque exécution du programme compilé.
si la variable globale Chose n'est pas dans le répertoire courant au moment de l'exécution du programme; ça peut faire planter l'HP assez gravement
eval évalue l'objet au
niveau 1 de la pile
   
dup2 duplique les deux premiers arguments de la pile 2:                   "abcd"
1:                     <1d>
dup2 =>
4:                   "abcd"
3:                     <1d>
2:                   "abcd"
1:                     <1d>
 
pick(s) copie un argument qui est à un certain niveau de la pile 2:                   "abcd"
1:                     <1d>
<2d> pick(s) =>
3:                   "abcd"
2:                    <1d>
1:                   "abcd"
 
newob comme en userRPL ...
c'est assez compliqué à expliquer; par exemple, si vous avez un grob au niveau 1, et que vous faites dup, vous avez deux grobs identiques, si ensuite vous modifiez le grob au niveau 1, les deux grobs seront modifiés, alors que si vous faites NEWOB, le grob du niveau 1 sera considéré comme un grob différent du grob du niveau 2, et seul le grob du niveau 1 sera modifié
   
over copie l'objet du niveau 2 au niveau 1 2:                   "abcd"
1:                     <1d>
over =>
3:                   "abcd"
2:                    <1d>
1:                   "abcd"
C'est pareil que <2d> pick(s), mais c plus rapide, et ça prend moins de mémoire...
roll(s) rappelle un objet qui est à un certain niveau de la pile au niveau 1 3:                    "efgh"
2:                    <1d>   
1:                   "abcd"
<3d> roll(s) =>
3:                    <1d>
2:                   "abcd"
1:                    "efgh"
L'objet n'est pas copié, il est déplacé; si vous voulez le copier au niveau 1, il faut utiliser l'instruction pick(s)
beep(2r) émet un son d'une fréquence donnée pendant un temps donné 440. (fréquence en Hz)
10. (temps en secondes)
beep(2r)
émet un LA (440 Hz)
pendant 10 secondes
 
do ça veut dire "fait" ...
Un exemple sera plus explicite ...
voir aussi à until
do
truc
until
machin
si truc (qui est un "sous-programme" dans le programme principal) se termine par un true, alors machin sera exécuter; sinon, à la fin de l'exécution de true, on revient à ce qu'il y a après le do (ici truc)
C'est une sorte de "boucle conditionnelle" ...
 
pift ça fait comme IF et THEN en user RPL machin
pift
begin
truc
end

chose
Si machin se termine par un true, alors truc sera exécuté ainsi que chose
Si machin se termine par un false, alors truc ne sera pas exécuté, et on passera directement à chose
c très utile
Attention à ne pas oublier les begin et end au début et à la fin de chaque "sous-programme"
ClearKeyPressed Efface les touches du buffer clavier...
petite explication: à chaque fois que vous appuyez sur une touche, le "numéro" de la touche est stocké quelque part dans la mémoire, et, lorsque qu'il y a trop de numéro de touches stockés, ça fait un bip quand vous appuyez sur une touche, et ça ralentit le programme ...
d'où l'intérêt d'effacer ces numéros régulièrement dès qu'on en a plus besoin ...
   
<(2s)? teste si l'argument au niveau 2 de la pile est inférieur à l'argument au niveau 1 de la pile    
+(2s) additionne les deux entiers systèmes au niveau 1 et 2 de la pile 2:               <1d>
1:               <2d>
+(2s)  =>
1:               <3d>
 
rolld(s) envoie l'objet du niveau 2 au niveau indiqué par l'entier système au niveau 1 3:               <1d>
2:               "abc"
1:               <3d>
pareil que pour roll(s); l'objet n'est pas copié, il est seulement déplacé
pix?(2s)? Teste si un pixel (dont l'abscisse est au niveau 2, et l'ordonnée au niveau 1) est allumé 2:               <0d>
1:               <0d>
pix?(2s)? =>
1:                "true"
si le pixel en haut à gauche est allumé;
1:               "false"
s'il est éteint
ceci fonctionne pour les pixels de l'écran PICT uniquement
pifte c comme IF THEN ELSE en user RPL machin
pifte
begin
truc
end

begin
bidule
end

chose

Si machin se termine par un true, alors truc sera exécuté mais pas bidule, puis on passera à chose
Si machin se termine par un false, alors truc ne sera pas exécuté, et on passera directement à bidule, puis à chose
dans tous les cas, chose sera exécuté, ce qui normal ...
Attention à ne pas oublier les begin et end au début et à la fin de chaque "sous-programme"
1+(s) ajoute 1 à l'entier système du niveau 1 de la pile 1:               <0d>
1+(s) =>
1:               <1d>
 
1-(s) retranche 1 à l'entier système du niveau 1 de la pile 1:               <1d>
1-(s) =>
1:               <0d>
 
end sert à indiquer la fin du programme ou d'un "sous-programme"    
3-(s) retranche 3 à l'entier système du niveau 1 de la pile 1:               <12d>
3-(s) =>
1:                 <9d>
 
>(2s)? Teste si l'entier système du niveau 2 est supérieur à celui du niveau 1 2:               <12d>
1:                 <3d>
>(2s)? =>
"true"
 
not(?) "inverse" le booléen au niveau 1 de la pile 1:                 "true"
not(?)
1:                "false"
 
swap "inverse" les deux premiers arguments de la pile 2:               "abcd"
1:                 <1d>
swap =>
2:                 <1d>
1:               "abcd"
 
until cela signifie jusqu'à ce que... do
truc
until
machin
si truc (qui est un "sous-programme" dans le programme principal) se termine par un true, alors machin sera exécuter; sinon, à la fin de l'exécution de true, on revient à ce qu'il y a après le do (ici truc)
C'est une sorte de "boucle conditionnelle" ...
 

Bebert