Avant de créer le viewer, voici quelques notions sur l'affichage de texte. | |
« CLLCD "BONJOUR" 1
DISP 3 WAIT "une touche = continue" 3 DISP 0 WAIT " Vous avez appuyé sur¶ la touche numéro: " SWAP + 2 DISP 1 FREEZE » | efface l'écran (CLLCD:clear lcd), 1 DISP : affiche BONJOUR à la ligne 1 et attend 3 sec. 0 WAIT: attend l'appuie d'une touche (attention: cancel interrompt le programme) et renvoie le numéro de touche.
SWAP: inverse l'élément 1 avec le 2);11.1: touche A; + concaténation des deux objets; 1 FREEZE: gèle la partie haute de l'écran (affichage répertoire, rad,..) (2 pour la partie du milieu: entre la ligne du haut et le menu 4 pour la barre des menus; 3: partie 1 et 2; 5: partie 1 et 4; ...; 7: gèle les trois parties de l'écran) |
'EX1' STO | (pour l'enregistrer), appuyer sur A (EX1) pour le lancer. |
Vous pouvez essayée avec le mode debbug: 'EX1' left-shift, CAT, NXT, NXT, C (RUN), A(DEBBUG), SST ... NEXT: voir les instructions suivantes (2 par 2) SST: exécute l'instruction suivante du programme en cours SST ![]() ![]() KILL: arrête le mode debug (le HALT disparaît de l'écran, le mode debug est désactivé dès que le programme se termine) Nous allons maintenant créer un viewer simple, qui pourra vous resservir. Le texte à visualiser ne devra pas faire plus de 7 lignes (pour les 48 et les 49 en FONT 6,7 ou 8 ) avec 22 caractères par ligne (espace compris, pour éviter que des mots soit tronqués par les 3 points). | |
« CLLCD 1 DISP 0
WAIT DROP » 'VIEW' STO |
DROP: supprime le numéro de touche renvoyé (qui est ici inutile) vérifiez que vous êtes dans le répertoire HOME avant de le stocker. |
1) sauvegardes en lots | |
Pour enregistrer plusieurs programmes on peut mettre les données et les noms sous forme de liste: | |
{1 2 3}{ x y z } STO
{ objet1 objet2 objet3 } { nom1 nom2 nom3 } STO | x a la valeur 1, y la valeur 2 et z la valeur 3
et plus généralement: (objet: programme, chaîne de caractères, listes, .. |
2) optimisation du test IF..THEN...(ELSE...) | |
Après un INFORM, INPUT, CHOOSE, ... il n'est pas nécessaire de faire un test du type: 1 = = ou 1 SAME
on peut mettre directement IF THEN <instructions_si_vrai> ( ELSE <instuctions_si_faux> ) END | |
IF 1 == THEN ...
IF THEN ... | est équivalent à: (il faut que le premier élément de la pile soit un vrai (1) ou faux (0) ).
|
3) INFORM | |
Si vous voulez avoir un nombre de colonnes différents à chaque ligne, vous devez mettre le nombre maximum de colonnes voulues et mettre des sous listes vides
exemple: | |
"essai"
{{ "ligne1" }{ }{ } { "L2c1" } { "L2c2" } { } { "L3c1" } { "L3c2" }{ "L3 c3" }} {3} {NOVAL NOVAL NOVAL NOVAL NOVAL NOVAL } DUP INFORM |
ligne 1 : 1 colonne ligne 2 : 2 colonnes ligne 3 : 3 colonnes 3 colonnes NOVAL: pas de valeur (vide) valeur par défaut = valeur reset |
Vous pouvez télécharger un autre exemple pour mettre dans votre HP48 ou 49.
Pour tester si l'utilisateur n'a pas laissé de champ vide (= NOVAL) il suffit de faire une petite procédure de tests qui vérifie chaque valeur de la liste en la comparant à NOVAL (exemple: IF NOVAL == THEN "MAUVAISE SAISIE" DOERR ELSE < votre programme> END) | |
4) intercepter les erreurs et l'appuie sur la touche CANCEL | |
IFERR <programme>
THEN <action en cas d'erreur> (ELSE <action s'il n'y a pas eu d'erreur>) END | Avec ce genre de programme, on peut intercepté l'appuie de la touche CANCEL qui est interprété comme une erreur. |
Voici un petit exemple: | |
« RCLF DEPTH
![]() « IFERR <programme> THEN DEPTH nbobjet - DROPN STOF ELSE STOF END » » | RCLF récupère la configuration de votre hp (cette commande n'est utile que si le programme modifie les flags systèmes et/ou les flags utilisateurs).
on récupère le nombre d'objet sur la pile avec DEPTH puis on sauvegarde ce nombre dans la variable nbobjet. le programme n'a pas d'importance dans ce chapitre. fin en cas d'erreur: on efface que les objets appartenant au programme on rétablit la configuration des flags (fonction inverse de RCLF) fin normal: on restore l'état des flags |
Inconvénients: -Si une autre erreur se produit (autre que l'appuie de la touche CANCEL) le programme s'interrompt. -Impossibilité d'utiliser les commandes de debugage (DEBUG,...) en cas d'erreur dans le programme, il faut alors vérifier que le programme principale fonctionne correctement puis ajouter le IFERR THEN ... (ELSE...) END | |
| |
Dans ce programme, il y a deux compteur imbriqués l'un dans l'autre (boucle: 0 15 FOR K 0 15 FOR .... NEXT NEXT). La première variable (K) permet d'obtenir les 15 lignes. La seconde variable (J) nous donne les 15 colonnes.
En faisant l'opération: 16*K+J on obtient le numéro de caractère en cours de traitement. | |
« CLLCD
"Création de la table¶ de caractères minifont¶ en cours... (~ 1 min)" 2 DISP #131d #130d BLANK 0 15 FOR K 0 15 FOR J 16 K * J + DUP "Caractère " SWAP + "/255" + 1 DISP I ![]() 1 ![]() J R ![]() K 8 * R ![]() 2 ![]() SWAP REPL NEXT NEXT » | Affichage message d'attente (voir programme ci-dessus)
crée un graphique vierge de 131*130 pixels 1ère boucle de comptage de 0 à 15 de variable K, 2éme boucle de comptage de 0 à 15 de variable J (16 K * J + =numéro de caractère) Affiche le numéro de caractère en cours de traitement. I ![]() ![]() ![]() ![]() REPL: colle un GROB (GROB du caractère) dans un autre GROB (le graphique vierge du début) aux coordonnées spécifiées (en binaire) |
'CRTABMNF' STO pour l'enregistrer
Vous trouverez l'équivalant de ce programme en RPL système (plus rapide) dans la section SysRPL. télécharger cette version (en User RPL) | |
| |
« "Eq2Deg (ax^2+bx+c)"
{{"a=" "Coefficient a" 0 } { "b=" " Coefficient b" 0} { "c=" " Coefficient c" 0}} {1} {0 0 0} DUP INFORM IF THEN 0 0 0 4 ROLL OBJ ![]() ![]() « b 2 ^ 4 a * c * - R ![]() 'd' STO CASE d 0 < THEN -103 SF "Racines Complexes:¶ d= " d + "¶ x1= " + b NEG d ![]() DUP 'x1' STO + "¶ x2= " + x1 CONJ + END d 0 == THEN "Racine double:¶ d= " d + "¶ x= " + b NEG d ![]() + END d 0 > THEN "2 Racines réelle:¶ d= " d + "¶ x1= " + b NEG d ![]() + "¶ x2= " + b NEG d ![]() + END END » CLLCD 1 DISP 0 WAIT DROP END » | Titre de la boite de saisie
Liste des éléments ( label, aide, type de variable), ici il y a 3 éléments. nombre de colonne sous forme de liste (ici 1) Valeurs par défaut, valeurs lors de la réinitialisation (DEL) IF THEN : (cf Trucs et astuces) (il y a 6 objets dans la pile) Déclarations des variables locales (d=0, x1=0, x2=0, a=valeur de a dans le polynome, b= ..., c= ...) calcul de b^2-4*a*c conversion d'un réel en entier (pour supprimer le point sur la 49) sauvegarde le calcul sous d (qui est une variable locale) test de d si d est négatif: on arme le flag 103 (mode complexe) (rappel: ¶= retour à la ligne) concaténation du texte ![]() calcul de x1=(-b- ![]() et concaténation avec le texte après l'enregistrement du résultat calcul de x2=CONJ(x1) (x2 est le conjugué de x1) si d=0: calcul: x= (-b- ![]() calcul de x1= (-b- ![]() concaténation de 2 chaînes de caractères calcul de x2= (-b+ ![]() fin de l'instruction CASE Affichage du résultats |
Les variables locales n'apparaissent pas dans le menu des variables et sont automatiquement détruites lorsque le programme se termine.
Cette version ne vérifie pas si l'utilisateur a laissé des champs de saisie vide. (cf trucs et astuces n°3) Pour la version 48: supprimer les instructions 'R ![]() Les arguments pour la commande INFORM (input form) sont: | |
"titre"
{{ "nom_1" "Instructions_1" type_d'objet_1 } { "nom_2" " Instructions_2" type_d'objet_2 } { ... }... { "nom_n" " Instructions_n" type_d'objet_n }} {n_colonne} {défaut_1 défaut_2 ... défaut_n} {reset_1 reset_2 ... reset_n} |
type_d'objet: 0 pour un entier, ... (cf: faq - divers - les types d'objets) nombre de colonnes (cf Trucs et astuces n°3) valeurs par défaut (NOVAL = pas de valeur : cf Trucs et astuces n°3) valeurs lors d'un reset (DEL) |
Les arguments retournés: | |
si OK
si Cancel | 2: { liste de n objets}
1: 1 1: 0 |
Télécharger le fichier
Ce petit jeu peut vous aider à progresser en RPL (exemples d'utilisations de certaines fonctions: graphique, test des variables, input, variable locale...). Il n'est pas terminé (il fonctionne mal), vous pouvez le corriger, l'améliorer, ... (voir le fichier MGolf.txt dans l'archive) | |