From ab8d19c0db126642b10501e8b95e2507fe61abed Mon Sep 17 00:00:00 2001 From: patola Date: Mon, 22 Jun 2020 22:03:07 +0200 Subject: [PATCH] huge patch for joystick buttons and memory gap for SKSE --- dlls/joy.cpl/joy.h | 4 ++-- dlls/joy.cpl/main.c | 10 ++++++++++ dlls/ntdll/virtual.c | 4 ++-- dlls/winebus.sys/bus_sdl.c | 10 +++++----- dlls/winejoystick.drv/joystick_linux.c | 5 +++-- 5 files changed, 22 insertions(+), 11 deletions(-) diff --git a/dlls/joy.cpl/joy.h b/dlls/joy.cpl/joy.h index ec7af4f7879..672e8995e14 100644 --- a/dlls/joy.cpl/joy.h +++ b/dlls/joy.cpl/joy.h @@ -47,8 +47,8 @@ struct Joystick { struct Effect *effects; }; -#define TEST_MAX_BUTTONS 32 -#define TEST_MAX_AXES 4 +#define TEST_MAX_BUTTONS 64 +#define TEST_MAX_AXES 8 struct Graphics { HWND hwnd; diff --git a/dlls/joy.cpl/main.c b/dlls/joy.cpl/main.c index 4ad9cf848c3..35dba75978f 100644 --- a/dlls/joy.cpl/main.c +++ b/dlls/joy.cpl/main.c @@ -414,6 +414,16 @@ static DWORD WINAPI input_thread(void *param) axes_pos[1][1] = state.lRy; axes_pos[2][0] = state.lZ; axes_pos[2][1] = state.lRz; + axes_pos[3][0] = 0; + axes_pos[3][1] = 0; + axes_pos[4][0] = 0; + axes_pos[4][1] = 0; + axes_pos[5][0] = 0; + axes_pos[5][1] = 0; + axes_pos[6][0] = 0; + axes_pos[6][1] = 0; + axes_pos[7][0] = 0; + axes_pos[7][1] = 0; /* Set pov values */ for (j = 0; j < ARRAY_SIZE(pov_val); j++) diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c index 3adad2b04d5..1b89309cc51 100644 --- a/dlls/ntdll/virtual.c +++ b/dlls/ntdll/virtual.c @@ -1759,11 +1759,11 @@ static NTSTATUS map_image( HANDLE hmapping, ACCESS_MASK access, int fd, int top_ server_enter_uninterrupted_section( &csVirtual, &sigset ); if (base >= (char *)address_space_start) /* make sure the DOS area remains free */ - status = map_view( &view, base, total_size, 0, top_down, SEC_IMAGE | SEC_FILE | + status = map_view( &view, base, total_size, 0, TRUE, SEC_IMAGE | SEC_FILE | VPROT_COMMITTED | VPROT_READ | VPROT_EXEC | VPROT_WRITECOPY, zero_bits_64 ); if (status != STATUS_SUCCESS) - status = map_view( &view, NULL, total_size, 0, top_down, SEC_IMAGE | SEC_FILE | + status = map_view( &view, NULL, total_size, 0, TRUE, SEC_IMAGE | SEC_FILE | VPROT_COMMITTED | VPROT_READ | VPROT_EXEC | VPROT_WRITECOPY, zero_bits_64 ); if (status != STATUS_SUCCESS) goto error; diff --git a/dlls/winebus.sys/bus_sdl.c b/dlls/winebus.sys/bus_sdl.c index e24ab590ad3..1213185f98a 100644 --- a/dlls/winebus.sys/bus_sdl.c +++ b/dlls/winebus.sys/bus_sdl.c @@ -451,10 +451,10 @@ static BOOL build_report_descriptor(struct platform_private *ext) report_size = 0; axis_count = pSDL_JoystickNumAxes(ext->sdl_joystick); - if (axis_count > 6) + if (axis_count > 16) { - FIXME("Clamping joystick to 6 axis\n"); - axis_count = 6; + FIXME("Clamping joystick to 16 axis\n"); + axis_count = 16; } ext->axis_start = report_size; @@ -470,9 +470,9 @@ static BOOL build_report_descriptor(struct platform_private *ext) ext->ball_start = report_size; if (ball_count) { - if ((ball_count*2) + axis_count > 9) + if ((ball_count*2) + axis_count > 19) { - FIXME("Capping ball + axis at 9\n"); + FIXME("Capping ball + axis at 19\n"); ball_count = (9-axis_count)/2; } descript_size += sizeof(REPORT_AXIS_HEADER); diff --git a/dlls/winejoystick.drv/joystick_linux.c b/dlls/winejoystick.drv/joystick_linux.c index 8d1a7b1a25a..e579d99aa73 100644 --- a/dlls/winejoystick.drv/joystick_linux.c +++ b/dlls/winejoystick.drv/joystick_linux.c @@ -260,9 +260,9 @@ LRESULT driver_joyGetDevCaps(DWORD_PTR dwDevID, LPJOYCAPSW lpCaps, DWORD dwSize) lpCaps->wUmax = 0xFFFF; lpCaps->wVmin = 0; lpCaps->wVmax = 0xFFFF; - lpCaps->wMaxAxes = 6; /* same as MS Joystick Driver */ + lpCaps->wMaxAxes = 16; /* same as MS Joystick Driver */ lpCaps->wNumAxes = 0; /* nr of axes in use */ - lpCaps->wMaxButtons = 32; /* same as MS Joystick Driver */ + lpCaps->wMaxButtons = 64; /* same as MS Joystick Driver */ lpCaps->szRegKey[0] = 0; lpCaps->szOEMVxD[0] = 0; lpCaps->wCaps = 0; @@ -326,6 +326,7 @@ LRESULT driver_joyGetPosEx(DWORD_PTR dwDevID, LPJOYINFOEX lpInfo) switch (jstck->axesMap[ev.number]) { case 0: /* X */ case 8: /* Wheel */ + case 40: /* Mouse-like */ jstck->x = ev.value; break; case 1: /* Y */