winhelp: Fixed JumpId and JumpKeyword with correct signature and implementation.
authorEric Pouech <eric.pouech@orange.fr>
Tue, 22 Apr 2008 20:00:32 +0000 (22:00 +0200)
committerAlexandre Julliard <julliard@winehq.org>
Wed, 23 Apr 2008 10:27:13 +0000 (12:27 +0200)
programs/winhelp/macro.c
programs/winhelp/macro.h

index 85b19ce220976575e99e0a2a5d63df8ee0c845be..2ff1ad27e78e7af6da07a5746d857c4fbb62a45e 100644 (file)
@@ -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);
index b8f736b43b5dbdd2ce96cbc2e79d06ee01664ca0..ee1fd69b5610c6901455587730b7f9fee6d9b90e 100644 (file)
@@ -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);