SAFERHANGUP win ce (from <Someone>)

This commit is contained in:
nethack.allison
2003-09-30 03:41:02 +00:00
parent 3671f12b0a
commit 4349f52899
3 changed files with 43 additions and 1 deletions

View File

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

View File

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

View File

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