Fix a smallterm crash and refactor slightly
authoradvil <rawlins@gmail.com>
Sat, 1 Aug 2020 15:48:05 +0000 (11:48 -0400)
committeradvil <rawlins@gmail.com>
Sat, 1 Aug 2020 15:50:16 +0000 (11:50 -0400)
The crash happens because there are code paths that can directly redraw
the hud. The refactor is to prevent some messy recursion that doesn't
cause any problems now but is going to be bug-prone sooner or later.

crawl-ref/source/output.cc
crawl-ref/source/output.h
crawl-ref/source/view.cc

index 0e917c4..501fea7 100644 (file)
@@ -1273,6 +1273,10 @@ static void _redraw_title()
 
 void print_stats()
 {
+#ifndef USE_TILE_LOCAL
+    if (crawl_state.smallterm)
+        return;
+#endif
     int ac_pos = 5;
     int ev_pos = ac_pos + 1;
 
@@ -1467,6 +1471,15 @@ void draw_border()
     // Line 8 is exp pool, Level
 }
 
+#ifndef USE_TILE_LOCAL
+void smallterm_warning()
+{
+    clrscr();
+    CGOTOXY(1,1, GOTO_CRT);
+    CPRINTF("Your terminal window is too small; please resize to at least %d,%d", MIN_COLS, MIN_LINES);
+}
+#endif
+
 void redraw_screen(bool show_updates)
 {
     if (!crawl_state.need_save)
@@ -1484,9 +1497,7 @@ void redraw_screen(bool show_updates)
 #ifndef USE_TILE_LOCAL
     if (crawl_state.smallterm)
     {
-        clrscr();
-        CGOTOXY(1,1, GOTO_CRT);
-        CPRINTF("Your terminal window is too small; please resize to at least %d,%d", MIN_COLS, MIN_LINES);
+        smallterm_warning();
         return;
     }
 #endif
index d3e85f4..c69f5b8 100644 (file)
@@ -17,6 +17,10 @@ void print_stats();
 void print_stats_level();
 void draw_border();
 
+#ifndef USE_TILE_LOCAL
+void smallterm_warning();
+#endif
+
 void redraw_screen(bool show_updates = true);
 
 string mpr_monster_list(bool past = false);
index 5e2be33..26ab20a 100644 (file)
@@ -1368,7 +1368,7 @@ void viewwindow(bool show_updates, bool tiles_only, animation *a, view_renderer
 
         if (crawl_state.smallterm)
         {
-            redraw_screen();
+            smallterm_warning();
             update_screen();
             return;
         }