123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- /*
- * Seven Kingdoms: Ancient Adversaries
- *
- * Copyright 1997,1998 Enlight Software Ltd.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- /***********************************************************************
- *
- * DMOUSE.VXD - DirectMouse
- *
- * this VxD lets a Win32 app get direct mouse input, without the windows
- * user interface filtering/mapping them.
- *
- * multiple apps can open DMOUSE.VXD, but it is assumes only
- * one app will be talking to DMOUSE at a time.
- *
- * example:
- * #include "dmouse.h"
- * h = DMouseOpen();
- * ....
- *
- * DMOUSE_STATE dm;
- * DMouseGetState(h, &dm);
- *
- * if (dm.mouse_dx || dm.mouse_dy)
- * mouse has moved
- *
- * if (dm.mouse_state & MOUSE_BUTTON_DOWN_MASK)
- * mouse has gone down (from last call)
- *
- * if (dm.mouse_state & MOUSE_BUTTON_UP_MASK)
- * mouse has gone up (from last call)
- *
- * if (dm.mouse_state & MOUSE_BUTTON_ASYNC_MASK)
- * a mouse button is down now!
- *
- * ....
- * DMouseClose(h);
- *
- * ToddLa
- *
- ***********************************************************************/
- #ifndef __WINDOWS_
- #include <windows.h>
- #endif
- #define DMOUSE_VXD "\\\\.\\DMOUSE.VXD"
- #define DMOUSE_GET_STATE 1
- #define DMOUSE_GET_STATE_PTR 2
- /***********************************************************************
- * DMOUSE_STATE
- *
- * mouse_dx - delta (in mickeys) that the mouse has moved in x
- * mouse_dy - delta (in mickeys) that the mouse has moved in y
- * mouse_state - contains the current state of the mouse buttons
- * contains the buttons that have gone up (from last query)
- * contains the buttons that have gone down (from last query)
- *
- ***********************************************************************/
- struct DMOUSE_STATE
- {
- DWORD mouse_delta_x;
- DWORD mouse_delta_y;
- DWORD mouse_state;
- };
- #define MOUSE_STATE_CHANGE 0x80000000
- #define MOUSE_BUTTON_ASYNC_MASK 0x0000000F
- #define MOUSE_BUTTON1_ASYNC 0x00000008
- #define MOUSE_BUTTON2_ASYNC 0x00000004
- #define MOUSE_BUTTON3_ASYNC 0x00000002
- #define MOUSE_BUTTON4_ASYNC 0x00000001
- #define MOUSE_BUTTON_DOWN_MASK 0x00000F00
- #define MOUSE_BUTTON1_DOWN 0x00000800
- #define MOUSE_BUTTON2_DOWN 0x00000400
- #define MOUSE_BUTTON3_DOWN 0x00000200
- #define MOUSE_BUTTON4_DOWN 0x00000100
- #define MOUSE_BUTTON_UP_MASK 0x0000F000
- #define MOUSE_BUTTON1_UP 0x00008000
- #define MOUSE_BUTTON2_UP 0x00004000
- #define MOUSE_BUTTON3_UP 0x00002000
- #define MOUSE_BUTTON4_UP 0x00001000
- /***********************************************************************
- *
- * DMouseOpen
- *
- * open a instance of the DMOUSE VxD and return you a handle
- *
- ***********************************************************************/
- __inline HANDLE DMouseOpen()
- {
- HANDLE h;
- h = CreateFile(DMOUSE_VXD, GENERIC_READ, FILE_SHARE_READ, NULL,
- OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, NULL);
- if (h == INVALID_HANDLE_VALUE)
- return NULL;
- return h;
- }
- /***********************************************************************
- *
- * DMouseClose
- *
- * close a instance of the DMOUSE VxD
- *
- ***********************************************************************/
- __inline void DMouseClose(HANDLE h)
- {
- if (h != NULL && h != INVALID_HANDLE_VALUE)
- CloseHandle(h);
- }
- /***********************************************************************
- *
- * DMouseGetState
- *
- * read the current mouse state.
- *
- * this will return the amount the mouse has moved from the last time
- * you called this service. (mouse_delta_x, mouse_delta_y)
- *
- * if a button has gone down from the last time you called this
- * service the associated bit (MOUSE_BUTTONx_DOWN) will be set in
- * mouse_state
- *
- * if a button has gone up from the last time you called this
- * service the associated bit (MOUSE_BUTTONx_UP) will be set in
- * mouse_state
- *
- * if a button is down right now the associated bit (MOUSE_BUTTONx_ASYNC)
- * will be set in mouse_state
- *
- ***********************************************************************/
- __inline BOOL DMouseGetState(HANDLE h, DMOUSE_STATE *p)
- {
- DWORD cb;
- if (h == NULL || h == INVALID_HANDLE_VALUE)
- return FALSE;
- return DeviceIoControl(h, DMOUSE_GET_STATE,
- NULL, 0, p, sizeof(DMOUSE_STATE), &cb, 0);
- }
- /***********************************************************************
- *
- * DMouseGetStatePointer
- *
- * returns a pointer to the internal "live" MOUSE_STATE
- *
- * in general it is better to use DMouseGetState, but this
- * service is useful for "peeking" at the button state quickly
- *
- * to determine if the mouse state has changed, you need to look
- * at the MOUSE_STATE_CHANGE bit in mouse_state.
- *
- ***********************************************************************/
- __inline DMOUSE_STATE * DMouseGetStatePointer(HANDLE h)
- {
- DWORD cb;
- DMOUSE_STATE *p = NULL;
- if (h == NULL || h == INVALID_HANDLE_VALUE)
- return NULL;
- DeviceIoControl(h, DMOUSE_GET_STATE_PTR,
- NULL, 0, &p, sizeof(p), &cb, 0);
- return p;
- }
|