(from <Someone>)

Fix crash.
WIN_MAP was used without before initialization in mswin_select_map_mode
This commit is contained in:
nethack.allison
2002-03-11 04:36:54 +00:00
parent 3578bd38da
commit 300b7b7495
3 changed files with 26 additions and 11 deletions

View File

@@ -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 {

View File

@@ -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;

View File

@@ -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(
#ifdef REINCARNATION
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 );
}
#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);
#endif
}
}
/* -- Display the window on the screen. If there is data