/****************************************************************** * HtmlHelpA (HHCTRL.OCX.14) */ HWND WINAPI HtmlHelpA(HWND caller, LPCSTR filename, UINT command, DWORD_PTR data) { WCHAR *wfile = NULL, *wdata = NULL; DWORD len; HWND result; if (filename) { len = MultiByteToWideChar( CP_ACP, 0, filename, -1, NULL, 0 ); wfile = heap_alloc(len*sizeof(WCHAR)); MultiByteToWideChar( CP_ACP, 0, filename, -1, wfile, len ); } if (data) { switch(command) { case HH_ALINK_LOOKUP: case HH_DISPLAY_SEARCH: case HH_DISPLAY_TEXT_POPUP: case HH_GET_LAST_ERROR: case HH_GET_WIN_TYPE: case HH_KEYWORD_LOOKUP: case HH_SET_WIN_TYPE: case HH_SYNC: FIXME("structures not handled yet\n"); break; case HH_DISPLAY_INDEX: case HH_DISPLAY_TOPIC: case HH_DISPLAY_TOC: case HH_GET_WIN_HANDLE: case HH_SAFE_DISPLAY_TOPIC: len = MultiByteToWideChar( CP_ACP, 0, (const char*)data, -1, NULL, 0 ); wdata = heap_alloc(len*sizeof(WCHAR)); MultiByteToWideChar( CP_ACP, 0, (const char*)data, -1, wdata, len ); break; case HH_CLOSE_ALL: case HH_HELP_CONTEXT: case HH_INITIALIZE: case HH_PRETRANSLATEMESSAGE: case HH_TP_HELP_CONTEXTMENU: case HH_TP_HELP_WM_HELP: case HH_UNINITIALIZE: /* either scalar or pointer to scalar - do nothing */ break; default: FIXME("Unknown command: %s (%d)\n", command_to_string(command), command); break; } } result = HtmlHelpW( caller, wfile, command, wdata ? (DWORD_PTR)wdata : data ); heap_free(wfile); heap_free(wdata); return result; }
HWND CWnd::HtmlHelp(UINT uCommand,DWORD_PTR dwData,LPCWSTR szHelpFile) { if (szHelpFile==NULL) szHelpFile=GetApp()->m_szHelpFile; if (szHelpFile!=NULL) { if (FirstCharIndex(szHelpFile,L'\\')!=-1) { if (IsUnicodeSystem()) return HtmlHelpW(m_hWnd,szHelpFile,uCommand,dwData); else return HtmlHelpA(m_hWnd,W2A(szHelpFile),uCommand,dwData); } // Insert path if (IsUnicodeSystem()) { CStringW sExeName=GetApp()->GetExeNameW(); return HtmlHelpW(*this,sExeName.Left(sExeName.FindLast(L'\\')+1)+szHelpFile, uCommand,dwData); } CString sExeName=GetApp()->GetExeName(); return HtmlHelpA(*this,sExeName.Left(sExeName.FindLast(L'\\')+1)+szHelpFile, uCommand,dwData); } if (IsUnicodeSystem()) { CStringW sExeName=GetApp()->GetExeNameW(); return HtmlHelpW(*this,sExeName.Left(sExeName.FindLast(L'.')+1)+L"chm", uCommand,dwData); } CString sExeName=GetApp()->GetExeName(); return HtmlHelpA(*this,sExeName.Left(sExeName.FindLast(L'.')+1)+"chm", uCommand,dwData); }
/* * Open the help dialog and show a specific HTML help page. */ void help_topic_html(const gchar *topic) { GString *url; /* try to open local .chm file */ #ifdef HHC_DIR HWND hw; url = g_string_new(""); g_string_append_printf(url, "%s\\user-guide.chm::/wsug_chm/%s>Wireshark Help", get_datafile_dir(), topic); hw = HtmlHelpW(NULL, utf_8to16(url->str), HH_DISPLAY_TOPIC, 0); g_string_free(url, TRUE /* free_segment */); /* if the .chm file could be opened, stop here */ if(hw != NULL) { return; } #endif /* HHC_DIR */ url = g_string_new(""); #ifdef DOC_DIR if (g_file_test(DOC_DIR "/guides/wsug_html_chunked", G_FILE_TEST_IS_DIR)) { /* try to open the HTML page from wireshark.org instead */ g_string_append_printf(url, "file://" DOC_DIR "/guides/wsug_html_chunked/%s", topic); } else { #endif /* ifdef DOC_DIR */ /* try to open the HTML page from wireshark.org instead */ g_string_append_printf(url, "http://www.wireshark.org/docs/wsug_html_chunked/%s", topic); #ifdef DOC_DIR } #endif /* ifdef DOC_DIR */ browser_open_url(url->str); g_string_free(url, TRUE /* free_segment */); }
/* * Given a filename return a filesystem URL. Relative paths are prefixed with * the datafile directory path. */ gchar * data_file_url(const gchar *filename) { gchar *file_path; gchar *uri; /* Absolute path? */ #ifdef G_OS_WIN32 if((strlen(filename) > 2) && (filename[1] == ':')) { file_path = g_strdup(filename); #else if((strlen(filename) > 1) && (filename[0] == '/')) { file_path = g_strdup(filename); #endif } else if(running_in_build_directory()) { file_path = g_strdup_printf("%s/doc/%s", get_datafile_dir(), filename); } else { file_path = g_strdup_printf("%s/%s", get_datafile_dir(), filename); } /* XXX - check, if the file is really existing, otherwise display a simple_dialog about the problem */ /* convert filename to uri */ uri = g_filename_to_uri(file_path, NULL, NULL); g_free(file_path); return uri; } const char * topic_online_url(topic_action_e action) { switch(action) { case(ONLINEPAGE_HOME): return "http://www.wireshark.org"; break; case(ONLINEPAGE_WIKI): return "http://wiki.wireshark.org"; break; case(ONLINEPAGE_DOWNLOAD): return "http://www.wireshark.org/download.html"; break; case(ONLINEPAGE_USERGUIDE): return "http://www.wireshark.org/docs/wsug_html_chunked/"; break; case(ONLINEPAGE_FAQ): return "http://www.wireshark.org/faq.html"; break; case(ONLINEPAGE_ASK): return "http://ask.wireshark.org"; break; case(ONLINEPAGE_SAMPLE_FILES): return "http://wiki.wireshark.org/SampleCaptures"; break; case(ONLINEPAGE_CAPTURE_SETUP): return "http://wiki.wireshark.org/CaptureSetup"; break; case(ONLINEPAGE_NETWORK_MEDIA): return "http://wiki.wireshark.org/CaptureSetup/NetworkMedia"; break; case(ONLINEPAGE_SAMPLE_CAPTURES): return "http://wiki.wireshark.org/SampleCaptures"; break; case(ONLINEPAGE_SECURITY): return "http://wiki.wireshark.org/Security"; break; case(ONLINEPAGE_CHIMNEY): return "http://wiki.wireshark.org/CaptureSetup/Offloading#chimney"; break; default: return NULL; } } /* * Open the help dialog and show a specific HTML help page. */ gchar * user_guide_url(const gchar *page) { GString *url = g_string_new(""); gchar *ug_url = NULL; /* * Try to open local .chm file. This is not the most intuitive way to * go about this but it fits in with the rest of the _url functions. */ #ifdef HHC_DIR HWND hw; g_string_printf(url, "%s\\user-guide.chm::/wsug_chm/%s>Wireshark Help", get_datafile_dir(), page); hw = HtmlHelpW(NULL, utf_8to16(url->str), HH_DISPLAY_TOPIC, 0); /* if the .chm file could be opened, stop here */ if(hw != NULL) { g_string_free(url, TRUE /* free_segment */); return NULL; } #endif /* HHC_DIR */ #ifdef DOC_DIR if (g_file_test(DOC_DIR "/guides/wsug_html_chunked", G_FILE_TEST_IS_DIR)) { /* try to open the HTML page from wireshark.org instead */ g_string_printf(url, "file://" DOC_DIR "/guides/wsug_html_chunked/%s", page); } else { #endif /* ifdef DOC_DIR */ /* try to open the HTML page from wireshark.org instead */ g_string_printf(url, "http://www.wireshark.org/docs/wsug_html_chunked/%s", page); #ifdef DOC_DIR } #endif /* ifdef DOC_DIR */ ug_url = url->str; g_string_free(url, FALSE); return ug_url; }
/****************************************************************** * doWinMain (HHCTRL.OCX.13) */ int WINAPI doWinMain(HINSTANCE hInstance, LPSTR szCmdLine) { MSG msg; 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, ' '); /* command line ends without number */ if (!space) return 0; memcpy(idtxt, ptr, space-ptr); idtxt[space-ptr] = '\0'; mapid = atoi(idtxt); szCmdLine = space+1; } else { FIXME("Unhandled HTML Help command line parameter! (%.*s)\n", (int)(space-szCmdLine), szCmdLine); return 0; } } /* FIXME: Check szCmdLine for bad arguments */ if (*szCmdLine == '\"') endq = strchr(++szCmdLine, '\"'); if (endq) len = endq - szCmdLine; else len = strlen(szCmdLine); /* no filename given */ if (!len) return 0; buflen = MultiByteToWideChar(CP_ACP, 0, szCmdLine, len, NULL, 0) + 1; filename = heap_alloc(buflen * sizeof(WCHAR)); MultiByteToWideChar(CP_ACP, 0, szCmdLine, len, filename, buflen); filename[buflen-1] = 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); while (GetMessageW(&msg, 0, 0, 0)) { TranslateMessage(&msg); DispatchMessageW(&msg); } return 0; }
static int OnCommand(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (LOWORD(wParam)) { case CMD_OPEN: { LoadClipboardFromFile(); break; } case CMD_SAVE_AS: { SaveClipboardToFile(); break; } case CMD_EXIT: { PostMessageW(Globals.hMainWnd, WM_CLOSE, 0, 0); break; } case CMD_DELETE: { if (MessageBoxRes(Globals.hMainWnd, Globals.hInstance, STRING_DELETE_MSG, STRING_DELETE_TITLE, MB_ICONWARNING | MB_YESNO) != IDYES) { break; } DeleteClipboardContent(); break; } case CMD_AUTOMATIC: { SetDisplayFormat(0); break; } case CMD_HELP: { HtmlHelpW(Globals.hMainWnd, L"clipbrd.chm", 0, 0); break; } case CMD_ABOUT: { HICON hIcon; WCHAR szTitle[MAX_STRING_LEN]; hIcon = LoadIconW(Globals.hInstance, MAKEINTRESOURCE(CLIPBRD_ICON)); LoadStringW(Globals.hInstance, STRING_CLIPBOARD, szTitle, ARRAYSIZE(szTitle)); ShellAboutW(Globals.hMainWnd, szTitle, NULL, hIcon); DeleteObject(hIcon); break; } default: { break; } } return 0; }