summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/windows/input.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/osd/windows/input.c')
-rw-r--r--src/osd/windows/input.c78
1 files changed, 40 insertions, 38 deletions
diff --git a/src/osd/windows/input.c b/src/osd/windows/input.c
index 08dbec1baa0..35fe03f5cdb 100644
--- a/src/osd/windows/input.c
+++ b/src/osd/windows/input.c
@@ -163,6 +163,8 @@ struct _rawinput_device_info
typedef struct _device_info device_info;
struct _device_info
{
+ running_machine &machine() const { assert(m_machine != NULL); return *m_machine; }
+
// device information
device_info ** head;
device_info * next;
@@ -170,7 +172,7 @@ struct _device_info
void (*poll)(device_info *info);
// MAME information
- running_machine * machine;
+ running_machine * m_machine;
input_device * device;
// device state
@@ -253,7 +255,7 @@ static void device_list_poll_devices(device_info *devlist_head);
static void device_list_reset_devices(device_info *devlist_head);
// generic device management
-static device_info *generic_device_alloc(running_machine *machine, device_info **devlist_head_ptr, const TCHAR *name);
+static device_info *generic_device_alloc(running_machine &machine, device_info **devlist_head_ptr, const TCHAR *name);
static void generic_device_free(device_info *devinfo);
static int generic_device_index(device_info *devlist_head, device_info *devinfo);
static void generic_device_reset(device_info *devinfo);
@@ -261,16 +263,16 @@ static INT32 generic_button_get_state(void *device_internal, void *item_internal
static INT32 generic_axis_get_state(void *device_internal, void *item_internal);
// Win32-specific input code
-static void win32_init(running_machine *machine);
+static void win32_init(running_machine &machine);
static void win32_exit(running_machine &machine);
static void win32_keyboard_poll(device_info *devinfo);
static void win32_lightgun_poll(device_info *devinfo);
// DirectInput-specific code
-static void dinput_init(running_machine *machine);
+static void dinput_init(running_machine &machine);
static void dinput_exit(running_machine &machine);
static HRESULT dinput_set_dword_property(LPDIRECTINPUTDEVICE device, REFGUID property_guid, DWORD object, DWORD how, DWORD value);
-static device_info *dinput_device_create(running_machine *machine, device_info **devlist_head_ptr, LPCDIDEVICEINSTANCE instance, LPCDIDATAFORMAT format1, LPCDIDATAFORMAT format2, DWORD cooperative_level);
+static device_info *dinput_device_create(running_machine &machine, device_info **devlist_head_ptr, LPCDIDEVICEINSTANCE instance, LPCDIDATAFORMAT format1, LPCDIDATAFORMAT format2, DWORD cooperative_level);
static void dinput_device_release(device_info *devinfo);
static char *dinput_device_item_name(device_info *devinfo, int offset, const TCHAR *defstring, const TCHAR *suffix);
static HRESULT dinput_device_poll(device_info *devinfo);
@@ -283,14 +285,14 @@ static void dinput_joystick_poll(device_info *devinfo);
static INT32 dinput_joystick_pov_get_state(void *device_internal, void *item_internal);
// RawInput-specific code
-static void rawinput_init(running_machine *machine);
+static void rawinput_init(running_machine &machine);
static void rawinput_exit(running_machine &machine);
-static device_info *rawinput_device_create(running_machine *machine, device_info **devlist_head_ptr, PRAWINPUTDEVICELIST device);
+static device_info *rawinput_device_create(running_machine &machine, device_info **devlist_head_ptr, PRAWINPUTDEVICELIST device);
static void rawinput_device_release(device_info *info);
static TCHAR *rawinput_device_improve_name(TCHAR *name);
-static void rawinput_keyboard_enum(running_machine *machine, PRAWINPUTDEVICELIST device);
+static void rawinput_keyboard_enum(running_machine &machine, PRAWINPUTDEVICELIST device);
static void rawinput_keyboard_update(HANDLE device, RAWKEYBOARD *data);
-static void rawinput_mouse_enum(running_machine *machine, PRAWINPUTDEVICELIST device);
+static void rawinput_mouse_enum(running_machine &machine, PRAWINPUTDEVICELIST device);
static void rawinput_mouse_update(HANDLE device, RAWMOUSE *data);
static void rawinput_mouse_poll(device_info *devinfo);
@@ -446,7 +448,7 @@ static const int win_key_trans_table[][4] =
// INLINE FUNCTIONS
//============================================================
-INLINE void poll_if_necessary(running_machine *machine)
+INLINE void poll_if_necessary(running_machine &machine)
{
// make sure we poll at least once every 1/4 second
if (GetTickCount() > last_poll + 1000 / 4)
@@ -497,19 +499,19 @@ INLINE INT32 normalize_absolute_axis(INT32 raw, INT32 rawmin, INT32 rawmax)
// wininput_init
//============================================================
-void wininput_init(running_machine *machine)
+void wininput_init(running_machine &machine)
{
// we need pause and exit callbacks
- machine->add_notifier(MACHINE_NOTIFY_PAUSE, wininput_pause);
- machine->add_notifier(MACHINE_NOTIFY_RESUME, wininput_resume);
- machine->add_notifier(MACHINE_NOTIFY_EXIT, wininput_exit);
+ machine.add_notifier(MACHINE_NOTIFY_PAUSE, wininput_pause);
+ machine.add_notifier(MACHINE_NOTIFY_RESUME, wininput_resume);
+ machine.add_notifier(MACHINE_NOTIFY_EXIT, wininput_exit);
// allocate a lock for input synchronizations, since messages sometimes come from another thread
input_lock = osd_lock_alloc();
assert_always(input_lock != NULL, "Failed to allocate input_lock");
// decode the options
- lightgun_shared_axis_mode = downcast<windows_options &>(machine->options()).dual_lightgun();
+ lightgun_shared_axis_mode = downcast<windows_options &>(machine.options()).dual_lightgun();
// initialize RawInput and DirectInput (RawInput first so we can fall back)
rawinput_init(machine);
@@ -559,7 +561,7 @@ static void wininput_exit(running_machine &machine)
// wininput_poll
//============================================================
-void wininput_poll(running_machine *machine)
+void wininput_poll(running_machine &machine)
{
int hasfocus = winwindow_has_focus() && input_enabled;
@@ -809,7 +811,7 @@ static void device_list_reset_devices(device_info *devlist_head)
// generic_device_alloc
//============================================================
-static device_info *generic_device_alloc(running_machine *machine, device_info **devlist_head_ptr, const TCHAR *name)
+static device_info *generic_device_alloc(running_machine &machine, device_info **devlist_head_ptr, const TCHAR *name)
{
device_info **curdev_ptr;
device_info *devinfo;
@@ -817,7 +819,7 @@ static device_info *generic_device_alloc(running_machine *machine, device_info *
// allocate memory for the device object
devinfo = global_alloc_clear(device_info);
devinfo->head = devlist_head_ptr;
- devinfo->machine = machine;
+ devinfo->m_machine = &machine;
// allocate a UTF8 copy of the name
devinfo->name = utf8_from_tstring(name);
@@ -913,7 +915,7 @@ static INT32 generic_button_get_state(void *device_internal, void *item_internal
BYTE *itemdata = (BYTE *)item_internal;
// return the current state
- poll_if_necessary(devinfo->machine);
+ poll_if_necessary(devinfo->machine());
return *itemdata >> 7;
}
@@ -928,7 +930,7 @@ static INT32 generic_axis_get_state(void *device_internal, void *item_internal)
LONG *axisdata = (LONG *)item_internal;
// return the current state
- poll_if_necessary(devinfo->machine);
+ poll_if_necessary(devinfo->machine());
return *axisdata;
}
@@ -937,7 +939,7 @@ static INT32 generic_axis_get_state(void *device_internal, void *item_internal)
// win32_init
//============================================================
-static void win32_init(running_machine *machine)
+static void win32_init(running_machine &machine)
{
int gunnum;
@@ -946,7 +948,7 @@ static void win32_init(running_machine *machine)
return;
// we need an exit callback
- machine->add_notifier(MACHINE_NOTIFY_EXIT, win32_exit);
+ machine.add_notifier(MACHINE_NOTIFY_EXIT, win32_exit);
// allocate two lightgun devices
for (gunnum = 0; gunnum < 2; gunnum++)
@@ -1069,7 +1071,7 @@ static void win32_lightgun_poll(device_info *devinfo)
// dinput_init
//============================================================
-static void dinput_init(running_machine *machine)
+static void dinput_init(running_machine &machine)
{
HRESULT result;
#if DIRECTINPUT_VERSION >= 0x800
@@ -1114,13 +1116,13 @@ static void dinput_init(running_machine *machine)
mame_printf_verbose("DirectInput: Using DirectInput %d\n", dinput_version >> 8);
// we need an exit callback
- machine->add_notifier(MACHINE_NOTIFY_EXIT, dinput_exit);
+ machine.add_notifier(MACHINE_NOTIFY_EXIT, dinput_exit);
// initialize keyboard devices, but only if we don't have any yet
if (keyboard_list == NULL)
{
// enumerate the ones we have
- result = IDirectInput_EnumDevices(dinput, didevtype_keyboard, dinput_keyboard_enum, machine, DIEDFL_ATTACHEDONLY);
+ result = IDirectInput_EnumDevices(dinput, didevtype_keyboard, dinput_keyboard_enum, &machine, DIEDFL_ATTACHEDONLY);
if (result != DI_OK)
fatalerror("DirectInput: Unable to enumerate keyboards (result=%08X)\n", (UINT32)result);
}
@@ -1129,13 +1131,13 @@ static void dinput_init(running_machine *machine)
if (mouse_list == NULL)
{
// enumerate the ones we have
- result = IDirectInput_EnumDevices(dinput, didevtype_mouse, dinput_mouse_enum, machine, DIEDFL_ATTACHEDONLY);
+ result = IDirectInput_EnumDevices(dinput, didevtype_mouse, dinput_mouse_enum, &machine, DIEDFL_ATTACHEDONLY);
if (result != DI_OK)
fatalerror("DirectInput: Unable to enumerate mice (result=%08X)\n", (UINT32)result);
}
// initialize joystick devices
- result = IDirectInput_EnumDevices(dinput, didevtype_joystick, dinput_joystick_enum, machine, DIEDFL_ATTACHEDONLY);
+ result = IDirectInput_EnumDevices(dinput, didevtype_joystick, dinput_joystick_enum, &machine, DIEDFL_ATTACHEDONLY);
if (result != DI_OK)
fatalerror("DirectInput: Unable to enumerate joysticks (result=%08X)\n", (UINT32)result);
}
@@ -1186,7 +1188,7 @@ static HRESULT dinput_set_dword_property(LPDIRECTINPUTDEVICE device, REFGUID pro
// dinput_device_create
//============================================================
-static device_info *dinput_device_create(running_machine *machine, device_info **devlist_head_ptr, LPCDIDEVICEINSTANCE instance, LPCDIDATAFORMAT format1, LPCDIDATAFORMAT format2, DWORD cooperative_level)
+static device_info *dinput_device_create(running_machine &machine, device_info **devlist_head_ptr, LPCDIDEVICEINSTANCE instance, LPCDIDATAFORMAT format1, LPCDIDATAFORMAT format2, DWORD cooperative_level)
{
device_info *devinfo;
HRESULT result;
@@ -1330,7 +1332,7 @@ static HRESULT dinput_device_poll(device_info *devinfo)
static BOOL CALLBACK dinput_keyboard_enum(LPCDIDEVICEINSTANCE instance, LPVOID ref)
{
- running_machine *machine = (running_machine *)ref;
+ running_machine &machine = *(running_machine *)ref;
device_info *devinfo;
int keynum;
@@ -1386,7 +1388,7 @@ static void dinput_keyboard_poll(device_info *devinfo)
static BOOL CALLBACK dinput_mouse_enum(LPCDIDEVICEINSTANCE instance, LPVOID ref)
{
device_info *devinfo, *guninfo = NULL;
- running_machine *machine = (running_machine *)ref;
+ running_machine &machine = *(running_machine *)ref;
int axisnum, butnum;
HRESULT result;
@@ -1489,7 +1491,7 @@ static BOOL CALLBACK dinput_joystick_enum(LPCDIDEVICEINSTANCE instance, LPVOID r
{
DWORD cooperative_level = DISCL_FOREGROUND | DISCL_EXCLUSIVE;
int axisnum, axiscount, povnum, butnum;
- running_machine *machine = (running_machine *)ref;
+ running_machine &machine = *(running_machine *)ref;
device_info *devinfo;
HRESULT result;
@@ -1623,7 +1625,7 @@ static INT32 dinput_joystick_pov_get_state(void *device_internal, void *item_int
DWORD pov;
// get the current state
- poll_if_necessary(devinfo->machine);
+ poll_if_necessary(devinfo->machine());
pov = devinfo->joystick.state.rgdwPOV[povnum];
// if invalid, return 0
@@ -1646,7 +1648,7 @@ static INT32 dinput_joystick_pov_get_state(void *device_internal, void *item_int
// rawinput_init
//============================================================
-static void rawinput_init(running_machine *machine)
+static void rawinput_init(running_machine &machine)
{
RAWINPUTDEVICELIST *devlist = NULL;
int device_count, devnum, regcount;
@@ -1654,7 +1656,7 @@ static void rawinput_init(running_machine *machine)
HMODULE user32;
// we need pause and exit callbacks
- machine->add_notifier(MACHINE_NOTIFY_EXIT, rawinput_exit);
+ machine.add_notifier(MACHINE_NOTIFY_EXIT, rawinput_exit);
// look in user32 for the raw input APIs
user32 = LoadLibrary(TEXT("user32.dll"));
@@ -1746,7 +1748,7 @@ static void rawinput_exit(running_machine &machine)
// rawinput_device_create
//============================================================
-static device_info *rawinput_device_create(running_machine *machine, device_info **devlist_head_ptr, PRAWINPUTDEVICELIST device)
+static device_info *rawinput_device_create(running_machine &machine, device_info **devlist_head_ptr, PRAWINPUTDEVICELIST device)
{
device_info *devinfo = NULL;
TCHAR *tname = NULL;
@@ -1950,7 +1952,7 @@ exit:
// rawinput_keyboard_enum
//============================================================
-static void rawinput_keyboard_enum(running_machine *machine, PRAWINPUTDEVICELIST device)
+static void rawinput_keyboard_enum(running_machine &machine, PRAWINPUTDEVICELIST device)
{
device_info *devinfo;
int keynum;
@@ -2015,7 +2017,7 @@ static void rawinput_keyboard_update(HANDLE device, RAWKEYBOARD *data)
// rawinput_mouse_enum
//============================================================
-static void rawinput_mouse_enum(running_machine *machine, PRAWINPUTDEVICELIST device)
+static void rawinput_mouse_enum(running_machine &machine, PRAWINPUTDEVICELIST device)
{
device_info *devinfo, *guninfo = NULL;
int axisnum, butnum;
@@ -2122,7 +2124,7 @@ static void rawinput_mouse_update(HANDLE device, RAWMOUSE *data)
static void rawinput_mouse_poll(device_info *devinfo)
{
- poll_if_necessary(devinfo->machine);
+ poll_if_necessary(devinfo->machine());
// copy the accumulated raw state to the actual state
osd_lock_acquire(input_lock);