[1/3,gdb/tui] Make tui_update_variables more readable

Message ID 20230508141036.22723-2-tdevries@suse.de
State New
Headers
Series Add tui border-kind active-ascii |

Commit Message

Tom de Vries May 8, 2023, 2:10 p.m. UTC
  Make tui_update_variables more readable by factoring out two new helper
functions, set_border_attrs and set_border_kind_item.

This makes the code also more regular, and consequently we no longer need the
comment:
...
  /* If one corner changes, all characters are changed.
     Only check the first one.  */
...

Tested on x86_64-linux.
---
 gdb/tui/tui-win.c | 93 +++++++++++++++++++++++++++++++----------------
 1 file changed, 61 insertions(+), 32 deletions(-)
  

Comments

Tom Tromey Dec. 15, 2023, 7:48 p.m. UTC | #1
>>>>> "Tom" == Tom de Vries via Gdb-patches <gdb-patches@sourceware.org> writes:

Tom> Make tui_update_variables more readable by factoring out two new helper
Tom> functions, set_border_attrs and set_border_kind_item.

LGTM.
Approved-By: Tom Tromey <tom@tromey.com>

Tom
  

Patch

diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c
index 7eac03f47a1..cf4cb920524 100644
--- a/gdb/tui/tui-win.c
+++ b/gdb/tui/tui-win.c
@@ -274,6 +274,40 @@  translate (const char *name, struct tui_translate *table)
   return table;
 }
 
+/* Helper function for tui_update_variables.  SET *LVAL to
+   translate (KEY, DICT)->value, and set *LVAL_CHANGED to true if *LVAL
+   changed.  */
+
+static void
+set_border_attrs (int *lval, const char *key, struct tui_translate *dict,
+		  bool *lval_changed)
+{
+  struct tui_translate *entry = translate (key, dict);
+
+  if (*lval != (chtype) entry->value)
+    {
+      *lval = entry->value;
+      *lval_changed = true;
+    }
+}
+
+/* Helper function for tui_update_variables.  SET *LVAL to
+   translate (KEY, DICT)->value, and set *LVAL_CHANGED to true if *LVAL
+   changed.  If translate (KEY, DICT)->value is negative, use ACS instead.  */
+
+static void
+set_border_kind_item (chtype *lval, const char *key,
+		      struct tui_translate *dict, int acs, bool *lval_changed)
+{
+  struct tui_translate *entry = translate (key, dict);
+
+  if (*lval != (chtype) entry->value)
+    {
+      *lval = (entry->value < 0) ? acs : entry->value;
+      *lval_changed = true;
+    }
+}
+
 /* Update the tui internal configuration according to gdb settings.
    Returns 1 if the configuration has changed and the screen should
    be redrawn.  */
@@ -281,44 +315,39 @@  bool
 tui_update_variables ()
 {
   bool need_redraw = false;
-  struct tui_translate *entry;
 
-  entry = translate (tui_border_mode, tui_border_mode_translate);
-  if (tui_border_attrs != entry->value)
-    {
-      tui_border_attrs = entry->value;
-      need_redraw = true;
-    }
-  entry = translate (tui_active_border_mode, tui_border_mode_translate);
-  if (tui_active_border_attrs != entry->value)
-    {
-      tui_active_border_attrs = entry->value;
-      need_redraw = true;
-    }
+  set_border_attrs (&tui_border_attrs, tui_border_mode,
+		    tui_border_mode_translate, &need_redraw);
 
-  /* If one corner changes, all characters are changed.
-     Only check the first one.  The ACS characters are determined at
-     run time by curses terminal management.  */
-  entry = translate (tui_border_kind, tui_border_kind_translate_lrcorner);
-  if (tui_border_lrcorner != (chtype) entry->value)
-    {
-      tui_border_lrcorner = (entry->value < 0) ? ACS_LRCORNER : entry->value;
-      need_redraw = true;
-    }
-  entry = translate (tui_border_kind, tui_border_kind_translate_llcorner);
-  tui_border_llcorner = (entry->value < 0) ? ACS_LLCORNER : entry->value;
+  set_border_attrs (&tui_active_border_attrs, tui_active_border_mode,
+		    tui_border_mode_translate, &need_redraw);
+
+  /* The ACS characters are determined at run time by curses terminal
+     management.  */
+
+  set_border_kind_item (&tui_border_lrcorner, tui_border_kind,
+			tui_border_kind_translate_lrcorner, ACS_LRCORNER,
+			&need_redraw);
+
+  set_border_kind_item (&tui_border_llcorner, tui_border_kind,
+			tui_border_kind_translate_llcorner, ACS_LLCORNER,
+			&need_redraw);
 
-  entry = translate (tui_border_kind, tui_border_kind_translate_ulcorner);
-  tui_border_ulcorner = (entry->value < 0) ? ACS_ULCORNER : entry->value;
+  set_border_kind_item (&tui_border_ulcorner, tui_border_kind,
+			tui_border_kind_translate_ulcorner, ACS_ULCORNER,
+			&need_redraw);
 
-  entry = translate (tui_border_kind, tui_border_kind_translate_urcorner);
-  tui_border_urcorner = (entry->value < 0) ? ACS_URCORNER : entry->value;
+  set_border_kind_item (&tui_border_urcorner, tui_border_kind,
+			tui_border_kind_translate_urcorner, ACS_URCORNER,
+			&need_redraw);
 
-  entry = translate (tui_border_kind, tui_border_kind_translate_hline);
-  tui_border_hline = (entry->value < 0) ? ACS_HLINE : entry->value;
+  set_border_kind_item (&tui_border_hline, tui_border_kind,
+			tui_border_kind_translate_hline, ACS_HLINE,
+			&need_redraw);
 
-  entry = translate (tui_border_kind, tui_border_kind_translate_vline);
-  tui_border_vline = (entry->value < 0) ? ACS_VLINE : entry->value;
+  set_border_kind_item (&tui_border_vline, tui_border_kind,
+			tui_border_kind_translate_vline, ACS_VLINE,
+			&need_redraw);
 
   return need_redraw;
 }