2004-01-18 Michael Chastain <mec.gnu@mindspring.com>
[deliverable/binutils-gdb.git] / gdb / tui / tuiWin.c
index 45bb0f6a4e921f8f2b961281d7829caff1c982a5..ecd4920601b797c6dddfe1398daefa1682b8f71f 100644 (file)
@@ -1,49 +1,81 @@
-/*
-** tuiWin.c
-**    This module contains procedures for handling tui window functions
-**    like resize, scrolling, scrolling, changing focus, etc.
-**
-** Author: Susan B. Macchia
-*/
+/* TUI window generic functions.
 
+   Copyright 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation,
+   Inc.
+
+   Contributed by Hewlett-Packard Company.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* This module contains procedures for handling tui window functions
+   like resize, scrolling, scrolling, changing focus, etc.
+
+   Author: Susan B. Macchia  */
 
-#include <string.h>
 #include "defs.h"
 #include "command.h"
 #include "symtab.h"
 #include "breakpoint.h"
 #include "frame.h"
+#include "cli/cli-cmds.h"
+#include "top.h"
+#include "source.h"
 
 #include "tui.h"
 #include "tuiData.h"
 #include "tuiGeneralWin.h"
 #include "tuiStack.h"
+#include "tuiRegs.h"
+#include "tuiDisassem.h"
+#include "tuiSource.h"
 #include "tuiSourceWin.h"
 #include "tuiDataWin.h"
 
-/*******************************
-** External Declarations
-********************************/
-extern void init_page_info ();
+#ifdef HAVE_NCURSES_H       
+#include <ncurses.h>
+#else
+#ifdef HAVE_CURSES_H
+#include <curses.h>
+#endif
+#endif
+
+#include <string.h>
+#include <ctype.h>
+#include <readline/readline.h>
 
 /*******************************
 ** Static Local Decls
 ********************************/
-static void _makeVisibleWithNewHeight PARAMS ((TuiWinInfoPtr));
-static void _makeInvisibleAndSetNewHeight PARAMS ((TuiWinInfoPtr, int));
-static TuiStatus _tuiAdjustWinHeights PARAMS ((TuiWinInfoPtr, int));
-static int _newHeightOk PARAMS ((TuiWinInfoPtr, int));
-static void _tuiSetTabWidth_command PARAMS ((char *, int));
-static void _tuiRefreshAll_command PARAMS ((char *, int));
-static void _tuiSetWinHeight_command PARAMS ((char *, int));
-static void _tuiXDBsetWinHeight_command PARAMS ((char *, int));
-static void _tuiAllWindowsInfo PARAMS ((char *, int));
-static void _tuiSetFocus_command PARAMS ((char *, int));
-static void _tuiScrollForward_command PARAMS ((char *, int));
-static void _tuiScrollBackward_command PARAMS ((char *, int));
-static void _tuiScrollLeft_command PARAMS ((char *, int));
-static void _tuiScrollRight_command PARAMS ((char *, int));
-static void _parseScrollingArgs PARAMS ((char *, TuiWinInfoPtr *, int *));
+static void _makeVisibleWithNewHeight (TuiWinInfoPtr);
+static void _makeInvisibleAndSetNewHeight (TuiWinInfoPtr, int);
+static TuiStatus _tuiAdjustWinHeights (TuiWinInfoPtr, int);
+static int _newHeightOk (TuiWinInfoPtr, int);
+static void _tuiSetTabWidth_command (char *, int);
+static void _tuiRefreshAll_command (char *, int);
+static void _tuiSetWinHeight_command (char *, int);
+static void _tuiXDBsetWinHeight_command (char *, int);
+static void _tuiAllWindowsInfo (char *, int);
+static void _tuiSetFocus_command (char *, int);
+static void _tuiScrollForward_command (char *, int);
+static void _tuiScrollBackward_command (char *, int);
+static void _tuiScrollLeft_command (char *, int);
+static void _tuiScrollRight_command (char *, int);
+static void _parseScrollingArgs (char *, TuiWinInfoPtr *, int *);
 
 
 /***************************************
@@ -57,113 +89,346 @@ static void _parseScrollingArgs PARAMS ((char *, TuiWinInfoPtr *, int *));
 ** PUBLIC FUNCTIONS
 ***************************************/
 
+#ifndef ACS_LRCORNER
+#  define ACS_LRCORNER '+'
+#endif
+#ifndef ACS_LLCORNER
+#  define ACS_LLCORNER '+'
+#endif
+#ifndef ACS_ULCORNER
+#  define ACS_ULCORNER '+'
+#endif
+#ifndef ACS_URCORNER
+#  define ACS_URCORNER '+'
+#endif
+#ifndef ACS_HLINE
+#  define ACS_HLINE '-'
+#endif
+#ifndef ACS_VLINE
+#  define ACS_VLINE '|'
+#endif
+
+/* Possible values for tui-border-kind variable.  */
+static const char *tui_border_kind_enums[] = {
+  "space",
+  "ascii",
+  "acs",
+  NULL
+};
+
+/* Possible values for tui-border-mode and tui-active-border-mode.  */
+static const char *tui_border_mode_enums[] = {
+  "normal",
+  "standout",
+  "reverse",
+  "half",
+  "half-standout",
+  "bold",
+  "bold-standout",
+  NULL
+};
+
+struct tui_translate
+{
+  const char *name;
+  int value;
+};
+
+/* Translation table for border-mode variables.
+   The list of values must be terminated by a NULL.
+   After the NULL value, an entry defines the default.  */
+struct tui_translate tui_border_mode_translate[] = {
+  { "normal",          A_NORMAL },
+  { "standout",                A_STANDOUT },
+  { "reverse",         A_REVERSE },
+  { "half",            A_DIM },
+  { "half-standout",   A_DIM | A_STANDOUT },
+  { "bold",            A_BOLD },
+  { "bold-standout",   A_BOLD | A_STANDOUT },
+  { 0, 0 },
+  { "normal",          A_NORMAL }
+};
+
+/* Translation tables for border-kind, one for each border
+   character (see wborder, border curses operations).
+   -1 is used to indicate the ACS because ACS characters
+   are determined at run time by curses (depends on terminal).  */
+struct tui_translate tui_border_kind_translate_vline[] = {
+  { "space",    ' ' },
+  { "ascii",    '|' },
+  { "acs",      -1 },
+  { 0, 0 },
+  { "ascii",    '|' }
+};
+
+struct tui_translate tui_border_kind_translate_hline[] = {
+  { "space",    ' ' },
+  { "ascii",    '-' },
+  { "acs",      -1 },
+  { 0, 0 },
+  { "ascii",    '-' }
+};
+
+struct tui_translate tui_border_kind_translate_ulcorner[] = {
+  { "space",    ' ' },
+  { "ascii",    '+' },
+  { "acs",      -1 },
+  { 0, 0 },
+  { "ascii",    '+' }
+};
+
+struct tui_translate tui_border_kind_translate_urcorner[] = {
+  { "space",    ' ' },
+  { "ascii",    '+' },
+  { "acs",      -1 },
+  { 0, 0 },
+  { "ascii",    '+' }
+};
+
+struct tui_translate tui_border_kind_translate_llcorner[] = {
+  { "space",    ' ' },
+  { "ascii",    '+' },
+  { "acs",      -1 },
+  { 0, 0 },
+  { "ascii",    '+' }
+};
+
+struct tui_translate tui_border_kind_translate_lrcorner[] = {
+  { "space",    ' ' },
+  { "ascii",    '+' },
+  { "acs",      -1 },
+  { 0, 0 },
+  { "ascii",    '+' }
+};
+
+
+/* Tui configuration variables controlled with set/show command.  */
+const char *tui_active_border_mode = "bold-standout";
+const char *tui_border_mode = "normal";
+const char *tui_border_kind = "acs";
+
+/* Tui internal configuration variables.  These variables are
+   updated by tui_update_variables to reflect the tui configuration
+   variables.  */
+chtype tui_border_vline;
+chtype tui_border_hline;
+chtype tui_border_ulcorner;
+chtype tui_border_urcorner;
+chtype tui_border_llcorner;
+chtype tui_border_lrcorner;
+
+int tui_border_attrs;
+int tui_active_border_attrs;
+
+/* Identify the item in the translation table.
+   When the item is not recognized, use the default entry.  */
+static struct tui_translate *
+translate (const char *name, struct tui_translate *table)
+{
+  while (table->name)
+    {
+      if (name && strcmp (table->name, name) == 0)
+        return table;
+      table++;
+    }
+
+  /* Not found, return default entry.  */
+  table++;
+  return table;
+}
+
+/* Update the tui internal configuration according to gdb settings.
+   Returns 1 if the configuration has changed and the screen should
+   be redrawn.  */
+int
+tui_update_variables ()
+{
+  int need_redraw = 0;
+  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 = 1;
+    }
+  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 = 1;
+    }
+
+  /* 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 = 1;
+    }
+  entry = translate (tui_border_kind, tui_border_kind_translate_llcorner);
+  tui_border_llcorner = (entry->value < 0) ? ACS_LLCORNER : entry->value;
+
+  entry = translate (tui_border_kind, tui_border_kind_translate_ulcorner);
+  tui_border_ulcorner = (entry->value < 0) ? ACS_ULCORNER : entry->value;
+
+  entry = translate (tui_border_kind, tui_border_kind_translate_urcorner);
+  tui_border_urcorner = (entry->value < 0) ? ACS_URCORNER : entry->value;
+
+  entry = translate (tui_border_kind, tui_border_kind_translate_hline);
+  tui_border_hline = (entry->value < 0) ? ACS_HLINE : entry->value;
+
+  entry = translate (tui_border_kind, tui_border_kind_translate_vline);
+  tui_border_vline = (entry->value < 0) ? ACS_VLINE : entry->value;
+
+  return need_redraw;
+}
+
+static void
+set_tui_cmd (char *args, int from_tty)
+{
+}
+
+static void
+show_tui_cmd (char *args, int from_tty)
+{
+}
+
 /*
-** _initialize_tuiWin().
-**        Function to initialize gdb commands, for tui window manipulation.
-*/
+   ** _initialize_tuiWin().
+   **        Function to initialize gdb commands, for tui window manipulation.
+ */
 void
-_initialize_tuiWin ()
+_initialize_tuiWin (void)
 {
-  if (tui_version)
-    {
-      add_com ("refresh", class_tui, _tuiRefreshAll_command,
-              "Refresh the terminal display.\n");
-      if (xdb_commands)
-       add_com_alias ("U", "refresh", class_tui, 0);
-      add_com ("tabset", class_tui, _tuiSetTabWidth_command,
-              "Set the width (in characters) of tab stops.\n\
+  struct cmd_list_element *c;
+  static struct cmd_list_element *tui_setlist;
+  static struct cmd_list_element *tui_showlist;
+
+  /* Define the classes of commands.
+     They will appear in the help list in the reverse of this order.  */
+  add_cmd ("tui", class_tui, NULL,
+          "Text User Interface commands.",
+          &cmdlist);
+
+  add_prefix_cmd ("tui", class_tui, set_tui_cmd,
+                  "TUI configuration variables",
+                 &tui_setlist, "set tui ",
+                 0/*allow-unknown*/, &setlist);
+  add_prefix_cmd ("tui", class_tui, show_tui_cmd,
+                  "TUI configuration variables",
+                 &tui_showlist, "show tui ",
+                 0/*allow-unknown*/, &showlist);
+
+  add_com ("refresh", class_tui, _tuiRefreshAll_command,
+           "Refresh the terminal display.\n");
+  if (xdb_commands)
+    add_com_alias ("U", "refresh", class_tui, 0);
+  add_com ("tabset", class_tui, _tuiSetTabWidth_command,
+           "Set the width (in characters) of tab stops.\n\
 Usage: tabset <n>\n");
-      add_com ("winheight", class_tui, _tuiSetWinHeight_command,
-              "Set the height of a specified window.\n\
+  add_com ("winheight", class_tui, _tuiSetWinHeight_command,
+           "Set the height of a specified window.\n\
 Usage: winheight <win_name> [+ | -] <#lines>\n\
 Window names are:\n\
 src  : the source window\n\
 cmd  : the command window\n\
 asm  : the disassembly window\n\
 regs : the register display\n");
-      add_com_alias ("wh", "winheight", class_tui, 0);
-      add_info ("win", _tuiAllWindowsInfo,
-               "List of all displayed windows.\n");
-      add_com ("focus", class_tui, _tuiSetFocus_command,
-              "Set focus to named window or next/prev window.\n\
+  add_com_alias ("wh", "winheight", class_tui, 0);
+  add_info ("win", _tuiAllWindowsInfo,
+            "List of all displayed windows.\n");
+  add_com ("focus", class_tui, _tuiSetFocus_command,
+           "Set focus to named window or next/prev window.\n\
 Usage: focus {<win> | next | prev}\n\
 Valid Window names are:\n\
 src  : the source window\n\
 asm  : the disassembly window\n\
 regs : the register display\n\
 cmd  : the command window\n");
-      add_com_alias ("fs", "focus", class_tui, 0);
-      add_com ("+", class_tui, _tuiScrollForward_command,
-              "Scroll window forward.\nUsage: + [win] [n]\n");
-      add_com ("-", class_tui, _tuiScrollBackward_command,
-              "Scroll window backward.\nUsage: - [win] [n]\n");
-      add_com ("<", class_tui, _tuiScrollLeft_command,
-              "Scroll window forward.\nUsage: < [win] [n]\n");
-      add_com (">", class_tui, _tuiScrollRight_command,
-              "Scroll window backward.\nUsage: > [win] [n]\n");
-      if (xdb_commands)
-       add_com ("w", class_xdb, _tuiXDBsetWinHeight_command,
-                "XDB compatibility command for setting the height of a command window.\n\
+  add_com_alias ("fs", "focus", class_tui, 0);
+  add_com ("+", class_tui, _tuiScrollForward_command,
+           "Scroll window forward.\nUsage: + [win] [n]\n");
+  add_com ("-", class_tui, _tuiScrollBackward_command,
+           "Scroll window backward.\nUsage: - [win] [n]\n");
+  add_com ("<", class_tui, _tuiScrollLeft_command,
+           "Scroll window forward.\nUsage: < [win] [n]\n");
+  add_com (">", class_tui, _tuiScrollRight_command,
+           "Scroll window backward.\nUsage: > [win] [n]\n");
+  if (xdb_commands)
+    add_com ("w", class_xdb, _tuiXDBsetWinHeight_command,
+             "XDB compatibility command for setting the height of a command window.\n\
 Usage: w <#lines>\n");
-    }
-
-  return;
-}                              /* _intialize_tuiWin */
-
-
-/*
-** tuiClearWinFocusFrom
-**        Clear the logical focus from winInfo
-*/
-void
-#ifdef __STDC__
-tuiClearWinFocusFrom (
-                      TuiWinInfoPtr winInfo)
-#else
-tuiClearWinFocusFrom (winInfo)
-     TuiWinInfoPtr winInfo;
-#endif
-{
-  if (m_winPtrNotNull (winInfo))
-    {
-      if (winInfo->generic.type != CMD_WIN)
-       unhighlightWin (winInfo);
-      tuiSetWinWithFocus ((TuiWinInfoPtr) NULL);
-    }
-
-  return;
-}                              /* tuiClearWinFocusFrom */
 
+  /* Define the tui control variables.  */
+  c = add_set_enum_cmd
+    ("border-kind", no_class,
+     tui_border_kind_enums, &tui_border_kind,
+     "Set the kind of border for TUI windows.\n"
+     "This variable controls the border of TUI windows:\n"
+     "space           use a white space\n"
+     "ascii           use ascii characters + - | for the border\n"
+     "acs             use the Alternate Character Set\n",
+     &tui_setlist);
+  add_show_from_set (c, &tui_showlist);
+
+  c = add_set_enum_cmd
+    ("border-mode", no_class,
+     tui_border_mode_enums, &tui_border_mode,
+     "Set the attribute mode to use for the TUI window borders.\n"
+     "This variable controls the attributes to use for the window borders:\n"
+     "normal          normal display\n"
+     "standout        use highlight mode of terminal\n"
+     "reverse         use reverse video mode\n"
+     "half            use half bright\n"
+     "half-standout   use half bright and standout mode\n"
+     "bold            use extra bright or bold\n"
+     "bold-standout   use extra bright or bold with standout mode\n",
+     &tui_setlist);
+  add_show_from_set (c, &tui_showlist);
+
+  c = add_set_enum_cmd
+    ("active-border-mode", no_class,
+     tui_border_mode_enums, &tui_active_border_mode,
+     "Set the attribute mode to use for the active TUI window border.\n"
+     "This variable controls the attributes to use for the active window border:\n"
+     "normal          normal display\n"
+     "standout        use highlight mode of terminal\n"
+     "reverse         use reverse video mode\n"
+     "half            use half bright\n"
+     "half-standout   use half bright and standout mode\n"
+     "bold            use extra bright or bold\n"
+     "bold-standout   use extra bright or bold with standout mode\n",
+     &tui_setlist);
+  add_show_from_set (c, &tui_showlist);
+}
 
-/*
-** tuiClearWinFocus().
-**        Clear the window that has focus.
-*/
+/* Update gdb's knowledge of the terminal size.  */
 void
-#ifdef __STDC__
-tuiClearWinFocus (void)
-#else
-tuiClearWinFocus ()
-#endif
+tui_update_gdb_sizes ()
 {
-  tuiClearWinFocusFrom (tuiWinWithFocus ());
-
-  return;
-}                              /* tuiClearWinFocus */
+  char cmd[50];
+  int screenheight, screenwidth;
+
+  rl_get_screen_size (&screenheight, &screenwidth);
+  /* Set to TUI command window dimension or use readline values.  */
+  sprintf (cmd, "set width %d",
+           tui_active ? cmdWin->generic.width : screenwidth);
+  execute_command (cmd, 0);
+  sprintf (cmd, "set height %d",
+           tui_active ? cmdWin->generic.height : screenheight);
+  execute_command (cmd, 0);
+}
 
 
 /*
-** tuiSetWinFocusTo
-**        Set the logical focus to winInfo
-*/
+   ** tuiSetWinFocusTo
+   **        Set the logical focus to winInfo
+ */
 void
-#ifdef __STDC__
-tuiSetWinFocusTo (
-                  TuiWinInfoPtr winInfo)
-#else
-tuiSetWinFocusTo (winInfo)
-     TuiWinInfoPtr winInfo;
-#endif
+tuiSetWinFocusTo (TuiWinInfoPtr winInfo)
 {
   if (m_winPtrNotNull (winInfo))
     {
@@ -181,40 +446,11 @@ tuiSetWinFocusTo (winInfo)
 }                              /* tuiSetWinFocusTo */
 
 
-char *
-#ifdef __STDC__
-tuiStrDup (
-           char *str)
-#else
-tuiStrDup (str)
-     char *str;
-#endif
-{
-  char *newStr = (char *) NULL;
-
-  if (str != (char *) NULL)
-    {
-      newStr = (char *) xmalloc (strlen (str) + 1);
-      strcpy (newStr, str);
-    }
-
-  return newStr;
-}                              /* tuiStrDup */
-
-
 /*
-** tuiScrollForward().
-*/
+   ** tuiScrollForward().
+ */
 void
-#ifdef __STDC__
-tuiScrollForward (
-                  TuiWinInfoPtr winToScroll,
-                  int numToScroll)
-#else
-tuiScrollForward (winToScroll, numToScroll)
-     TuiWinInfoPtr winToScroll;
-     int numToScroll;
-#endif
+tuiScrollForward (TuiWinInfoPtr winToScroll, int numToScroll)
 {
   if (winToScroll != cmdWin)
     {
@@ -223,11 +459,11 @@ tuiScrollForward (winToScroll, numToScroll)
       if (numToScroll == 0)
        _numToScroll = winToScroll->generic.height - 3;
       /*
-        ** If we are scrolling the source or disassembly window, do a
-        ** "psuedo" scroll since not all of the source is in memory,
-        ** only what is in the viewport.  If winToScroll is the
-        ** command window do nothing since the term should handle it.
-        */
+         ** If we are scrolling the source or disassembly window, do a
+         ** "psuedo" scroll since not all of the source is in memory,
+         ** only what is in the viewport.  If winToScroll is the
+         ** command window do nothing since the term should handle it.
+       */
       if (winToScroll == srcWin)
        tuiVerticalSourceScroll (FORWARD_SCROLL, _numToScroll);
       else if (winToScroll == disassemWin)
@@ -241,18 +477,10 @@ tuiScrollForward (winToScroll, numToScroll)
 
 
 /*
-** tuiScrollBackward().
-*/
+   ** tuiScrollBackward().
+ */
 void
-#ifdef __STDC__
-tuiScrollBackward (
-                   TuiWinInfoPtr winToScroll,
-                   int numToScroll)
-#else
-tuiScrollBackward (winToScroll, numToScroll)
-     TuiWinInfoPtr winToScroll;
-     int numToScroll;
-#endif
+tuiScrollBackward (TuiWinInfoPtr winToScroll, int numToScroll)
 {
   if (winToScroll != cmdWin)
     {
@@ -261,11 +489,11 @@ tuiScrollBackward (winToScroll, numToScroll)
       if (numToScroll == 0)
        _numToScroll = winToScroll->generic.height - 3;
       /*
-        ** If we are scrolling the source or disassembly window, do a
-        ** "psuedo" scroll since not all of the source is in memory,
-        ** only what is in the viewport.  If winToScroll is the
-        ** command window do nothing since the term should handle it.
-        */
+         ** If we are scrolling the source or disassembly window, do a
+         ** "psuedo" scroll since not all of the source is in memory,
+         ** only what is in the viewport.  If winToScroll is the
+         ** command window do nothing since the term should handle it.
+       */
       if (winToScroll == srcWin)
        tuiVerticalSourceScroll (BACKWARD_SCROLL, _numToScroll);
       else if (winToScroll == disassemWin)
@@ -278,18 +506,10 @@ tuiScrollBackward (winToScroll, numToScroll)
 
 
 /*
-** tuiScrollLeft().
-*/
+   ** tuiScrollLeft().
+ */
 void
-#ifdef __STDC__
-tuiScrollLeft (
-               TuiWinInfoPtr winToScroll,
-               int numToScroll)
-#else
-tuiScrollLeft (winToScroll, numToScroll)
-     TuiWinInfoPtr winToScroll;
-     int numToScroll;
-#endif
+tuiScrollLeft (TuiWinInfoPtr winToScroll, int numToScroll)
 {
   if (winToScroll != cmdWin)
     {
@@ -298,11 +518,11 @@ tuiScrollLeft (winToScroll, numToScroll)
       if (_numToScroll == 0)
        _numToScroll = 1;
       /*
-        ** If we are scrolling the source or disassembly window, do a
-        ** "psuedo" scroll since not all of the source is in memory,
-        ** only what is in the viewport. If winToScroll is the
-        ** command window do nothing since the term should handle it.
-        */
+         ** If we are scrolling the source or disassembly window, do a
+         ** "psuedo" scroll since not all of the source is in memory,
+         ** only what is in the viewport. If winToScroll is the
+         ** command window do nothing since the term should handle it.
+       */
       if (winToScroll == srcWin || winToScroll == disassemWin)
        tuiHorizontalSourceScroll (winToScroll, LEFT_SCROLL, _numToScroll);
     }
@@ -311,18 +531,10 @@ tuiScrollLeft (winToScroll, numToScroll)
 
 
 /*
-** tuiScrollRight().
-*/
+   ** tuiScrollRight().
+ */
 void
-#ifdef __STDC__
-tuiScrollRight (
-                TuiWinInfoPtr winToScroll,
-                int numToScroll)
-#else
-tuiScrollRight (winToScroll, numToScroll)
-     TuiWinInfoPtr winToScroll;
-     int numToScroll;
-#endif
+tuiScrollRight (TuiWinInfoPtr winToScroll, int numToScroll)
 {
   if (winToScroll != cmdWin)
     {
@@ -331,11 +543,11 @@ tuiScrollRight (winToScroll, numToScroll)
       if (_numToScroll == 0)
        _numToScroll = 1;
       /*
-        ** If we are scrolling the source or disassembly window, do a
-        ** "psuedo" scroll since not all of the source is in memory,
-        ** only what is in the viewport. If winToScroll is the
-        ** command window do nothing since the term should handle it.
-        */
+         ** If we are scrolling the source or disassembly window, do a
+         ** "psuedo" scroll since not all of the source is in memory,
+         ** only what is in the viewport. If winToScroll is the
+         ** command window do nothing since the term should handle it.
+       */
       if (winToScroll == srcWin || winToScroll == disassemWin)
        tuiHorizontalSourceScroll (winToScroll, RIGHT_SCROLL, _numToScroll);
     }
@@ -344,22 +556,14 @@ tuiScrollRight (winToScroll, numToScroll)
 
 
 /*
-** tui_vScroll().
-**    Scroll a window.  Arguments are passed through a va_list.
-*/
+   ** tui_scroll().
+   **    Scroll a window.  Arguments are passed through a va_list.
+ */
 void
-#ifdef __STDC__
-tui_vScroll (
-             va_list args)
-#else
-tui_vScroll (args)
-     va_list args;
-#endif
+tui_scroll (TuiScrollDirection direction,
+           TuiWinInfoPtr winToScroll,
+           int numToScroll)
 {
-  TuiScrollDirection direction = va_arg (args, TuiScrollDirection);
-  TuiWinInfoPtr winToScroll = va_arg (args, TuiWinInfoPtr);
-  int numToScroll = va_arg (args, int);
-
   switch (direction)
     {
     case FORWARD_SCROLL:
@@ -377,35 +581,27 @@ tui_vScroll (args)
     default:
       break;
     }
-
-  return;
-}                              /* tui_vScroll */
+}
 
 
 /*
-** tuiRefreshAll().
-*/
+   ** tuiRefreshAll().
+ */
 void
-#ifdef __STDC__
 tuiRefreshAll (void)
-#else
-tuiRefreshAll ()
-#endif
 {
   TuiWinType type;
 
+  clearok (curscr, TRUE);
   refreshAll (winList);
   for (type = SRC_WIN; type < MAX_MAJOR_WINDOWS; type++)
     {
-      if (winList[type]->generic.isVisible)
+      if (winList[type] && winList[type]->generic.isVisible)
        {
          switch (type)
            {
            case SRC_WIN:
            case DISASSEM_WIN:
-             tuiClearWin (&winList[type]->generic);
-             if (winList[type]->detail.sourceInfo.hasLocator)
-               tuiClearLocatorDisplay ();
              tuiShowSourceContent (winList[type]);
              checkAndDisplayHighlightIfNeeded (winList[type]);
              tuiEraseExecInfoContent (winList[type]);
@@ -419,28 +615,22 @@ tuiRefreshAll ()
            }
        }
     }
-  tuiClearLocatorDisplay ();
   tuiShowLocatorContent ();
-
-  return;
-}                              /* tuiRefreshAll */
+}
 
 
 /*
-** tuiResizeAll().
-**      Resize all the windows based on the the terminal size.  This
-**      function gets called from within the readline sinwinch handler.
-*/
+   ** tuiResizeAll().
+   **      Resize all the windows based on the the terminal size.  This
+   **      function gets called from within the readline sinwinch handler.
+ */
 void
-#ifdef __STDC__
 tuiResizeAll (void)
-#else
-tuiResizeAll ()
-#endif
 {
   int heightDiff, widthDiff;
-  extern int screenheight, screenwidth;        /* in readline */
+  int screenheight, screenwidth;
 
+  rl_get_screen_size (&screenheight, &screenwidth);
   widthDiff = screenwidth - termWidth ();
   heightDiff = screenheight - termHeight ();
   if (heightDiff || widthDiff)
@@ -450,12 +640,12 @@ tuiResizeAll ()
       TuiWinInfoPtr firstWin, secondWin;
       TuiGenWinInfoPtr locator = locatorWinInfoPtr ();
       TuiWinType winType;
-      int i, newHeight, splitDiff, cmdSplitDiff, numWinsDisplayed = 2;
+      int newHeight, splitDiff, cmdSplitDiff, numWinsDisplayed = 2;
 
       /* turn keypad off while we resize */
       if (winWithFocus != cmdWin)
        keypad (cmdWin->generic.handle, FALSE);
-      init_page_info ();
+      tui_update_gdb_sizes ();
       setTermHeightTo (screenheight);
       setTermWidthTo (screenwidth);
       if (curLayout == SRC_DISASSEM_COMMAND ||
@@ -571,9 +761,9 @@ tuiResizeAll ()
          break;
        }
       /*
-        ** Now remove all invisible windows, and their content so that they get
-        ** created again when called for with the new size
-        */
+         ** Now remove all invisible windows, and their content so that they get
+         ** created again when called for with the new size
+       */
       for (winType = SRC_WIN; (winType < MAX_MAJOR_WINDOWS); winType++)
        {
          if (winType != CMD_WIN && m_winPtrNotNull (winList[winType]) &&
@@ -593,24 +783,18 @@ tuiResizeAll ()
 
 
 /*
-** tuiSigwinchHandler()
-**    SIGWINCH signal handler for the tui.  This signal handler is
-**    always called, even when the readline package clears signals
-**    because it is set as the old_sigwinch() (TUI only)
-*/
+   ** tuiSigwinchHandler()
+   **    SIGWINCH signal handler for the tui.  This signal handler is
+   **    always called, even when the readline package clears signals
+   **    because it is set as the old_sigwinch() (TUI only)
+ */
 void
-#ifdef __STDC__
-tuiSigwinchHandler (
-                    int signal)
-#else
-tuiSigwinchHandler (signal)
-     int signal;
-#endif
+tuiSigwinchHandler (int signal)
 {
   /*
-    ** Say that a resize was done so that the readline can do it
-    ** later when appropriate.
-    */
+     ** Say that a resize was done so that the readline can do it
+     ** later when appropriate.
+   */
   tuiSetWinResizedTo (TRUE);
 
   return;
@@ -624,146 +808,94 @@ tuiSigwinchHandler (signal)
 
 
 /*
-** _tuiScrollForward_command().
-*/
+   ** _tuiScrollForward_command().
+ */
 static void
-#ifdef __STDC__
-_tuiScrollForward_command (
-                           char *arg,
-                           int fromTTY)
-#else
-_tuiScrollForward_command (arg, fromTTY)
-     char *arg;
-     int fromTTY;
-#endif
+_tuiScrollForward_command (char *arg, int fromTTY)
 {
   int numToScroll = 1;
   TuiWinInfoPtr winToScroll;
 
+  /* Make sure the curses mode is enabled.  */
+  tui_enable ();
   if (arg == (char *) NULL)
     _parseScrollingArgs (arg, &winToScroll, (int *) NULL);
   else
     _parseScrollingArgs (arg, &winToScroll, &numToScroll);
-  tuiDo ((TuiOpaqueFuncPtr) tui_vScroll,
-        FORWARD_SCROLL,
-        winToScroll,
-        numToScroll);
-
-  return;
-}                              /* _tuiScrollForward_command */
+  tui_scroll (FORWARD_SCROLL, winToScroll, numToScroll);
+}
 
 
 /*
-** _tuiScrollBackward_command().
-*/
+   ** _tuiScrollBackward_command().
+ */
 static void
-#ifdef __STDC__
-_tuiScrollBackward_command (
-                            char *arg,
-                            int fromTTY)
-#else
-_tuiScrollBackward_command (arg, fromTTY)
-     char *arg;
-     int fromTTY;
-#endif
+_tuiScrollBackward_command (char *arg, int fromTTY)
 {
   int numToScroll = 1;
   TuiWinInfoPtr winToScroll;
 
+  /* Make sure the curses mode is enabled.  */
+  tui_enable ();
   if (arg == (char *) NULL)
     _parseScrollingArgs (arg, &winToScroll, (int *) NULL);
   else
     _parseScrollingArgs (arg, &winToScroll, &numToScroll);
-  tuiDo ((TuiOpaqueFuncPtr) tui_vScroll,
-        BACKWARD_SCROLL,
-        winToScroll,
-        numToScroll);
-
-  return;
-}                              /* _tuiScrollBackward_command */
+  tui_scroll (BACKWARD_SCROLL, winToScroll, numToScroll);
+}
 
 
 /*
-** _tuiScrollLeft_command().
-*/
+   ** _tuiScrollLeft_command().
+ */
 static void
-#ifdef __STDC__
-_tuiScrollLeft_command (
-                        char *arg,
-                        int fromTTY)
-#else
-_tuiScrollLeft_command (arg, fromTTY)
-     char *arg;
-     int fromTTY;
-#endif
+_tuiScrollLeft_command (char *arg, int fromTTY)
 {
   int numToScroll;
   TuiWinInfoPtr winToScroll;
 
+  /* Make sure the curses mode is enabled.  */
+  tui_enable ();
   _parseScrollingArgs (arg, &winToScroll, &numToScroll);
-  tuiDo ((TuiOpaqueFuncPtr) tui_vScroll,
-        LEFT_SCROLL,
-        winToScroll,
-        numToScroll);
-
-  return;
-}                              /* _tuiScrollLeft_command */
+  tui_scroll (LEFT_SCROLL, winToScroll, numToScroll);
+}
 
 
 /*
-** _tuiScrollRight_command().
-*/
+   ** _tuiScrollRight_command().
+ */
 static void
-#ifdef __STDC__
-_tuiScrollRight_command (
-                         char *arg,
-                         int fromTTY)
-#else
-_tuiScrollRight_command (arg, fromTTY)
-     char *arg;
-     int fromTTY;
-#endif
+_tuiScrollRight_command (char *arg, int fromTTY)
 {
   int numToScroll;
   TuiWinInfoPtr winToScroll;
 
+  /* Make sure the curses mode is enabled.  */
+  tui_enable ();
   _parseScrollingArgs (arg, &winToScroll, &numToScroll);
-  tuiDo ((TuiOpaqueFuncPtr) tui_vScroll,
-        RIGHT_SCROLL,
-        winToScroll,
-        numToScroll);
-
-  return;
-}                              /* _tuiScrollRight_command */
+  tui_scroll (RIGHT_SCROLL, winToScroll, numToScroll);
+}
 
 
 /*
-** _tuiSetFocus().
-**     Set focus to the window named by 'arg'
-*/
+   ** _tuiSetFocus().
+   **     Set focus to the window named by 'arg'
+ */
 static void
-#ifdef __STDC__
-_tuiSetFocus (
-              char *arg,
-              int fromTTY)
-#else
-_tuiSetFocus (arg, fromTTY)
-     char *arg;
-     int fromTTY;
-#endif
+_tuiSetFocus (char *arg, int fromTTY)
 {
   if (arg != (char *) NULL)
     {
-      char *bufPtr = (char *) tuiStrDup (arg);
+      char *bufPtr = (char *) xstrdup (arg);
       int i;
       TuiWinInfoPtr winInfo = (TuiWinInfoPtr) NULL;
 
       for (i = 0; (i < strlen (bufPtr)); i++)
        bufPtr[i] = toupper (arg[i]);
 
-      if (subsetCompare (bufPtr, "NEXT"))
+      if (subset_compare (bufPtr, "NEXT"))
        winInfo = tuiNextWin (tuiWinWithFocus ());
-      else if (subsetCompare (bufPtr, "PREV"))
+      else if (subset_compare (bufPtr, "PREV"))
        winInfo = tuiPrevWin (tuiWinWithFocus ());
       else
        winInfo = partialWinByName (bufPtr);
@@ -777,7 +909,7 @@ The window name specified must be valid and visible.\n");
          keypad (cmdWin->generic.handle, (winInfo != cmdWin));
        }
 
-      if (dataWin->generic.isVisible)
+      if (dataWin && dataWin->generic.isVisible)
        tuiRefreshDataWin ();
       tuiFree (bufPtr);
       printf_filtered ("Focus set to %s window.\n",
@@ -789,67 +921,29 @@ The window name specified must be valid and visible.\n");
   return;
 }                              /* _tuiSetFocus */
 
-
 /*
-** _tui_vSetFocus()
-*/
+   ** _tuiSetFocus_command()
+ */
 static void
-#ifdef __STDC__
-_tui_vSetFocus (
-                va_list args)
-#else
-_tui_vSetFocus (args)
-     va_list args;
-#endif
+_tuiSetFocus_command (char *arg, int fromTTY)
 {
-  char *arg = va_arg (args, char *);
-  int fromTTY = va_arg (args, int);
-
+  /* Make sure the curses mode is enabled.  */
+  tui_enable ();
   _tuiSetFocus (arg, fromTTY);
-
-  return;
-}                              /* tui_vSetFocus */
-
-
-/*
-** _tuiSetFocus_command()
-*/
-static void
-#ifdef __STDC__
-_tuiSetFocus_command (
-                      char *arg,
-                      int fromTTY)
-#else
-_tuiSetFocus_command (arg, fromTTY)
-     char *arg;
-     int fromTTY;
-#endif
-{
-  tuiDo ((TuiOpaqueFuncPtr) _tui_vSetFocus, arg, fromTTY);
-
-  return;
-}                              /* tui_SetFocus */
+}
 
 
 /*
-** _tuiAllWindowsInfo().
-*/
+   ** _tuiAllWindowsInfo().
+ */
 static void
-#ifdef __STDC__
-_tuiAllWindowsInfo (
-                    char *arg,
-                    int fromTTY)
-#else
-_tuiAllWindowsInfo (arg, fromTTY)
-     char *arg;
-     int fromTTY;
-#endif
+_tuiAllWindowsInfo (char *arg, int fromTTY)
 {
   TuiWinType type;
   TuiWinInfoPtr winWithFocus = tuiWinWithFocus ();
 
   for (type = SRC_WIN; (type < MAX_MAJOR_WINDOWS); type++)
-    if (winList[type]->generic.isVisible)
+    if (winList[type] && winList[type]->generic.isVisible)
       {
        if (winWithFocus == winList[type])
          printf_filtered ("        %s\t(%d lines)  <has focus>\n",
@@ -866,38 +960,27 @@ _tuiAllWindowsInfo (arg, fromTTY)
 
 
 /*
-** _tuiRefreshAll_command().
-*/
+   ** _tuiRefreshAll_command().
+ */
 static void
-#ifdef __STDC__
-_tuiRefreshAll_command (
-                        char *arg,
-                        int fromTTY)
-#else
-_tuiRefreshAll_command (arg, fromTTY)
-     char *arg;
-     int fromTTY;
-#endif
+_tuiRefreshAll_command (char *arg, int fromTTY)
 {
-  tuiDo ((TuiOpaqueFuncPtr) tuiRefreshAll);
+  /* Make sure the curses mode is enabled.  */
+  tui_enable ();
+
+  tuiRefreshAll ();
 }
 
 
 /*
-** _tuiSetWinTabWidth_command().
-**        Set the height of the specified window.
-*/
+   ** _tuiSetWinTabWidth_command().
+   **        Set the height of the specified window.
+ */
 static void
-#ifdef __STDC__
-_tuiSetTabWidth_command (
-                         char *arg,
-                         int fromTTY)
-#else
-_tuiSetTabWidth_command (arg, fromTTY)
-     char *arg;
-     int fromTTY;
-#endif
+_tuiSetTabWidth_command (char *arg, int fromTTY)
 {
+  /* Make sure the curses mode is enabled.  */
+  tui_enable ();
   if (arg != (char *) NULL)
     {
       int ts;
@@ -914,23 +997,17 @@ _tuiSetTabWidth_command (arg, fromTTY)
 
 
 /*
-** _tuiSetWinHeight().
-**        Set the height of the specified window.
-*/
+   ** _tuiSetWinHeight().
+   **        Set the height of the specified window.
+ */
 static void
-#ifdef __STDC__
-_tuiSetWinHeight (
-                  char *arg,
-                  int fromTTY)
-#else
-_tuiSetWinHeight (arg, fromTTY)
-     char *arg;
-     int fromTTY;
-#endif
+_tuiSetWinHeight (char *arg, int fromTTY)
 {
+  /* Make sure the curses mode is enabled.  */
+  tui_enable ();
   if (arg != (char *) NULL)
     {
-      char *buf = tuiStrDup (arg);
+      char *buf = xstrdup (arg);
       char *bufPtr = buf;
       char *wname = (char *) NULL;
       int newHeight, i;
@@ -943,8 +1020,8 @@ _tuiSetWinHeight (arg, fromTTY)
          *bufPtr = (char) 0;
 
          /*
-            ** Validate the window name
-            */
+            ** Validate the window name
+          */
          for (i = 0; i < strlen (wname); i++)
            wname[i] = toupper (wname[i]);
          winInfo = partialWinByName (wname);
@@ -981,15 +1058,15 @@ The window name specified must be valid and visible.\n");
                      else
                        newHeight = winInfo->generic.height + inputNo;
                      /*
-                        ** Now change the window's height, and adjust all
-                        ** other windows around it
-                        */
+                        ** Now change the window's height, and adjust all
+                        ** other windows around it
+                      */
                      if (_tuiAdjustWinHeights (winInfo,
                                                newHeight) == TUI_FAILURE)
                        warning ("Invalid window height specified.\n%s",
                                 WIN_HEIGHT_USAGE);
                      else
-                       init_page_info ();
+                        tui_update_gdb_sizes ();
                    }
                  else
                    warning ("Invalid window height specified.\n%s",
@@ -1009,66 +1086,29 @@ The window name specified must be valid and visible.\n");
   return;
 }                              /* _tuiSetWinHeight */
 
-
 /*
-** _tui_vSetWinHeight().
-**        Set the height of the specified window, with va_list.
-*/
+   ** _tuiSetWinHeight_command().
+   **        Set the height of the specified window, with va_list.
+ */
 static void
-#ifdef __STDC__
-_tui_vSetWinHeight (
-                    va_list args)
-#else
-_tui_vSetWinHeight (args)
-     va_list args;
-#endif
+_tuiSetWinHeight_command (char *arg, int fromTTY)
 {
-  char *arg = va_arg (args, char *);
-  int fromTTY = va_arg (args, int);
-
+  /* Make sure the curses mode is enabled.  */
+  tui_enable ();
   _tuiSetWinHeight (arg, fromTTY);
-
-  return;
-}                              /* _tui_vSetWinHeight */
-
-
-/*
-** _tuiSetWinHeight_command().
-**        Set the height of the specified window, with va_list.
-*/
-static void
-#ifdef __STDC__
-_tuiSetWinHeight_command (
-                          char *arg,
-                          int fromTTY)
-#else
-_tuiSetWinHeight_command (arg, fromTTY)
-     char *arg;
-     int fromTTY;
-#endif
-{
-  tuiDo ((TuiOpaqueFuncPtr) _tui_vSetWinHeight, arg, fromTTY);
-
-  return;
-}                              /* _tuiSetWinHeight_command */
+}
 
 
 /*
-** _tuiXDBsetWinHeight().
-**        XDB Compatibility command for setting the window height.  This will
-**        increase or decrease the command window by the specified amount.
-*/
+   ** _tuiXDBsetWinHeight().
+   **        XDB Compatibility command for setting the window height.  This will
+   **        increase or decrease the command window by the specified amount.
+ */
 static void
-#ifdef __STDC__
-_tuiXDBsetWinHeight (
-                     char *arg,
-                     int fromTTY)
-#else
-_tuiXDBsetWinHeight (arg, fromTTY)
-     char *arg;
-     int fromTTY;
-#endif
+_tuiXDBsetWinHeight (char *arg, int fromTTY)
 {
+  /* Make sure the curses mode is enabled.  */
+  tui_enable ();
   if (arg != (char *) NULL)
     {
       int inputNo = atoi (arg);
@@ -1093,64 +1133,23 @@ _tuiXDBsetWinHeight (arg, fromTTY)
   return;
 }                              /* _tuiXDBsetWinHeight */
 
-
 /*
-** _tui_vXDBsetWinHeight().
-**        Set the height of the specified window, with va_list.
-*/
+   ** _tuiSetWinHeight_command().
+   **        Set the height of the specified window, with va_list.
+ */
 static void
-#ifdef __STDC__
-_tui_vXDBsetWinHeight (
-                       va_list args)
-#else
-_tui_vXDBsetWinHeight (args)
-     va_list args;
-#endif
+_tuiXDBsetWinHeight_command (char *arg, int fromTTY)
 {
-  char *arg = va_arg (args, char *);
-  int fromTTY = va_arg (args, int);
-
   _tuiXDBsetWinHeight (arg, fromTTY);
-
-  return;
-}                              /* _tui_vXDBsetWinHeight */
-
-
-/*
-** _tuiSetWinHeight_command().
-**        Set the height of the specified window, with va_list.
-*/
-static void
-#ifdef __STDC__
-_tuiXDBsetWinHeight_command (
-                             char *arg,
-                             int fromTTY)
-#else
-_tuiXDBsetWinHeight_command (arg, fromTTY)
-     char *arg;
-     int fromTTY;
-#endif
-{
-  tuiDo ((TuiOpaqueFuncPtr) _tui_vXDBsetWinHeight, arg, fromTTY);
-
-  return;
-}                              /* _tuiXDBsetWinHeight_command */
+}
 
 
 /*
-** _tuiAdjustWinHeights().
-**        Function to adjust all window heights around the primary
-*/
+   ** _tuiAdjustWinHeights().
+   **        Function to adjust all window heights around the primary
+ */
 static TuiStatus
-#ifdef __STDC__
-_tuiAdjustWinHeights (
-                      TuiWinInfoPtr primaryWinInfo,
-                      int newHeight)
-#else
-_tuiAdjustWinHeights (primaryWinInfo, newHeight)
-     TuiWinInfoPtr primaryWinInfo;
-     int newHeight;
-#endif
+_tuiAdjustWinHeights (TuiWinInfoPtr primaryWinInfo, int newHeight)
 {
   TuiStatus status = TUI_FAILURE;
 
@@ -1159,7 +1158,7 @@ _tuiAdjustWinHeights (primaryWinInfo, newHeight)
       status = TUI_SUCCESS;
       if (newHeight != primaryWinInfo->generic.height)
        {
-         int i, diff;
+         int diff;
          TuiWinInfoPtr winInfo;
          TuiGenWinInfoPtr locator = locatorWinInfoPtr ();
          TuiLayoutType curLayout = currentLayout ();
@@ -1204,9 +1203,9 @@ _tuiAdjustWinHeights (primaryWinInfo, newHeight)
                }
              if (primaryWinInfo == cmdWin)
                {               /*
-                    ** Split the change in height accross the 1st & 2nd windows
-                    ** adjusting them as well.
-                    */
+                                  ** Split the change in height accross the 1st & 2nd windows
+                                  ** adjusting them as well.
+                                */
                  int firstSplitDiff = diff / 2;        /* subtract the locator */
                  int secondSplitDiff = firstSplitDiff;
 
@@ -1250,9 +1249,9 @@ _tuiAdjustWinHeights (primaryWinInfo, newHeight)
                {
                  if ((cmdWin->generic.height + diff) < 1)
                    {           /*
-                        ** If there is no way to increase the command window
-                        ** take real estate from the 1st or 2nd window.
-                        */
+                                  ** If there is no way to increase the command window
+                                  ** take real estate from the 1st or 2nd window.
+                                */
                      if ((cmdWin->generic.height + diff) < 1)
                        {
                          int i;
@@ -1299,23 +1298,14 @@ _tuiAdjustWinHeights (primaryWinInfo, newHeight)
 
 
 /*
-** _makeInvisibleAndSetNewHeight().
-**        Function make the target window (and auxillary windows associated
-**        with the targer) invisible, and set the new height and location.
-*/
+   ** _makeInvisibleAndSetNewHeight().
+   **        Function make the target window (and auxillary windows associated
+   **        with the targer) invisible, and set the new height and location.
+ */
 static void
-#ifdef __STDC__
-_makeInvisibleAndSetNewHeight (
-                               TuiWinInfoPtr winInfo,
-                               int height)
-#else
-_makeInvisibleAndSetNewHeight (winInfo, height)
-     TuiWinInfoPtr winInfo;
-     int height;
-#endif
+_makeInvisibleAndSetNewHeight (TuiWinInfoPtr winInfo, int height)
 {
   int i;
-  struct symtab *s;
   TuiGenWinInfoPtr genWinInfo;
 
 
@@ -1364,27 +1354,18 @@ _makeInvisibleAndSetNewHeight (winInfo, height)
     default:
       break;
     }
-
-  return;
-}                              /* _makeInvisibleAndSetNewHeight */
+}
 
 
 /*
-** _makeVisibleWithNewHeight().
-**        Function to make the windows with new heights visible.
-**        This means re-creating the windows' content since the window
-**        had to be destroyed to be made invisible.
-*/
+   ** _makeVisibleWithNewHeight().
+   **        Function to make the windows with new heights visible.
+   **        This means re-creating the windows' content since the window
+   **        had to be destroyed to be made invisible.
+ */
 static void
-#ifdef __STDC__
-_makeVisibleWithNewHeight (
-                           TuiWinInfoPtr winInfo)
-#else
-_makeVisibleWithNewHeight (winInfo)
-     TuiWinInfoPtr winInfo;
-#endif
+_makeVisibleWithNewHeight (TuiWinInfoPtr winInfo)
 {
-  int i;
   struct symtab *s;
 
   m_beVisible (&winInfo->generic);
@@ -1398,6 +1379,8 @@ _makeVisibleWithNewHeight (winInfo)
       if (winInfo->generic.content != (OpaquePtr) NULL)
        {
          TuiLineOrAddress lineOrAddr;
+         struct symtab_and_line cursal
+           = get_current_source_symtab_and_line ();
 
          if (winInfo->generic.type == SRC_WIN)
            lineOrAddr.lineNo =
@@ -1407,28 +1390,26 @@ _makeVisibleWithNewHeight (winInfo)
              winInfo->detail.sourceInfo.startLineOrAddr.addr;
          freeWinContent (&winInfo->generic);
          tuiUpdateSourceWindow (winInfo,
-                                current_source_symtab,
-                                ((winInfo->generic.type == SRC_WIN) ?
-                                 (Opaque) lineOrAddr.lineNo :
-                                 lineOrAddr.addr),
-                                TRUE);
+                                cursal.symtab, lineOrAddr, TRUE);
        }
-      else if (selected_frame != (struct frame_info *) NULL)
+      else if (deprecated_selected_frame != (struct frame_info *) NULL)
        {
-         Opaque line = 0;
-         extern int current_source_line;
+         TuiLineOrAddress line;
+         struct symtab_and_line cursal = get_current_source_symtab_and_line ();
 
-         s = find_pc_symtab (selected_frame->pc);
+
+         s = find_pc_symtab (get_frame_pc (deprecated_selected_frame));
          if (winInfo->generic.type == SRC_WIN)
-           line = (Opaque) current_source_line;
+           line.lineNo = cursal.line;
          else
-           line = (Opaque) find_line_pc (s, current_source_line);
+           {
+             find_line_pc (s, cursal.line, &line.addr);
+           }
          tuiUpdateSourceWindow (winInfo, s, line, TRUE);
        }
       if (m_hasLocator (winInfo))
        {
          m_beVisible (locatorWinInfoPtr ());
-         tuiClearLocatorDisplay ();
          tuiShowLocatorContent ();
        }
       break;
@@ -1451,21 +1432,13 @@ _makeVisibleWithNewHeight (winInfo)
 
 
 static int
-#ifdef __STDC__
-_newHeightOk (
-              TuiWinInfoPtr primaryWinInfo,
-              int newHeight)
-#else
-_newHeightOk (primaryWinInfo, newHeight)
-     TuiWinInfoPtr primaryWinInfo;
-     int newHeight;
-#endif
+_newHeightOk (TuiWinInfoPtr primaryWinInfo, int newHeight)
 {
   int ok = (newHeight < termHeight ());
 
   if (ok)
     {
-      int diff, curHeight;
+      int diff;
       TuiLayoutType curLayout = currentLayout ();
 
       diff = (newHeight - primaryWinInfo->generic.height) * (-1);
@@ -1491,7 +1464,7 @@ _newHeightOk (primaryWinInfo, newHeight)
        }
       else
        {
-         int curTotalHeight, totalHeight, minHeight;
+         int curTotalHeight, totalHeight, minHeight = 0;
          TuiWinInfoPtr firstWin, secondWin;
 
          if (curLayout == SRC_DISASSEM_COMMAND)
@@ -1505,14 +1478,14 @@ _newHeightOk (primaryWinInfo, newHeight)
              secondWin = (TuiWinInfoPtr) (sourceWindows ())->list[0];
            }
          /*
-            ** We could simply add all the heights to obtain the same result
-            ** but below is more explicit since we subtract 1 for the
-            ** line that the first and second windows share, and add one
-            ** for the locator.
-            */
-         curTotalHeight =
+            ** We could simply add all the heights to obtain the same result
+            ** but below is more explicit since we subtract 1 for the
+            ** line that the first and second windows share, and add one
+            ** for the locator.
+          */
+         totalHeight = curTotalHeight =
            (firstWin->generic.height + secondWin->generic.height - 1)
-           + cmdWin->generic.height + 1 /*locator*/ ;
+           + cmdWin->generic.height + 1 /*locator */ ;
          if (primaryWinInfo == cmdWin)
            {
              /* locator included since first & second win share a line */
@@ -1531,16 +1504,16 @@ _newHeightOk (primaryWinInfo, newHeight)
            {
              minHeight = MIN_WIN_HEIGHT;
              /*
-                ** First see if we can increase/decrease the command
-                ** window.  And make sure that the command window is
-                ** at least 1 line
-                */
+                ** First see if we can increase/decrease the command
+                ** window.  And make sure that the command window is
+                ** at least 1 line
+              */
              ok = ((cmdWin->generic.height + diff) > 0);
              if (!ok)
                {               /*
-                     ** Looks like we have to increase/decrease one of
-                     ** the other windows
-                     */
+                                  ** Looks like we have to increase/decrease one of
+                                  ** the other windows
+                                */
                  if (primaryWinInfo == firstWin)
                    ok = (secondWin->generic.height + diff) >= minHeight;
                  else
@@ -1559,9 +1532,9 @@ _newHeightOk (primaryWinInfo, newHeight)
                }
            }
          /*
-            ** Now make sure that the proposed total height doesn't exceed
-            ** the old total height.
-            */
+            ** Now make sure that the proposed total height doesn't exceed
+            ** the old total height.
+          */
          if (ok)
            ok = (newHeight >= minHeight && totalHeight <= curTotalHeight);
        }
@@ -1572,35 +1545,25 @@ _newHeightOk (primaryWinInfo, newHeight)
 
 
 /*
-** _parseScrollingArgs().
-*/
+   ** _parseScrollingArgs().
+ */
 static void
-#ifdef __STDC__
-_parseScrollingArgs (
-                     char *arg,
-                     TuiWinInfoPtr * winToScroll,
-                     int *numToScroll)
-#else
-_parseScrollingArgs (arg, winToScroll, numToScroll)
-     char *arg;
-     TuiWinInfoPtr *winToScroll;
-     int *numToScroll;
-#endif
+_parseScrollingArgs (char *arg, TuiWinInfoPtr * winToScroll, int *numToScroll)
 {
   if (numToScroll)
     *numToScroll = 0;
   *winToScroll = tuiWinWithFocus ();
 
   /*
-    ** First set up the default window to scroll, in case there is no
-    ** window name arg
-    */
+     ** First set up the default window to scroll, in case there is no
+     ** window name arg
+   */
   if (arg != (char *) NULL)
     {
       char *buf, *bufPtr;
 
       /* process the number of lines to scroll */
-      buf = bufPtr = tuiStrDup (arg);
+      buf = bufPtr = xstrdup (arg);
       if (isdigit (*bufPtr))
        {
          char *numStr;
@@ -1630,7 +1593,9 @@ _parseScrollingArgs (arg, winToScroll, numToScroll)
 
          if (*bufPtr != (char) 0)
            wname = bufPtr;
-
+         else
+           wname = "?";
+         
          /* Validate the window name */
          for (i = 0; i < strlen (wname); i++)
            wname[i] = toupper (wname[i]);
This page took 0.04538 seconds and 4 git commands to generate.