/* Header for eventlib (using OSLib types) */

#ifndef event_H
#define event_H

#ifdef __cplusplus
extern "C" {
#endif

typedef bool event_wimp_handler(wimp_event_no event_code,
      wimp_block *event,toolbox_block *id,
      void *handle);

typedef bool event_toolbox_handler(bits event_code,
      toolbox_action *event, toolbox_block *id,
      void *handle);

typedef bool event_message_handler(wimp_message *message,
      void *handle);

void event_poll(wimp_event_no *event_code, wimp_block *poll_block,
      void *poll_word);
void event_poll_idle(wimp_event_no *event_code, wimp_block *poll_block,
      os_t earliest, void *poll_word);

void event_set_mask(wimp_poll_flags mask);
void event_get_mask(wimp_poll_flags *mask);

void event_register_wimp_handler(toolbox_o object_id,
    wimp_event_no event_code, event_wimp_handler *handler, void *handle);

void event_register_toolbox_handler(toolbox_o object_id,
    wimp_event_no event_code, event_toolbox_handler *handler, void *handle);

void event_register_message_handler(bits msg_no,
    event_message_handler *handler, void *handle);

void event_deregister_wimp_handler(toolbox_o object_id,
    wimp_event_no event_code, event_wimp_handler *handler, void *handle);

void event_deregister_toolbox_handler(toolbox_o object_id,
    wimp_event_no event_code, event_toolbox_handler *handler, void *handle);

void event_deregister_message_handler(bits msg_no,
    event_message_handler *handler, void *handle);

void event_initialise(toolbox_block *id_block);

#define event_ANY ((toolbox_o) -1)

#ifdef __cplusplus
}
#endif

#endif
