/* Copyright 1997 Acorn Computers Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/****************************************************************************
 * This source file was written by Acorn Computers Limited. It is part of   *
 * the toolbox library for writing desktop applications in C. It may be     *
 * used freely in the creation of programs for Archimedes or Risc PC. It    *
 * should be used with Acorn's C Compiler Release 5 or later.               *
 *                                                                          *
 *                                                                          *
 * Copyright  Acorn Computers Ltd, 1994                                    *
 *                                                                          *
 ***************************************************************************/



#ifndef __event_h
#define __event_h

#ifndef __wimp_h
#include "wimp.h"
#endif

#ifndef __toolbox_h
#include "toolbox.h"
#endif

typedef int (WimpEventHandler) (int event_code,
                                 WimpPollBlock *event,
                                 IdBlock       *id_block,
                                 void          *handle);

typedef int (ToolboxEventHandler) (int event_code,
                                    ToolboxEvent  *event,
                                    IdBlock       *id_block,
                                    void          *handle);

typedef int (WimpMessageHandler) (WimpMessage *message,
                                   void *handle);



#ifdef __cplusplus
  extern "C" {
#endif


extern _kernel_oserror *event_poll (int *event_code, WimpPollBlock *poll_block, void *poll_word);


extern _kernel_oserror *event_poll_idle (int *event_code, WimpPollBlock *poll_block, unsigned int earliest, void *poll_word);


extern _kernel_oserror *event_dispatch (int event_code, WimpPollBlock *poll_block);


/* ------------------------------------- getting/setting poll mask -------------------------------- */

extern _kernel_oserror *event_set_mask (unsigned int mask);

extern _kernel_oserror *event_get_mask (unsigned int *mask);


/* ------------------------------------ event handler registering ------------------------------- */

_kernel_oserror *event_register_wimp_handler (ObjectId object_id, int event_code,
                                              WimpEventHandler *handler, void *handle);

_kernel_oserror *event_deregister_wimp_handler (ObjectId object_id, int event_code,
                                                WimpEventHandler *handler, void *handle);

_kernel_oserror *event_deregister_wimp_handlers_for_object (int object_id);


_kernel_oserror *event_register_toolbox_handler (ObjectId object_id, int event_code,
                                                 ToolboxEventHandler *handler, void *handle);

_kernel_oserror *event_deregister_toolbox_handler (ObjectId object_id, int event_code,
                                                   ToolboxEventHandler *handler, void *handle);

_kernel_oserror *event_deregister_toolbox_handlers_for_object (int object_id);

_kernel_oserror *event_register_message_handler (int msg_no, WimpMessageHandler *handler, void *handle);

_kernel_oserror *event_deregister_message_handler (int msg_no, WimpMessageHandler *handler, void *handle);



/* ------------------------------------ initialisation/finalisation ----------------------------- */


extern _kernel_oserror *event_initialise (IdBlock *b);

extern _kernel_oserror *event_finalise (void);


#ifdef __cplusplus
  }
#endif


#endif
