Added os_quit() and ^Q command to cause Frotz to immediately and cleanly exit.
authorDavid Griffith <dave@661.org>
Tue, 20 Feb 2018 10:54:05 +0000 (02:54 -0800)
committerDavid Griffith <dave@661.org>
Tue, 20 Feb 2018 10:54:05 +0000 (02:54 -0800)
src/common/frotz.h
src/curses/ux_init.c
src/curses/ux_input.c

index d774365166a1d64c267b9ca745d8d5f8325f2029..5794e4b7f2bd26fdd81e8cd4846208bae41a8419 100644 (file)
@@ -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);
index db8710e17630415eed2c4f35a5fefba0e04a7716..bbce07199dfbf352f4fd986fd152d05d397c4572 100644 (file)
@@ -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
  *
index 42c4cbd9c50753f2687f85f65fcaf2467c378d66..b6bec9c1f14cdf2eb61328312cdf0e87972dfe45 100644 (file)
@@ -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? */
        }