*******  Travaux de conversion *****

====  Biblio utilise OSLib ====
====  debug via !reporter

cration des os_error num, text
Ces os_errors sont dclares dans le fichier main.h  en EXTERN

lose(const void *e) rapporte l'erreur et sort.
err(const void *e)  rapporte l'erreur.


initvar(){
  allocation d'espace  un buffer de texte gbbufMess
  remplissage des os_error avec leur numro et leur texte respectif.
  A modifier pour utiliser des messages d'erreurs issues du fichier messages pour internationalisation.
  }


Main() {
 liste de Wimp Messages Events  surveiller ; termin par 0 , tous pour le moment
 liste de toolbox Events  surveiller ; termin par 0 */
 Exception trap
 s'assurer que nous ne dmarrons pas une autre instance de l'application.
 gbTaskHandle =toolbox_initialise(...)
 event_initialise(...)
 event_set_mask(...)
 event_register_message_handler(message_TASK_INITIALISE,.......)
 event_register_message_handler(message_QUIT,....)

 Boucle event_poll dans un try / catch
 fin
}

InitMessage_Handler(){  pour le fonctionnement de l'appli
 Exception trap
 event_register_message_handler(.....)
 event_register_toolbox_handler(.....)
 // Initialisation des objets
 IconbarInit(ICONBAR_TEMPLATE);
 ..........
}

FindId_handler() {
  gestion des objets toolbox auto crs avec ResEd, suivant leur classe.

}
IconbarInit() {
  cration de l'objet IconBar avec obtention de son Id
  affichage de celui-ci.
  event_register_toolbox_handler( ,ICONMENU_QUIT_EVENT,...)
  event si click sur l'item quit du menubar
}

FenOptionsInit() {
   cration de l'objet Options avec obtention de son Id et son handle

   event_register_toolbox_handler(
   event_register_wimp_handler(
   event_register_message_handler(

}

Icons in the Options window.
crs avec  ResEd dans la fentre options, leur object id est dclar dans Comp.h

Options Help
  mettre dans le fichier Messages, ou directement avec ResEd, pour cela il faut un Event handler help

Save Help
Idem

Menu Help
Idem

Event handler

do_xxx()  sont enregistr dans la fonction init_wimp() de drawf
   /* Set up event handlers. */
  wimpfns[reason_close]=do_close;
  wimpfns[reason_click]=do_click;
  wimpfns[reason_dragbox]=do_dragbox;
  wimpfns[reason_menu]=do_menu;
  wimpfns[reason_message]=
   wimpfns[reason_message_rec]=
   wimpfns[reason_message_ack]=do_message;

reason_close   =  wimp_CLOSE_WINDOW_REQUEST 	   = 3
reason_click   =  wimp_MOUSE_CLICK          	   = 6
reason_dragbox =  wimp_USER_DRAG_BOX 		   = 7
reason_menu    =  wimp_MENU_SELECTION		   = 9
reason_message =  wimp_USER_MESSAGE		   =17
reason_message_rec = wimp_USER_MESSAGE_RECORDED	   =18
reason_message_ack = wimp_USER_MESSAGE_ACKNOWLEDGE =19

==============
>>> do_menu()
 block[0]==0
   ouvre auto la fentre infos.  //fait auto avec ResEd
 block[0]==1
  ouverture de l fentre option: //fait auto avec ResEd
 block[0]==2) finish(); remlac par l'event gnr parl'item quit du
  menubar toolbox ICONMENU_QUIT_EVENT

Fonctions ralises avec l'aide de ResEd  et un event handler.
============
>>> do_click(int reason, int *block) {
  int but=block[2], win=block[3], icn=block[4];
if (win==-2 && icn==baricon_handle && but==2)
   cration du menubar // fait par la toolbox
-----------------------------------------------------------
if (but==2) return 0;	/* ignore Menu clicks alone*/

if (win==save_handle) (click fentre save)
    si on cliqu sur l'icone de la fentre save et que l'tat du bouton est 64 {
    si opting_icon => message occup
    sinon on commence un drag( depuis la fentre save) = wimp_drag_box
   }
   si bouton savebox ok et clic select =>  do_really_save()
==
Note drag
/* |opting_icon| is usually 0.
 * While dragging an icon from the Options window, or waiting for
 * the DataSaveAck after doing so, it's the icon number of the
 * icon in that window which we dragged.

 si ce n'est pas la fentre options on sort

---------------------------------------------------------------
 si bouton select ou adjust{
   si bouton adjust{
       /* Adjust-clicking on units arrows goes the other way.
       * (Adjust-clicking elsewhere does the same as Select-clicking.)
       on test si oi_units_left =>icn = oi_units_right effet inverse
       si oi_units_right  icn = oi_units_left
       (c'est le type d'units utilis : Scaled points, os units, points, millimtres, centimtres inches  (unit_list)
       suivant l'tat d'icn: toggle/basculement de son tat shade fonction maybe_shade()
       pour la case units =>update_units()
       modif du shade en fonction du bouton option des zones tagfile, sprite file, use prefix

   }

 si but == 64 on sort;
    si ce ne sont pas les oi_tagfile_icon,oi_sprfile_icon,oi_jpegpfx_icon => on sort
     si opting_icon => message occup => on sort
     begin_drag ???
 */

*********  MESSAGES ********
SCSI::SSD.$.Documents.DDEManuals.DocsJM.Messages.TransferProtocol

>>> do_message(reason, block):  handler appel aprs enregistrement par wimpfns( reason = reason_message ou  reason_message_rec ou reason_message_ack)
Rponse  wimp_send_message() ???

voir OSLib: wimp_message  pour block
voir OSLib: wimp_event_no pour reason

Rappel:
  reason_close   =  wimp_CLOSE_WINDOW_REQUEST 	   = 3
  reason_click   =  wimp_MOUSE_CLICK          	   = 6
  reason_dragbox =  wimp_USER_DRAG_BOX 		   = 7
  reason_menu    =  wimp_MENU_SELECTION		   = 9
  reason_message =  wimp_USER_MESSAGE		   =17
  reason_message_rec = wimp_USER_MESSAGE_RECORDED   =18
  reason_message_ack = wimp_USER_MESSAGE_ACKNOWLEDGE =19

 switch(block[4]=  // Action ???
     case  0 => Message quit:  utilisation d'un handler pour ce message demand dans InitMessage_Handler
     case  1 => Message _data_save
        si wimp_USER_MESSAGE_ACKNOWLEDGE et  taskhandle de l'appli sender (message header)
        opting_icon = 0; return;
     case 2  Message_data_save_ack

     case 3 /* Message_Data_Load */ utilisation d'un handler pour ce message
        si message wimp_USER_MESSAGE_ACKNOWLEDGE et le sender est l'appli on sort avec message d'erreur.
        si on n'est pas sur l'icne de l'iconbar => on sort
        pas utilis: si sender notre tache et en train de sauver ???
        suivant le filetype
          si 0xFFF ou  0xFE4:  text ou dos?
            launch_mkdrawf((char*)(block+11)); break; block+11 contient le filename.
          si 0xAFF  draw
            launch_decdrawf((char*)(block+11));
        Better be polite and acknowledge the message
          block[3]=block[2];	/* your_ref */ wimp_message_header_members
          block[4]=4;		/* DataLoadAck */ wimp_message_header_members action = message_DATA_LOAD_ACK
          wimp_send_message(reason_message,block,block[1]);
            reason_message = Message_Data_Load
           fin
        case 4 break;   Message_Data_Load_Ack
     #ifdef HELPFUL
     ....   faire
     #endif
 }fin de do_message


le 25.02.20  ==========
fentre bouton:
celle-ci doit avoir son objet flag  share sinon aucune action n'est possible.
ex: un optionbutton ne retourne pas son tat.

Protocole de fin de drag entre le filer et l'appli

Test avec !wimpmon
Toolbox event: none
WimpMessage: core
WimpEvents: UserMessage(s)
task = mkdraw , RAMFS Filer


Drawf received event User Drag Box
  drag box lies between (704,404) and (784,484)

Filer received recorded message Message_DataSave from Drawf
  with reference &63B2C in reply to message with reference &0
  for file 'tptp' of type Text (FFF) and estimated size 0
  to point (744,436) in work area of window &2058B259

Drawf received message Message_DataSaveAck from Filer
  with reference &63B2D in reply to message with reference &63B2C
  for file 'RAM::RamDisc0.$.tptp'
  of type Text (FFF) and estimated size 0
  to point (744,436) in work area of window &2058B259

Premier message fait en envoyant Message_DataSave vers l'icon Ramfs(w handle,i handle)

Drawf reoit un message Message_DataSaveAck du RAMFS Filer avec le nom complet du fichier en ayant ajouter au path du classeur RAMFS RAM::RamDisc0.$."filename" , filename envoy par Drawf (contenu du champ de l'icone oi_tagfile_name)
Il faut donc traiter ce message...
