chose sur laquelle, j'envie les PC. Vous coupez un texte, une
image n'importe ou et vous la posez n'importe ou, cela est
super pratique, super efficace et nous nous sommes la comme des c..
Du 'drag and drop' sur n'importe quel Atari ?!
Sur le Falcon, un protocole est en place, mais seulement sous
Multitos, et nous autre utilisateurs lambda on fait quoi ?
Donc la question m'est venue a l'esprit, peut on le faire sur un
Atari de base ou alors sur un Falcon mais sous Tos de base ?
Deux problèmes a la base se présente :
Le premier, c'est que pour copié un objet (On va désigné par
objet n'importe quelle info, que ce soit du texte, une image,
etc...) d'une application a une autre, ils nous faut deux
applications qui tourne en meme temps !!
Le second probleme c'est que meme en ayant deux applications
tournant en meme temps (Si si c'est possible sur n'importe quel
Atari !) par exemple si vous avez un accessoire et un programme,
comment faire pour savoir qui est là et comment lui parlé ?
Les prochains détails et explications ne pourrons s'appliqué
qu'aux programmes propres, c'est a dire ceux utilisant le Gem
(Vdi, Aes).
Vous etes prêt pour l'explication ? Ready ? GO !
Quand vous lancez un programme, celui ci doit faire une demande
d'identification a l'O.S., pour pouvoir s'ouvrir une 'station de
travail'. En clair, vous faites un appel système et celui ci vous
renvoie un identificateur, celui ci vous permet de vous faire
reconnaitre pour tous les appels système. Et permet a l'O.S. de
savoir qui est ou et qui fait quoi.
Vous me suivez toujours ?
On continue, pour ceux qui connaisse le Gem ou ont des bases de
celui ci passez votre chemin les autres restés ici. Le coeur
d'un programme est un ou plusieurs appels appels Evnt (Evnt
key, Evnt mouse, Evnt multi, etc..) ceux ci permettent
d'interrogés différents périphériques, le clavier pour evnt key,
la souris pour evnt mouse, etc...) mais il y a un appel qui
traite de choses super importantes, ces choses sont les
messages. Que sont ces messages ? Ces messages vous sont envoyés
par l'O.S. pour vous avertir par exemples, qu'on a modifié une
de vos fenetres, qu'on a cliqué dans votre menu.
Vous voyez un peu ou je veux en venir ? Si vous cherchez un peu,
vous trouvez dans l'Aes une fonction 'Appl_write', celle ci permet
d'écrire des messages a une application, oui d'envoyé des messages
a d'autres programmes !! Cela commence a cogité dans votre petite
tête !! Mais pour envoyez un message, il nous faut l'identificateur
de l'autre programme (Souvenez vous du pb numéro 2 !) et on va
le cherché ou ?
Petit soucis, pour un Atari standard, pas moyen d'avoir une liste
des applications présentes en mémoire, du moins pas de manière
'légale !'. Comment contournez cela ? Il y aurait un moyen simple,
vous vous connaissez votre identificateur, il suffirait de le
publié ! C'est simple non ?
La question est comment ? On va y venir !! Pas de panique !!
D'abord pour répondre a cela, essayez cette question ? Quels sont
les seuls types de programme qui sont constamment en mémoire sur
un Atari ? Vous trouvez pas ? C'est simple, les accessoires sont
toujours la. Et oui, imaginez un accessoire qui s'occupe de la
gestion de tous les identificateurs, cela nous résoudrait le
problème. Mais cet accessoire, pour gerer ceci, il lui faut
l'identificateur ! Donc on revient a notre point de départ !
On tourne en rond, comme un chien qui se mord la queue !!
On va arrèter de tourné, on reprend notre doc sur l'Aes et on
va cherché une fonction baptisé : 'Appl_find', celle ci permet
de trouvé un identif. d'après le nom du programme. Voila un pb
de règlé, donc pour s'enregistré cela va ètre simple :
1) Faire un 'Appl_find'
(On va recherché notre gestionnaire (accessoire))
L'Aes va vous renvoyé, l'identif de l'acc sinon -1
Si on a -1 pas de gestionnaire, c'est fini !!
Si on a autre chose que -1, on va se le gardé bien au chaud
l'identif de l'.ACC
2) On envoie au gestionnaire, un message, une sorte de
demande d'enregistrement, notre identif. est 'publi‚ '
Et voila le tour est joué !
Donc on revient a notre but premier. Dans votre prog, l'utilisateur
fait une selection, vous copiez votre selection (Par exemple dans votre
buffer affect‚ a cela) et vous envoyez un message a l'accessoire.
Celui ci aura connaissance qu'une selection a été faite.
Imaginons que notre utilisateur clique maintenant sur son traitement
de texte en .ACC (accessoire), si l'utilisateur fait une demande de copie
et qu'aucune copie n'aura été faite dans ce programme. Ce traitement
de texte va faire une demande a l'accessoire, est ce qu'une selection
a été faite ailleurs ? Et si oui ou est elle ? Donc l'accessoire va
renvoyé l'info.
It's magic !! Vous pensez pas ? Par contre notre premier problème est
toujours la, nous n'avons pas de sytème multitache et tous les progs
n'acceptent pas d'ètre lancés en .ACC !! Comment résoudre ceci ?
NON je ne vais pas vous dire que je viens de codé un système multitache
je pourrais le faire, mais j'ai d'autres trucs a codé et certaines
autres personnes que moi s'y connaissent mieux et le font mieux que
moi !!
Donc que faire ? On peut règler ce problème en le contournant.
Quand votre utlisateur aura fait sa sélection, et va quitter votre
prog. Vous aurez qu'a envoyez un message a l'accessoire, genre
'Je fermes la boutique !'. L'accessoire va se prendre un peu de
mémoire et recopiez la selection dans ce morceau de mémoire.
Vous vous allez fermer votre programme comme d'habitude
L'utilisateur va chargé un autre prog et faire une demande de
copie, vous procèdez pareil qu'avant, vous adressez une demande
'Tu as une sélection en stock ?' et l'accessoire va vous renvoyez
le nécessaire et voila !!! Oui ont pourrait sauvegardé sur disque
et rechargez, mais cela implique après avoir rechargé, effacez
le fichier et pour ceux qui sont que sur disquette, cela accèlere
l'opération et surtout c'est transparente !!
Pour en revenir a une phrase plus haut, oui les Atari sont
multitaches (Ou presque !). Ce qui ont déjà dvp des accessoires
le save, vous enregistrez le nom de votre accessoire et après
que faite vous ? Et oui une boucle sans fin, vous attendez qu'un
message (Le numéro 41) vous soit envoyé, celui ci vous indique
que c'est vous qu'on a cliquez, sur votre .ACC.
(C'est dailleurs dans cette boucle que j'attends le message
d'enregistrement (Voir exemple), cela permet de scruté le message
sans avoir a ouvrir l'.ACC !)
Et oui !! Le bureau accepte 6 accessoires, donc 6 boucles sans fin !
Ce n'est pas tout a fait du vrai multitache, quand vous faites
votre appel système (Attente souris, message, etcc..) L'O.S. va en
profité pour faire un petit tour dans chaque prog.
Une démonstration ? C'est simple, en bas de ce texte, vous aurez
un lien, vous pourrez téléchargé un exemple. Cet exemple est
constitué d'un .ACC, d'un .PRG et d'un petit source Gfa.
Vous mettez l'.ACC sur votre racine (Disque A, C pour le dur) et
lancez le .PRG, le .PRG va vous indiqué si l'.ACC est là et affichez
son identif, et si vous pressez une touche, notre PRG va envoyé un
message bidon a l'.ACC, l'.ACC va répondre en affichant une boite
d'alerte (Bidon aussi !). J'ai mis les sources .Gfa du .PRG pour
prouvez que le message ne vient pas du .PRG mais bien du gestionnaire
qui a eu le message. (Si vous cliquez sur l'.ACC vous aurez juste
un message de présentation.)
Voila vous avez eu votre exemple de 'multitache' et d'envoi de
messages 'inter-programmes'.
Pourquoi j'écris tout ceci ? C'est simple, tous les prochains
programmes (propres !) C.V.S.D. utiliseront ce système. Cela
est pas mal, mais ca serait mieux s'y bcp de dvpeurs optaient
pour ce sytème, on pourrait coupé/collé d'une application quelconque
a une autre.
Donc dvpeurs a vous de choisir, je voudrais savoir deux choses,
si vous etes prèt a utilisez ce protocole et si des personnes
sont prètes a me passez un coup de main pour les formats
d'échanges. Rassurez vous je me charges d'écrire l'.ACC, c'est
plus pour les formats d'échanges. Dans tous les cas faites moi signe !
Sinon, amis dvpeurs, regardez si vous pouvez passez votre .PRG
en .ACC, ou pouvoir autorisez de lancé un autre prog du votre.
Cela permettrait de lancé un autre prog, de faire une selection.
Vous quittez ce prog et donc on retourne sous votre PROG, cela mange
pas de pain et simplifiera la vie a tout le monde !!
Et voila l'exemple (Stf, STe, Falcon, Falcon CT6x, Hades, Milan, etc..) :
http://cerebral-vortex.net/files/whisper.zip
En souhaitant que d'autres personnes participent a ceci...
GT Turbo (C.V.S.D.)
