|
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Deuxième étape Dans l'article précédent, on a introduit l'exploitation des ressources AmigaOS et on a apprécié combien la lisibilité du langage Amiga-E rend cette gestion plus claire et plus sûre. Dans cet article on utilise ces notions de base pour expliquer comment paramétrer le logiciel. Car tout logiciel réaliste comprend une logique complexe de paramétrage et de personnalisation. Enfin, cet article présente de nouvelles notions qui préparent le prochain article, c'est-à-dire la programmation des interfaces graphiques et de l'interactivité proprement dite. Les arguments Shell Les paramètres DOS sont interprétés par la fonction ReadArgs() de la dos.library, on fournit un tableau de LONGs à ReadArgs(), et en retour ReadArgs() y stocke toutes les valeurs de paramètres DOS. Bien entendu, il faut appeler FreeArgs() quand on a terminé. Cet exemple simple affiche le MESSAGE fourni comme argument Shell :
Pour plus d'information sur ReadArgs() et les paramètres DOS, voir les Autodocs. Les arguments Workbench Les types d'outil (tooltypes) sont vraiment pratiques, et même plus pratiques que les paramètres DOS car ils sont persistants. Donc les types d'outil sont utiles même si on démarre du Shell. Ils fournissent les paramètres de base que l'utilisateur Shell pourra affiner par des paramètres DOS. Voici comment faire pour lire les types d'outil : 1. Ouvrir l'icon.library. Puis si on démarre du Shell : 2. Obtenir le chemin d'accès du programme, via GetProgramName() de la dos.library. Ou si on démarre du Workbench : 2a. Obtenir le chemin du répertoire wbmessage.arglist.lock, via NameFromLock() de la dos.library. 2b. Ajouter le nom du programme wbmessage.arglist.name, via AddPart() de la dos.library. Continuer : 3. Charger l'objet icône du programme via GetDiskObject() de la icon.library. 4. Lire les types d'outil via FindToolType() de la icon.library, les types d'outil inexistants retournent NIL. 5. Une fois terminé, libérer l'objet icône via FreeDiskObject(). Le code suivant illustre l'ensemble du processus, il lit le type d'outil MESSAGE dans le fichier .info du programme, et l'affiche dans le Shell ou sur le Workbench :
Le "versionnement" Une chaîne de version de programme est identique à n'importe quelle autre chaîne de version :
La commande C:Version permet d'afficher cette information de version. Si vous ne l'avez pas déjà, préférez plutôt VersionWB de Håkan Parting. La localisation C'est le domaine de la locale.library. Localiser un programme n'est vraiment pas compliqué. Un catalogue contient toutes les chaînes du programme. Il est ouvert par OpenCatalogA() et fermé par CloseCatalog(). Entre-temps toutes les chaînes sont lues via GetCatalogStr(). Utilisez EasyCatalog pour produire le catalogue. Et voici comment localiser un HelloWorld :
Ce programme pourrait écrire "Bonjour le monde!\n" avec le catalogue approprié et "français" comme langue sélectionnée. À noter qu'il n'y a pas besoin de quitter si OpenCatalogA échoue. Dans ce cas le programme utilise simplement les chaînes internes. Note importante : si "english" est le langage sélectionné alors OpenCatalogA n'ouvrira PAS de catalogue, et ce même si un catalogue "english" est présent. Dans ce cas OpenCatalogA renvoie toujours NIL, c'est pourquoi il faut sélectionner "français" pour tester la localisation. Les signaux de tâche Les applications à interface graphique sont dirigées par les événements, elles sont en repos en attente d'un signal qui les réactive. Une tâche en repos ne consomme aucune puissance processeur. Vous pouvez mettre votre programme en repos en appelant Wait() avec les événements dont vous voulez être averti. Par exemple, ce programme est en repos jusqu'à réception d'un "Break" émis en appuyant sur le bouton "Break" de PriMan v2.0 :
Téléchargez PriMan v2.0 ici : aminet/util/moni/PriMan20.lha. Plus tard nous verrons comment Wait() peut attendre d'autres événements comme les événements de fenêtre. Les listes d'attributs (tag lists) Les listes d'attributs sont un moyen très flexible pour passer des paramètres aux fonctions AmigaOS. Une liste d'attributs est simplement un tableau de LONGs qui a toujours la forme suivante :
Une étiquette en majuscules indique quel attribut est renseigné par le LONG "info" suivant. Le "info" est la valeur de l'attribut. Le type liste d'attributs est natif en Amiga-E. Notez que les listes d'attributs sont allouées statiquement. Pour des listes d'attributs allouées dynamiquement il faut utiliser NEW :
Parmi de nombreuses autres bibliothèques, Intuition et Gadtools font un usage intensif des listes d'attributs. Pour plus d'information sur les listes d'attributs, voir les Includes et les Autodocs de la utility.library. Les listes Exec De nombreux éléments d'AmigaOS, comme les écrans, sont reliés entre eux par les listes Exec. Alors qu'une liste d'attributs ressemble fort à un tableau statique, une liste Exec est dynamique comme une liste chaînée, on peut y insérer ou y retirer des éléments. Les fonctions de base pour ce faire sont AddHead(), AddTail(), RemHead(), RemTail(), Insert() et Remove() de la bibliothèque exec. Cette fonction alloue une liste Exec vide :
Et celle-ci retourne un nouveau noeud de liste portant le nom spécifié :
Pour plus d'information sur les listes Exec, voir les Autodocs de la exec.library ainsi que les Includes exec/nodes.h et exec/lists.h. Pour aller plus loin La documentation indispensable c'est les Autodocs de Commodore, et c'est encore mieux dans le format AmigaGuide : aminet/dev/misc/AmigaOS_guides.lha. Les non moins indispensables AmigaOS Includes : obligement.free.fr/files/ndk_amigaos39.lzx. Le compilateur EC v3.3a de Wouter van Oortmerssen (version complète) : www.aminet.net/dev/e/amigae33a.lha et aminet/dev/e/ec33a.lha. Le compilateur ECX de Leif Salomonsson (version démo) : home.swipnet.se/blubbe/ECX. La liste de diffusion Amiga-E : www.freelists.org/list/positron.
|