Accueil > Réalisations > Logiciels > Logiciels HP48 > Fonction RENAME sur HP48
Fonction RENAME sur HP48
mardi 26 juin 2007, par
La HP48 ne dispose pas de commande permettant de renommer une variable (programme, valeur...). Voici comment remédier à cela en RPL de base
Une première version
<< 
   -> OLD NEW 
   << 
      OLD RCL NEW STO OLD PURGE 
   >> 
>>
Une version un peu plus élaborée
La version précédente ne contrôle pas le type des arguments, ceci peut se faire grace à la fonction TYPE qui renvoi 6 pour un nom :
<< 
   -> OLD NEW 
   << 
      IF 
         OLD TYPE 6  == NEW TYPE 6 == AND 
      THEN
         OLD RCL NEW STO OLD PURGE 
      ELSE
         "Invalid argument types"
      END
   >> 
>>
Ca ne suffit pas...
Oui mais... si la destination existe déjà on va l’écraser. Nous allons protéger cela en tentant un RCL sur la destination et en traitant l’erreur :
<< 
   -> OLD NEW 
   << 
      IF 
         OLD TYPE 6  == NEW TYPE 6 == AND 
      THEN
         IFERR
            NEW RCL
         THEN
            DROP 
            OLD RCL NEW STO OLD PURGE 
         ELSE
            DROP "Destination already exists !" DOERR
         END
      ELSE
         "Invalid argument types !" DOERR
      END
   >> 
>>
Pour fignoler !
dernier problème, l’ordre des variables est modifié par le RCL/PURGE/STO. Avec les fonctions VARS (liste des variables) et ORDER (choix de l’ordre dans le menu), nous aloons rétablir l’ordre inital. Du coup il faut rajouter un peu de traitement d’erreurs...
<< 
   -> OLD NEW 
   << 
      IF 
         OLD TYPE 6  == NEW TYPE 6 == AND 
      THEN
         IFERR
            NEW RCL
         THEN
           DROP VARS
           IFERR 
              OLD RCL 
           THEN 
              DROP2 "Original does not exist !" DOERR
           ELSE
              NEW STO OLD PURGE
              1 OVER OLD POS 1 - SUB 
              IF 
                 DUP SIZE 0 >
              THEN
                 ORDER
              ELSE
                 DROP
              END
           END 
         ELSE
            DROP "Destination already exists !" DOERR
         END
      ELSE
         "Invalid argument types !" DOERR
      END
   >> 
>>
Il y a surement des améliorations possibles.... N’hésitez pas à me faire parvenir vos propositions !



