From: nethack.allison Date: Tue, 30 Sep 2003 03:41:02 +0000 (+0000) Subject: SAFERHANGUP win ce (from ) X-Git-Tag: MOVE2GIT~1741 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4349f5289969b02f4b494fc20102558b37f99f7f;p=nethack SAFERHANGUP win ce (from ) --- diff --git a/include/wceconf.h b/include/wceconf.h index deb285997..bdea4bc81 100644 --- a/include/wceconf.h +++ b/include/wceconf.h @@ -74,6 +74,12 @@ #define PORT_HELP "porthelp" +#define SAFERHANGUP /* Define SAFERHANGUP to delay hangup processing + * until the main command loop. 'safer' because it + * avoids certain cheats and also avoids losing + * objects being thrown when the hangup occurs. + */ + #if defined(WIN_CE_POCKETPC) # define PORT_CE_PLATFORM "Pocket PC" #elif defined(WIN_CE_PS2xx) diff --git a/sys/wince/mhinput.c b/sys/wince/mhinput.c index 53ca65d93..55959e9e6 100644 --- a/sys/wince/mhinput.c +++ b/sys/wince/mhinput.c @@ -33,7 +33,12 @@ void mswin_nh_input_init() /* check for input */ int mswin_have_input() { - return (nhi_read_pos!=nhi_write_pos); + return +#ifdef SAFERHANGUP + /* we always have input (ESC) if hangup was requested */ + program_state.done_hup || +#endif + (nhi_read_pos!=nhi_write_pos); } /* add event to the queue */ @@ -57,6 +62,16 @@ PMSNHEvent mswin_input_pop() { PMSNHEvent retval; +#ifdef SAFERHANGUP + /* always return ESC when hangup was requested */ + if( program_state.done_hup ) { + static MSNHEvent hangup_event; + hangup_event.type = NHEVENT_CHAR; + hangup_event.kbd.ch = '\033'; + return &hangup_event; + } +#endif + if( !nhi_init_input ) mswin_nh_input_init(); if( nhi_read_pos!=nhi_write_pos ) { @@ -74,6 +89,16 @@ PMSNHEvent mswin_input_peek() { PMSNHEvent retval; +#ifdef SAFERHANGUP + /* always return ESC when hangup was requested */ + if( program_state.done_hup ) { + static MSNHEvent hangup_event; + hangup_event.type = NHEVENT_CHAR; + hangup_event.kbd.ch = '\033'; + return &hangup_event; + } +#endif + if( !nhi_init_input ) mswin_nh_input_init(); if( nhi_read_pos!=nhi_write_pos ) { diff --git a/sys/wince/mhmain.c b/sys/wince/mhmain.c index 31e3ba69c..6edc8755b 100644 --- a/sys/wince/mhmain.c +++ b/sys/wince/mhmain.c @@ -480,7 +480,18 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar case WM_CLOSE: { /* exit gracefully */ +#ifdef SAFERHANGUP + /* destroy popup window - it has its own loop and we need to + return control to NetHack core at this point */ + if( IsWindow( GetNHApp()->hPopupWnd ) ) + SendMessage( GetNHApp()->hPopupWnd, WM_COMMAND, IDCANCEL, 0); + + /* tell NetHack core that "hangup" is requested */ + hangup(1); +#else dosave0(); + terminate(EXIT_SUCCESS); +#endif } return 0; /*-----------------------------------------------------------------------*/