X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Fmouse.h;h=27577d193542c8e72a5dfb9333515721b2e76f24;hb=fa69f3198276011816bc34af62b4258d0a236a3a;hp=92eec80c362442c4771f80e0cc1140f5370082be;hpb=3dc0fb59bc1b5a80202fd2d03c3e39ebebfc0773;p=cc65 diff --git a/include/mouse.h b/include/mouse.h index 92eec80c3..27577d193 100644 --- a/include/mouse.h +++ b/include/mouse.h @@ -6,10 +6,12 @@ /* */ /* */ /* */ -/* (C) 1999-2001 Ullrich von Bassewitz */ -/* Wacholderweg 14 */ -/* D-70597 Stuttgart */ -/* EMail: uz@musoftware.de */ +/* (C) 2003-2011, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* */ +/* */ /* */ /* */ /* This software is provided 'as-is', without any expressed or implied */ @@ -38,26 +40,19 @@ -/* Define __MOUSE__ for systems that support a mouse */ -#if defined(__ATARI__) || defined(__C64__) || defined(__C128__) || defined(__CBM510__) -# define __MOUSE__ -#else -# error The target system does not support a mouse! -# endif - - - /*****************************************************************************/ /* Definitions */ /*****************************************************************************/ -/* The different mouse types */ -#define MOUSE_TRAKBALL 0 -#define MOUSE_ST 1 -#define MOUSE_AMIGA 2 -#define MOUSE_CBM1351 3 /* 1351 mouse */ +/* Error codes */ +#define MOUSE_ERR_OK 0 /* No error */ +#define MOUSE_ERR_NO_DRIVER 1 /* No driver available */ +#define MOUSE_ERR_CANNOT_LOAD 2 /* Error loading driver */ +#define MOUSE_ERR_INV_DRIVER 3 /* Invalid driver */ +#define MOUSE_ERR_NO_DEVICE 4 /* Mouse hardware not found */ +#define MOUSE_ERR_INV_IOCTL 5 /* Invalid ioctl code */ /* Mouse button masks */ #define MOUSE_BTN_LEFT 0x10 @@ -65,8 +60,8 @@ /* Structure containing the mouse coordinates */ struct mouse_pos { - int x; - int y; + int x; + int y; }; /* Structure containing information about the mouse */ @@ -75,6 +70,43 @@ struct mouse_info { unsigned char buttons; /* Mouse button mask */ }; +/* Structure used for getbox/setbox */ +struct mouse_box { + int minx; + int miny; + int maxx; + int maxy; +}; + +/* Structure containing mouse callback functions. These functions are declared + * in C notation here, but they cannot be C functions (at least not easily), + * since they may be called from within an interrupt. + */ +struct mouse_callbacks { + + void (*hide) (void); + /* Hide the mouse cursor. */ + + void (*show) (void); + /* Show the mouse cursor */ + + void __fastcall__ (*movex) (int x); + /* Move the mouse cursor to the new X coordinate. This function is called, + * even when the cursor is currently invisible. + */ + + void __fastcall__ (*movey) (int y); + /* Move the mouse cursor to the new Y coordinate. This function is called, + * even when the cursor is currently invisible. + */ +}; + +/* The default mouse callbacks */ +extern const struct mouse_callbacks mouse_def_callbacks; + +/* The name of the standard mouse driver for a platform */ +extern const char mouse_stddrv[]; + /*****************************************************************************/ @@ -83,47 +115,33 @@ struct mouse_info { -unsigned char __fastcall__ mouse_init (unsigned char type); -/* Setup the mouse interrupt handler. The mouse routines will use a predefined - * system resource for the mouse port and mouse cursor: - * C64: Port #0, Sprite #0 - * C128: Port #0, Sprite #0 - * GEOS: System defined port, Sprite #0 - * Atari: Port #0, PM #0 - * However, the mouse routines will not initialize this cursor or set a - * specific shape - this is platform dependent and up to the user program. - * The mouse cursor is moved if the mouse is moved (provided that the mouse - * cursor is visible), and switched on and off in the show and hide functions. - * The type parameter is needed on some systems to determine the type of - * the mouse connected to the given port, on others it is ignored. - * After calling this function, the mouse is invisble, the cursor is placed - * at 0/0 (upper left corner), and the bounding box is reset to cover the - * whole screen. Call mouse_show once to make the mouse cursor visible. - * The function will return zero if a mouse was not found and a non zero - * value if the mouse was found and initialized (or if there is no way to - * detect a mouse reliably). - */ +unsigned char __fastcall__ mouse_load_driver (const struct mouse_callbacks* c, + const char* driver); +/* Load and install a mouse driver, return an error code. */ -void __fastcall__ mouse_done (void); -/* Disable the mouse, remove the interrupt handler. This function MUST be - * called before terminating the program, otherwise odd things may happen. - * If in doubt, install an exit handler (using atexit) that calls this - * function. - */ +unsigned char mouse_unload (void); +/* Uninstall, then unload the currently loaded driver. */ + +unsigned char __fastcall__ mouse_install (const struct mouse_callbacks* c, + void* driver); +/* Install an already loaded driver. Returns an error code. */ -void __fastcall__ mouse_hide (void); -/* Hide the mouse. This function doesn't do anything visible if no sprite is - * used. The function manages a counter and may be called more than once. - * For each call to mouse_hide there must be a call to mouse_show to make +unsigned char mouse_uninstall (void); +/* Uninstall the currently loaded driver. Returns an error code. */ + +const char* __fastcall__ mouse_geterrormsg (unsigned char code); +/* Get an error message describing the error in code. */ + +void mouse_hide (void); +/* Hide the mouse. The function manages a counter and may be called more than + * once. For each call to mouse_hide there must be a call to mouse_show to make * the mouse visible again. */ -void __fastcall__ mouse_show (void); -/* Show the mouse. This function doesn't do anything visible if no sprite is - * used. See mouse_hide for more information. - */ +void mouse_show (void); +/* Show the mouse. See mouse_hide for more information. */ -void __fastcall__ mouse_box (int minx, int miny, int maxx, int maxy); +void __fastcall__ mouse_setbox (const struct mouse_box* box); /* Set the bounding box for the mouse pointer movement. The mouse X and Y * coordinates will never go outside the given box. * NOTE: The function does *not* check if the mouse is currently inside the @@ -135,10 +153,13 @@ void __fastcall__ mouse_box (int minx, int miny, int maxx, int maxy); * - Show the mouse again. * * NOTE2: When setting the box to something that is larger than the actual - * screen, the positioning of the mouse cursor will fail. If such margins + * screen, the positioning of the mouse cursor can fail. If such margins * are really what you want, you have to use your own cursor routines. */ +void __fastcall__ mouse_getbox (struct mouse_box* box); +/* Get the current bounding box for the mouse pointer movement. */ + void __fastcall__ mouse_move (int x, int y); /* Set the mouse cursor to the given position. If a mouse cursor is defined * and currently visible, the mouse cursor is also moved. @@ -146,7 +167,7 @@ void __fastcall__ mouse_move (int x, int y); * inside the bounding box. */ -unsigned char __fastcall__ mouse_buttons (void); +unsigned char mouse_buttons (void); /* Return a bit mask encoding the states of the mouse buttons. Use the * MOUSE_BTN_XXX flags to decode a specific button. */ @@ -157,6 +178,11 @@ void __fastcall__ mouse_pos (struct mouse_pos* pos); void __fastcall__ mouse_info (struct mouse_info* info); /* Return the state of the mouse buttons and the position of the mouse */ +unsigned char __fastcall__ mouse_ioctl (unsigned char code, void* data); +/* Call the driver specific ioctl function. NON PORTABLE! Returns an error + * code. + */ + /* End of mouse.h */