Magazine Pom's : la collection
Magazine Pom's : la collection
Magazine Pom's : la collection
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