From: nethack.allison Date: Mon, 11 Mar 2002 04:36:54 +0000 (+0000) Subject: (from ) X-Git-Tag: MOVE2GIT~3001 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=300b7b7495d3551409b554da127b91098a8eeca5;p=nethack (from ) Fix crash. WIN_MAP was used without before initialization in mswin_select_map_mode --- diff --git a/win/win32/mhmain.c b/win/win32/mhmain.c index 54aa4b019..e3a83af51 100644 --- a/win/win32/mhmain.c +++ b/win/win32/mhmain.c @@ -829,6 +829,9 @@ void mswin_menu_check_intf_mode() void mswin_select_map_mode(int mode) { PNHMainWindow data; + winid map_id; + + map_id = WIN_MAP; data = (PNHMainWindow)GetWindowLong(GetNHApp()->hMainWnd, GWL_USERDATA); /* override for Rogue level */ @@ -866,7 +869,15 @@ void mswin_select_map_mode(int mode) } iflags.wc_map_mode = mode; - mswin_map_mode(mswin_hwnd_from_winid(WIN_MAP), mode); + + /* + ** first, check if WIN_MAP has been inialized. + ** If not - attempt to retrieve it by type, then check it again + */ + if( map_id==WIN_ERR ) + map_id = mswin_winid_from_type(NHW_MAP); + if( map_id!=WIN_ERR ) + mswin_map_mode(mswin_hwnd_from_winid(map_id), mode); } static struct t_menu2mapmode { diff --git a/win/win32/mhmap.c b/win/win32/mhmap.c index c1c798332..8355b16ab 100644 --- a/win/win32/mhmap.c +++ b/win/win32/mhmap.c @@ -178,7 +178,6 @@ int mswin_map_mode(HWND hWnd, int mode) SIZE mapSize; data = (PNHMapWindow)GetWindowLong(hWnd, GWL_USERDATA); - if (!data) return mode; if( mode == data->mapMode ) return mode; oldMode = data->mapMode; diff --git a/win/win32/mswproc.c b/win/win32/mswproc.c index 0862ca3f9..1bb435409 100644 --- a/win/win32/mswproc.c +++ b/win/win32/mswproc.c @@ -146,6 +146,9 @@ void mswin_init_nhwindows(int* argc, char** argv) #endif mswin_nh_input_init(); + /* set it to WIN_ERR so we can detect attempts to + use this ID before it is inialized */ + WIN_MAP = WIN_ERR; /* Read Windows settings from the reqistry */ mswin_read_reg(); @@ -406,17 +409,19 @@ void mswin_clear_nhwindow(winid wid) (wid < MAXWINDOWS) && (GetNHApp()->windowlist[wid].win != NULL)) { - SendMessage( - GetNHApp()->windowlist[wid].win, - WM_MSNH_COMMAND, (WPARAM)MSNH_MSG_CLEAR_WINDOW, (LPARAM)NULL ); - } - #ifdef REINCARNATION - if( Is_rogue_level(&u.uz) ) - mswin_map_mode(mswin_hwnd_from_winid(WIN_MAP), ROGUE_LEVEL_MAP_MODE); - else - mswin_map_mode(mswin_hwnd_from_winid(WIN_MAP), iflags.wc_map_mode); + if( GetNHApp()->windowlist[wid].type == NHW_MAP ) { + if( Is_rogue_level(&u.uz) ) + mswin_map_mode(mswin_hwnd_from_winid(WIN_MAP), ROGUE_LEVEL_MAP_MODE); + else + mswin_map_mode(mswin_hwnd_from_winid(WIN_MAP), iflags.wc_map_mode); + } #endif + + SendMessage( + GetNHApp()->windowlist[wid].win, + WM_MSNH_COMMAND, (WPARAM)MSNH_MSG_CLEAR_WINDOW, (LPARAM)NULL ); + } } /* -- Display the window on the screen. If there is data