Unitman

Un organiseur d'unités flexible pour le HP49G/hp49+
Ajoutez et supprimez des unités et des répertoires d'unités dans le menu système UNITS

Unitman est une petite bibliothèque dont les quatre premières commandes les plus importantes seront expliquées dans les exemples. Grâce à un système efficace, chaque unité définie par l'utilisateur peut apparaître dans un répertoire d'unités intégré du système et est traitée comme une unité de intégrée. Ceci est fait avec AddU. Chaque répertoire d'unités peut être complètement réorganisé avec la commande roUM (réorganise Unit Menu). C'est à dire que l'ordre dans lequel apparaissent les unités peut être changé, des unités rarement utilisées peuvent être supprimées ou renommées. De la même manière, roUD (réorganise Unit Directories) réorganise entièrement le répertoire UNITS de le HP. Vous pouvez ajouter un nouveau répertoire d'unités avec AddUD (Add Unit Directory) ou réarranger, renommer et supprimer ceux déjà existant. Le système intégré est augmenté du répertoire MONEY pour la conversion des devises en exécutant ExpU (expand Units system) ou toute autre commande d'Unitman. ExpU crée aussi le nouveau menu UNITS et est exécute par toutes les autres commandes, il n'est pas nécessaire de l'exécuter spécifiquement.

L'un des principaux avantages d'Unitman est que la fonctionnalité extrêmement pratique des menus de la HP48 (voir remarque 1 ci-dessous) est maintenue avec les unités définies par l'utilisateur. La plupart des commandes d'Unitman mettent la calculatrice en mode RPN car cette fonctionnalité n'est pas disponible en mode algébrique. Les commandes d'Unitman mettent aussi la HP en mode utilisateur (USR) et soft-menu afin de fonctionner correctement. Il est utile d'assigner <<359 MENU>> à la touche shift-droit maintenu (84.31) car nous allons constamment utiliser les commandes d'Unitman dans les exemples ci-dessous. Vous pouvez aussi l'assigner à n'importe quelle autre touche à part 84.3 qui est utilisée par Unitman. EditU permet d'éditer les unités définies par l'utilisateur comme indiqué dans l'exemple 7. DelUK supprime l'assignement des touches et le renvoie sur la pile, par exemple pour le compresser et le réassigner. La ROM de votre HP49 doit être au moins 19-3. Unitman a aussi été testé avec la ROM 1.22 sur le HP49+.

Abréviations: NS = non shifté, SD = shift droit, SG = shift gauche, SG+ = shift gauche maintenu.


Historique

VERSION 3.2003. Commande EditU modifiée. Voir Exemple 7

VERSION 2.2003. Commande EditU ajoutée. Permet d'éditer une unité utilisateur pour redéfinition, voir ci-dessous. Exemples 6 et 7 ajoutés. Documentation mise à jour

VERSION 1.2003: DelUK non seulement supprime l'assignement de la touche UNIT mais le renvoi sur la pile pour réassignement ultérieur. Documentation html crée à partir de Unitman.txt. Il y a aussi une version en Allemand UnitmanD.htm. Le symbole Euro est un objet graphique pour éviter les problèmes d'affichage. Si la souris est positionnée sur les images, des informations supplémentaires apparaissent.

VERSION 1.2002: Comme Unitman devient de plus en plus important dans l'ère Euro, la documentation a été complètement révisée.

VERSION 9.2001: Changement mineur de ROMPTR 167 D (le seul utilisé dans l'assignement de la touche UNITS. Pas de changement de fonctionnalité).

VERSION 8.2001: La commande Upgrd a été remplacée par DelUK. Elle devrait être seulement utilisée pour créer une personnalisation complètement nouvelle. Les unités déjà créées n'ont pas besoin d'être redéfinies si le nom global existe toujours. Il suffit de les remettre dans leur catégorie avec AddU.


1. Définition d'une nouvelle unitéCommençons par définir une devise EUR dans le nouveau répertoire MONEY qui contient seulement le $ (US) après une première exécution de AddU ou ExpU. Exécuter ExpU n'est pas obligatoire. ExpU est exécuté automatiquement par AddU et d'autres commandes. Il suffit d'exécuter AddU et de remplir la boite de dialogue après avoir choisi la catégorie MONEY. EUR peut être utilisé mais il est préférable d'utiliser son symbole disponible avec ALPHA SD 4. Un nom d'unité doit toujours être entre sous forme d'une chaîne de caractères car son nom global pourrait être illégal, 'kg/m^2', par exemple. Il faut remplir la case Define car EUR ou n'est pas une unité directement reconnue par la HP49. Le champ Define accepte uniquement des unités. Celles-ci commencent généralement par un nombre réel suivi d'un signe souligné ( _ ) comme indiqué sur la capture d'écran. Utilisez ALPHA SG 4 pour obtenir le signe $ et pour finir, choisissez OK. Alors apparaît effectivement dans MONEY! Toute somme en Dollars est maintenant facilement convertible en EUR et inversement. Par exemple, entrez 100, suivi de et enfin SG $. Cela donne 107_$.

Attention: $ et sont maintenant apparus comme variables dans HOME si cet exemple a été exécute dans HOME. Il est recommandé de cacher ces variables unités, le plus facile est d'utiliser un filer disponible dans l'archive Filers. Si un nom tel que '$' était déjà utilisé, il n'est pas écrasé, mais la définition de l'unité est prioritaire.

2. Pour continuer, nous voulons que l'unité ms (milliseconde)soit disponible dans le répertoire TIME. La boite de dialogue doit être remplie comme indiqué ci-dessous. Il est possible de laisser la case Define vide. Une définition n'est pas nécessaire Ajouter une unité connue du système car la HP connaît le préfixe m et l'unité s, et donc ms, même si l'unité ms n'apparaît pas dans le menu intégré TIME. En utilisant AddU, nous la forçons à apparaître! Généralement, les unités dérivées de celles existantes par l'utilisation d'un préfixe tel que D (Deca), h (hecto),... ou d (deci), m (milli),... comme indiqué dans le manuel, sont connues de la fonction CONVERT et des autres commandes, même si elles n'apparaissent pas dans les menus intégrés. Dans ce cas là, rien n'est ajouté dans le répertoire HOME. Le champ UnitName accepte aussi une liste de chaînes de caractères ou de noms d'unités. Mais ils doivent tous être des unités connues: soit intégrées, soit déjà définies à l'aide d'Unitman. Par exemple, après avoir créé une nouvelle section pour les unités de fréquence, comme indiqué dans le texte, on peut ajouter {"KHz" "rpm"} d'un seul coup à la section fréquence sans indiquer quoi que ce soit dans le champ Define. Ces deux unités sont connues de la HP49. L'unité rpm (tours par minute) apparaît dans le menu 117 (117 MENU). La conversion est 1_Hz = 60_rpm.

3. L'ordre des unités dans le menu TIME n'est pas très pratique. Il vaudrait mieux avoir une page de plus pour les unités de fréquence telles que Hz, MHz etc. Pour cela, nous allons utiliser roUM (réorganise Unit Menu). La pile spéciale pour réarranger, renommer et supprimer Exécutez roUM, choisissez le répertoire TIME puis validez par OK. Ceci crée une nouvelle pile (semblable à la pile interactive) comme sur la capture d'écran. Ceci est une copie du menu TIME actuel auquel nous avons déjà ajouté "ms". Le curseur est pour le moment au niveau de "ms". Maintenant déplacez le sur Hz et exécutez ROLL qui transfère Hz au niveau 1. Le nouveau menu TIME aura donc yr, d, h, min, s, ms sur la page 1, et Hz sur la page 2. Enfin appuyez sur ENTER ou ON pour quitter la pile et voir le résultat, en examinant TIME. Il est impossible d'abandonner cette pile spéciale, le programme continue même si ENTER ou CANCEL sont exécutés. Il faut donc faire attention lors de ces manipulations. Une unité est toujours associée étroitement a une unité inverse. Par exemple, en exécutant 1/x sur 440_Hz (La note: LA), vous obtenez 0.00227..._1/Hz = 0.0027.._s comme l'indique UBASE. Voir aussi l'exemple 6. Il est possible de rendre la page 2 de TIME plus complète en ajoutant KHz, KHz, GHz qui n'ont pas besoin de définition, et une unité de fréquence tic définie comme 1_tic = 8192_Hz. Ceci est la fréquence utilisée en interne pour les fonctions des calculatrices HP4x. Si vous préférez utiliser le tic comme une unité de temps, vous pouvez l'éditer et la redéfinir comme indique dans l'exemple 7, afin d'avoir 1_s = 8192_tic. Il est aussi possible de créer un répertoire séparé pour les unités de fréquence, FREQ par exemple, comme indiqué dans l'exemple 4.

Important: Dans la pile spéciale, utilisez seulement les options ROLL et ROLLD pour réarranger et la touche d'effacement 45.1 pour supprimer (par exemple, "st" dans VOL, 1_st vaut 1_m^3) et éventuellement EDIT pour renommer une unité (par exemple, kW en KW). Si vous renommez ainsi, en utilisant EDIT, par exemple "" en "EUR", vous devez aussi changer le nom de la variable '' en 'EUR' (utilisez le filer si elle est cachée). Une unité définie dans un menu doit correspondre au nom de la variable globale qui lui est associée.

4. Nous voulons maintenant ajouter un nouveau répertoire d'unités que nous appellerons InfU (Informatique Unités). Il suffit de sélectionner AddUD et de rentrer InfI (sous forme de chaîne de caractères) comme indiqué ci-dessous. Ajouter un nouveau répertoire d'unités Informatiques Il n'est pas nécessaire de fermer les guillemets. Appuyez sur OK (ou ENTER, pour éviter d'entrer "F" si vous avez oublié de sortir du mode ALPHA). Ceci rajoute InfU aux répertoires unités, tout d'abord sans unités. Celles-ci peuvent être ajoutées avec AddU comme ceci: 1_bit = 1_$, 1_octet = 8_bit, 1_Koctet = 1024_octet, etc. Il ne faut pas oublier le champ "Define" pour Koctet après avoir crée l'unité octet. Autrement, la HP49 penserait que 1_Koctet vaut 1000 octets! La définition de 1_bit n'est pas faite au hasard, 1_$ est une unité sans dimension comme l'est 1_bit. Mais l'utilisateur aurait pu définir 1_bit différemment. Une des définitions possible serait de prendre 1_bit pour une toute petite unité de longueur correspondante au stockage de données sur un CD.

5. Certaines personnes voudraient avoir le répertoire MONEY en premier. Aucun problème. Il suffit d'utiliser roUDs (réorganise Units Dirs). La pile spéciale pour les répertoires unités Cela crée une pile spéciale avec les noms de tous les répertoires unité. Maintenant vous pouvez les réorganiser avec ROLL et ROLLD comme dans l'exemple 3. Il suffit de déplacer le curseur vers "LENG" (qui est sans doute au niveau 17) et effectuer ROLLD 4, c'est tout. Il est aussi possible de supprimer un répertoire unités avec la touche d'effacement, par exemple RAD, si vous n'avez jamais à travailler avec des radiations. La suite est légèrement plus compliquée. Prenons l'exemple d'un Allemand qui voudrait changer le nom du répertoire TIME en ZEIT. Il choisirait l'option EDIT (toujours dans l'environnement roUD) avec le curseur sur "TIME". Ceci édite la chaîne "TIME". Maintenant, il ajoute le nouveau nom ZEIT comme sur l'illustration ci contre. Renommer TIME en ZEIT Il est important ici d'avoir l'ancien et le nouveau nom dans une seule chaîne, mais sur différentes lignes, sans espaces avant ou après les noms. On quitte l'éditeur avec ENTER pour retourner dans l'environnement de la pile spéciale. Enfin après avoir appuyé sur ENTER, TIME a bien sur été renomme en ZEIT. Un Français peut bien sur essayer l'exemple précédent sans risques, il suffit de renommer ZEIT de nouveau en TIME ou même DUREE. Certainement, renommer un répertoire pourrait être fait de manière plus pratique, mais ça ne serait pas très efficace: Avec roUDs, réarranger les catégories d'unités, les renommer ou les supprimer peut se faire en une seule fois.

6. Pour la plupart des Européens, la consommation d'essence se calcule en litres aux 100 km. Au Royaume-Uni, elle est mesurée en mi/galUK, la distance (en miles) qu'un véhicule parcours avec 1_galUK de carburant. Comment convertir ces unités incompatibles? Il suffit de créer un répertoire TRANSPORT par exemple. L'unité "1 litre aux 100 km" est équivalente à 1_cl/km. Utilisez AddU et entrez {"cl/km" "km/l" "mi/gaUK"} dans le champ UDirName. Il n'est pas nécessaire de définir ces unités car elles sont toutes connues par le système. Ainsi, rien n'est écrit dans le répertoire HOME. Dans TRANSPORT, apparaît maintenant le menu suivant:

     cl/km           km/l      mi/galUK                                        UNITS    

km/l est une très bonne unité de consommation, peut être la meilleure. Elle indique combien de km un véhicule peut parcourir avec un litre de carburant. Cette unité est directement convertible en mi/galUK. Par exemple, 12_km/l se converti en 33.9_mi/galUK. Pour ceci, il suffit de faire SG mi/galUK sur 12_km/l présent sur la pile. C'est tout. Pour convertir l'unité traditionnelle, il faut faire 1/x sur le résultat ce qui nous donne 8.3_cl/km c'est à dire 8,3 litres aux 100 km.

7.Supposons que $ et sont dans MONEY et que le taux d'échange de doive être mis à jour. Aucun problème avec la nouvelle commande EditU. L'écran EditU dans MONEY Exécutez cette commande qui vous envoie dans le menu unités, trouvez MONEY et entrez dans ce répertoire. Pendant ce temps EditU s'exécute toujours et affiche "EditU", il suffit d'appuyer sur . Cela crée une ligne d'édition comme le montre l'écran ci-contre. Vous pouvez maintenant facilement changer de 1.07_$ à 1.17_$, par exemple. Appuyer sur ENTER change l'unité '' avec le nouveau taux d'échange Non seulement la valeur numérique est changée mais la définition peut aussi être remise a jour. L'environnement EditU peut seulement être quitté avec CANCEL ou ENTER, ce dernier étant seulement valide sur la ligne de commande. Mis à part ces deux touches, NXT pour faire défiler les menu, et les touches des menus, toutes les autres touches biperont. Important: l'édition d'une unité en appuyant sur sa touche marche seulement dans environnement EditU, et seulement pour les unités définies par l'utilisateur. Il n'y a aucune raison d'éditer les unités intégrées. En dehors de EditU une touche unité fonctionne comme décrit dans la remarque 1. Pour modifier une deuxième unité, on doit relancer EditU.

Remarque 1. Les unités définies par l'utilisateur fonctionnent de la même manière que les unités intégrées. En mode RPN une touche unité fonctionne comme ceci - pour les détails voir Chapitre 10 du manuel de la HP48! Cette fonctionnalité n'est pas expliquée dans le manuel de la hp49.
NS: Ajoute (multiplie) l'unité à l'objet du niveau 1. Par exemple, avec 100 sur la pile, la touche $ dans MONEY donne 100_$.
SG: Converti. Par exemple, avec dans MONEY défini comme précédemment, SG exécuté sur 100_$ dans la pile donne 93.45..._.
SD: Divise. SD s exécuté sur 100 donne 100_Hz. SD s "converti" 100 en 100_1/s (= 100_Hz).

Remarque 2. Quand une boite de dialogue est ouverte, on peut toujours regarder le menu des unités pour voir ce qu'il contient ou obtenir des morceaux des noms unités. Soyez prudents dans le choix du nom des unités. Par exemple, l'unité PS (PetaSiemens) ne peut pas être redéfinie même si vous ne l'utilisez jamais. Des noms unité commençant par un signe d'opérateur (+-*/) ou une chaîne vide peuvent causer des problèmes lors de leur utilisation comme expliqué dans la remarque 1. Il est prudent de toujours effectuer une sauvegarde avant de modifier sérieusement le système UNIT. Notez aussi qu'une unité 'e' pour la charge de l'électron pourra poser des problèmes car e (le nombre d'Euler) est une constante pour la HP49.

Remarque 3. Vous pouvez supprimer toutes les unités qui vous sont inutiles, par exemple miUS^2 ou galUK. La HP s'en souviens toujours mais ne les affiche plus. Il ne faut pas hésiter à supprimer toute unité inutile ou même un répertoire en entier. Ils ne sont pas perdus. Si vous voulez provisoirement réutiliser les unité intégrées, il suffit de quitter le mode USR, Unitman fonctionne seulement lorsque le mode USR est actif. Les unités peuvent même être dépendantes du contexte, c'est à dire dépendantes du répertoire local. Par exemple un répertoire USA pourrait permettre d'avoir une définition différente du gallon que le répertoire UK.

Remarque 4. Si vous avez perdu l'assignement de la touche UNITS, par exemple en utilisant DelUK et supprimant le contenu de la pile, et n'avez pas fait de sauvegarde, tout n'est pas perdu. MONEY réapparaît à la première utilisation d'une commande, mais vous avez à recréer manuellement les autres répertoires unité que vous aviez créés. Maintenant, leur contenu est soit intégré en ROM, soit toujours dans HOME. Ainsi, il suffit de remplir le champ UnitName dans AddU avec une liste de chaînes de tous les noms perdus. Ils sont toujours connus de votre système personnel. De la sorte, aucune redéfinition n'est nécessaire.

Remarque 5. L'assignement de la touche SD UNITS (84.3) peut devenir très gros. Mais il peut être compressé à environ 1 KB avec BZ. Rappelez l'assignement avec S?UA de la bibliothèque OT49, compressez le avec le BZ de OT49: ~ (très forte compression), exécutez BZCE dans le menu, cela permet de transformer l'assignement en objet code auto-exécutable. Assignez le à 84.3. Bien sur cela devrait être fait une fois que les redéfinitions de UNITS sont satisfaisantes et ne changerons plus. Souvenez-vous que chaque changement dans la structure des unités réassigne automatiquement la touche 84.3 sans compression. Unitman est supporté par la bibliothèque UTOOL.


Wolfgang Rautenberg - raut@math.fu-berlin.de
http://www.math.fu-berlin.de/~raut/ - ftp://ftp.math.fu-berlin.de/pub/usr/raut/

Remerciements. Merci à Heiko Arnemann et Otto Praxl pour leur aide dans la création de ce document html et pour leur aide et beta-testing pour la ROM 19-6, et à Arnaud Amiel pour la traduction de Unitman.htm en Français.