home *** CD-ROM | disk | FTP | other *** search
- /* LORD OF HOSTS - joymouse.c --- Maus-Joystick-Umschalter */
-
- #include "Lord.h"
-
- extern struct IOStdReq *IOReq;
- extern ULONG JoyMouseData;
- BOOL joymouse_on;
- struct Interrupt Input_Handler;
- #pragma regcall(JoyMouseHandler(a0,a1)) /* dann brauche ich keinen Assembler-
- Stub für die Parameter */
-
- struct InputEvent *JoyMouseHandler (struct InputEvent *Event, ULONG *Data)
- /* Dies ist das Stück Interrupt-Code, das sich jede Mausbewegung schnappt,
- bevor Intuition selbst drankommt, sie "streckt" (und alle anderen Events
- durchläßt) */
- {
- if (Event->ie_Class == IECLASS_RAWMOUSE)
- {
- Event->ie_X *= *Data;
- Event->ie_Y *= *Data;
- }
- return Event;
- }
-
- void swapjoymouse(BOOL what)
- /* swapjoymouse(TRUE) schaltet Joymouse an, FALSE dagegen aus */
- {
- UBYTE Type,Port;
- if (what == TRUE)
- {
- Type = GPCT_RELJOYSTICK; /* Joystick als Eingabegerät */
- Port = 1; /* am Gameport 2 */
- Input_Handler.is_Code = (VOID (*)())JoyMouseHandler;
- Input_Handler.is_Data = (APTR) &JoyMouseData;
- Input_Handler.is_Node.ln_Pri = 51;
- IOReq->io_Data = (APTR) &Input_Handler;
- IOReq->io_Command = (UWORD) IND_ADDHANDLER;
- DoIO((struct IORequest *)IOReq); /* Handler einbinden */
- }
- else
- {
- Type = GPCT_MOUSE; /* Maus als Eingabegerät */
- Port = 0; /* am Gameport 1 */
- IOReq->io_Data = (APTR) &Input_Handler;
- IOReq->io_Command = (UWORD) IND_REMHANDLER;
- DoIO((struct IORequest *)IOReq); /* Handler entfernen */
- }
-
- /* Port wechseln */
- IOReq->io_Data = (APTR) &Port;
- IOReq->io_Length = 1;
- IOReq->io_Command = (UWORD) IND_SETMPORT;
- DoIO((struct IORequest *)IOReq);
-
- /* Controllertyp umschalten */
- IOReq->io_Data = (APTR) &Type;
- IOReq->io_Length = 1;
- IOReq->io_Command = (UWORD) IND_SETMTYPE;
- DoIO((struct IORequest *)IOReq);
- joymouse_on = what;
- }
-