#ifndef DEVICES_INPUTEVENT_H
#define DEVICES_INPUTEVENT_H
/*
** $Filename: devices/inputevent.h $
** $Release: 2.04 Includes, V37.4 $
** $Revision: 36.7 $
** $Date: 91/01/22 $
**
** input event definitions
**
** (C) Copyright 1985-1991 Commodore-Amiga, Inc.
** All Rights Reserved
*/

#ifndef DEVICES_TIMER_H
#include "devices/timer.h"
#endif





#define IECLASS_NULL 0x00

#define IECLASS_RAWKEY 0x01

#define IECLASS_RAWMOUSE 0x02

#define IECLASS_EVENT 0x03

#define IECLASS_POINTERPOS 0x04

#define IECLASS_TIMER 0x06

#define IECLASS_GADGETDOWN 0x07

#define IECLASS_GADGETUP 0x08

#define IECLASS_REQUESTER 0x09

#define IECLASS_MENULIST 0x0A

#define IECLASS_CLOSEWINDOW 0x0B

#define IECLASS_SIZEWINDOW 0x0C

#define IECLASS_REFRESHWINDOW 0x0D

#define IECLASS_NEWPREFS 0x0E

#define IECLASS_DISKREMOVED 0x0F

#define IECLASS_DISKINSERTED 0x10

#define IECLASS_ACTIVEWINDOW 0x11

#define IECLASS_INACTIVEWINDOW 0x12

#define IECLASS_NEWPOINTERPOS 0x13

#define IECLASS_MENUHELP 0x14

#define IECLASS_CHANGEWINDOW 0x15


#define IECLASS_MAX 0x15





#define IESUBCLASS_COMPATIBLE 0x00

#define IESUBCLASS_PIXEL 0x01

#define IESUBCLASS_TABLET 0x02


struct IEPointerPixel {
 struct Screen *iepp_Screen; 
 struct { 
 WORD X;
 WORD Y;
 } iepp_Position;
};


struct IEPointerTablet {
 struct {
 UWORD X;
 UWORD Y;
 } iept_Range; 
 struct {
 UWORD X;
 UWORD Y;
 } iept_Value; 

 WORD iept_Pressure; 
};





#define IECODE_UP_PREFIX 0x80
#define IECODE_KEY_CODE_FIRST 0x00
#define IECODE_KEY_CODE_LAST 0x77
#define IECODE_COMM_CODE_FIRST 0x78
#define IECODE_COMM_CODE_LAST 0x7F


#define IECODE_C0_FIRST 0x00
#define IECODE_C0_LAST 0x1F
#define IECODE_ASCII_FIRST 0x20
#define IECODE_ASCII_LAST 0x7E
#define IECODE_ASCII_DEL 0x7F
#define IECODE_C1_FIRST 0x80
#define IECODE_C1_LAST 0x9F
#define IECODE_LATIN1_FIRST 0xA0
#define IECODE_LATIN1_LAST 0xFF


#define IECODE_LBUTTON 0x68 
#define IECODE_RBUTTON 0x69
#define IECODE_MBUTTON 0x6A
#define IECODE_NOBUTTON 0xFF


#define IECODE_NEWACTIVE 0x01 
#define IECODE_NEWSIZE 0x02 
#define IECODE_REFRESH 0x03 




#define IECODE_REQSET 0x01

#define IECODE_REQCLEAR 0x00




#define IEQUALIFIER_LSHIFT 0x0001
#define IEQUALIFIER_RSHIFT 0x0002
#define IEQUALIFIER_CAPSLOCK 0x0004
#define IEQUALIFIER_CONTROL 0x0008
#define IEQUALIFIER_LALT 0x0010
#define IEQUALIFIER_RALT 0x0020
#define IEQUALIFIER_LCOMMAND 0x0040
#define IEQUALIFIER_RCOMMAND 0x0080
#define IEQUALIFIER_NUMERICPAD 0x0100
#define IEQUALIFIER_REPEAT 0x0200
#define IEQUALIFIER_INTERRUPT 0x0400
#define IEQUALIFIER_MULTIBROADCAST 0x0800
#define IEQUALIFIER_MIDBUTTON 0x1000
#define IEQUALIFIER_RBUTTON 0x2000
#define IEQUALIFIER_LEFTBUTTON 0x4000
#define IEQUALIFIER_RELATIVEMOUSE 0x8000

#define IEQUALIFIERB_LSHIFT 0
#define IEQUALIFIERB_RSHIFT 1
#define IEQUALIFIERB_CAPSLOCK 2
#define IEQUALIFIERB_CONTROL 3
#define IEQUALIFIERB_LALT 4
#define IEQUALIFIERB_RALT 5
#define IEQUALIFIERB_LCOMMAND 6
#define IEQUALIFIERB_RCOMMAND 7
#define IEQUALIFIERB_NUMERICPAD 8
#define IEQUALIFIERB_REPEAT 9
#define IEQUALIFIERB_INTERRUPT 10
#define IEQUALIFIERB_MULTIBROADCAST 11
#define IEQUALIFIERB_MIDBUTTON 12
#define IEQUALIFIERB_RBUTTON 13
#define IEQUALIFIERB_LEFTBUTTON 14
#define IEQUALIFIERB_RELATIVEMOUSE 15



struct InputEvent {
 struct InputEvent *ie_NextEvent; 
 UBYTE ie_Class; 
 UBYTE ie_SubClass; 
 UWORD ie_Code; 
 UWORD ie_Qualifier; 
 union {
 struct {
 WORD ie_x; 
 WORD ie_y;
 } ie_xy;
 APTR ie_addr; 
 struct {
 UBYTE ie_prev1DownCode; 
 UBYTE ie_prev1DownQual; 
 UBYTE ie_prev2DownCode; 
 UBYTE ie_prev2DownQual; 
 } ie_dead;
 } ie_position;
 struct timeval ie_TimeStamp; 
};

#define ie_X ie_position.ie_xy.ie_x
#define ie_Y ie_position.ie_xy.ie_y
#define ie_EventAddress ie_position.ie_addr
#define ie_Prev1DownCode ie_position.ie_dead.ie_prev1DownCode
#define ie_Prev1DownQual ie_position.ie_dead.ie_prev1DownQual
#define ie_Prev2DownCode ie_position.ie_dead.ie_prev2DownCode
#define ie_Prev2DownQual ie_position.ie_dead.ie_prev2DownQual

#endif 
