home *** CD-ROM | disk | FTP | other *** search
/ No Fragments Archive 10: Diskmags / nf_archive_10.iso / MAGS / DNTPAPER / DNT_01.MSA / PROTOCOL.GEM / PROT_DOC / DOCUMENT.TXT next >
Text File  |  1987-04-22  |  11KB  |  210 lines

  1.  
  2.            TRANSMISSION DE DONNÉES ENTRE APPLICATIONS
  3.             DOCUMENTATION RELATIVE AU PROTOCOLE GEM
  4.  
  5.  
  6. Auteurs de ce protocole:
  7. LAMBALLAIS Pierre-Louis    (Le Féroce Lapin)
  8. Ecole Publique
  9. 53110 Ste Marie du Bois
  10. Tél:43.08.59.46
  11.  
  12. ALLEN Douglas            (Dad)
  13. La Retardière
  14. Rennes en Grenouille
  15. 53110 Lassay les Chateaux
  16. Tél:43.08.51.00
  17.  
  18.  
  19.  -- Fonctionnement / Point de vue de l'utilisateur --
  20.  
  21.  Par convention,  l'utilisateur déclenche toujours  l'application 
  22. émétrice des données.  Ainsi un PRG traitement de texte  désirant 
  23. envoyer  un  texte  vers  un ACC qui  pourra  le  compacter  sera 
  24. l'émetteur.  Par  contre lorsque l'on voudra recharger  ce  texte 
  25. compacté,  c'est  l'accessoire qui sera l'émetteur puisque  c'est 
  26. lui qui enverra le fichier aprés l'avoir décompacté.
  27. L'utilisateur déclenche donc l'application émétrice des  données, 
  28. celle-ci  lui  propose  la liste des  applications  présentes  en 
  29. mémoire,  compatibles  avec  cette  série de  protocole  et  donc 
  30. suceptibles  de  recevoir  ces  données.   L'utilisateur  choisit 
  31. l'application   réceptrice   et  le  transfert   se   fait   avec 
  32. éventuellement   demande   de   paramètres   pour   l'application 
  33. réceptrice.
  34.  
  35.  -- Fonctionnement / Point de vue du programmeur --
  36.   Pour écrire,  une application utilise la fonction APPL_WRITE  à 
  37. laquelle  elle fournit l'APP_ID de l'application destinataire  du 
  38. message,  la taille de celui-ci et son adresse.  Les applications 
  39. compatibles  avec ce protocole noterons donc leur APP_ID dans  un 
  40. tableau, dont l'adresse sera notée dans le Cookie-Jar, avec comme 
  41. identificateur _TUB.
  42. Ce  systéme de notation et d'utilisation sera fait avec  quelques 
  43. réserves, à cause de l'existence de programmes tels que MULTIDESK 
  44. ou  STUFFER,  mais  aussi afin d'envisager le cas  d'une  version 
  45. multitâche du GEM.
  46.  
  47. Le  tableau dans lequel seront notés les APP_ID des  applications 
  48. compatibles avec ce protocole, sera composé comme ceci:
  49. PROT           */ identificateur en ascii donc sur 4 octets */
  50. NBR_APPID      */ nbr de slot de ce tableau (sur un word)   */
  51. slot1          */ les slots contenant les APP_IDs           */
  52. slot2          */ des applications compatibles              */
  53. END_FLAG       */ indication de fin des APP_ID ($FFFF)      */
  54. emplacement pour les autres APP_ID possibles.
  55.  
  56. NBR_APPID indique donc le nombre maxi d'APP_ID que peut  contenir 
  57. le  tableau,  mais pas le nombre d'APP_ID en  place.  Le  dernier 
  58. APP_ID est suivi d'un indicateur de fin (word à $FFFF). 
  59. (ainsi  un  tableau pouvant contenir 10 APP_ID fera  en  tout  28 
  60. octets)
  61.      Comme dans le cas du Cookie-jar, il est tout à fait possible 
  62. de fabriquer une nouvelle liste,  plus grande,  et d'y transférer 
  63. le  contenu de l'ancienne,  si une application voulant y  déposer 
  64. son APP_ID s'apperçoit qu'elle est pleine. 
  65.  
  66.      Il  convient  cependant  d'être  trés  prudent:   il  faudra 
  67. vérifier avant chaque transmission,  le bon état du  tableau.  En 
  68. effet, tout comme pour le Cookie-Jar, il est tout a fait possible 
  69. que   des   applications   non-respectueuses   des   régles    de 
  70. programmation  viennent piétiner nos  plates-bandes!  C'est  trés 
  71. génant  car en cas de tentative d'écriture par APPL_WRITE  à  une 
  72. application inexistante, il y a plantage de la machine, le GEM ne 
  73. renvoyant aucun numéro d'erreur, mais juste quelques bombes...
  74.  
  75.      Une   vérification   de  l'en-tête   (PROT)   ainsi   qu'une 
  76. vérification,  en  cours  de lecture du  tableau,  d'un  éventuel 
  77. débordement  (évité  en comptant les APP_ID lus et  en  comparant 
  78. avec NBR_APPID) est donc fortement conseillé!
  79.  
  80.   -- Initialisation / Point de vue d'un ACC --
  81. L'accessoire va chercher dans le Cookie-Jar le cookie _TUB. Il en 
  82. déduit  l'adresse  du tableau des APP_ID.  Il  vérifie  alors  la 
  83. validité  de  ce tableau à l'aide de son  en-tête,  et  si  cette 
  84. vérification  est  correcte,  il place son propre AP_ID  dans  la 
  85. liste.  Le  cas des accessoire lancés avec Multidesk  ou  Stuffer 
  86. doit  être  prévu.  L'accessoire envisageage donc le cas  ou  son 
  87. APP_ID  serait déja inscrit dans la liste,  auquel cas il  ne  le 
  88. rajoute  pas.  Si  l'accessoire se rajoute,  il n'oublie  pas  de 
  89. reculer le flag de fin ($FFFF). Si par hasard le tableau est déja 
  90. plein  (on le vérifie en comptant les APP_ID de celui-ci  est  en 
  91. comparant ce nombre avec NBR_APPID indiquant combien d'emplcament 
  92. son  disponible),  l'accessoire  à la possibilité  de  créer  une 
  93. nouvelle liste d'APP_ID,  plus grande, d'y recopier le contenu de 
  94. l'ancienne  puis  de noter son adresse dans le  Cookie-Jar  à  la 
  95. place de l'adresse de l'ancienne liste.  Ceci explique  également 
  96. qu'il  faudra  demander  à chaque transmission  l'adresse  de  la 
  97. liste,  plutôt  que  de  se fier à l'adresse  trouvé  lors  d'une 
  98. précédente demande.  
  99.  
  100. S'il  estime  que  l'initialisation est  bonne  il  continue  son 
  101. déroulement normal.  Si par contre il estime que l'initialisation 
  102. n'est  pas  correcte (par exemple s'il n'a pas trouvé  de  Cookie 
  103. _TUB,  ou  bien  si l'en-tête du tableau n'est pas bonne)  il  va 
  104. créer un nouveau tableau et placer l'adresse de celui-ci, avec le 
  105. Cookie _TUB,  dans le Cookie-Jar en créant éventuellement  celui-
  106. ci.
  107.  
  108.  -- Initialisation / Point de vue d'un programme --
  109.  Au démarrage un PRG doit se déclarer, la liste ne comprenant que 
  110. les  APP_ID des accessoires.  Il va donc chercher le cookie  _TUB 
  111. dans le Cookie-Jar.  S'il ne le trouve pas,  il en déduit que  la 
  112. transmission sera impossible,  idem si le Cookie-Jar existe  mais 
  113. qu'il  ne  contient  pas de Cookie  _TUB.  Lorsque  le  programme 
  114. posséde  l'adresse du tableau pour le protocole,  il teste  l'en-
  115. tête de celui-ci.  Si cette liste n'est pas valable, il abandonne 
  116. (étant  un  programme il ne peut pas fabriquer de  liste  puisque 
  117. celle-ci disparaitrait avec lui), sinon il y rajoute son APP_ID.
  118. Lorsque  l'on quittera le programme,  celui-ci devra retirer  son 
  119. APP_ID de la liste,  afin que les accessoires ne cherchent pas  à 
  120. communiquer avec lui alors qu'il n'est plus en mémoire.
  121. S'il n'y a plus de place dans la liste des APP_ID,  le  programme 
  122. ne pourra pas être appelé.  Cependant rien ne l'empéchera de lire 
  123. cette  liste  et donc d'appeler  les  autres  applications.  Pour 
  124. éviter d'avoir une liste d'APP_ID pleines, les accessoire doivent 
  125. en prévoir une assez grande.  Dans les exemples fournis sur cette 
  126. disquette,  la liste d'APP_ID permet d'en recevoir 10.  Il serait 
  127. normal  de songer à en mettre par exemple une de 16,  au  cas  ou 
  128. celle  de  10  serait  pleine.  Il  est  également  tout  à  fait 
  129. envisageable  de  réaliser un petit programme  placé  en  dossier 
  130. AUTO,  qui fabriquerait une liste,  et pourquoi pas un Cookie-Jar 
  131. éventuel (pour penser aux STF!). 
  132.  
  133. A  chaque fois qu'un programme tentera de placer son APP_ID  dans 
  134. la liste,  il devra impérativement la parcourir afin de  vérifier 
  135. si cet identificateur ne s'y trouve pas déja, ceci pour envisager 
  136. le cas d'un programme ayant précédement placé son APP_ID et ayant 
  137. oublié de le retirer (cas d'un programme quittant par une  erreur 
  138. par exemple).
  139.  
  140.  -- Préparation d'une transmission  -- 
  141. L'application va chercher l'adresse du Cookie-Jar,  y cherche  le 
  142. Cookie  _TUB,  et  en  déduit  l'adresse  du  tableau  Protocole. 
  143. L'application vérifie l'en-tête de ce tableau.  Deux cas  peuvent 
  144. se présenter:
  145.  1) données incorrectes: transmission impossible
  146.  2) données correctes: début de communication
  147.  
  148.   Cette étape de préparation sera exécutée à chaque  fois  qu'une 
  149. transmission  sera demandée car il est tout à  fait  envisageable 
  150. qu'une application étrangère vienne détruire le tableau protocole 
  151. (ou  même le Cookie-Jar) à notre insu.  Il est donc impératif  de 
  152. tout vérifier avant chaque transmission.
  153.  
  154.  -- COMMUNICATION ENTRE 2 APPLICATIONS  --
  155.   L'application désirant correspondre avec une autre  application 
  156. est  donc  actuellement en possession de l'adresse  d'un  tableau 
  157. contenant  les  APP_ID des applications actives  en  mémoire.  Ce 
  158. tableau contient la liste des APP_ID, que ceux-ci appartiennent à 
  159. des  applications compatibles avec le protocole ou non.  (cas  de 
  160. Multidesk ou d'autres lanceurs d'accessoires...)
  161.  
  162. Petite  explication pour multidesk:  celui-ci une fois  lancé  ne 
  163. note pas son APP_ID dans la liste puisqu'il n'est pas compatible. 
  164. Nous lançons ensuite gràce à Multidesk,  un accessoire compatible 
  165. avec le protocole.  Cet accessoire va donc noter son APP_ID  dans 
  166. la  liste,  mais il s'agit en fait du même APP_ID que  Multidesk. 
  167. Lorsque nous quittons cet accessoire (il disparait de la  mémoire 
  168. à  cause  de Multidesk),  son APP_ID reste dans  la  liste.  Nous 
  169. allons  donc  envoyer des messages à Multidesk,  en  croyant  les 
  170. envoyer à une application compatible!
  171.  
  172.  Le communication va pouvoir commencer,  en utilisant la fonction 
  173. APPL_WRITE.  L'application recevant le message sera en mesure  de 
  174. le lire après un EVNT_MESAG ou bien un EVNT_MULTI.  Le  protocole 
  175. consiste en fait à se mettre d'accord sur les numéros de  message 
  176. que  nous  allons  utiliser et sur le  format  de  ces  messages. 
  177. Toujours par convention nous avons attribué aux messages émis par 
  178. les applications engageant la conversation,  des numéros  paires. 
  179. L'application  répondant  envoyant des  messages  impaires.  Nous 
  180. avons mis au point 3 séries de codes.
  181.  
  182.   La  première série est utilisée pour  transmettre  des  données 
  183. (échange de blocs mémoires divers) et ces messages sont numérotés 
  184. à partir de 300.
  185.    La  seconde  série  est  utilisée  pour  l'échange  de   menus  
  186. déroulants.  Son utilisation permet à un ACC d'avoir un véritable 
  187. menu  déroulant GEM,  classiquement fabriqué avec un  éditeur  de 
  188. ressource  et géré tout aussi classiquement.  Ces  messages  sont 
  189. numérotés à partir de 400.
  190.    La  troisième  série  est  utilisée  pour  le   pilotage   des 
  191. applications.  Avec cette série de messages, une application peut 
  192. en  piloter  une  autre.  Ainsi un  ACC  pourra  automatiser  les 
  193. procédures de recherches d'une base de données,  par exemple. Les 
  194. messages de cette série sont numérotés à partir de 500.
  195.  
  196.  Vous trouverez ci-joint la liste et la description des  messages 
  197. du   protocole,   ainsi  que  les  listings  en   assembleur   de 
  198. l'initialisation vue par un ACC, l'initialisation vue par un PRG, 
  199. la préparation des transmissions, etc... Vous trouverez également 
  200. le listing d'un ACC et d'un PRG s'échangeant des documents,  ceux 
  201. d'un ACC et d'un PRG dont le second gére le menu du  premier,  et 
  202. enfin  ceux  d'un ACC et d'un PRG dont le premier  déclenche  les 
  203. routines  de  dessins du second.  Il est bien évident  qu'il  est 
  204. possible  de  réaliser des applications répondant  à  toutes  ces 
  205. fonctions, mais ces listings n'étant que des exemples, nous avons 
  206. jugé plus clair de montrer séparement les possibilités.
  207.  
  208.      Bonne utilisation de ce protocole !!!
  209.  
  210.