X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Ftui%2FtuiWin.c;h=b82ce2f153dab84b0c07d730eb8ad38d8f14b320;hb=6e7f8b9cbab2b8bc4517ece86ae0c7f4f7d7599a;hp=4c3acd2e4724a8cec9bfec7fc5d0b0f1d6e9f6c3;hpb=84b1e7c7ee7e32bf88270c46f0ee1cbf002a09c3;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/tui/tuiWin.c b/gdb/tui/tuiWin.c index 4c3acd2e47..b82ce2f153 100644 --- a/gdb/tui/tuiWin.c +++ b/gdb/tui/tuiWin.c @@ -1,5 +1,8 @@ /* TUI window generic functions. - Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + + Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, + Inc. + Contributed by Hewlett-Packard Company. This file is part of GDB. @@ -24,6 +27,23 @@ Author: Susan B. Macchia */ +/* FIXME: cagney/2002-02-28: The GDB coding standard indicates that + "defs.h" should be included first. Unfortunatly some systems + (currently Debian GNU/Linux) include the via + and they clash with "bfd.h"'s definiton of true/false. The correct + fix is to remove true/false from "bfd.h", however, until that + happens, hack around it by including "config.h" and + first. */ + +#include "config.h" +#ifdef HAVE_NCURSES_H +#include +#else +#ifdef HAVE_CURSES_H +#include +#endif +#endif + #include #include #include "defs.h" @@ -31,6 +51,9 @@ #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" @@ -42,11 +65,6 @@ #include "tuiSourceWin.h" #include "tuiDataWin.h" -/******************************* -** External Declarations -********************************/ -extern void init_page_info (); - /******************************* ** Static Local Decls ********************************/ @@ -78,6 +96,213 @@ static void _parseScrollingArgs (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. @@ -85,82 +310,123 @@ static void _parseScrollingArgs (char *, TuiWinInfoPtr *, int *); void _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"); - 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 [+ | -] <#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 { | 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 */ + /* 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); +} -/* - ** tuiClearWinFocusFrom - ** Clear the logical focus from winInfo - */ +/* Update gdb's knowledge of the terminal size. */ void -tuiClearWinFocusFrom (TuiWinInfoPtr winInfo) +tui_update_gdb_sizes () { - if (m_winPtrNotNull (winInfo)) - { - if (winInfo->generic.type != CMD_WIN) - unhighlightWin (winInfo); - tuiSetWinWithFocus ((TuiWinInfoPtr) NULL); - } - - return; -} /* tuiClearWinFocusFrom */ - - -/* - ** tuiClearWinFocus(). - ** Clear the window that has focus. - */ -void -tuiClearWinFocus (void) -{ - tuiClearWinFocusFrom (tuiWinWithFocus ()); + char cmd[50]; + extern int screenheight, screenwidth; /* in readline */ - return; -} /* tuiClearWinFocus */ + /* 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); +} /* @@ -186,21 +452,6 @@ tuiSetWinFocusTo (TuiWinInfoPtr winInfo) } /* tuiSetWinFocusTo */ -char * -tuiStrDup (char *str) -{ - char *newStr = (char *) NULL; - - if (str != (char *) NULL) - { - newStr = (char *) xmalloc (strlen (str) + 1); - strcpy (newStr, str); - } - - return newStr; -} /* tuiStrDup */ - - /* ** tuiScrollForward(). */ @@ -311,16 +562,14 @@ tuiScrollRight (TuiWinInfoPtr winToScroll, int numToScroll) /* - ** tui_vScroll(). + ** tui_scroll(). ** Scroll a window. Arguments are passed through a va_list. */ void -tui_vScroll (va_list args) +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: @@ -338,9 +587,7 @@ tui_vScroll (va_list args) default: break; } - - return; -} /* tui_vScroll */ +} /* @@ -351,6 +598,7 @@ tuiRefreshAll (void) { TuiWinType type; + clearok (curscr, TRUE); refreshAll (winList); for (type = SRC_WIN; type < MAX_MAJOR_WINDOWS; type++) { @@ -360,9 +608,6 @@ tuiRefreshAll (void) { 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]); @@ -376,11 +621,8 @@ tuiRefreshAll (void) } } } - tuiClearLocatorDisplay (); tuiShowLocatorContent (); - - return; -} /* tuiRefreshAll */ +} /* @@ -403,12 +645,12 @@ tuiResizeAll (void) 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 || @@ -579,17 +821,14 @@ _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); +} /* @@ -601,17 +840,14 @@ _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); +} /* @@ -623,14 +859,11 @@ _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); +} /* @@ -642,14 +875,11 @@ _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); +} /* @@ -661,7 +891,7 @@ _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; @@ -696,32 +926,16 @@ The window name specified must be valid and visible.\n"); return; } /* _tuiSetFocus */ - -/* - ** _tui_vSetFocus() - */ -static void -_tui_vSetFocus (va_list args) -{ - char *arg = va_arg (args, char *); - int fromTTY = va_arg (args, int); - - _tuiSetFocus (arg, fromTTY); - - return; -} /* tui_vSetFocus */ - - /* ** _tuiSetFocus_command() */ static void _tuiSetFocus_command (char *arg, int fromTTY) { - tuiDo ((TuiOpaqueFuncPtr) _tui_vSetFocus, arg, fromTTY); - - return; -} /* tui_SetFocus */ + /* Make sure the curses mode is enabled. */ + tui_enable (); + _tuiSetFocus (arg, fromTTY); +} /* @@ -734,7 +948,7 @@ _tuiAllWindowsInfo (char *arg, int fromTTY) 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) \n", @@ -756,7 +970,10 @@ _tuiAllWindowsInfo (char *arg, int fromTTY) static void _tuiRefreshAll_command (char *arg, int fromTTY) { - tuiDo ((TuiOpaqueFuncPtr) tuiRefreshAll); + /* Make sure the curses mode is enabled. */ + tui_enable (); + + tuiRefreshAll (); } @@ -767,6 +984,8 @@ _tuiRefreshAll_command (char *arg, int fromTTY) static void _tuiSetTabWidth_command (char *arg, int fromTTY) { + /* Make sure the curses mode is enabled. */ + tui_enable (); if (arg != (char *) NULL) { int ts; @@ -789,9 +1008,11 @@ _tuiSetTabWidth_command (char *arg, int fromTTY) static void _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; @@ -850,7 +1071,7 @@ The window name specified must be valid and visible.\n"); 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", @@ -870,23 +1091,6 @@ The window name specified must be valid and visible.\n"); return; } /* _tuiSetWinHeight */ - -/* - ** _tui_vSetWinHeight(). - ** Set the height of the specified window, with va_list. - */ -static void -_tui_vSetWinHeight (va_list args) -{ - char *arg = va_arg (args, char *); - int fromTTY = va_arg (args, int); - - _tuiSetWinHeight (arg, fromTTY); - - return; -} /* _tui_vSetWinHeight */ - - /* ** _tuiSetWinHeight_command(). ** Set the height of the specified window, with va_list. @@ -894,10 +1098,10 @@ _tui_vSetWinHeight (va_list args) static void _tuiSetWinHeight_command (char *arg, int fromTTY) { - tuiDo ((TuiOpaqueFuncPtr) _tui_vSetWinHeight, arg, fromTTY); - - return; -} /* _tuiSetWinHeight_command */ + /* Make sure the curses mode is enabled. */ + tui_enable (); + _tuiSetWinHeight (arg, fromTTY); +} /* @@ -908,6 +1112,8 @@ _tuiSetWinHeight_command (char *arg, int fromTTY) static void _tuiXDBsetWinHeight (char *arg, int fromTTY) { + /* Make sure the curses mode is enabled. */ + tui_enable (); if (arg != (char *) NULL) { int inputNo = atoi (arg); @@ -932,23 +1138,6 @@ _tuiXDBsetWinHeight (char *arg, int fromTTY) return; } /* _tuiXDBsetWinHeight */ - -/* - ** _tui_vXDBsetWinHeight(). - ** Set the height of the specified window, with va_list. - */ -static void -_tui_vXDBsetWinHeight (va_list args) -{ - 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. @@ -956,10 +1145,8 @@ _tui_vXDBsetWinHeight (va_list args) static void _tuiXDBsetWinHeight_command (char *arg, int fromTTY) { - tuiDo ((TuiOpaqueFuncPtr) _tui_vXDBsetWinHeight, arg, fromTTY); - - return; -} /* _tuiXDBsetWinHeight_command */ + _tuiXDBsetWinHeight (arg, fromTTY); +} /* @@ -976,7 +1163,7 @@ _tuiAdjustWinHeights (TuiWinInfoPtr primaryWinInfo, int newHeight) status = TUI_SUCCESS; if (newHeight != primaryWinInfo->generic.height) { - int i, diff; + int diff; TuiWinInfoPtr winInfo; TuiGenWinInfoPtr locator = locatorWinInfoPtr (); TuiLayoutType curLayout = currentLayout (); @@ -1124,7 +1311,6 @@ static void _makeInvisibleAndSetNewHeight (TuiWinInfoPtr winInfo, int height) { int i; - struct symtab *s; TuiGenWinInfoPtr genWinInfo; @@ -1173,9 +1359,7 @@ _makeInvisibleAndSetNewHeight (TuiWinInfoPtr winInfo, int height) default: break; } - - return; -} /* _makeInvisibleAndSetNewHeight */ +} /* @@ -1187,7 +1371,6 @@ _makeInvisibleAndSetNewHeight (TuiWinInfoPtr winInfo, int height) static void _makeVisibleWithNewHeight (TuiWinInfoPtr winInfo) { - int i; struct symtab *s; m_beVisible (&winInfo->generic); @@ -1201,6 +1384,8 @@ _makeVisibleWithNewHeight (TuiWinInfoPtr 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 = @@ -1210,33 +1395,26 @@ _makeVisibleWithNewHeight (TuiWinInfoPtr 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 (deprecated_selected_frame->pc); if (winInfo->generic.type == SRC_WIN) - line = (Opaque) current_source_line; + line.lineNo = cursal.line; else { - CORE_ADDR pc; - - find_line_pc (s, current_source_line, &pc); - line = (Opaque) pc; + find_line_pc (s, cursal.line, &line.addr); } tuiUpdateSourceWindow (winInfo, s, line, TRUE); } if (m_hasLocator (winInfo)) { m_beVisible (locatorWinInfoPtr ()); - tuiClearLocatorDisplay (); tuiShowLocatorContent (); } break; @@ -1265,7 +1443,7 @@ _newHeightOk (TuiWinInfoPtr primaryWinInfo, int newHeight) if (ok) { - int diff, curHeight; + int diff; TuiLayoutType curLayout = currentLayout (); diff = (newHeight - primaryWinInfo->generic.height) * (-1); @@ -1291,7 +1469,7 @@ _newHeightOk (TuiWinInfoPtr primaryWinInfo, int newHeight) } else { - int curTotalHeight, totalHeight, minHeight; + int curTotalHeight, totalHeight, minHeight = 0; TuiWinInfoPtr firstWin, secondWin; if (curLayout == SRC_DISASSEM_COMMAND) @@ -1310,7 +1488,7 @@ _newHeightOk (TuiWinInfoPtr primaryWinInfo, int newHeight) ** line that the first and second windows share, and add one ** for the locator. */ - curTotalHeight = + totalHeight = curTotalHeight = (firstWin->generic.height + secondWin->generic.height - 1) + cmdWin->generic.height + 1 /*locator */ ; if (primaryWinInfo == cmdWin) @@ -1390,7 +1568,7 @@ _parseScrollingArgs (char *arg, TuiWinInfoPtr * winToScroll, int *numToScroll) char *buf, *bufPtr; /* process the number of lines to scroll */ - buf = bufPtr = tuiStrDup (arg); + buf = bufPtr = xstrdup (arg); if (isdigit (*bufPtr)) { char *numStr; @@ -1420,7 +1598,9 @@ _parseScrollingArgs (char *arg, TuiWinInfoPtr * winToScroll, int *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]);