diff options
author | Stephen Fisher <steve@stephen-fisher.com> | 2010-11-26 19:16:06 +0000 |
---|---|---|
committer | Stephen Fisher <steve@stephen-fisher.com> | 2010-11-26 19:16:06 +0000 |
commit | 587bd2724f872683e128d8fc25d316725078514b (patch) | |
tree | 09389fae230a9190ba4322f8a2218f69d5552ac5 /gtk | |
parent | d1108eebab96c2c43f50531d0b4702987ecca3a8 (diff) |
Move native Win32 code to its own directory and out of gtk directory (hopefully without breaking any builds)
svn path=/trunk/; revision=35032
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/Makefile.am | 4 | ||||
-rw-r--r-- | gtk/Makefile.nmake | 25 | ||||
-rw-r--r-- | gtk/file_dlg_win32.c | 1932 | ||||
-rw-r--r-- | gtk/file_dlg_win32.h | 155 | ||||
-rw-r--r-- | gtk/print_dlg.c | 4 | ||||
-rw-r--r-- | gtk/print_win32.c | 258 | ||||
-rw-r--r-- | gtk/print_win32.h | 38 |
7 files changed, 11 insertions, 2405 deletions
diff --git a/gtk/Makefile.am b/gtk/Makefile.am index e0367546dc..318d3b543d 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -98,12 +98,8 @@ EXTRA_DIST = \ capture_if_details_dlg_win32.c \ capture_if_details_dlg_win32.h \ doxygen.cfg.in \ - file_dlg_win32.c \ - file_dlg_win32.h \ libui.vcproj \ main_airpcap_toolbar.c \ Makefile.common \ Makefile.nmake \ - print_win32.c \ - print_win32.h \ CMakeLists.txt diff --git a/gtk/Makefile.nmake b/gtk/Makefile.nmake index 782a6b4fe8..a8233a60da 100644 --- a/gtk/Makefile.nmake +++ b/gtk/Makefile.nmake @@ -28,13 +28,11 @@ include Makefile.common # if you add files here, be sure to include them also in Makefile.am EXTRA_DIST -WIRESHARK_WIN32_GTK_SRC = \ +WIRESHARK_GTK_SRC = \ $(WIRESHARK_GTK_SRC) \ $(GENERATED_C_FILES) \ $(DIRTY_GENERATED_C_FILES) \ capture_if_details_dlg_win32.c \ - file_dlg_win32.c \ - print_win32.c \ !IFDEF PORTAUDIO_DIR !IF "$(PORTAUDIO_VERSION)" == "18" pa_lib.c \ @@ -59,11 +57,11 @@ WIRESHARK_WIN32_GTK_SRC = \ WIRESHARK_TAP_OBJECTS = $(WIRESHARK_TAP_SRC:.c=.obj) -WIRESHARK_WIN32_GTK_OBJECTS = $(WIRESHARK_WIN32_GTK_SRC:.c=.obj) +WIRESHARK_GTK_OBJECTS = $(WIRESHARK_GTK_SRC:.c=.obj) -libui.lib : ..\config.h $(WIRESHARK_WIN32_GTK_OBJECTS) $(WIRESHARK_TAP_OBJECTS) - link /lib /out:libui.lib $(WIRESHARK_WIN32_GTK_OBJECTS) $(WIRESHARK_TAP_OBJECTS) winmm.lib +libui.lib : ..\config.h $(WIRESHARK_GTK_OBJECTS) $(WIRESHARK_TAP_OBJECTS) + link /lib /out:libui.lib $(WIRESHARK_GTK_OBJECTS) $(WIRESHARK_TAP_OBJECTS) winmm.lib # The shell script runs slowly, as multiple greps and seds are run # for each input file; this is especially slow on Windows. Therefore, @@ -143,7 +141,7 @@ pa_win_waveformat.obj: $(PORTAUDIO_DIR)\src\os\win\pa_win_waveformat.c !ENDIF clean: - rm -f $(WIRESHARK_WIN32_GTK_OBJECTS) $(WIRESHARK_TAP_OBJECTS) libui.lib *.pdb doxygen.cfg html/*.* wireshark-tap-register-cache.pkl + rm -f $(WIRESHARK_GTK_OBJECTS) $(WIRESHARK_TAP_OBJECTS) libui.lib *.pdb doxygen.cfg html/*.* wireshark-tap-register-cache.pkl if exist html rmdir html distclean: clean @@ -177,16 +175,11 @@ checkapi: checkapi-base checkapi-todo checkapi-base: $(PERL) ../tools/checkAPIs.pl -g deprecated-gtk \ $(WIRESHARK_GTK_SRC) \ - $(WIRESHARK_TAP_SRC) \ - capture_if_details_dlg_win32.c \ - file_dlg_win32.c \ - print_win32.c + $(WIRESHARK_TAP_SRC) + capture_if_details_dlg_win32.c checkapi-todo: $(PERL) ../tools/checkAPIs.pl -M -g deprecated-gtk-todo \ $(WIRESHARK_GTK_SRC) \ - $(WIRESHARK_TAP_SRC) \ - capture_if_details_dlg_win32.c \ - file_dlg_win32.c \ - print_win32.c - + $(WIRESHARK_TAP_SRC) + capture_if_details_dlg_win32.c diff --git a/gtk/file_dlg_win32.c b/gtk/file_dlg_win32.c deleted file mode 100644 index 5f180b02c0..0000000000 --- a/gtk/file_dlg_win32.c +++ /dev/null @@ -1,1932 +0,0 @@ -/* win32-file-dlg.c - * Native Windows file dialog routines - * - * $Id$ - * - * Wireshark - Network traffic analyzer - * By Gerald Combs <gerald@wireshark.org> - * Copyright 2004 Gerald Combs - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include <stdio.h> -#include <tchar.h> -#include <wchar.h> -#include <stdlib.h> -#include <sys/stat.h> -#include <io.h> -#include <fcntl.h> - -#include <windows.h> -#include <windowsx.h> -#include <commdlg.h> -#include <richedit.h> - - -#include <gtk/gtk.h> - -#include "epan/filesystem.h" -#include "epan/addr_resolv.h" -#include "epan/prefs.h" -#include "wsutil/file_util.h" -#include "wsutil/unicode-utils.h" - -#include "../alert_box.h" -#include "../color.h" -#include "../print.h" -#include "../simple_dialog.h" -#include "../util.h" -#include "../color_filters.h" -#include "../merge.h" - -#include "gtk/file_dlg.h" -#include "gtk/capture_file_dlg.h" -#include "gtk/main.h" -#include "gtk/menus.h" -#include "gtk/drag_and_drop.h" -#include "gtk/capture_dlg.h" -#include "gtk/file_dlg_win32.h" -#include "gtk/help_dlg.h" - -typedef enum { - merge_append, - merge_chrono, - merge_prepend -} merge_action_e; - -#define FILE_OPEN_DEFAULT 1 /* All Files */ - -#define FILE_MERGE_DEFAULT FILE_OPEN_DEFAULT - -#define FILE_SAVE_DEFAULT 1 /* Wireshark/tcpdump */ - -#define FILE_TYPES_EXPORT \ - _T("Plain text (*.txt)\0") _T("*.txt\0") \ - _T("PostScript (*.ps)\0") _T("*.ps\0") \ - _T("CSV (Comma Separated Values summary) (*.csv)\0") _T("*.csv\0") \ - _T("PSML (XML packet summary) (*.psml)\0") _T("*.psml\0") \ - _T("PDML (XML packet detail) (*.pdml)\0") _T("*.pdml\0") \ - _T("C Arrays (packet bytes) (*.c)\0") _T("*.c\0") - -#define FILE_TYPES_RAW \ - _T("Raw data (*.bin, *.dat, *.raw)\0") _T("*.bin;*.dat;*.raw\0") \ - _T("All Files (*.*)\0") _T("*.*\0") - -#define FILE_RAW_DEFAULT 1 - -#define FILE_TYPES_COLOR \ - _T("Text Files (*.txt)\0") _T("*.txt\0") \ - _T("All Files (*.*)\0") _T("*.*\0") - -#define FILE_DEFAULT_COLOR 2 - -/* - * We should probably test the SDK version instead of the compiler version, - * but this should work for our purposes. - */ -#if (_MSC_VER <= 1200) -static UINT CALLBACK open_file_hook_proc(HWND of_hwnd, UINT ui_msg, WPARAM w_param, LPARAM l_param); -static UINT CALLBACK save_as_file_hook_proc(HWND of_hwnd, UINT ui_msg, WPARAM w_param, LPARAM l_param); -static UINT CALLBACK merge_file_hook_proc(HWND mf_hwnd, UINT ui_msg, WPARAM w_param, LPARAM l_param); -static UINT CALLBACK export_file_hook_proc(HWND of_hwnd, UINT ui_msg, WPARAM w_param, LPARAM l_param); -static UINT CALLBACK export_raw_file_hook_proc(HWND of_hwnd, UINT ui_msg, WPARAM w_param, LPARAM l_param); -#else -static UINT_PTR CALLBACK open_file_hook_proc(HWND of_hwnd, UINT ui_msg, WPARAM w_param, LPARAM l_param); -static UINT_PTR CALLBACK save_as_file_hook_proc(HWND of_hwnd, UINT ui_msg, WPARAM w_param, LPARAM l_param); -static UINT_PTR CALLBACK merge_file_hook_proc(HWND mf_hwnd, UINT ui_msg, WPARAM w_param, LPARAM l_param); -static UINT_PTR CALLBACK export_file_hook_proc(HWND of_hwnd, UINT ui_msg, WPARAM w_param, LPARAM l_param); -static UINT_PTR CALLBACK export_raw_file_hook_proc(HWND of_hwnd, UINT ui_msg, WPARAM w_param, LPARAM l_param); -#endif /* (_MSC_VER <= 1200) */ - -static void range_update_dynamics(HWND sf_hwnd, packet_range_t *range); -static void range_handle_wm_initdialog(HWND dlg_hwnd, packet_range_t *range); -static void range_handle_wm_command(HWND dlg_hwnd, HWND ctrl, WPARAM w_param, packet_range_t *range); - -static TCHAR *build_file_type_list(gboolean save, int *item_to_select); -static int file_type_from_list_index(gboolean save, int index); - -static int filetype; -static packet_range_t range; -static merge_action_e merge_action; -static print_args_t print_args; -/* XXX - The reason g_sf_hwnd exists is so that we can call - * range_update_dynamics() from anywhere; it's currently - * static, but if we move to using the native Windows - * print dialog and put range widgets in it as well, - * it might be moved to a separate file. - * - * However, the save file dialog hogs the foreground, so - * this may not be necessary (and, in fact, the file dialogs - * should arguably be modal to the window for the file - * being opened/saved/etc.). - */ -static HWND g_sf_hwnd = NULL; -static char *dfilter_str = NULL; - -gboolean -win32_open_file (HWND h_wnd) { - OPENFILENAME *ofn; - TCHAR file_name[MAX_PATH] = _T(""); - int err; - char *dirname; - dfilter_t *dfp; - int ofnsize; -#if (_MSC_VER >= 1500) - OSVERSIONINFO osvi; -#endif - - /* Remarks on OPENFILENAME_SIZE_VERSION_400: - * - * MSDN states that OPENFILENAME_SIZE_VERSION_400 should be used with - * WINVER and _WIN32_WINNT >= 0x0500. - * Unfortunately all these are compiler constants, while the underlying is a - * problem based is a length check of the runtime version used. - * - * Instead of using OPENFILENAME_SIZE_VERSION_400, just malloc - * the OPENFILENAME size plus 12 bytes. - * These 12 bytes are the difference between the two versions of this struct. - * - * Interestingly this fixes a bug, so the places bar e.g. "My Documents" - * is displayed - which wasn't the case with the former implementation. - * - * XXX - It's unclear if this length+12 works on all supported platforms, - * NT4 is the question here. However, even if it fails, we must calculate - * the length based on the runtime, not the compiler version anyway ... - */ - /* This assumption does not work when compiling with MSVC2008EE as - * the open dialog window does not appear. - * Instead detect Windows version at runtime and choose size accordingly */ -#if (_MSC_VER >= 1500) - ZeroMemory(&osvi, sizeof(OSVERSIONINFO)); - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&osvi); - if (osvi.dwMajorVersion >= 5) { - ofnsize = sizeof(OPENFILENAME); - } else { - ofnsize = OPENFILENAME_SIZE_VERSION_400; - } -#else - ofnsize = sizeof(OPENFILENAME) + 12; -#endif - ofn = g_malloc0(ofnsize); - - ofn->lStructSize = ofnsize; - ofn->hwndOwner = h_wnd; -#if (_MSC_VER <= 1200) - ofn->hInstance = (HINSTANCE) GetWindowLong(h_wnd, GWL_HINSTANCE); -#else - ofn->hInstance = (HINSTANCE) GetWindowLongPtr(h_wnd, GWLP_HINSTANCE); -#endif - ofn->lpstrFilter = build_file_type_list(FALSE /*!save*/, NULL); - ofn->lpstrCustomFilter = NULL; - ofn->nMaxCustFilter = 0; - ofn->nFilterIndex = FILE_OPEN_DEFAULT; - ofn->lpstrFile = file_name; - ofn->nMaxFile = MAX_PATH; - ofn->lpstrFileTitle = NULL; - ofn->nMaxFileTitle = 0; - if (prefs.gui_fileopen_style == FO_STYLE_SPECIFIED && prefs.gui_fileopen_dir[0] != '\0') { - ofn->lpstrInitialDir = utf_8to16(prefs.gui_fileopen_dir); - } else { - ofn->lpstrInitialDir = utf_8to16(get_last_open_dir()); - } - ofn->lpstrTitle = _T("Wireshark: Open Capture File"); - ofn->Flags = OFN_ENABLESIZING | OFN_ENABLETEMPLATE | OFN_EXPLORER | - OFN_NOCHANGEDIR | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | - OFN_ENABLEHOOK | OFN_SHOWHELP; - ofn->lpstrDefExt = NULL; - ofn->lpfnHook = open_file_hook_proc; - ofn->lpTemplateName = _T("WIRESHARK_OPENFILENAME_TEMPLATE"); - - if (GetOpenFileName(ofn)) { - g_free( (void *) ofn->lpstrFilter); - g_free( (void *) ofn); - - if (cf_open(&cfile, utf_16to8(file_name), FALSE, &err) != CF_OK) { - return FALSE; - } - - /* apply our filter */ - if (dfilter_compile(dfilter_str, &dfp)) { - cf_set_rfcode(&cfile, dfp); - } - - switch (cf_read(&cfile, FALSE)) { - case CF_READ_OK: - case CF_READ_ERROR: - dirname = get_dirname(utf_16to8(file_name)); - set_last_open_dir(dirname); - return TRUE; - break; - } - } else { - g_free( (void *) ofn->lpstrFilter); - g_free( (void *) ofn); - } - return FALSE; -} - - -void -win32_save_as_file(HWND h_wnd, action_after_save_e action_after_save, gpointer action_after_save_data) { - OPENFILENAME *ofn; - TCHAR file_name16[MAX_PATH] = _T(""); - GString *file_name8; - gchar *file_last_dot; - gchar *dirname; - int save_index; - int ofnsize; -#if (_MSC_VER >= 1500) - OSVERSIONINFO osvi; -#endif - - /* see OPENFILENAME comment in win32_open_file */ -#if (_MSC_VER >= 1500) - ZeroMemory(&osvi, sizeof(OSVERSIONINFO)); - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&osvi); - if (osvi.dwMajorVersion >= 5) { - ofnsize = sizeof(OPENFILENAME); - } else { - ofnsize = OPENFILENAME_SIZE_VERSION_400; - } -#else - ofnsize = sizeof(OPENFILENAME) + 12; -#endif - ofn = g_malloc0(ofnsize); - - ofn->lStructSize = ofnsize; - ofn->hwndOwner = h_wnd; -#if (_MSC_VER <= 1200) - ofn->hInstance = (HINSTANCE) GetWindowLong(h_wnd, GWL_HINSTANCE); -#else - ofn->hInstance = (HINSTANCE) GetWindowLongPtr(h_wnd, GWLP_HINSTANCE); -#endif - ofn->lpstrFilter = build_file_type_list(TRUE /*save*/, &save_index); - ofn->lpstrCustomFilter = NULL; - ofn->nMaxCustFilter = 0; - ofn->nFilterIndex = save_index; - ofn->lpstrFile = file_name16; - ofn->nMaxFile = MAX_PATH; - ofn->lpstrFileTitle = NULL; - ofn->nMaxFileTitle = 0; - ofn->lpstrInitialDir = utf_8to16(get_last_open_dir()); - ofn->lpstrTitle = _T("Wireshark: Save file as"); - ofn->Flags = OFN_ENABLESIZING | OFN_ENABLETEMPLATE | OFN_EXPLORER | - OFN_NOCHANGEDIR | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | - OFN_PATHMUSTEXIST | OFN_ENABLEHOOK | OFN_SHOWHELP; - ofn->lpstrDefExt = NULL; - ofn->lpfnHook = save_as_file_hook_proc; - ofn->lpTemplateName = _T("WIRESHARK_SAVEFILENAME_TEMPLATE"); - - if (GetSaveFileName(ofn)) { - filetype = file_type_from_list_index(TRUE /*save*/, ofn->nFilterIndex); - - /* append the default file extension if there's none given by the user */ - /* (we expect a file extension to be at most 5 chars + the dot) */ - file_name8 = g_string_new(utf_16to8(file_name16)); - file_last_dot = strrchr(file_name8->str,'.'); - if(file_last_dot == NULL || strlen(file_name8->str)-(file_last_dot-file_name8->str) > 5+1) { - if(wtap_file_extension_default_string(filetype) != NULL) { - file_name8 = g_string_append(file_name8, wtap_file_extension_default_string(filetype)); - } - } - - g_sf_hwnd = NULL; - /* Write out the packets (all, or only the ones from the current - range) to the file with the specified name. */ - - /* GetSaveFileName() already asked the user if he wants to overwrite the old file, */ - /* so if we are here, user already confirmed to overwrite - just delete the old file now. */ - ws_unlink(file_name8->str); /* XX: Windows Wireshark is built with GLIB >= 2.6 these */ - /* days so ws_unlink will properly convert the */ - /* UTF8 filename to UTF16 & then do a _wunlink. */ - - if (cf_save(&cfile, file_name8->str, &range, filetype, FALSE) != CF_OK) { - /* The write failed. Try again. */ - g_string_free(file_name8, TRUE /* free_segment */); - g_free( (void *) ofn->lpstrFilter); - g_free( (void *) ofn); - win32_save_as_file(h_wnd, action_after_save, action_after_save_data); - return; - } - - /* Save the directory name for future file dialogs. */ - dirname = get_dirname(file_name8->str); /* Overwrites cf_name */ - set_last_open_dir(dirname); - - g_string_free(file_name8, TRUE /* free_segment */); - - /* we have finished saving, do we have pending things to do? */ - switch(action_after_save) { - case(after_save_no_action): - break; - case(after_save_open_dialog): - win32_open_file(h_wnd); - break; - case(after_save_open_recent_file): - menu_open_recent_file_cmd(action_after_save_data); - break; - case(after_save_open_dnd_file): - dnd_open_file_cmd(action_after_save_data); - break; - case(after_save_merge_dialog): - win32_merge_file(h_wnd); - break; -#ifdef HAVE_LIBPCAP - case(after_save_capture_dialog): - capture_start_confirmed(); - break; -#endif - case(after_save_close_file): - cf_close(&cfile); - break; - case(after_save_exit): - main_do_quit(); - break; - default: - g_assert_not_reached(); - } - } - g_sf_hwnd = NULL; - g_free( (void *) ofn->lpstrFilter); - g_free( (void *) ofn); -} - - -void -win32_merge_file (HWND h_wnd) { - OPENFILENAME *ofn; - TCHAR file_name[MAX_PATH] = _T(""); - char *dirname; - cf_status_t merge_status; - char *in_filenames[2]; - int err; - char *tmpname; - dfilter_t *dfp; - int ofnsize; -#if (_MSC_VER >= 1500) - OSVERSIONINFO osvi; -#endif - - /* see OPENFILENAME comment in win32_open_file */ -#if (_MSC_VER >= 1500) - ZeroMemory(&osvi, sizeof(OSVERSIONINFO)); - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&osvi); - if (osvi.dwMajorVersion >= 5) { - ofnsize = sizeof(OPENFILENAME); - } else { - ofnsize = OPENFILENAME_SIZE_VERSION_400; - } -#else - ofnsize = sizeof(OPENFILENAME) + 12; -#endif - ofn = g_malloc0(ofnsize); - - ofn->lStructSize = ofnsize; - ofn->hwndOwner = h_wnd; -#if (_MSC_VER <= 1200) - ofn->hInstance = (HINSTANCE) GetWindowLong(h_wnd, GWL_HINSTANCE); -#else - ofn->hInstance = (HINSTANCE) GetWindowLongPtr(h_wnd, GWLP_HINSTANCE); -#endif - ofn->lpstrFilter = build_file_type_list(FALSE /*!save*/, NULL); - ofn->lpstrCustomFilter = NULL; - ofn->nMaxCustFilter = 0; - ofn->nFilterIndex = FILE_MERGE_DEFAULT; - ofn->lpstrFile = file_name; - ofn->nMaxFile = MAX_PATH; - ofn->lpstrFileTitle = NULL; - ofn->nMaxFileTitle = 0; - if (prefs.gui_fileopen_style == FO_STYLE_SPECIFIED && prefs.gui_fileopen_dir[0] != '\0') { - ofn->lpstrInitialDir = utf_8to16(prefs.gui_fileopen_dir); - } else { - ofn->lpstrInitialDir = utf_8to16(get_last_open_dir()); - } - ofn->lpstrTitle = _T("Wireshark: Merge with capture file"); - ofn->Flags = OFN_ENABLESIZING | OFN_ENABLETEMPLATE | OFN_EXPLORER | - OFN_NOCHANGEDIR | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | - OFN_ENABLEHOOK | OFN_SHOWHELP; - ofn->lpstrDefExt = NULL; - ofn->lpfnHook = merge_file_hook_proc; - ofn->lpTemplateName = _T("WIRESHARK_MERGEFILENAME_TEMPLATE"); - - if (GetOpenFileName(ofn)) { - filetype = cfile.cd_t; - g_free( (void *) ofn->lpstrFilter); - g_free( (void *) ofn); - - /* merge or append the two files */ - - tmpname = NULL; - switch (merge_action) { - case merge_append: - /* append file */ - in_filenames[0] = cfile.filename; - in_filenames[1] = utf_16to8(file_name); - merge_status = cf_merge_files(&tmpname, 2, in_filenames, filetype, TRUE); - break; - case merge_chrono: - /* chonological order */ - in_filenames[0] = cfile.filename; - in_filenames[1] = utf_16to8(file_name); - merge_status = cf_merge_files(&tmpname, 2, in_filenames, filetype, FALSE); - break; - case merge_prepend: - /* prepend file */ - in_filenames[0] = utf_16to8(file_name); - in_filenames[1] = cfile.filename; - merge_status = cf_merge_files(&tmpname, 2, in_filenames, filetype, TRUE); - break; - default: - g_assert_not_reached(); - } - - if(merge_status != CF_OK) { - /* merge failed */ - g_free(tmpname); - return; - } - - cf_close(&cfile); - - /* Try to open the merged capture file. */ - if (cf_open(&cfile, tmpname, TRUE /* temporary file */, &err) != CF_OK) { - /* We couldn't open it; don't dismiss the open dialog box, - just leave it around so that the user can, after they - dismiss the alert box popped up for the open error, - try again. */ - return; - } - - /* apply our filter */ - if (dfilter_compile(dfilter_str, &dfp)) { - cf_set_rfcode(&cfile, dfp); - } - - switch (cf_read(&cfile, FALSE)) { - case CF_READ_OK: - case CF_READ_ERROR: - dirname = get_dirname(utf_16to8(file_name)); - set_last_open_dir(dirname); - menu_name_resolution_changed(); - break; - case CF_READ_ABORTED: - break; - } - } else { - g_free( (void *) ofn->lpstrFilter); - g_free( (void *) ofn); - } -} - -void -win32_export_file(HWND h_wnd, export_type_e export_type) { - OPENFILENAME *ofn; - TCHAR file_name[MAX_PATH] = _T(""); - char *dirname; - cf_print_status_t status; - int ofnsize; -#if (_MSC_VER >= 1500) - OSVERSIONINFO osvi; -#endif - - /* see OPENFILENAME comment in win32_open_file */ -#if (_MSC_VER >= 1500) - ZeroMemory(&osvi, sizeof(OSVERSIONINFO)); - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&osvi); - if (osvi.dwMajorVersion >= 5) { - ofnsize = sizeof(OPENFILENAME); - } else { - ofnsize = OPENFILENAME_SIZE_VERSION_400; - } -#else - ofnsize = sizeof(OPENFILENAME) + 12; -#endif - ofn = g_malloc0(ofnsize); - - ofn->lStructSize = ofnsize; - ofn->hwndOwner = h_wnd; -#if (_MSC_VER <= 1200) - ofn->hInstance = (HINSTANCE) GetWindowLong(h_wnd, GWL_HINSTANCE); -#else - ofn->hInstance = (HINSTANCE) GetWindowLongPtr(h_wnd, GWLP_HINSTANCE); -#endif - ofn->lpstrFilter = FILE_TYPES_EXPORT; - ofn->lpstrCustomFilter = NULL; - ofn->nMaxCustFilter = 0; - ofn->nFilterIndex = export_type; - ofn->lpstrFile = file_name; - ofn->nMaxFile = MAX_PATH; - ofn->lpstrFileTitle = NULL; - ofn->nMaxFileTitle = 0; - ofn->lpstrInitialDir = utf_8to16(get_last_open_dir()); - ofn->lpstrTitle = _T("Wireshark: Export File"); - ofn->Flags = OFN_ENABLESIZING | OFN_ENABLETEMPLATE | OFN_EXPLORER | - OFN_NOCHANGEDIR | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | - OFN_PATHMUSTEXIST | OFN_ENABLEHOOK | OFN_SHOWHELP; - ofn->lpstrDefExt = NULL; - ofn->lpfnHook = export_file_hook_proc; - ofn->lpTemplateName = _T("WIRESHARK_EXPORTFILENAME_TEMPLATE"); - - /* Fill in our print (and export) args */ - - print_args.format = PR_FMT_TEXT; - print_args.to_file = TRUE; - print_args.cmd = NULL; - print_args.print_summary = TRUE; - print_args.print_dissections = print_dissections_as_displayed; - print_args.print_hex = FALSE; - print_args.print_formfeed = FALSE; - - if (GetSaveFileName(ofn)) { - print_args.file = utf_16to8(file_name); - switch (ofn->nFilterIndex) { - case export_type_text: /* Text */ - print_args.stream = print_stream_text_new(TRUE, print_args.file); - if (print_args.stream == NULL) { - open_failure_alert_box(print_args.file, errno, TRUE); - g_free( (void *) ofn); - return; - } - status = cf_print_packets(&cfile, &print_args); - break; - case export_type_ps: /* PostScript (r) */ - print_args.stream = print_stream_ps_new(TRUE, print_args.file); - if (print_args.stream == NULL) { - open_failure_alert_box(print_args.file, errno, TRUE); - g_free( (void *) ofn); - return; - } - status = cf_print_packets(&cfile, &print_args); - break; - case export_type_csv: /* CSV */ - status = cf_write_csv_packets(&cfile, &print_args); - break; - case export_type_carrays: /* C Arrays */ - status = cf_write_carrays_packets(&cfile, &print_args); - break; - case export_type_psml: /* PSML */ - status = cf_write_psml_packets(&cfile, &print_args); - break; - case export_type_pdml: /* PDML */ - status = cf_write_pdml_packets(&cfile, &print_args); - break; - default: - g_free( (void *) ofn); - return; - } - - switch (status) { - case CF_PRINT_OK: - break; - case CF_PRINT_OPEN_ERROR: - open_failure_alert_box(print_args.file, errno, TRUE); - break; - case CF_PRINT_WRITE_ERROR: - write_failure_alert_box(print_args.file, errno); - break; - } - /* Save the directory name for future file dialogs. */ - dirname = get_dirname(utf_16to8(file_name)); /* Overwrites cf_name */ - set_last_open_dir(dirname); - } - - g_free( (void *) ofn); -} - -void -win32_export_raw_file(HWND h_wnd) { - OPENFILENAME *ofn; - TCHAR file_name[MAX_PATH] = _T(""); - char *dirname; - const guint8 *data_p; - char *file_name8; - int fd; - int ofnsize; -#if (_MSC_VER >= 1500) - OSVERSIONINFO osvi; -#endif - - if (!cfile.finfo_selected) { - /* This shouldn't happen */ - simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "No bytes were selected."); - return; - } - - /* see OPENFILENAME comment in win32_open_file */ -#if (_MSC_VER >= 1500) - ZeroMemory(&osvi, sizeof(OSVERSIONINFO)); - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&osvi); - if (osvi.dwMajorVersion >= 5) { - ofnsize = sizeof(OPENFILENAME); - } else { - ofnsize = OPENFILENAME_SIZE_VERSION_400; - } -#else - ofnsize = sizeof(OPENFILENAME) + 12; -#endif - ofn = g_malloc0(ofnsize); - - ofn->lStructSize = ofnsize; - ofn->hwndOwner = h_wnd; -#if (_MSC_VER <= 1200) - ofn->hInstance = (HINSTANCE) GetWindowLong(h_wnd, GWL_HINSTANCE); -#else - ofn->hInstance = (HINSTANCE) GetWindowLongPtr(h_wnd, GWLP_HINSTANCE); -#endif - ofn->lpstrFilter = FILE_TYPES_RAW; - ofn->lpstrCustomFilter = NULL; - ofn->nMaxCustFilter = 0; - ofn->nFilterIndex = FILE_RAW_DEFAULT; - ofn->lpstrFile = file_name; - ofn->nMaxFile = MAX_PATH; - ofn->lpstrFileTitle = NULL; - ofn->nMaxFileTitle = 0; - ofn->lpstrInitialDir = utf_8to16(get_last_open_dir()); - ofn->lpstrTitle = _T("Wireshark: Export Raw Data"); - ofn->Flags = OFN_ENABLESIZING | OFN_ENABLETEMPLATE | OFN_EXPLORER | - OFN_NOCHANGEDIR | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | - OFN_PATHMUSTEXIST | OFN_ENABLEHOOK | OFN_SHOWHELP; - ofn->lpstrDefExt = NULL; - ofn->lCustData = cfile.finfo_selected->length; - ofn->lpfnHook = export_raw_file_hook_proc; - ofn->lpTemplateName = _T("WIRESHARK_EXPORTRAWFILENAME_TEMPLATE"); - - /* - * XXX - The GTK+ code uses get_byte_view_data_and_length(). We just - * grab the info from cfile.finfo_selected. Which is more "correct"? - */ - - if (GetSaveFileName(ofn)) { - g_free( (void *) ofn); - file_name8 = utf_16to8(file_name); - data_p = tvb_get_ptr(cfile.finfo_selected->ds_tvb, 0, -1) + - cfile.finfo_selected->start; - fd = ws_open(file_name8, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0666); - if (fd == -1) { - open_failure_alert_box(file_name8, errno, TRUE); - return; - } - if (write(fd, data_p, cfile.finfo_selected->length) < 0) { - write_failure_alert_box(file_name8, errno); - close(fd); - return; - } - if (close(fd) < 0) { - write_failure_alert_box(file_name8, errno); - return; - } - - /* Save the directory name for future file dialogs. */ - dirname = get_dirname(file_name8); /* Overwrites cf_name */ - set_last_open_dir(dirname); - } else { - g_free( (void *) ofn); - } -} - -void -win32_export_color_file(HWND h_wnd, gpointer filter_list) { - OPENFILENAME *ofn; - TCHAR file_name[MAX_PATH] = _T(""); - gchar *dirname; - int ofnsize; -#if (_MSC_VER >= 1500) - OSVERSIONINFO osvi; -#endif - - /* see OPENFILENAME comment in win32_open_file */ -#if (_MSC_VER >= 1500) - ZeroMemory(&osvi, sizeof(OSVERSIONINFO)); - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&osvi); - if (osvi.dwMajorVersion >= 5) { - ofnsize = sizeof(OPENFILENAME); - } else { - ofnsize = OPENFILENAME_SIZE_VERSION_400; - } -#else - ofnsize = sizeof(OPENFILENAME) + 12; -#endif - ofn = g_malloc0(ofnsize); - - ofn->lStructSize = ofnsize; - ofn->hwndOwner = h_wnd; -#if (_MSC_VER <= 1200) - ofn->hInstance = (HINSTANCE) GetWindowLong(h_wnd, GWL_HINSTANCE); -#else - ofn->hInstance = (HINSTANCE) GetWindowLongPtr(h_wnd, GWLP_HINSTANCE); -#endif - ofn->lpstrFilter = FILE_TYPES_COLOR; - ofn->lpstrCustomFilter = NULL; - ofn->nMaxCustFilter = 0; - ofn->nFilterIndex = FILE_DEFAULT_COLOR; - ofn->lpstrFile = file_name; - ofn->nMaxFile = MAX_PATH; - ofn->lpstrFileTitle = NULL; - ofn->nMaxFileTitle = 0; - ofn->lpstrInitialDir = utf_8to16(get_last_open_dir()); - ofn->lpstrTitle = _T("Wireshark: Export Color Filters"); - ofn->Flags = OFN_ENABLESIZING | OFN_EXPLORER | - OFN_NOCHANGEDIR | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | - OFN_PATHMUSTEXIST | OFN_ENABLEHOOK; - ofn->lpstrDefExt = NULL; - ofn->lpfnHook = NULL; - ofn->lpTemplateName = NULL; - - filetype = cfile.cd_t; - - /* XXX - Support marked filters */ - if (GetSaveFileName(ofn)) { - g_free( (void *) ofn); - if (!color_filters_export(utf_16to8(file_name), filter_list, FALSE /* all filters */)) - return; - - /* Save the directory name for future file dialogs. */ - dirname = get_dirname(utf_16to8(file_name)); /* Overwrites cf_name */ - set_last_open_dir(dirname); - } else { - g_free( (void *) ofn); - } -} - -void -win32_import_color_file(HWND h_wnd, gpointer color_filters) { - OPENFILENAME *ofn; - TCHAR file_name[MAX_PATH] = _T(""); - gchar *dirname; - int ofnsize; -#if (_MSC_VER >= 1500) - OSVERSIONINFO osvi; -#endif - - /* see OPENFILENAME comment in win32_open_file */ -#if (_MSC_VER >= 1500) - ZeroMemory(&osvi, sizeof(OSVERSIONINFO)); - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&osvi); - if (osvi.dwMajorVersion >= 5) { - ofnsize = sizeof(OPENFILENAME); - } else { - ofnsize = OPENFILENAME_SIZE_VERSION_400; - } -#else - ofnsize = sizeof(OPENFILENAME) + 12; -#endif - ofn = g_malloc0(ofnsize); - - ofn->lStructSize = ofnsize; - ofn->hwndOwner = h_wnd; -#if (_MSC_VER <= 1200) - ofn->hInstance = (HINSTANCE) GetWindowLong(h_wnd, GWL_HINSTANCE); -#else - ofn->hInstance = (HINSTANCE) GetWindowLongPtr(h_wnd, GWLP_HINSTANCE); -#endif - ofn->lpstrFilter = FILE_TYPES_COLOR; - ofn->lpstrCustomFilter = NULL; - ofn->nMaxCustFilter = 0; - ofn->nFilterIndex = FILE_DEFAULT_COLOR; - ofn->lpstrFile = file_name; - ofn->nMaxFile = MAX_PATH; - ofn->lpstrFileTitle = NULL; - ofn->nMaxFileTitle = 0; - ofn->lpstrInitialDir = utf_8to16(get_last_open_dir()); - ofn->lpstrTitle = _T("Wireshark: Import Color Filters"); - ofn->Flags = OFN_ENABLESIZING | OFN_EXPLORER | - OFN_NOCHANGEDIR | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | - OFN_PATHMUSTEXIST | OFN_ENABLEHOOK; - ofn->lpstrDefExt = NULL; - ofn->lpfnHook = NULL; - ofn->lpTemplateName = NULL; - - /* XXX - Support export limited to selected filters */ - if (GetOpenFileName(ofn)) { - g_free( (void *) ofn); - if (!color_filters_import(utf_16to8(file_name), color_filters)) - return; - - /* Save the directory name for future file dialogs. */ - dirname = get_dirname(utf_16to8(file_name)); /* Overwrites cf_name */ - set_last_open_dir(dirname); - } else { - g_free( (void *) ofn); - } -} - - -/* - * Private routines - */ - -/** Given a print_args_t struct, update a set of print/export format controls - * accordingly. - * - * @param dlg_hwnd HWND of the dialog in question. - * @param args Pointer to a print args struct. - */ -static void -print_update_dynamic(HWND dlg_hwnd, print_args_t *args) { - HWND cur_ctrl; - - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_PKT_SUMMARY_CB); - if (SendMessage(cur_ctrl, BM_GETCHECK, 0, 0) == BST_CHECKED) - args->print_summary = TRUE; - else - args->print_summary = FALSE; - - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_PKT_DETAIL_CB); - if (SendMessage(cur_ctrl, BM_GETCHECK, 0, 0) == BST_CHECKED) { - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_PKT_DETAIL_COMBO); - switch (SendMessage(cur_ctrl, CB_GETCURSEL, 0, 0)) { - case 0: - args->print_dissections = print_dissections_collapsed; - break; - case 1: - args->print_dissections = print_dissections_as_displayed; - break; - case 2: - args->print_dissections = print_dissections_expanded; - break; - default: - g_assert_not_reached(); - } - EnableWindow(cur_ctrl, TRUE); - } else { - args->print_dissections = print_dissections_none; - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_PKT_DETAIL_COMBO); - EnableWindow(cur_ctrl, FALSE); - } - - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_PKT_BYTES_CB); - if (SendMessage(cur_ctrl, BM_GETCHECK, 0, 0) == BST_CHECKED) - args->print_hex = TRUE; - else - args->print_hex = FALSE; - - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_PKT_NEW_PAGE_CB); - if (SendMessage(cur_ctrl, BM_GETCHECK, 0, 0) == BST_CHECKED) - args->print_formfeed = TRUE; - else - args->print_formfeed = FALSE; -} - -static void -format_handle_wm_initdialog(HWND dlg_hwnd, print_args_t *args) { - HWND cur_ctrl; - - /* Set the "Packet summary" box */ - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_PKT_SUMMARY_CB); - SendMessage(cur_ctrl, BM_SETCHECK, args->print_summary, 0); - - /* Set the "Packet details" box */ - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_PKT_DETAIL_CB); - SendMessage(cur_ctrl, BM_SETCHECK, args->print_dissections != print_dissections_none, 0); - - /* Set the "Packet details" combo */ - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_PKT_DETAIL_COMBO); - SendMessage(cur_ctrl, CB_ADDSTRING, 0, (WPARAM) _T("All collapsed")); - SendMessage(cur_ctrl, CB_ADDSTRING, 0, (WPARAM) _T("As displayed")); - SendMessage(cur_ctrl, CB_ADDSTRING, 0, (WPARAM) _T("All expanded")); - - switch (args->print_dissections) { - case print_dissections_none: - case print_dissections_collapsed: - SendMessage(cur_ctrl, CB_SETCURSEL, 0, 0); - break; - case print_dissections_as_displayed: - SendMessage(cur_ctrl, CB_SETCURSEL, 1, 0); - break; - case print_dissections_expanded: - SendMessage(cur_ctrl, CB_SETCURSEL, 2, 0); - default: - g_assert_not_reached(); - } - - /* Set the "Packet bytes" box */ - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_PKT_BYTES_CB); - SendMessage(cur_ctrl, BM_SETCHECK, args->print_hex, 0); - - /* Set the "Each packet on a new page" box */ - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_PKT_NEW_PAGE_CB); - SendMessage(cur_ctrl, BM_SETCHECK, args->print_formfeed, 0); - - print_update_dynamic(dlg_hwnd, args); -} - - -#define PREVIEW_STR_MAX 200 - -/* If preview_file is NULL, disable the elements. If not, enable and - * show the preview info. */ -static gboolean -preview_set_filename(HWND of_hwnd, gchar *preview_file) { - HWND cur_ctrl; - int i; - gboolean enable = FALSE; - wtap *wth; - const struct wtap_pkthdr *phdr; - int err = 0; - gchar *err_info; - TCHAR string_buff[PREVIEW_STR_MAX]; - gint64 data_offset; - guint packet = 0; - gint64 filesize; - time_t ti_time; - struct tm *ti_tm; - guint elapsed_time; - time_t time_preview; - time_t time_current; - double start_time = 0; - double stop_time = 0; - double cur_time; - gboolean is_breaked = FALSE; - - if (preview_file != NULL && strlen(preview_file) > 0) { - enable = TRUE; - } - - for (i = EWFD_PT_FILENAME; i <= EWFD_PTX_ELAPSED; i++) { - cur_ctrl = GetDlgItem(of_hwnd, i); - if (cur_ctrl) { - EnableWindow(cur_ctrl, enable); - } - } - - for (i = EWFD_PTX_FILENAME; i <= EWFD_PTX_ELAPSED; i++) { - cur_ctrl = GetDlgItem(of_hwnd, i); - if (cur_ctrl) { - SetWindowText(cur_ctrl, _T("-")); - } - } - - if (enable) { - cur_ctrl = GetDlgItem(of_hwnd, EWFD_PTX_FILENAME); - SetWindowText(cur_ctrl, utf_8to16(get_basename(preview_file))); - - cur_ctrl = GetDlgItem(of_hwnd, EWFD_PTX_FORMAT); - wth = wtap_open_offline(preview_file, &err, &err_info, TRUE); - if (cur_ctrl && wth == NULL) { - if(err == WTAP_ERR_FILE_UNKNOWN_FORMAT) { - SetWindowText(cur_ctrl, _T("unknown file format")); - } else { - SetWindowText(cur_ctrl, _T("error opening file")); - } - return FALSE; - } - - /* size */ - filesize = wtap_file_size(wth, &err); - utf_8to16_snprintf(string_buff, PREVIEW_STR_MAX, "%" G_GINT64_FORMAT " bytes", filesize); - cur_ctrl = GetDlgItem(of_hwnd, EWFD_PTX_SIZE); - SetWindowText(cur_ctrl, string_buff); - - /* type */ - cur_ctrl = GetDlgItem(of_hwnd, EWFD_PTX_FORMAT); - SetWindowText(cur_ctrl, utf_8to16(wtap_file_type_string(wtap_file_type(wth)))); - - time(&time_preview); - while ( (wtap_read(wth, &err, &err_info, &data_offset)) ) { - phdr = wtap_phdr(wth); - cur_time = nstime_to_sec( (const nstime_t *) &phdr->ts ); - if(packet == 0) { - start_time = cur_time; - stop_time = cur_time; - } - if (cur_time < start_time) { - start_time = cur_time; - } - if (cur_time > stop_time){ - stop_time = cur_time; - } - packet++; - if(packet%100 == 0) { - time(&time_current); - if(time_current-time_preview >= (time_t) prefs.gui_fileopen_preview) { - is_breaked = TRUE; - break; - } - } - } - - if(err != 0) { - _snwprintf(string_buff, PREVIEW_STR_MAX, _T("error after reading %u packets"), packet); - cur_ctrl = GetDlgItem(of_hwnd, EWFD_PTX_PACKETS); - SetWindowText(cur_ctrl, string_buff); - wtap_close(wth); - return TRUE; - } - - /* packet count */ - if(is_breaked) { - _snwprintf(string_buff, PREVIEW_STR_MAX, _T("more than %u packets (preview timeout)"), packet); - } else { - _snwprintf(string_buff, PREVIEW_STR_MAX, _T("%u"), packet); - } - cur_ctrl = GetDlgItem(of_hwnd, EWFD_PTX_PACKETS); - SetWindowText(cur_ctrl, string_buff); - - /* first packet */ - ti_time = (long)start_time; - ti_tm = localtime( &ti_time ); - if(ti_tm) { - _snwprintf(string_buff, PREVIEW_STR_MAX, - _T("%04d-%02d-%02d %02d:%02d:%02d"), - ti_tm->tm_year + 1900, - ti_tm->tm_mon + 1, - ti_tm->tm_mday, - ti_tm->tm_hour, - ti_tm->tm_min, - ti_tm->tm_sec); - } else { - _snwprintf(string_buff, PREVIEW_STR_MAX, _T("?")); - } - cur_ctrl = GetDlgItem(of_hwnd, EWFD_PTX_FIRST_PKT); - SetWindowText(cur_ctrl, string_buff); - - /* elapsed time */ - elapsed_time = (unsigned int)(stop_time-start_time); - if(elapsed_time/86400) { - _snwprintf(string_buff, PREVIEW_STR_MAX, _T("%02u days %02u:%02u:%02u"), - elapsed_time/86400, elapsed_time%86400/3600, elapsed_time%3600/60, elapsed_time%60); - } else { - _snwprintf(string_buff, PREVIEW_STR_MAX, _T("%02u:%02u:%02u"), - elapsed_time%86400/3600, elapsed_time%3600/60, elapsed_time%60); - } - if(is_breaked) { - _snwprintf(string_buff, PREVIEW_STR_MAX, _T("unknown")); - } - cur_ctrl = GetDlgItem(of_hwnd, EWFD_PTX_ELAPSED); - SetWindowText(cur_ctrl, string_buff); - - wtap_close(wth); - } - - return TRUE; - -} - - -static char * -filter_tb_get(HWND hwnd) { - TCHAR *strval = NULL; - gint len; - char *ret; - - /* If filter_text is non-NULL, use it. Otherwise, grab the text from - * the window */ - len = GetWindowTextLength(hwnd); - if (len > 0) { - len++; - strval = g_malloc(len*sizeof(TCHAR)); - len = GetWindowText(hwnd, strval, len); - ret = g_utf16_to_utf8(strval, -1, NULL, NULL, NULL); - g_free(strval); - return ret; - } else { - return NULL; - } -} - - -/* XXX - Copied from "filter-util.c" in the wireshark-win32 branch */ -/* XXX - The only reason for the "filter_text" parameter is to be able to feed - * in the "real" filter string in the case of a CBN_SELCHANGE notification message. - */ -static void -filter_tb_syntax_check(HWND hwnd, TCHAR *filter_text) { - TCHAR *strval = NULL; - gint len; - dfilter_t *dfp; - - /* If filter_text is non-NULL, use it. Otherwise, grab the text from - * the window */ - if (filter_text) { - len = (lstrlen(filter_text) + 1) * sizeof(TCHAR); - strval = g_malloc(len); - memcpy(strval, filter_text, len); - } else { - len = GetWindowTextLength(hwnd); - if (len > 0) { - len++; - strval = g_malloc(len*sizeof(TCHAR)); - len = GetWindowText(hwnd, strval, len); - } - } - - if (len == 0) { - /* Default window background */ - SendMessage(hwnd, EM_SETBKGNDCOLOR, (WPARAM) 1, COLOR_WINDOW); - return; - } else if (dfilter_compile(utf_16to8(strval), &dfp)) { /* colorize filter string entry */ - if (dfp != NULL) - dfilter_free(dfp); - /* Valid (light green) */ - SendMessage(hwnd, EM_SETBKGNDCOLOR, 0, 0x00afffaf); - } else { - /* Invalid (light red) */ - SendMessage(hwnd, EM_SETBKGNDCOLOR, 0, 0x00afafff); - } - - if (strval) g_free(strval); -} - - -#if (_MSC_VER <= 1200) -static UINT CALLBACK -#else -static UINT_PTR CALLBACK -#endif -open_file_hook_proc(HWND of_hwnd, UINT msg, WPARAM w_param, LPARAM l_param) { - HWND cur_ctrl, parent; - OFNOTIFY *notify = (OFNOTIFY *) l_param; - TCHAR sel_name[MAX_PATH]; - - switch(msg) { - case WM_INITDIALOG: - /* Retain the filter text, and fill it in. */ - if(dfilter_str != NULL) { - cur_ctrl = GetDlgItem(of_hwnd, EWFD_FILTER_EDIT); - SetWindowText(cur_ctrl, utf_8to16(dfilter_str)); - } - - /* Fill in our resolution values */ - cur_ctrl = GetDlgItem(of_hwnd, EWFD_MAC_NR_CB); - SendMessage(cur_ctrl, BM_SETCHECK, gbl_resolv_flags & RESOLV_MAC, 0); - cur_ctrl = GetDlgItem(of_hwnd, EWFD_NET_NR_CB); - SendMessage(cur_ctrl, BM_SETCHECK, gbl_resolv_flags & RESOLV_NETWORK, 0); - cur_ctrl = GetDlgItem(of_hwnd, EWFD_TRANS_NR_CB); - SendMessage(cur_ctrl, BM_SETCHECK, gbl_resolv_flags & RESOLV_TRANSPORT, 0); - - preview_set_filename(of_hwnd, NULL); - break; - case WM_NOTIFY: - switch (notify->hdr.code) { - case CDN_FILEOK: - /* Fetch the read filter */ - cur_ctrl = GetDlgItem(of_hwnd, EWFD_FILTER_EDIT); - if (dfilter_str) - g_free(dfilter_str); - dfilter_str = filter_tb_get(cur_ctrl); - - /* Fetch our resolution values */ - gbl_resolv_flags = prefs.name_resolve & RESOLV_CONCURRENT; - cur_ctrl = GetDlgItem(of_hwnd, EWFD_MAC_NR_CB); - if (SendMessage(cur_ctrl, BM_GETCHECK, 0, 0) == BST_CHECKED) - gbl_resolv_flags |= RESOLV_MAC; - cur_ctrl = GetDlgItem(of_hwnd, EWFD_NET_NR_CB); - if (SendMessage(cur_ctrl, BM_GETCHECK, 0, 0) == BST_CHECKED) - gbl_resolv_flags |= RESOLV_NETWORK; - cur_ctrl = GetDlgItem(of_hwnd, EWFD_TRANS_NR_CB); - if (SendMessage(cur_ctrl, BM_GETCHECK, 0, 0) == BST_CHECKED) - gbl_resolv_flags |= RESOLV_TRANSPORT; - break; - case CDN_SELCHANGE: - /* This _almost_ works correctly. We need to handle directory - selections, etc. */ - parent = GetParent(of_hwnd); - CommDlg_OpenSave_GetSpec(parent, sel_name, MAX_PATH); - preview_set_filename(of_hwnd, utf_16to8(sel_name)); - break; - case CDN_HELP: - topic_cb(NULL, HELP_OPEN_WIN32_DIALOG); - break; - default: - break; - } - break; - case WM_COMMAND: - cur_ctrl = (HWND) l_param; - switch(w_param) { - case (EN_UPDATE << 16) | EWFD_FILTER_EDIT: - filter_tb_syntax_check(cur_ctrl, NULL); - break; - /* - * If we ever figure out a way to integrate the Windows - * and GTK+ event loops (or make a native filter dialog), - * we can re-enable the "Filter" button. - */ - /* - case EWFD_FILTER_BTN: - break; - */ - default: - break; - } - break; - default: - break; - } - return 0; -} - -/* XXX - Copied verbatim from gtk/capture_file_dlg.c. Perhaps it - * should be in wiretap instead? - */ - -static gboolean -can_save_with_wiretap(int ft) -{ - /* To save a file with Wiretap, Wiretap has to handle that format, - and its code to handle that format must be able to write a file - with this file's encapsulation type. */ - return wtap_dump_can_open(ft) && wtap_dump_can_write_encap(ft, cfile.lnk_t); -} - -/* Generate a list of the file types we can save this file as. - - "filetype" is the type it has now. - - "encap" is the encapsulation for its packets (which could be - "unknown" or "per-packet"). - - "filtered" is TRUE if we're to save only the packets that passed - the display filter (in which case we have to save it using Wiretap) - and FALSE if we're to save the entire file (in which case, if we're - saving it in the type it has already, we can just copy it). - - The same applies for sel_curr, sel_all, sel_m_only, sel_m_range and sel_man_range -*/ - -static int -file_type_from_list_index(gboolean save, int index) { - int ft; - int curr_index; - - /* Check all file types. */ - curr_index = 0; - for (ft = 0; ft < WTAP_NUM_FILE_TYPES; ft++) { - if (save && (!packet_range_process_all(&range) || ft != cfile.cd_t)) { - /* not all unfiltered packets or a different file type. We have to use Wiretap. */ - if (!can_save_with_wiretap(ft)) - continue; /* We can't. */ - } - - /* OK, we can write it out in this type. */ - if(wtap_file_type_string(ft) == NULL) { - continue; - } - - curr_index++; - if(curr_index == index) { - return ft; - } - } - - return -1; -} - - -static TCHAR * -build_file_type_list(gboolean save, int *item_to_select) { - int ft; - guint index; - GString* str = g_string_new(""); - TCHAR *str16; - GArray* sa = g_array_new(FALSE /*zero_terminated*/, FALSE /*clear_*/,2 /*element_size*/); - guint16 zero = 0; - - - /* Default to the first supported file type, if the file's current - type isn't supported. */ - if(item_to_select) { - if(save) { - *item_to_select = FILE_SAVE_DEFAULT; - } else { - *item_to_select = FILE_OPEN_DEFAULT; - } - } - - /* append the "All Files" entry */ - if (!save) { - str16 = utf_8to16("All Files (*.*)"); - sa = g_array_append_vals(sa, str16, (guint) strlen("All Files (*.*)")); - sa = g_array_append_val(sa, zero); - str16 = utf_8to16("*.*"); - sa = g_array_append_vals(sa, str16, (guint) strlen("*.*")); - sa = g_array_append_val(sa, zero); - } - - /* Check all file types. */ - index = 1; /* the index is one based! */ - for (ft = 0; ft < WTAP_NUM_FILE_TYPES; ft++) { - if (save && (!packet_range_process_all(&range) || ft != cfile.cd_t)) { - /* not all unfiltered packets or a different file type. We have to use Wiretap. */ - if (!can_save_with_wiretap(ft)) - continue; /* We can't. */ - } - - /* OK, we can write it out in this type. */ - if(wtap_file_type_string(ft) != NULL) { - g_string_printf(str, "%s (%s)", wtap_file_type_string(ft), wtap_file_extensions_string(ft)); - } else { - continue; - } - str16 = utf_8to16(str->str); - sa = g_array_append_vals(sa, str16, (guint) strlen(str->str)); - sa = g_array_append_val(sa, zero); - - g_string_printf(str, "%s", wtap_file_extensions_string(ft)); - str16 = utf_8to16(str->str); - sa = g_array_append_vals(sa, str16, (guint) strlen(str->str)); - sa = g_array_append_val(sa, zero); - - if (ft == cfile.cd_t && item_to_select != NULL) { - /* Default to the same format as the file, if it's supported. */ - *item_to_select = index; - } - index++; - } - - /* terminate the array */ - sa = g_array_append_val(sa, zero); - - return (TCHAR *) g_array_free(sa, FALSE /*free_segment*/); -} - - -#if 0 -static void -build_file_format_list(HWND sf_hwnd) { - HWND format_cb; - int ft; - guint index; - guint item_to_select; - gchar *s; - - /* Default to the first supported file type, if the file's current - type isn't supported. */ - item_to_select = 0; - - format_cb = GetDlgItem(sf_hwnd, EWFD_FILE_TYPE_COMBO); - SendMessage(format_cb, CB_RESETCONTENT, 0, 0); - - /* Check all file types. */ - index = 0; - for (ft = 0; ft < WTAP_NUM_FILE_TYPES; ft++) { - if (!packet_range_process_all(&range) || ft != cfile.cd_t) { - /* not all unfiltered packets or a different file type. We have to use Wiretap. */ - if (!can_save_with_wiretap(ft)) - continue; /* We can't. */ - } - - /* OK, we can write it out in this type. */ - if(wtap_file_extensions_string(ft) != NULL) { - s = g_strdup_printf("%s (%s)", wtap_file_type_string(ft), wtap_file_extensions_string(ft)); - } else { - s = g_strdup_printf("%s (*.*)", wtap_file_type_string(ft)); - } - SendMessage(format_cb, CB_ADDSTRING, 0, (LPARAM) utf_8to16(s)); - g_free(s); - SendMessage(format_cb, CB_SETITEMDATA, (LPARAM) index, (WPARAM) ft); - if (ft == filetype) { - /* Default to the same format as the file, if it's supported. */ - item_to_select = index; - } - index++; - } - - SendMessage(format_cb, CB_SETCURSEL, (WPARAM) item_to_select, 0); -} -#endif - -#define RANGE_TEXT_MAX 128 -#if (_MSC_VER <= 1200) -static UINT CALLBACK -#else -static UINT_PTR CALLBACK -#endif -save_as_file_hook_proc(HWND sf_hwnd, UINT msg, WPARAM w_param, LPARAM l_param) { - HWND cur_ctrl; - OFNOTIFY *notify = (OFNOTIFY *) l_param; - /*int new_filetype, index;*/ - - switch(msg) { - case WM_INITDIALOG: - g_sf_hwnd = sf_hwnd; - - /* Default to saving all packets, in the file's current format. */ - filetype = cfile.cd_t; - - /* init the packet range */ - packet_range_init(&range); - - /* Fill in the file format list */ - /*build_file_format_list(sf_hwnd);*/ - - range_handle_wm_initdialog(sf_hwnd, &range); - - break; - case WM_COMMAND: - cur_ctrl = (HWND) l_param; - - switch (w_param) { -#if 0 - case (CBN_SELCHANGE << 16) | EWFD_FILE_TYPE_COMBO: - index = SendMessage(cur_ctrl, CB_GETCURSEL, 0, 0); - if (index != CB_ERR) { - new_filetype = SendMessage(cur_ctrl, CB_GETITEMDATA, (WPARAM) index, 0); - if (new_filetype != CB_ERR) { - if (filetype != new_filetype) { - if (can_save_with_wiretap(new_filetype)) { - cur_ctrl = GetDlgItem(sf_hwnd, EWFD_CAPTURED_BTN); - EnableWindow(cur_ctrl, TRUE); - cur_ctrl = GetDlgItem(sf_hwnd, EWFD_DISPLAYED_BTN); - EnableWindow(cur_ctrl, TRUE); - } else { - cur_ctrl = GetDlgItem(sf_hwnd, EWFD_CAPTURED_BTN); - SendMessage(cur_ctrl, BM_SETCHECK, 0, 0); - EnableWindow(cur_ctrl, FALSE); - cur_ctrl = GetDlgItem(sf_hwnd, EWFD_DISPLAYED_BTN); - EnableWindow(cur_ctrl, FALSE); - } - filetype = new_filetype; - } - } - } - break; -#endif - default: - range_handle_wm_command(sf_hwnd, cur_ctrl, w_param, &range); - break; - } - break; - case WM_NOTIFY: - switch (notify->hdr.code) { - case CDN_HELP: - topic_cb(NULL, HELP_SAVE_WIN32_DIALOG); - break; - default: - break; - } - break; - default: - break; - } - return 0; -} - - - -/* For each range static control, fill in its value and enable/disable it. */ -static void -range_update_dynamics(HWND dlg_hwnd, packet_range_t *range) { - HWND cur_ctrl; - gboolean filtered_active = FALSE; - TCHAR static_val[100]; - gint selected_num; - guint32 ignored_cnt = 0, displayed_ignored_cnt = 0; - - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_DISPLAYED_BTN); - if (SendMessage(cur_ctrl, BM_GETCHECK, 0, 0) == BST_CHECKED) - filtered_active = TRUE; - - /* RANGE_SELECT_ALL */ - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_ALL_PKTS_CAP); - EnableWindow(cur_ctrl, !filtered_active); - if (range->remove_ignored) { - _snwprintf(static_val, sizeof(static_val), _T("%u"), cfile.count - range->ignored_cnt); - } else { - _snwprintf(static_val, sizeof(static_val), _T("%u"), cfile.count); - } - SetWindowText(cur_ctrl, static_val); - - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_ALL_PKTS_DISP); - EnableWindow(cur_ctrl, filtered_active); - if (range->remove_ignored) { - _snwprintf(static_val, sizeof(static_val), _T("%u"), range->displayed_cnt - range->displayed_ignored_cnt); - } else { - _snwprintf(static_val, sizeof(static_val), _T("%u"), range->displayed_cnt); - } - SetWindowText(cur_ctrl, static_val); - - /* RANGE_SELECT_CURR */ - selected_num = (cfile.current_frame) ? cfile.current_frame->num : 0; - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_SEL_PKT_CAP); - EnableWindow(cur_ctrl, selected_num && !filtered_active); - if (range->remove_ignored && cfile.current_frame && cfile.current_frame->flags.ignored) { - _snwprintf(static_val, sizeof(static_val), _T("0")); - } else { - _snwprintf(static_val, sizeof(static_val), _T("%u"), selected_num ? 1 : 0); - } - SetWindowText(cur_ctrl, static_val); - - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_SEL_PKT_DISP); - EnableWindow(cur_ctrl, selected_num && filtered_active); - if (range->remove_ignored && cfile.current_frame && cfile.current_frame->flags.ignored) { - _snwprintf(static_val, sizeof(static_val), _T("0")); - } else { - _snwprintf(static_val, sizeof(static_val), _T("%u"), selected_num ? 1 : 0); - } - SetWindowText(cur_ctrl, static_val); - - /* RANGE_SELECT_MARKED */ - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_MARKED_BTN); - EnableWindow(cur_ctrl, cfile.marked_count); - - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_MARKED_CAP); - EnableWindow(cur_ctrl, cfile.marked_count && !filtered_active); - if (range->remove_ignored) { - _snwprintf(static_val, sizeof(static_val), _T("%u"), cfile.marked_count - range->ignored_marked_cnt); - } else { - _snwprintf(static_val, sizeof(static_val), _T("%u"), cfile.marked_count); - } - SetWindowText(cur_ctrl, static_val); - - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_MARKED_DISP); - EnableWindow(cur_ctrl, cfile.marked_count && filtered_active); - if (range->remove_ignored) { - _snwprintf(static_val, sizeof(static_val), _T("%u"), range->displayed_marked_cnt - range->displayed_ignored_marked_cnt); - } else { - _snwprintf(static_val, sizeof(static_val), _T("%u"), range->displayed_marked_cnt); - } - SetWindowText(cur_ctrl, static_val); - - /* RANGE_SELECT_MARKED_RANGE */ - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_FIRST_LAST_BTN); - EnableWindow(cur_ctrl, range->mark_range_cnt); - - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_FIRST_LAST_CAP); - EnableWindow(cur_ctrl, range->mark_range_cnt && !filtered_active); - if (range->remove_ignored) { - _snwprintf(static_val, sizeof(static_val), _T("%u"), range->mark_range_cnt - range->ignored_mark_range_cnt); - } else { - _snwprintf(static_val, sizeof(static_val), _T("%u"), range->mark_range_cnt); - } - SetWindowText(cur_ctrl, static_val); - - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_FIRST_LAST_DISP); - EnableWindow(cur_ctrl, range->displayed_mark_range_cnt && filtered_active); - if (range->remove_ignored) { - _snwprintf(static_val, sizeof(static_val), _T("%u"), range->displayed_mark_range_cnt - range->displayed_ignored_mark_range_cnt); - } else { - _snwprintf(static_val, sizeof(static_val), _T("%u"), range->displayed_mark_range_cnt); - } - SetWindowText(cur_ctrl, static_val); - - /* RANGE_SELECT_USER */ - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_RANGE_CAP); - EnableWindow(cur_ctrl, !filtered_active); - if (range->remove_ignored) { - _snwprintf(static_val, sizeof(static_val), _T("%u"), range->user_range_cnt - range->ignored_user_range_cnt); - } else { - _snwprintf(static_val, sizeof(static_val), _T("%u"), range->user_range_cnt); - } - SetWindowText(cur_ctrl, static_val); - - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_RANGE_DISP); - EnableWindow(cur_ctrl, filtered_active); - if (range->remove_ignored) { - _snwprintf(static_val, sizeof(static_val), _T("%u"), range->displayed_user_range_cnt - range->displayed_ignored_user_range_cnt); - } else { - _snwprintf(static_val, sizeof(static_val), _T("%u"), range->displayed_user_range_cnt); - } - SetWindowText(cur_ctrl, static_val); - - /* RANGE_REMOVE_IGNORED_PACKETS */ - switch(range->process) { - case(range_process_all): - ignored_cnt = range->ignored_cnt; - displayed_ignored_cnt = range->displayed_ignored_cnt; - break; - case(range_process_selected): - ignored_cnt = (cfile.current_frame && cfile.current_frame->flags.ignored) ? 1 : 0; - displayed_ignored_cnt = ignored_cnt; - break; - case(range_process_marked): - ignored_cnt = range->ignored_marked_cnt; - displayed_ignored_cnt = range->displayed_ignored_marked_cnt; - break; - case(range_process_marked_range): - ignored_cnt = range->ignored_mark_range_cnt; - displayed_ignored_cnt = range->displayed_ignored_mark_range_cnt; - break; - case(range_process_user_range): - ignored_cnt = range->ignored_user_range_cnt; - displayed_ignored_cnt = range->displayed_ignored_user_range_cnt; - break; - default: - g_assert_not_reached(); - } - - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_REMOVE_IGN_CB); - EnableWindow(cur_ctrl, ignored_cnt); - - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_IGNORED_CAP); - EnableWindow(cur_ctrl, ignored_cnt && !filtered_active); - _snwprintf(static_val, sizeof(static_val), _T("%u"), ignored_cnt); - SetWindowText(cur_ctrl, static_val); - - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_IGNORED_DISP); - EnableWindow(cur_ctrl, displayed_ignored_cnt && filtered_active); - _snwprintf(static_val, sizeof(static_val), _T("%u"), displayed_ignored_cnt); - SetWindowText(cur_ctrl, static_val); -} - -static void -range_handle_wm_initdialog(HWND dlg_hwnd, packet_range_t *range) { - HWND cur_ctrl; - - /* Set the appropriate captured/displayed radio */ - if (range->process_filtered) - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_DISPLAYED_BTN); - else - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_CAPTURED_BTN); - SendMessage(cur_ctrl, BM_SETCHECK, TRUE, 0); - - /* dynamic values in the range frame */ - range_update_dynamics(dlg_hwnd, range); - - /* Set the appropriate range radio */ - switch(range->process) { - case(range_process_all): - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_ALL_PKTS_BTN); - break; - case(range_process_selected): - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_SEL_PKT_BTN); - break; - case(range_process_marked): - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_MARKED_BTN); - break; - case(range_process_marked_range): - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_FIRST_LAST_BTN); - break; - case(range_process_user_range): - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_RANGE_BTN); - break; - default: - g_assert_not_reached(); - } - SendMessage(cur_ctrl, BM_SETCHECK, TRUE, 0); -} - -static void -range_handle_wm_command(HWND dlg_hwnd, HWND ctrl, WPARAM w_param, packet_range_t *range) { - HWND cur_ctrl; - TCHAR range_text[RANGE_TEXT_MAX]; - - switch(w_param) { - case (BN_CLICKED << 16) | EWFD_CAPTURED_BTN: - case (BN_CLICKED << 16) | EWFD_DISPLAYED_BTN: - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_CAPTURED_BTN); - if (SendMessage(cur_ctrl, BM_GETCHECK, 0, 0) == BST_CHECKED) - range->process_filtered = FALSE; - else - range->process_filtered = TRUE; - range_update_dynamics(dlg_hwnd, range); - break; - case (BN_CLICKED << 16) | EWFD_ALL_PKTS_BTN: - if (SendMessage(ctrl, BM_GETCHECK, 0, 0) == BST_CHECKED) { - range->process = range_process_all; - range_update_dynamics(dlg_hwnd, range); - } - break; - case (BN_CLICKED << 16) | EWFD_SEL_PKT_BTN: - if (SendMessage(ctrl, BM_GETCHECK, 0, 0) == BST_CHECKED) { - range->process = range_process_selected; - range_update_dynamics(dlg_hwnd, range); - } - break; - case (BN_CLICKED << 16) | EWFD_MARKED_BTN: - if (SendMessage(ctrl, BM_GETCHECK, 0, 0) == BST_CHECKED) { - range->process = range_process_marked; - range_update_dynamics(dlg_hwnd, range); - } - break; - case (BN_CLICKED << 16) | EWFD_FIRST_LAST_BTN: - if (SendMessage(ctrl, BM_GETCHECK, 0, 0) == BST_CHECKED) { - range->process = range_process_marked_range; - range_update_dynamics(dlg_hwnd, range); - } - break; - case (BN_CLICKED << 16) | EWFD_RANGE_BTN: - if (SendMessage(ctrl, BM_GETCHECK, 0, 0) == BST_CHECKED) { - range->process = range_process_user_range; - range_update_dynamics(dlg_hwnd, range); - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_RANGE_EDIT); - SetFocus(cur_ctrl); - } - break; - case (EN_SETFOCUS << 16) | EWFD_RANGE_EDIT: - cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_RANGE_BTN); - SendMessage(cur_ctrl, BM_CLICK, 0, 0); - break; - case (EN_CHANGE << 16) | EWFD_RANGE_EDIT: - SendMessage(ctrl, WM_GETTEXT, (WPARAM) RANGE_TEXT_MAX, (LPARAM) range_text); - packet_range_convert_str(range, utf_16to8(range_text)); - range_update_dynamics(dlg_hwnd, range); - break; - case (BN_CLICKED << 16) | EWFD_REMOVE_IGN_CB: - if (SendMessage(ctrl, BM_GETCHECK, 0, 0) == BST_CHECKED) { - range->remove_ignored = TRUE; - } else { - range->remove_ignored = FALSE; - } - range_update_dynamics(dlg_hwnd, range); - break; - } -} - -#if (_MSC_VER <= 1200) -static UINT CALLBACK -#else -static UINT_PTR CALLBACK -#endif -merge_file_hook_proc(HWND mf_hwnd, UINT msg, WPARAM w_param, LPARAM l_param) { - HWND cur_ctrl, parent; - OFNOTIFY *notify = (OFNOTIFY *) l_param; - TCHAR sel_name[MAX_PATH]; - - switch(msg) { - case WM_INITDIALOG: - /* Retain the filter text, and fill it in. */ - if(dfilter_str != NULL) { - cur_ctrl = GetDlgItem(mf_hwnd, EWFD_FILTER_EDIT); - SetWindowText(cur_ctrl, utf_8to16(dfilter_str)); - } - - /* Append by default */ - cur_ctrl = GetDlgItem(mf_hwnd, EWFD_MERGE_PREPEND_BTN); - SendMessage(cur_ctrl, BM_SETCHECK, TRUE, 0); - merge_action = merge_append; - - preview_set_filename(mf_hwnd, NULL); - break; - case WM_NOTIFY: - switch (notify->hdr.code) { - case CDN_FILEOK: - /* Fetch the read filter */ - cur_ctrl = GetDlgItem(mf_hwnd, EWFD_FILTER_EDIT); - if (dfilter_str) - g_free(dfilter_str); - dfilter_str = filter_tb_get(cur_ctrl); - - cur_ctrl = GetDlgItem(mf_hwnd, EWFD_MERGE_CHRONO_BTN); - if(SendMessage(cur_ctrl, BM_GETCHECK, 0, 0) == BST_CHECKED) { - merge_action = merge_chrono; - } else { - cur_ctrl = GetDlgItem(mf_hwnd, EWFD_MERGE_PREPEND_BTN); - if(SendMessage(cur_ctrl, BM_GETCHECK, 0, 0) == BST_CHECKED) { - merge_action = merge_prepend; - } - } - - break; - case CDN_SELCHANGE: - /* This _almost_ works correctly. We need to handle directory - selections, etc. */ - parent = GetParent(mf_hwnd); - CommDlg_OpenSave_GetSpec(parent, sel_name, MAX_PATH); - preview_set_filename(mf_hwnd, utf_16to8(sel_name)); - break; - case CDN_HELP: - topic_cb(NULL, HELP_MERGE_WIN32_DIALOG); - break; - default: - break; - } - break; - case WM_COMMAND: - cur_ctrl = (HWND) l_param; - switch(w_param) { - case (EN_UPDATE << 16) | EWFD_FILTER_EDIT: - filter_tb_syntax_check(cur_ctrl, NULL); - break; - default: - break; - } - break; - default: - break; - } - return 0; -} - - -#if (_MSC_VER <= 1200) -static UINT CALLBACK -#else -static UINT_PTR CALLBACK -#endif -export_file_hook_proc(HWND ef_hwnd, UINT msg, WPARAM w_param, LPARAM l_param) { - HWND cur_ctrl; - OFNOTIFY *notify = (OFNOTIFY *) l_param; - gboolean pkt_fmt_enable; - int i, index; - - switch(msg) { - case WM_INITDIALOG: - /* init the printing range */ - packet_range_init(&print_args.range); - range_handle_wm_initdialog(ef_hwnd, &print_args.range); - format_handle_wm_initdialog(ef_hwnd, &print_args); - - break; - case WM_COMMAND: - cur_ctrl = (HWND) l_param; - switch (w_param) { - case (CBN_SELCHANGE << 16) | EWFD_PKT_DETAIL_COMBO: - default: - range_handle_wm_command(ef_hwnd, cur_ctrl, w_param, &print_args.range); - print_update_dynamic(ef_hwnd, &print_args); - break; - } - break; - case WM_NOTIFY: - switch (notify->hdr.code) { - case CDN_FILEOK: - break; - case CDN_TYPECHANGE: - index = notify->lpOFN->nFilterIndex; - - if (index == 2) /* PostScript */ - print_args.format = PR_FMT_TEXT; - else - print_args.format = PR_FMT_PS; - if (index == 3 || index == 4 || index == 5 || index == 6) - pkt_fmt_enable = FALSE; - else - pkt_fmt_enable = TRUE; - for (i = EWFD_PKT_FORMAT_GB; i <= EWFD_PKT_NEW_PAGE_CB; i++) { - cur_ctrl = GetDlgItem(ef_hwnd, i); - EnableWindow(cur_ctrl, pkt_fmt_enable); - } - break; - case CDN_HELP: - topic_cb(NULL, HELP_EXPORT_FILE_WIN32_DIALOG); - break; - default: - break; - } - break; - default: - break; - } - return 0; -} - -#if (_MSC_VER <= 1200) -static UINT CALLBACK -#else -static UINT_PTR CALLBACK -#endif -export_raw_file_hook_proc(HWND ef_hwnd, UINT msg, WPARAM w_param, LPARAM l_param) { - HWND cur_ctrl; - OPENFILENAME *ofnp = (OPENFILENAME *) l_param; - TCHAR raw_msg[100]; - OFNOTIFY *notify = (OFNOTIFY *) l_param; - - switch(msg) { - case WM_INITDIALOG: - _snwprintf(raw_msg, sizeof(raw_msg), _T("%d byte%s of raw binary data will be written"), - ofnp->lCustData, plurality(ofnp->lCustData, "", "s")); - cur_ctrl = GetDlgItem(ef_hwnd, EWFD_EXPORTRAW_ST); - SetWindowText(cur_ctrl, raw_msg); - break; - case WM_NOTIFY: - switch (notify->hdr.code) { - case CDN_HELP: - topic_cb(NULL, HELP_EXPORT_BYTES_WIN32_DIALOG); - break; - default: - break; - } - default: - break; - } - return 0; -} - -/* - * Editor modelines - * - * Local Variables: - * c-basic-offset: 4 - * tab-width: 8 - * indent-tabs-mode: nil - * End: - * - * ex: set shiftwidth=4 tabstop=8 expandtab - * :indentSize=4:tabSize=8:noTabs=true: - */ - diff --git a/gtk/file_dlg_win32.h b/gtk/file_dlg_win32.h deleted file mode 100644 index 9fab732f0f..0000000000 --- a/gtk/file_dlg_win32.h +++ /dev/null @@ -1,155 +0,0 @@ -/* win32_file_dlg.h - * Native Windows file dialog routines - * - * $Id$ - * - * Wireshark - Network traffic analyzer - * By Gerald Combs <gerald@wireshark.org> - * Copyright 2006 Gerald Combs - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef __WIN32_FILE_DLG_H__ -#define __WIN32_FILE_DLG_H__ - -typedef enum { - export_type_text = 1, - export_type_ps, - export_type_csv, - export_type_psml, - export_type_pdml, - export_type_carrays -} export_type_e; - -/** Open the "Open" dialog box. - * - * @param h_wnd HWND of the parent window. - */ -gboolean win32_open_file (HWND h_wnd); - -/** Open the "Save As" dialog box. - * - * @param h_wnd HWND of the parent window. - * @param action_after_save The action to take, when save completed - * @param action_after_save_data Data for action_after_save - */ -void win32_save_as_file(HWND h_wnd, action_after_save_e action_after_save, gpointer action_after_save_data); - -/** Open the "Merge" dialog box. - * - * @param h_wnd HWND of the parent window. - */ -void win32_merge_file (HWND h_wnd); - -/** Open the "Export" dialog box. - * - * @param h_wnd HWND of the parent window. - * @param export_type The export type. - */ -void win32_export_file (HWND h_wnd, export_type_e export_type); - -/** Open the "Export raw bytes" dialog box. - * - * @param h_wnd HWND of the parent window. - */ -void win32_export_raw_file (HWND h_wnd); - -/** Open the "Export Color Filters" dialog box - * - * @param h_wnd HWND of the parent window - * @param filter_list the list to export - */ -void win32_export_color_file(HWND h_wnd, gpointer filter_list); - -/** Open the "Import Color Filters" dialog box - * - * @param h_wnd HWND of the parent window - * @param color_filters the calling widget - */ -void win32_import_color_file(HWND h_wnd, gpointer color_filters); - -void file_set_save_marked_sensitive(); - -/* Open dialog defines */ -/* #define EWFD_FILTER_BTN 1000 */ -#define EWFD_FILTER_LBL 1000 -#define EWFD_FILTER_EDIT 1001 - -#define EWFD_MAC_NR_CB 1002 -#define EWFD_NET_NR_CB 1003 -#define EWFD_TRANS_NR_CB 1004 - -/* Note: The preview title (PT) and text (PTX) MUST have sequential IDs; - they're used in a for loop. EWFD_PT_FILENAME MUST be first, and - EWFD_PTX_ELAPSED MUST be last. (so why don't we just use an enum? */ -#define EWFD_PT_FILENAME 1005 -#define EWFD_PT_FORMAT 1006 -#define EWFD_PT_SIZE 1007 -#define EWFD_PT_PACKETS 1008 -#define EWFD_PT_FIRST_PKT 1009 -#define EWFD_PT_ELAPSED 1010 - -#define EWFD_PTX_FILENAME 1011 -#define EWFD_PTX_FORMAT 1012 -#define EWFD_PTX_SIZE 1013 -#define EWFD_PTX_PACKETS 1014 -#define EWFD_PTX_FIRST_PKT 1015 -#define EWFD_PTX_ELAPSED 1016 - - -/* Save dialog defines */ -#define EWFD_CAPTURED_BTN 1000 -#define EWFD_DISPLAYED_BTN 1001 -#define EWFD_ALL_PKTS_BTN 1002 -#define EWFD_SEL_PKT_BTN 1003 -#define EWFD_MARKED_BTN 1004 -#define EWFD_FIRST_LAST_BTN 1005 -#define EWFD_RANGE_BTN 1006 -#define EWFD_RANGE_EDIT 1007 -#define EWFD_REMOVE_IGN_CB 1008 - -#define EWFD_ALL_PKTS_CAP 1009 -#define EWFD_SEL_PKT_CAP 1010 -#define EWFD_MARKED_CAP 1011 -#define EWFD_FIRST_LAST_CAP 1012 -#define EWFD_RANGE_CAP 1013 -#define EWFD_IGNORED_CAP 1014 - -#define EWFD_ALL_PKTS_DISP 1015 -#define EWFD_SEL_PKT_DISP 1016 -#define EWFD_MARKED_DISP 1017 -#define EWFD_FIRST_LAST_DISP 1018 -#define EWFD_RANGE_DISP 1019 -#define EWFD_IGNORED_DISP 1020 - -/* Export raw dialog defines. */ -#define EWFD_EXPORTRAW_ST 1000 - -/* Merge dialog defines. Overlays Open dialog defines above. */ -#define EWFD_MERGE_PREPEND_BTN 1050 -#define EWFD_MERGE_CHRONO_BTN 1051 -#define EWFD_MERGE_APPEND_BTN 1052 - -/* Export dialog defines. Overlays Save dialog defines above. */ -/* These MUST be contiguous */ -#define EWFD_PKT_FORMAT_GB 1050 -#define EWFD_PKT_SUMMARY_CB 1051 -#define EWFD_PKT_DETAIL_CB 1052 -#define EWFD_PKT_DETAIL_COMBO 1053 -#define EWFD_PKT_BYTES_CB 1054 -#define EWFD_PKT_NEW_PAGE_CB 1055 - -#endif /* win32-file-dlg.h */ diff --git a/gtk/print_dlg.c b/gtk/print_dlg.c index 4dc2ad263b..7b581ba3eb 100644 --- a/gtk/print_dlg.c +++ b/gtk/print_dlg.c @@ -54,8 +54,8 @@ #if _WIN32 #include <gdk/gdkwin32.h> #include <windows.h> -#include "gtk/file_dlg_win32.h" -#include "gtk/print_win32.h" +#include "win32/file_dlg_win32.h" +#include "win32/print_win32.h" #include "../tempfile.h" #endif diff --git a/gtk/print_win32.c b/gtk/print_win32.c deleted file mode 100644 index 36940b1a5b..0000000000 --- a/gtk/print_win32.c +++ /dev/null @@ -1,258 +0,0 @@ -/* print_mswin.c - * Printing support for MSWindows - * - * $Id$ - * - * Wireshark - Network traffic analyzer - * By Gerald Combs <gerald@wireshark.org> - * Copyright 2002, Jeffrey C. Foster <jfoste@woodward.com> - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * - * This original code was from the Technet Article Q139652 : - * HOWTO: Print a Document - */ - - -#include <string.h> -#include <stdio.h> - -#include <windows.h> -#include <commdlg.h> - -#include <winspool.h> - -#include "gtk/print_win32.h" -#include "wsutil/file_util.h" -/* -Some thoughts about a GTK win32 printer dialog: - -"EnumPrinters()", asking for information level 2 - the PRINTER_INFO_2 -structure contains a pLocation string pointer, along with other -information. - -"PrinterProperties", could be used to show a native printer property page?!? - -See - - http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/prntspol_62ia.asp - -for information on printer APIs. - -*/ -static BOOL CALLBACK abort_proc( HDC hDC, int Error ); -static HDC get_printer_dc(void); -static void init_doc_struct( DOCINFO* di, char* docname); -static void print_file( char* file_name, HDC hdc); - -void print_mswin(char *file_name) - - { - HDC hDC; - DOCINFO di; - - HWND hWndParent = HWND_DESKTOP; /* would be better to be a real window */ - - /* Need a printer DC to print to. */ - hDC = get_printer_dc(); - - /* Did you get a good DC?, Cancel will return NULL also, so what to do? */ - if( !hDC) - { - return; - } - - /* You always have to use an AbortProc(). */ - if( SetAbortProc( hDC, abort_proc ) == SP_ERROR ) - { - MessageBox( NULL, "Error setting up AbortProc", - "Error", MB_APPLMODAL | MB_OK); - return; - } - - /* Init the DOCINFO and start the document. */ - init_doc_struct( &di, "MyDoc"); - StartDoc( hDC, &di ); - - /* Print one page. */ - StartPage( hDC ); - print_file(file_name, hDC ); - EndPage( hDC ); - - /* Indicate end of document. */ - EndDoc( hDC ); - - /* Clean up */ - DeleteDC( hDC ); - } - - /*===============================*/ - /* Obtain printer device context */ - /* ==============================*/ - static HDC get_printer_dc(void) - { - PRINTDLG pdlg; - - /* - * XXX - can this be done without a Windows print dialog? - * - * "CreateDC()" creates a device context, and you can - * apparently specify WINSPL16 as the driver name on - * Windows OT, or the name of a "print provider", such as - * "WINSPOOL" on Windows NT, to get a context for a printer. - * - * The device name would be the printer name as shown by the - * Print Manager; is there a way to enumerate those? - */ - - /* Initialize the PRINTDLG structure. */ - memset( &pdlg, 0, sizeof( PRINTDLG ) ); - pdlg.lStructSize = sizeof( PRINTDLG ); - /* Set the flag to return printer DC. */ - pdlg.Flags = - /* return the device context we need */ - PD_RETURNDC | - /* disable the "Pages" radio button */ - PD_NOPAGENUMS | - /* disable the "Selection" radio button */ - PD_NOSELECTION | - /* let device print multiple pages (if requested) */ - PD_USEDEVMODECOPIESANDCOLLATE; - - /* Invoke the printer dialog box. */ - PrintDlg( &pdlg ); - - /* hDC member of the PRINTDLG structure contains the printer DC. */ - return pdlg.hDC; - } - - /*===============================*/ - /* The Abort Procudure */ - /* ==============================*/ - static BOOL CALLBACK abort_proc( HDC hDC, int Error ) - { - MSG msg; - while( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) - { - TranslateMessage( &msg ); - DispatchMessage( &msg ); - } - return TRUE; - } - - /*===============================*/ - /* Initialize DOCINFO structure */ - /* ==============================*/ - static void init_doc_struct( DOCINFO* di, char* docname) - { - /* Always zero it before using it. */ - memset( di, 0, sizeof( DOCINFO ) ); - /* Fill in the required members. */ - di->cbSize = sizeof( DOCINFO ); - di->lpszDocName = docname; - } - - /*===============================*/ - /* Drawing on the DC */ - /* ==============================*/ -static void print_file( char *file_name, HDC hdc) { - - #define max_buf_size 1024 - #define max_lines 66 - #define y_offset 5 - #define x_offset 5 - - FILE* fh1; - size_t results; - int cnt=0, y_pos = y_offset, y_cnt = 0; - char buf[ max_buf_size]; - char ch; - TEXTMETRIC tm; - - GetTextMetrics(hdc, &tm); - SetMapMode (hdc, MM_TEXT); - - - fh1 = ws_fopen( file_name, "r" ); - if( !fh1 ) { - MessageBox( NULL, "Open failed on input file", - "Error", MB_APPLMODAL | MB_OK); - return; - } - - while ((results = fread( &ch, 1, 1, fh1 )) != 0) { - - /* end of page (form feed)? */ - if ( ch == 0x0c){ - /* send buffer */ - buf[cnt] = 0; - TextOut(hdc, x_offset,y_pos, buf, (int) strlen(buf)); - y_pos += tm.tmHeight; - cnt = 0; - - /* reset page */ - EndPage( hdc ); - StartPage( hdc ); - y_pos = y_offset; - y_cnt = 0; - continue; - } - - /* end of line (line feed)? */ - if ( ch == 0x0a){ - /* send buffer */ - buf[ cnt] = 0; - TextOut(hdc, x_offset,y_pos, buf, (int) strlen(buf)); - y_pos += tm.tmHeight; - cnt = 0; - /* last line on page? -> reset page */ - if ( ++y_cnt == max_lines){ - EndPage( hdc ); - StartPage( hdc ); - y_pos = y_offset; - y_cnt = 0; - } - continue; - } - - /* buffer full? */ - if ( cnt == ( max_buf_size - 1)) { - /* send buffer */ - buf[ cnt] = 0; - TextOut(hdc, x_offset, y_pos, buf, (int) strlen(buf)); - y_pos += tm.tmHeight; - cnt = 0; - /* last line on page? -> reset page */ - if ( ++y_cnt == max_lines){ - EndPage( hdc ); - StartPage( hdc ); - y_pos = y_offset; - y_cnt = 0; - } - continue; - } - - buf[ cnt++] = ch; - } /* while */ - - /* Print the remaining text if needed */ - if ( cnt > 0) { - buf[ cnt] = 0; - TextOut(hdc, 0,y_pos, buf, (int) strlen(buf)); - } - - fclose(fh1); -} diff --git a/gtk/print_win32.h b/gtk/print_win32.h deleted file mode 100644 index 21a5bce9aa..0000000000 --- a/gtk/print_win32.h +++ /dev/null @@ -1,38 +0,0 @@ -/* print_mswin.h - * Printing support for MSWindows - * - * $Id$ - * - * Wireshark - Network traffic analyzer - * By Gerald Combs <gerald@wireshark.org> - * Copyright 2002, Jeffrey C. Foster <jfoste@woodward.com> - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef __PRINT_MSWIN_H__ -#define __PRINT_MSWIN_H__ - -/** @file - * Win32 specific printing. - */ - -/** Print the given file. - * - * @param file_name the file to print - */ -void print_mswin(char *file_name); - -#endif |