diff --git a/programs/winhelp/macro.c b/programs/winhelp/macro.c index 85b19ce2209..2ff1ad27e78 100644 --- a/programs/winhelp/macro.c +++ b/programs/winhelp/macro.c @@ -110,7 +110,7 @@ static struct MacroDesc MACRO_Builtins[] = { {"JumpContext", "JC", 0, "SSU", (FARPROC)MACRO_JumpContext}, {"JumpHash", "JH", 0, "SSU", (FARPROC)MACRO_JumpHash}, {"JumpHelpOn", NULL, 0, "", (FARPROC)MACRO_JumpHelpOn}, - {"JumpID", "JI", 0, "SSS", (FARPROC)MACRO_JumpID}, + {"JumpID", "JI", 0, "SS", (FARPROC)MACRO_JumpID}, {"JumpKeyword", "JK", 0, "SSS", (FARPROC)MACRO_JumpKeyword}, {"KLink", "KL", 0, "SUSS", (FARPROC)MACRO_KLink}, {"Menu", "MU", 0, "", (FARPROC)MACRO_Menu}, @@ -654,15 +654,32 @@ void CALLBACK MACRO_JumpHelpOn(void) WINE_FIXME("()\n"); } -/* FIXME: those two macros are wrong - * they should only contain 2 strings, path & window are coded as path>window - */ -void CALLBACK MACRO_JumpID(LPCSTR lpszPath, LPCSTR lpszWindow, LPCSTR topic_id) +void CALLBACK MACRO_JumpID(LPCSTR lpszPathWindow, LPCSTR topic_id) { - WINE_TRACE("(\"%s\", \"%s\", \"%s\")\n", lpszPath, lpszWindow, topic_id); - MACRO_JumpHash(lpszPath, lpszWindow, HLPFILE_Hash(topic_id)); + LPSTR ptr; + + WINE_TRACE("(\"%s\", \"%s\")\n", lpszPathWindow, topic_id); + if ((ptr = strchr(lpszPathWindow, '>')) != NULL) + { + LPSTR tmp; + size_t sz = ptr - lpszPathWindow; + + tmp = HeapAlloc(GetProcessHeap(), 0, sz + 1); + if (tmp) + { + memcpy(tmp, lpszPathWindow, sz); + tmp[sz] = '\0'; + MACRO_JumpHash(tmp, ptr + 1, HLPFILE_Hash(topic_id)); + HeapFree(GetProcessHeap(), 0, tmp); + } + } + else + MACRO_JumpHash(lpszPathWindow, NULL, HLPFILE_Hash(topic_id)); } +/* FIXME: this macros is wrong + * it should only contain 2 strings, path & window are coded as path>window + */ void CALLBACK MACRO_JumpKeyword(LPCSTR lpszPath, LPCSTR lpszWindow, LPCSTR keyword) { WINE_FIXME("(\"%s\", \"%s\", \"%s\")\n", lpszPath, lpszWindow, keyword); diff --git a/programs/winhelp/macro.h b/programs/winhelp/macro.h index b8f736b43b5..ee1fd69b561 100644 --- a/programs/winhelp/macro.h +++ b/programs/winhelp/macro.h @@ -98,7 +98,7 @@ void CALLBACK MACRO_JumpContents(LPCSTR, LPCSTR); void CALLBACK MACRO_JumpContext(LPCSTR, LPCSTR, LONG); void CALLBACK MACRO_JumpHash(LPCSTR, LPCSTR, LONG); void CALLBACK MACRO_JumpHelpOn(void); -void CALLBACK MACRO_JumpID(LPCSTR, LPCSTR, LPCSTR); +void CALLBACK MACRO_JumpID(LPCSTR, LPCSTR); void CALLBACK MACRO_JumpKeyword(LPCSTR, LPCSTR, LPCSTR); void CALLBACK MACRO_KLink(LPCSTR, LONG, LPCSTR, LPCSTR); void CALLBACK MACRO_Menu(void);