From d7cb285ecd75757ae17dd3a002dd2a31d10c235f Mon Sep 17 00:00:00 2001 From: David Griffith Date: Tue, 20 Feb 2018 02:54:05 -0800 Subject: [PATCH] Added os_quit() and ^Q command to cause Frotz to immediately and cleanly exit. --- src/common/frotz.h | 1 + src/curses/ux_init.c | 23 +++++++++++++++++++++-- src/curses/ux_input.c | 3 +++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/common/frotz.h b/src/common/frotz.h index d774365..5794e4b 100644 --- a/src/common/frotz.h +++ b/src/common/frotz.h @@ -789,3 +789,4 @@ void os_stop_sample (); int os_string_width (const zchar *); void os_init_setup (void); void os_warn (const char *, ...); +void os_quit (void); diff --git a/src/curses/ux_init.c b/src/curses/ux_init.c index db8710e..bbce071 100644 --- a/src/curses/ux_init.c +++ b/src/curses/ux_init.c @@ -538,11 +538,30 @@ void os_reset_screen (void) os_set_text_style(0); os_display_string((zchar *)"[Hit any key to exit.]\n"); os_read_key(0, FALSE); - scrollok(stdscr, TRUE); scroll(stdscr); - refresh(); endwin(); + os_quit(); }/* os_reset_screen */ +/* + * os_quit + * + * Immediately and cleanly exit. + * + */ +void os_quit(void) +{ + os_stop_sample(0); + ux_blorb_stop(); + if (u_setup.curses_active) { + scrollok(stdscr, TRUE); + scroll(stdscr); + refresh(); + endwin(); + } + exit(1); +}/* os_quit */ + + /* * os_restart_game * diff --git a/src/curses/ux_input.c b/src/curses/ux_input.c index 42c4cbd..b6bec9c 100644 --- a/src/curses/ux_input.c +++ b/src/curses/ux_input.c @@ -252,6 +252,9 @@ static int unix_read_char(int extkeys) case MOD_CTRL ^ 'U': c = ZC_DEL_TO_BOL; break; case MOD_CTRL ^ 'W': c = ZC_DEL_WORD; break; + /* use ^Q to immediately exit. */ + case MOD_CTRL ^ 'Q': os_quit(); + default: break; /* Who knows? */ } -- 2.34.1