#ifndef DEVICES_INPUTEVENT_H #define DEVICES_INPUTEVENT_H /* ** $VER: inputevent.h 36.10 (26.6.1992) ** Includes Release 44.1 ** ** input event definitions ** ** (C) Copyright 1985-1999 Amiga, Inc. ** All Rights Reserved */ #ifndef DEVICES_TIMER_H #include <devices/timer.h> #endif #ifndef UTILITY_HOOKS_H #include <utility/hooks.h> #endif #ifndef UTILITY_TAGITEM_H #include <utility/tagitem.h> #endif /*----- constants --------------------------------------------------*/ /* --- InputEvent.ie_Class --- */ /* A NOP input event */ #define IECLASS_NULL 0x00 /* A raw keycode from the keyboard device */ #define IECLASS_RAWKEY 0x01 /* The raw mouse report from the game port device */ #define IECLASS_RAWMOUSE 0x02 /* A private console event */ #define IECLASS_EVENT 0x03 /* A Pointer Position report */ #define IECLASS_POINTERPOS 0x04 /* A timer event */ #define IECLASS_TIMER 0x06 /* select button pressed down over a Gadget (address in ie_EventAddress) */ #define IECLASS_GADGETDOWN 0x07 /* select button released over the same Gadget (address in ie_EventAddress) */ #define IECLASS_GADGETUP 0x08 /* some Requester activity has taken place. See Codes REQCLEAR and REQSET */ #define IECLASS_REQUESTER 0x09 /* this is a Menu Number transmission (Menu number is in ie_Code) */ #define IECLASS_MENULIST 0x0A /* User has selected the active Window's Close Gadget */ #define IECLASS_CLOSEWINDOW 0x0B /* this Window has a new size */ #define IECLASS_SIZEWINDOW 0x0C /* the Window pointed to by ie_EventAddress needs to be refreshed */ #define IECLASS_REFRESHWINDOW 0x0D /* new preferences are available */ #define IECLASS_NEWPREFS 0x0E /* the disk has been removed */ #define IECLASS_DISKREMOVED 0x0F /* the disk has been inserted */ #define IECLASS_DISKINSERTED 0x10 /* the window is about to be been made active */ #define IECLASS_ACTIVEWINDOW 0x11 /* the window is about to be made inactive */ #define IECLASS_INACTIVEWINDOW 0x12 /* extended-function pointer position report (V36) */ #define IECLASS_NEWPOINTERPOS 0x13 /* Help key report during Menu session (V36) */ #define IECLASS_MENUHELP 0x14 /* the Window has been modified with move, size, zoom, or change (V36) */ #define IECLASS_CHANGEWINDOW 0x15 /* the last class */ #define IECLASS_MAX 0x15 /* --- InputEvent.ie_SubClass --- */ /* IECLASS_NEWPOINTERPOS */ /* like IECLASS_POINTERPOS */ #define IESUBCLASS_COMPATIBLE 0x00 /* ie_EventAddress points to struct IEPointerPixel */ #define IESUBCLASS_PIXEL 0x01 /* ie_EventAddress points to struct IEPointerTablet */ #define IESUBCLASS_TABLET 0x02 /* ie_EventAddress points to struct IENewTablet */ #define IESUBCLASS_NEWTABLET 0x03 /* pointed to by ie_EventAddress for IECLASS_NEWPOINTERPOS, * and IESUBCLASS_PIXEL. * * You specify a screen and pixel coordinates in that screen * at which you'd like the mouse to be positioned. * Intuition will try to oblige, but there will be restrictions * to positioning the pointer over offscreen pixels. * * IEQUALIFIER_RELATIVEMOUSE is supported for IESUBCLASS_PIXEL. */ struct IEPointerPixel { struct Screen *iepp_Screen; /* pointer to an open screen */ struct { /* pixel coordinates in iepp_Screen */ WORD X; WORD Y; } iepp_Position; }; /* pointed to by ie_EventAddress for IECLASS_NEWPOINTERPOS, * and IESUBCLASS_TABLET. * * You specify a range of values and a value within the range * independently for each of X and Y (the minimum value of * the ranges is always normalized to 0). * * Intuition will position the mouse proportionally within its * natural mouse position rectangle limits. * * IEQUALIFIER_RELATIVEMOUSE is not supported for IESUBCLASS_TABLET. */ struct IEPointerTablet { struct { UWORD X; UWORD Y; } iept_Range; /* 0 is min, these are max */ struct { UWORD X; UWORD Y; } iept_Value; /* between 0 and iept_Range */ WORD iept_Pressure; /* -128 to 127 (unused, set to 0) */ }; /* The ie_EventAddress of an IECLASS_NEWPOINTERPOS event of subclass * IESUBCLASS_NEWTABLET points at an IENewTablet structure. * * * IEQUALIFIER_RELATIVEMOUSE is not supported for IESUBCLASS_NEWTABLET. */ struct IENewTablet { /* Pointer to a hook you wish to be called back through, in * order to handle scaling. You will be provided with the * width and height you are expected to scale your tablet * to, perhaps based on some user preferences. * If NULL, the tablet's specified range will be mapped directly * to that width and height for you, and you will not be * called back. */ struct Hook *ient_CallBack; /* Post-scaling coordinates and fractional coordinates. * DO NOT FILL THESE IN AT THE TIME THE EVENT IS WRITTEN! * Your driver will be called back and provided information * about the width and height of the area to scale the * tablet into. It should scale the tablet coordinates * (perhaps based on some preferences controlling aspect * ratio, etc.) and place the scaled result into these * fields. The ient_ScaledX and ient_ScaledY fields are * in screen-pixel resolution, but the origin ( [0,0]-point ) * is not defined. The ient_ScaledXFraction and * ient_ScaledYFraction fields represent sub-pixel position * information, and should be scaled to fill a UWORD fraction. */ UWORD ient_ScaledX, ient_ScaledY; UWORD ient_ScaledXFraction, ient_ScaledYFraction; /* Current tablet coordinates along each axis: */ ULONG ient_TabletX, ient_TabletY; /* Tablet range along each axis. For example, if ient_TabletX * can take values 0-999, ient_RangeX should be 1000. */ ULONG ient_RangeX, ient_RangeY; /* Pointer to tag-list of additional tablet attributes. * See <intuition/intuition.h> for the tag values. */ struct TagItem *ient_TagList; }; /* --- InputEvent.ie_Code --- */ /* IECLASS_RAWKEY */ #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 /* IECLASS_ANSI */ #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 /* IECLASS_RAWMOUSE */ #define IECODE_LBUTTON 0x68 /* also uses IECODE_UP_PREFIX */ #define IECODE_RBUTTON 0x69 #define IECODE_MBUTTON 0x6A #define IECODE_NOBUTTON 0xFF /* IECLASS_EVENT (V36) */ #define IECODE_NEWACTIVE 0x01 /* new active input window */ #define IECODE_NEWSIZE 0x02 /* resize of window */ #define IECODE_REFRESH 0x03 /* refresh of window */ /* IECLASS_REQUESTER */ /* broadcast when the first Requester (not subsequent ones) opens up in */ /* the Window */ #define IECODE_REQSET 0x01 /* broadcast when the last Requester clears out of the Window */ #define IECODE_REQCLEAR 0x00 /* --- InputEvent.ie_Qualifier --- */ #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 /*----- InputEvent -------------------------------------------------*/ struct InputEvent { struct InputEvent *ie_NextEvent; /* the chronologically next event */ UBYTE ie_Class; /* the input event class */ UBYTE ie_SubClass; /* optional subclass of the class */ UWORD ie_Code; /* the input event code */ UWORD ie_Qualifier; /* qualifiers in effect for the event*/ union { struct { WORD ie_x; /* the pointer position for the event*/ WORD ie_y; } ie_xy; APTR ie_addr; /* the event address */ struct { UBYTE ie_prev1DownCode; /* previous down keys for dead */ UBYTE ie_prev1DownQual; /* key translation: the ie_Code */ UBYTE ie_prev2DownCode; /* & low byte of ie_Qualifier for */ UBYTE ie_prev2DownQual; /* last & second last down keys */ } ie_dead; } ie_position; struct timeval ie_TimeStamp; /* the system tick at the event */ }; #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 /* DEVICES_INPUTEVENT_H */