03.07.2013 Views

Magazine Pom's : la collection

Magazine Pom's : la collection

Magazine Pom's : la collection

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

pcnnettant ainsi à <strong>la</strong> routine d'afficher des dialogues, ou<br />

d'enregistrer des rég<strong>la</strong>ges.<br />

Pour enregistrer des rég<strong>la</strong>ges, on peut ajouter une ressource<br />

au système (ce que déconseille Apple, qui n'aime pas trop<br />

que l'on touche à ses fichiers système).<br />

En revanche, c'est impossible pour les ressources de type<br />

DLOG, MENU OU STR ; on a alors le choix entre deux<br />

solutions, dont aucune n'est pleinement satisfaisante :<br />

.. Comme les accessoires de bureau, coder "en dur" ,<br />

soit les chaînes de caractères, soit les dialogues, directe­<br />

ment dans le code (auquel cas toute traduction ou<br />

personnalisation de <strong>la</strong> FKey est impossible) ;<br />

.. Utiliser un fichier externe, par exemple, à installer<br />

dans le dossier système (l'instal<strong>la</strong>tion de <strong>la</strong> FKey est<br />

alors plus compliquée).<br />

C'est <strong>la</strong> deuxième solution qui a été choisie pour NoteKey.<br />

V NoteKey doit lire des événements par des appels à Get<br />

OSEvent et non à GetNextEvent, qui risquerait de<br />

provoquer des "p<strong>la</strong>ntages", lorsque <strong>la</strong> FKey est appelée par<br />

un accessoire de bureau.<br />

tI' NoteKey doit rester en mémoire après son appel. En ef-<br />

fct. pour effectuer son travail, NoteKey appelle Il fois<br />

PostEvent pour ajouter dans <strong>la</strong> file des événements, ceux<br />

correspondant à <strong>la</strong> frappe des Il caractères de <strong>la</strong> chaîne à<br />

envoyer. Seulement, si <strong>la</strong> file contient moins de Il p<strong>la</strong>ces<br />

libres, on risque de perdre des caractères. Il faut donc<br />

installer une routine qui, à chaque appel de GetNextEven t<br />

(ou équivalent), regarde s'il reste de <strong>la</strong> p<strong>la</strong>ce dans <strong>la</strong> file, et<br />

si c'est <strong>la</strong> cas, y p<strong>la</strong>ce le caractère suivant. Une fois son<br />

travail tenniné, le code peut enfin être libéré.<br />

La routine espionne<br />

Malheureusement, <strong>la</strong> fonction qui exécute les FKeys a <strong>la</strong><br />

mauvaise idée d'unlocker <strong>la</strong> ressource après son exécution.<br />

Or, notre routine qui "espionne" GetNextEvent doit rester<br />

fixe en mémoire. La première chose que fa it notre routine<br />

est dont de se "rclocker", en espérant, qu'entre temps, elle<br />

n'aura pas été dép<strong>la</strong>cée.<br />

Une méthode plus propre et sûre serait de se créer un bloc<br />

non-rclogeable avec NewPtr, d'y recopier le code de <strong>la</strong><br />

routine "espionne", et les variables qu'elle utilise. La seule<br />

petite difficulté (en <strong>la</strong>ngage C, mais pas en assembleur), est<br />

de permettre à <strong>la</strong> routine de retrouver l'adresse de ses<br />

variables.<br />

Pour installer <strong>la</strong> routine "espionne", on utilise une globale<br />

non documentée dans Inside Macintosh : JGNEFil tar<br />

(Ox29A), qui contient l'adresse d'une routine à exécuter<br />

après ('appel de GetNextEvent.<br />

Notre FKey, après avoir préparé <strong>la</strong> chaîne li envoyer, se<br />

détache du fichier de ressources auquel elle est attachée, se<br />

"locke" en mémoire, se marque non-purgcable, récupère<br />

Porn's nO 47<br />

l'ancienne adresse p<strong>la</strong>cée en JGNEFi lter, puis y p<strong>la</strong>ce<br />

l'adresse de notre espionne.<br />

L'espionne, après chaque appel, exécute l'ancienne routine<br />

installée en JGNEFilter, puis, à <strong>la</strong> suite du dernier appel,<br />

se marque "unlock" et purgeable, pour libérer <strong>la</strong> mémoire<br />

utilisée, et rep<strong>la</strong>ce en JGNEFi lter l'adresse de l'ancienne<br />

routine. Avant cette opération, il serait plus sûr de vérifier<br />

que JGNEFi lter contient toujours l'adresse de notre routine<br />

et que rien ne s'est installé à <strong>la</strong> p<strong>la</strong>ce.<br />

v NoteKey peut !tre rendu plus solide, en paniculier en<br />

vérifiant que les allocations de mémoire ont été réussies<br />

et que l'on n'appelle pas NoteKey à partir d'elle-même.<br />

v Les autres aspects de NoteKey sont plus "c<strong>la</strong>ssiques" et<br />

les commentaires inclus dans le listing devraient<br />

permettre de comprendre son fonctionnement et de<br />

l'adapter à vos besoins.<br />

Mode d'emploi<br />

Ceue Fkey permet de définir 9 chaînes de caractères, puis de<br />

les mppeler avec une seule touche.<br />

Instal<strong>la</strong>tion<br />

Vous installerez NoteKey à l'aide d'un programme tel que<br />

Fkey Installer ou Font/DNMover. Si vous ne possédez pas<br />

d'utilitaire de ce genre, vous pouvez recopier <strong>la</strong> Fkey 7 li<br />

l'aide de l'éditeur de ressource (tel que ResEdit par<br />

exemple) du fichier NoteKey dans le fichier System. Vous<br />

devrez aussi p<strong>la</strong>cer le fichier NoteKey Infos dans le dossier<br />

Système.<br />

Utilisation<br />

NotK1J Infos<br />

Vous appellerez <strong>la</strong> Fkey à l'aide de commande-7, vous<br />

devrez ensuite taper une autre lettre :<br />

v D ou d : pour insérer l'heure à l'endroit du curseur ;<br />

v Hou h : pour insérer <strong>la</strong> date à l'endroit du curseur ;<br />

v A ou a : suivi d'un nombre xyz de trois chiffres, de ()(X)<br />

à 255, insère le code ASCII nO "yz à l'endroit du<br />

curseur ;<br />

v 1 à 9 : <strong>la</strong> chaîne n° x est automatiquement insérée à<br />

l'endroit du curseur ;<br />

tI' Espace : un écran de saisie vous pennet d'enregistrer les<br />

chaînes 1 à 9, ainsi que le format de l'heure et de <strong>la</strong><br />

date. Toutes ces chaînes sont enregistrées dans le<br />

fichier NoteKey Infos. Vous les retrouverez donc lors de<br />

votre prochaine utilisation.<br />

t/ Autre : un écran d'aide eS<strong>la</strong>ffiché.<br />

49

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!