/*********************************************************************
 *                                                                   *
 * mousewheel.h: header file for mousewheel                          *
 *                                                                   *
 * Author: Dave Harris <dah31@cam.ac.uk>                             *
 *                                                                   *
 * Date: Friday 16-January-1997                                      *
 *                                                                   *
 * $Log: mousewheel.h,v $
 * Revision 1.4  1998/01/24  17:23:49  dah31
 * Changed mousewheel_message.content.wheel_event to a ULONG.
 *
 * Revision 1.3  1998/01/22  15:23:28  dah31
 * Added server name and stack size.
 *
 * Revision 1.2  1998/01/22  13:45:06  dah31
 * Rejiggered message types.
 *
 * Added msg_port field to content union in struct mousewheel_message .
 *
 * Revision 1.1  1998/01/22  10:12:48  dah31
 * Initial revision
 *
 *                                                                   *
 *********************************************************************/

#ifndef MOUSEWHEEL_H
#define MOUSEWHEEL_H

#include <exec/exec.h>

#define MW_VERSION "1.0"
#define MOUSEWHEEL_VERSION "$VER: MouseWheel " MW_VERSION " (14.5.98)"

#define DEBUGLEVEL 1

#if (DEBUGLEVEL >= 1)
#define D(x) (x)
#if (DEBUGLEVEL >= 2)
#define D2(x) (x)
#else  /* DEBUGLEVEL < 2 */
#define D2(x)
#endif  /* DEBUGLEVEL >= 2 */
#else  /* DEBUGLEVEL < 1 */
#define D(x)
#endif  /* DEBUGLEVEL >= 1 */

#define bug(x) printf(x)

#define MOUSEWHEEL_CHILD_NAME "MouseWheel_child_task"
#define MOUSEWHEEL_SERVER_NAME "MouseWheel_server_task"
#define MOUSEWHEEL_PORTNAME "MouseWheel port"
#define MOUSEWHEEL_SIGNALS_PORTNAME "MouseWheel signals port"
#define MW_WHEEL_UP   (+1)
#define MW_WHEEL_DOWN (-1)
#define MW_WHEEL_UP_KEY   (0x7a)  /* these are unused and unreserved at the moment */
#define MW_WHEEL_DOWN_KEY (0x7b)
#define IECLASS_MOUSEWHEEL (0x16)  /* IECLASS_MAX + 1 as of V40 */ 
#define MOUSEWHEEL_CHILD_STACK_SIZE 4000
#define MOUSEWHEEL_SERVER_STACK_SIZE 4000

/* message types */
#define MOUSEWHEEL_NEW_CLIENT          (1)  /* a new client application supplying its handler */
#define MOUSEWHEEL_SIGNALS             (2)  /* exchage of signals and MsgPort between parent and child */
#define MOUSEWHEEL_FUNCTION            (3)  /* exchange of handler between parent and child */
#define MOUSEWHEEL_EVENT               (4)  /* needs wheel_event */
#define MOUSEWHEEL_CLIENT_QUITTING     (5)  /* needs handler (as ID) */
#define MOUSEWHEEL_DRIVER_QUITTING     (6)  /* no data */
#define MOUSEWHEEL_CHILD_TASK_QUITTING (7)  /* no data */

struct mousewheel_message {
  struct Message message;
  UBYTE type;
  union {
    struct Task *task;
    struct {
      UBYTE wheel_up_sigbit;
      UBYTE wheel_down_sigbit;
      UBYTE quit_sigbit;
    } signals;
    ULONG wheel_event;
    VOID (*handler)(LONG);  /* the function that receives wheel events (deprecated) */
    struct MsgPort *msg_port;
  } content;
};

#endif /* MOUSEWHEEL_H */
