From 4b0ccbb01aa5d03812e81a6fdcad596a1f91f58a Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 22 Aug 2017 02:47:22 +0200 Subject: [PATCH] The WinPcap test function now opens and closes the WinPcap DLL handle as needed; Loading a configuration file from within the emulator now correctly resets the menus and re-checks all items. --- src/NETWORK/net_pcap.c | 37 +++++++++-- src/WIN/win.c | 135 +++++++++++++++++++++++++++++------------ 2 files changed, 130 insertions(+), 42 deletions(-) diff --git a/src/NETWORK/net_pcap.c b/src/NETWORK/net_pcap.c index b40144e24..3bab8fe41 100644 --- a/src/NETWORK/net_pcap.c +++ b/src/NETWORK/net_pcap.c @@ -274,6 +274,20 @@ network_pcap_close(void) } +void +network_pcap_stop(void) +{ + /* OK, now shut down WinPcap itself. */ + f_pcap_close(pcap); + + /* Unload the DLL if possible. */ + if (pcap_handle != NULL) { + dynld_close(pcap_handle); + pcap_handle = NULL; + } +} + + /* Test WinPcap - 1 = success, 0 = failure. */ int network_pcap_test(void) @@ -286,7 +300,7 @@ network_pcap_test(void) /* Did we already load the DLL? */ if (pcap_handle == NULL) { - return 0; + pcap_handle = dynld_module("wpcap.dll", pcap_imports); } #if 1 @@ -313,6 +327,13 @@ network_pcap_test(void) dev = network_pcap; if ((dev[0] == '\0') || !strcmp(dev, "none")) { pclog(" No network device configured!\n"); + + /* Unload the DLL if possible. */ + if (pcap_handle != NULL) { + dynld_close(pcap_handle); + pcap_handle = NULL; + } + return 0; } pclog(" Network interface: '%s'\n", dev); @@ -327,6 +348,13 @@ network_pcap_test(void) temp); /* error buffer */ if (pcap == NULL) { pclog(" Unable to open device: %s!\n", temp); + + /* Unload the DLL if possible. */ + if (pcap_handle != NULL) { + dynld_close(pcap_handle); + pcap_handle = NULL; + } + return 0; } @@ -338,16 +366,17 @@ network_pcap_test(void) if (f_pcap_compile(pcap, &fp, filter_exp, 0, 0xffffffff) != -1) { if (f_pcap_setfilter(pcap, &fp) == -1) { pclog(" Error installing filter (%s) !\n", filter_exp); - f_pcap_close(pcap); + network_pcap_stop(); return 0; } } else { pclog(" Could not compile filter (%s) !\n", filter_exp); - f_pcap_close(pcap); + network_pcap_stop(); return 0; } - f_pcap_close(pcap); + network_pcap_stop(); + return 1; } diff --git a/src/WIN/win.c b/src/WIN/win.c index 984839073..c3daac5a8 100644 --- a/src/WIN/win.c +++ b/src/WIN/win.c @@ -1462,6 +1462,100 @@ void win_menu_update(void) #endif } +void reset_menus(void) +{ +#ifdef ENABLE_LOG_TOGGLES +# ifdef ENABLE_BUSLOGIC_LOG + CheckMenuItem(menu, IDM_LOG_BUSLOGIC, buslogic_do_log ? MF_UNCHECKED); +# endif +# ifdef ENABLE_CDROM_LOG + CheckMenuItem(menu, IDM_LOG_CDROM, cdrom_do_log ? MF_UNCHECKED); +# endif +# ifdef ENABLE_D86F_LOG + CheckMenuItem(menu, IDM_LOG_D86F, d86f_do_log ? MF_UNCHECKED); +# endif +# ifdef ENABLE_FDC_LOG + CheckMenuItem(menu, IDM_LOG_FDC, fdc_do_log ? MF_UNCHECKED); +# endif +# ifdef ENABLE_IDE_LOG + CheckMenuItem(menu, IDM_LOG_IDE, ide_do_log ? MF_UNCHECKED); +# endif +# ifdef ENABLE_SERIAL_LOG + CheckMenuItem(menu, IDM_LOG_SERIAL, serial_do_log ? MF_UNCHECKED); +# endif +# ifdef ENABLE_NIC_LOG + /*FIXME: should be network_setlog(1:0) */ + CheckMenuItem(menu, IDM_LOG_NIC, nic_do_log ? MF_UNCHECKED); +# endif +#endif + + CheckMenuItem(menu, IDM_VID_FORCE43, MF_UNCHECKED); + CheckMenuItem(menu, IDM_VID_OVERSCAN, MF_UNCHECKED); + CheckMenuItem(menu, IDM_VID_INVERT, MF_UNCHECKED); + + CheckMenuItem(menu, IDM_VID_RESIZE, MF_UNCHECKED); + CheckMenuItem(menu, IDM_VID_DDRAW + 0, MF_CHECKED); + CheckMenuItem(menu, IDM_VID_DDRAW + 1, MF_CHECKED); + CheckMenuItem(menu, IDM_VID_FS_FULL + 0, MF_CHECKED); + CheckMenuItem(menu, IDM_VID_FS_FULL + 1, MF_CHECKED); + CheckMenuItem(menu, IDM_VID_FS_FULL + 2, MF_CHECKED); + CheckMenuItem(menu, IDM_VID_FS_FULL + 3, MF_CHECKED); + CheckMenuItem(menu, IDM_VID_REMEMBER, MF_UNCHECKED); + CheckMenuItem(menu, IDM_VID_SCALE_1X + 0, MF_CHECKED); + CheckMenuItem(menu, IDM_VID_SCALE_1X + 1, MF_CHECKED); + CheckMenuItem(menu, IDM_VID_SCALE_1X + 2, MF_CHECKED); + CheckMenuItem(menu, IDM_VID_SCALE_1X + 3, MF_CHECKED); + + CheckMenuItem(menu, IDM_VID_CGACON, MF_UNCHECKED); + CheckMenuItem(menu, IDM_VID_GRAYCT_601 + 0, MF_CHECKED); + CheckMenuItem(menu, IDM_VID_GRAYCT_601 + 1, MF_CHECKED); + CheckMenuItem(menu, IDM_VID_GRAYCT_601 + 2, MF_CHECKED); + CheckMenuItem(menu, IDM_VID_GRAY_RGB + 0, MF_CHECKED); + CheckMenuItem(menu, IDM_VID_GRAY_RGB + 1, MF_CHECKED); + CheckMenuItem(menu, IDM_VID_GRAY_RGB + 2, MF_CHECKED); + CheckMenuItem(menu, IDM_VID_GRAY_RGB + 3, MF_CHECKED); + CheckMenuItem(menu, IDM_VID_GRAY_RGB + 4, MF_CHECKED); + +#ifdef ENABLE_LOG_TOGGLES +# ifdef ENABLE_BUSLOGIC_LOG + CheckMenuItem(menu, IDM_LOG_BUSLOGIC, buslogic_do_log ? MF_CHECKED : MF_UNCHECKED); +# endif +# ifdef ENABLE_CDROM_LOG + CheckMenuItem(menu, IDM_LOG_CDROM, cdrom_do_log ? MF_CHECKED : MF_UNCHECKED); +# endif +# ifdef ENABLE_D86F_LOG + CheckMenuItem(menu, IDM_LOG_D86F, d86f_do_log ? MF_CHECKED : MF_UNCHECKED); +# endif +# ifdef ENABLE_FDC_LOG + CheckMenuItem(menu, IDM_LOG_FDC, fdc_do_log ? MF_CHECKED : MF_UNCHECKED); +# endif +# ifdef ENABLE_IDE_LOG + CheckMenuItem(menu, IDM_LOG_IDE, ide_do_log ? MF_CHECKED : MF_UNCHECKED); +# endif +# ifdef ENABLE_SERIAL_LOG + CheckMenuItem(menu, IDM_LOG_SERIAL, serial_do_log ? MF_CHECKED : MF_UNCHECKED); +# endif +# ifdef ENABLE_NIC_LOG + /*FIXME: should be network_setlog(1:0) */ + CheckMenuItem(menu, IDM_LOG_NIC, nic_do_log ? MF_CHECKED : MF_UNCHECKED); +# endif +#endif + + CheckMenuItem(menu, IDM_VID_FORCE43, force_43 ? MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(menu, IDM_VID_OVERSCAN, enable_overscan ? MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(menu, IDM_VID_INVERT, invert_display ? MF_CHECKED : MF_UNCHECKED); + + if (vid_resize) CheckMenuItem(menu, IDM_VID_RESIZE, MF_CHECKED); + CheckMenuItem(menu, IDM_VID_DDRAW + vid_api, MF_CHECKED); + CheckMenuItem(menu, IDM_VID_FS_FULL + video_fullscreen_scale, MF_CHECKED); + CheckMenuItem(menu, IDM_VID_REMEMBER, window_remember ? MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(menu, IDM_VID_SCALE_1X + scale, MF_CHECKED); + + CheckMenuItem(menu, IDM_VID_CGACON, vid_cga_contrast ? MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(menu, IDM_VID_GRAYCT_601 + video_graytype, MF_CHECKED); + CheckMenuItem(menu, IDM_VID_GRAY_RGB + video_grayscale, MF_CHECKED); +} + int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { HWND hwnd; /* This is the handle for our window */ @@ -1590,44 +1684,7 @@ int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpsz if (vid_resize) SetWindowLongPtr(hwnd, GWL_STYLE, (WS_OVERLAPPEDWINDOW&~WS_MINIMIZEBOX)|WS_VISIBLE); else SetWindowLongPtr(hwnd, GWL_STYLE, (WS_OVERLAPPEDWINDOW&~WS_SIZEBOX&~WS_THICKFRAME&~WS_MAXIMIZEBOX&~WS_MINIMIZEBOX)|WS_VISIBLE); -#ifdef ENABLE_LOG_TOGGLES -# ifdef ENABLE_BUSLOGIC_LOG - CheckMenuItem(menu, IDM_LOG_BUSLOGIC, buslogic_do_log ? MF_CHECKED : MF_UNCHECKED); -# endif -# ifdef ENABLE_CDROM_LOG - CheckMenuItem(menu, IDM_LOG_CDROM, cdrom_do_log ? MF_CHECKED : MF_UNCHECKED); -# endif -# ifdef ENABLE_D86F_LOG - CheckMenuItem(menu, IDM_LOG_D86F, d86f_do_log ? MF_CHECKED : MF_UNCHECKED); -# endif -# ifdef ENABLE_FDC_LOG - CheckMenuItem(menu, IDM_LOG_FDC, fdc_do_log ? MF_CHECKED : MF_UNCHECKED); -# endif -# ifdef ENABLE_IDE_LOG - CheckMenuItem(menu, IDM_LOG_IDE, ide_do_log ? MF_CHECKED : MF_UNCHECKED); -# endif -# ifdef ENABLE_SERIAL_LOG - CheckMenuItem(menu, IDM_LOG_SERIAL, serial_do_log ? MF_CHECKED : MF_UNCHECKED); -# endif -# ifdef ENABLE_NIC_LOG - /*FIXME: should be network_setlog(1:0) */ - CheckMenuItem(menu, IDM_LOG_NIC, nic_do_log ? MF_CHECKED : MF_UNCHECKED); -# endif -#endif - - CheckMenuItem(menu, IDM_VID_FORCE43, force_43 ? MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(menu, IDM_VID_OVERSCAN, enable_overscan ? MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(menu, IDM_VID_INVERT, invert_display ? MF_CHECKED : MF_UNCHECKED); - - if (vid_resize) CheckMenuItem(menu, IDM_VID_RESIZE, MF_CHECKED); - CheckMenuItem(menu, IDM_VID_DDRAW + vid_api, MF_CHECKED); - CheckMenuItem(menu, IDM_VID_FS_FULL + video_fullscreen_scale, MF_CHECKED); - CheckMenuItem(menu, IDM_VID_REMEMBER, window_remember ? MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(menu, IDM_VID_SCALE_1X + scale, MF_CHECKED); - - CheckMenuItem(menu, IDM_VID_CGACON, vid_cga_contrast ? MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(menu, IDM_VID_GRAYCT_601 + video_graytype, MF_CHECKED); - CheckMenuItem(menu, IDM_VID_GRAY_RGB + video_grayscale, MF_CHECKED); + reset_menus(); d=romset; for (c=0;c