diff --git a/dlls/hhctrl.ocx/hhctrl.c b/dlls/hhctrl.ocx/hhctrl.c index 8268a21f34b..c8ae0a1c872 100644 --- a/dlls/hhctrl.ocx/hhctrl.c +++ b/dlls/hhctrl.ocx/hhctrl.c @@ -272,12 +272,42 @@ HWND WINAPI HtmlHelpA(HWND caller, LPCSTR filename, UINT command, DWORD_PTR data int WINAPI doWinMain(HINSTANCE hInstance, LPSTR szCmdLine) { MSG msg; - int len, buflen; + int len, buflen, mapid = -1; WCHAR *filename; char *endq = NULL; hh_process = TRUE; + /* Parse command line option of the HTML Help command. + * + * Note: The only currently handled action is "mapid", + * which corresponds to opening a specific page. + */ + while(*szCmdLine == '-') + { + LPSTR space, ptr; + + ptr = szCmdLine + 1; + space = strchr(ptr, ' '); + if(!strncmp(ptr, "mapid", space-ptr)) + { + char idtxt[10]; + + ptr += strlen("mapid")+1; + space = strchr(ptr, ' '); + memcpy(idtxt, ptr, space-ptr); + idtxt[space-ptr] = '\0'; + filename += (space-ptr)+1; + mapid = atoi(idtxt); + szCmdLine = space+1; + } + else + { + FIXME("Unhandled HTML Help command line parameter! (%.*s)\n", space-szCmdLine, szCmdLine); + return 0; + } + } + /* FIXME: Check szCmdLine for bad arguments */ if (*szCmdLine == '\"') endq = strchr(++szCmdLine, '\"'); @@ -291,7 +321,11 @@ int WINAPI doWinMain(HINSTANCE hInstance, LPSTR szCmdLine) MultiByteToWideChar(CP_ACP, 0, szCmdLine, len, filename, buflen); filename[buflen-1] = 0; - HtmlHelpW(GetDesktopWindow(), filename, HH_DISPLAY_TOPIC, 0); + /* Open a specific help topic */ + if(mapid != -1) + HtmlHelpW(GetDesktopWindow(), filename, HH_HELP_CONTEXT, mapid); + else + HtmlHelpW(GetDesktopWindow(), filename, HH_DISPLAY_TOPIC, 0); heap_free(filename);