unit Input;

INTERFACE
uses Exec, Timer;


type
	pInputEvent = ^tInputEvent;
	tInputEvent = record
		ie_NextEvent: pInputEvent;
		ie_Class: byte;
		ie_SubClass: byte;
		ie_Code: word;
		ie_Qualifier: word;
		case integer of
		0: (
		ie_X: integer;
		ie_Y: integer;
		);
		1: (
		ie_EventAddress: pointer;
		);
		2: (
		ie_Prev1DownCode: byte;
		ie_Prev1DownQual: byte;
		ie_Prev2DownCode: byte;
		ie_Prev2DownQual: byte;
		ie_TimeStamp: ttimeval;
		);
		end;

	pIEPointerTablet = ^tIEPointerTablet;
	tIEPointerTablet = record
		iept_Range: record
		X: word;
		Y: word;
		end;
		iept_Value: record
		X: word;
		Y: word;
		end;
		iept_Pressure: integer;
		end;

	pIEPointerPixel = ^tIEPointerPixel;
	tIEPointerPixel = record
		iepp_Screen: pointer;
		iepp_Position: record
		X: integer;
		Y: integer;
		end;
		end;



var
	InputBase: pLibrary;


const
	IECODE_REQCLEAR = 0;
	IEQUALIFIER_LALT = $10;
	IECLASS_DISKINSERTED = $10;
	IND_SETTHRESH = $C;
	IECLASS_REQUESTER = 9;
	IECODE_KEY_CODE_FIRST = 0;
	IEQUALIFIERB_NUMERICPAD = 8;
	IECLASS_MENUHELP = $14;
	IEQUALIFIER_RALT = $20;
	IEQUALIFIERB_CONTROL = 3;
	IECODE_C0_FIRST = 0;
	IEQUALIFIERB_MULTIBROADCAST = $B;
	IECLASS_ACTIVEWINDOW = $11;
	IECODE_C1_FIRST = $80;
	IEQUALIFIER_INTERRUPT = $400;
	IEQUALIFIERB_REPEAT = 9;
	IND_ADDHANDLER = 9;
	IECLASS_NEWPOINTERPOS = $13;
	IECLASS_NULL = 0;
	IECLASS_NEWPREFS = $E;
	IECODE_LATIN1_FIRST = $A0;
	IESUBCLASS_PIXEL = 1;
	IECODE_KEY_CODE_LAST = $77;
	IEQUALIFIERB_RBUTTON = $D;
	IEQUALIFIERB_LSHIFT = 0;
	IECLASS_MENULIST = $A;
	IECLASS_RAWMOUSE = 2;
	IECLASS_DISKREMOVED = $F;
	IEQUALIFIERB_RSHIFT = 1;
	IND_SETMTRIG = $10;
	IECODE_C0_LAST = $1F;
	IECODE_C1_LAST = $9F;
	IECODE_UP_PREFIX = $80;
	IECLASS_MAX = $15;
	IECODE_LATIN1_LAST = $FF;
	IEQUALIFIERB_LEFTBUTTON = $E;
	IECODE_REFRESH = 3;
	IECLASS_GADGETDOWN = 7;
	IEQUALIFIER_NUMERICPAD = $100;
	IND_SETMTYPE = $F;
	IND_REMHANDLER = $A;
	IECODE_NOBUTTON = $FF;
	IEQUALIFIER_CONTROL = 8;
	IND_SETMPORT = $E;
	IECLASS_CLOSEWINDOW = $B;
	IEQUALIFIER_MULTIBROADCAST = $800;
	IEQUALIFIER_REPEAT = $200;
	IEQUALIFIERB_LCOMMAND = 6;
	IEQUALIFIERB_CAPSLOCK = 2;
	IECODE_ASCII_FIRST = $20;
	IEQUALIFIER_RBUTTON = $2000;
	IEQUALIFIERB_RCOMMAND = 7;
	IEQUALIFIERB_MIDBUTTON = $C;
	IEQUALIFIERB_RELATIVEMOUSE = $F;
	IEQUALIFIER_LSHIFT = 1;
	IECODE_NEWSIZE = 2;
	IECLASS_INACTIVEWINDOW = $12;
	IECODE_LBUTTON = $68;
	IEQUALIFIER_RSHIFT = 2;
	IECODE_MBUTTON = $6A;
	IESUBCLASS_COMPATIBLE = 0;
	IEQUALIFIERB_LALT = 4;
	IECLASS_RAWKEY = 1;
	IECODE_RBUTTON = $69;
	IECODE_COMM_CODE_FIRST = $78;
	IEQUALIFIER_LEFTBUTTON = $4000;
	IECODE_ASCII_LAST = $7E;
	IEQUALIFIERB_RALT = 5;
	IESUBCLASS_TABLET = 2;
	IECODE_ASCII_DEL = $7F;
	IEQUALIFIERB_INTERRUPT = $A;
	IECODE_REQSET = 1;
	IEQUALIFIER_LCOMMAND = $40;
	IND_WRITEEVENT = $B;
	IECLASS_POINTERPOS = 4;
	IECLASS_SIZEWINDOW = $C;
	IECODE_COMM_CODE_LAST = $7F;
	IECLASS_TIMER = 6;
	IECODE_NEWACTIVE = 1;
	IECLASS_EVENT = 3;
	IEQUALIFIER_CAPSLOCK = 4;
	IEQUALIFIER_RCOMMAND = $80;
	IEQUALIFIER_MIDBUTTON = $1000;
	IEQUALIFIER_RELATIVEMOUSE = $8000;
	IECLASS_CHANGEWINDOW = $15;
	IND_SETPERIOD = $D;
	IECLASS_GADGETUP = 8;
	IECLASS_REFRESHWINDOW = $D;


function PeekQualifier: word;


IMPLEMENTATION
function PeekQualifier; xassembler;
asm
	movem.l	d5-d7/a2/a6,-(sp)
	move.l	InputBase,a6
	jsr		-$2A(a6)
	move.w	d0,$18(sp)
	movem.l	(sp)+,d5-d7/a2/a6
end;

end.
