home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
cbm
/
os-include.lha
/
os-include
/
devices
/
inputevent.h
< prev
next >
Wrap
C/C++ Source or Header
|
1993-10-15
|
10KB
|
288 lines
#ifndef DEVICES_INPUTEVENT_H
#define DEVICES_INPUTEVENT_H
/*
** $VER: inputevent.h 36.10 (26.6.92)
** Includes Release 40.15
**
** input event definitions
**
** (C) Copyright 1985-1993 Commodore-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 */