home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / programming / oslib / examples / c / event next >
Encoding:
Text File  |  1995-08-24  |  3.3 KB  |  93 lines

  1. /* Title:   event.c
  2.  * Purpose: event dispatching
  3.  * Author:  IDJ
  4.  * History: 19-Jun-94: IDJ: created
  5.  *          22nd Mar 1995: J R C: hacked mercilessly to use OSLib
  6.  */
  7.  
  8. /*From CLib*/
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12.  
  13. /*From OSLib*/
  14. #include "wimp.h"
  15.  
  16. /*From TLib*/
  17. #include "toolbox.h"
  18.  
  19. /*From Support*/
  20. #include "trace.h"
  21. #include "tbevent.h"
  22. #include "wimpevent.h"
  23. #include "wimpmsg.h"
  24.  
  25. static toolbox_block *Block = 0;
  26. static wimp_poll_flags Mask = NONE;
  27.  
  28. /* ------------------------------------- dispatching events ------------------------------------ */
  29. static void Dispatch (wimp_event_no event_code, wimp_block *poll_block, toolbox_block *id_block)
  30.  
  31. {  tracef ("Dispatch\n");
  32.    tracef ("id_block 0x%X\n" _ id_block);
  33.  
  34.    switch (event_code)
  35.    {  case toolbox_EVENT:
  36.          tbevent_dispatch (poll_block, id_block);
  37.       break;
  38.  
  39.       case wimp_USER_MESSAGE: case wimp_USER_MESSAGE_RECORDED:
  40.          wimpmsg_dispatch (poll_block, id_block);
  41.       break;
  42.  
  43.       default:
  44.          wimpevent_dispatch (event_code, poll_block, id_block);
  45.       break;
  46.    }
  47. }
  48.  
  49. void event_poll (wimp_event_no *event_code, wimp_block *poll_block, void *poll_word)
  50.  
  51. {  *event_code = wimp_poll (Mask, poll_block, poll_word);
  52.    tracef ("event_poll: event_code %d\n" _ *event_code);
  53.  
  54.    Dispatch (*event_code, poll_block, Block);
  55. }
  56.  
  57. extern void event_poll_idle (wimp_event_no *event_code, wimp_block *poll_block, os_t earliest, void *poll_word)
  58.  
  59. {  *event_code = wimp_poll_idle (Mask, poll_block, earliest, poll_word);
  60.    tracef ("event_poll: event_code %d\n" _ *event_code);
  61.  
  62.    Dispatch (*event_code, poll_block, Block);
  63. }
  64.  
  65. /* ------------------------------------- registering/deregistering handlers ----------------------- */
  66. /* wimp events */
  67. void event_register_wimp_handler (toolbox_o object_id, wimp_event_no event_code, event_wimp_handler handler, void *handle)
  68.       {wimpevent_register_wimp_handler (object_id, event_code, handler, handle);}
  69. void event_deregister_wimp_handler (toolbox_o object_id, wimp_event_no event_code, event_wimp_handler handler, void *handle)
  70.       {wimpevent_deregister_wimp_handler (object_id, event_code, handler, handle);}
  71.  
  72. /* toolbox events */
  73. void event_register_toolbox_handler (toolbox_o object_id, bits event_code, event_toolbox_handler handler, void *handle)
  74.       {tbevent_register_toolbox_handler (object_id, event_code, handler, handle);}
  75. void event_deregister_toolbox_handler (toolbox_o object_id, bits event_code, event_toolbox_handler handler, void *handle)
  76.       {tbevent_deregister_toolbox_handler (object_id, event_code, handler, handle);}
  77.  
  78. /* wimp messages */
  79. void event_register_message_handler (bits msg_no, event_message_handler handler, void *handle)
  80.       {wimpmsg_register_message_handler (msg_no, handler, handle);}
  81. void event_deregister_message_handler (bits msg_no, event_message_handler handler, void *handle)
  82.       {wimpmsg_deregister_message_handler (msg_no, handler, handle);}
  83.  
  84. /* ------------------------------------- getting/setting poll mask -------------------------------- */
  85. extern void event_set_mask (wimp_poll_flags mask) {Mask = mask;}
  86. extern void event_get_mask (wimp_poll_flags *mask) {if (mask != NULL) *mask = Mask;}
  87.  
  88. /* ---------------------------------------- initialisation -------------------------------------- */
  89. void event_initialise (toolbox_block *b)
  90.  
  91. {  Block = b;
  92. }
  93.