From: Big Blue Gnu <imccluney@comcast.net> - /programs/winevdm/winevdm.c - /dlls/winex11.drv/keyboard.c --- dlls/winex11.drv/keyboard.c | 5 ++++- programs/winevdm/winevdm.c | 9 ++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c index 668a25b1345..c998ef6cce5 100644 --- a/dlls/winex11.drv/keyboard.c +++ b/dlls/winex11.drv/keyboard.c @@ -2986,7 +2986,10 @@ INT X11DRV_ToUnicodeEx( UINT virtKey, UINT scanCode, const BYTE *lpKeyState, { if (((keysym>=33) && (keysym < '@')) || (keysym == '`') || - (keysym == XK_Tab)) + (keysym == XK_Tab)) || + (keysym == XK_KP_Add) || + (keysym == XK_KP_Subtract) || + (keysym == XK_KP_Multiply) { lpChar[0] = 0; ret = 0; diff --git a/programs/winevdm/winevdm.c b/programs/winevdm/winevdm.c index f51e7cc9ca9..fda69367643 100644 --- a/programs/winevdm/winevdm.c +++ b/programs/winevdm/winevdm.c @@ -289,7 +289,7 @@ static VOID pif_cmd( char *filename, char *cmdline) MessageBoxA( NULL, buf, "16 bit DOS subsystem", MB_OK|MB_ICONWARNING); } /* search for the program */ - if( !SearchPathA( NULL, progname, NULL, MAX_PATH, progpath, NULL )) { + if( !SearchPathA( NULL, filename, NULL, MAX_PATH, progpath, NULL )) { sprintf( buf, "%s\nInvalid program file name. Check your pif file.", filename); MessageBoxA( NULL, buf, "16 bit DOS subsystem", MB_OK|MB_ICONERROR); @@ -302,6 +302,13 @@ static VOID pif_cmd( char *filename, char *cmdline) /* if no arguments on the commandline, use them from the pif file */ if( !cmdline[0] && optparams[0]) cmdline = optparams; + if( (p = strrchr( progpath, '\\'))) + *p = '\0'; + if( !(p = strrchr( progname, '\\'))) { + memmove( progname + 1, progname, strlen(progname) + 1); + progname[0] = '\\'; + } + strcat( progpath, p ? p : progname); /* FIXME: do something with: * - close on exit * - graphic modes -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11315