mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-03-07 13:39:43 +08:00
* tuiStack.c (tui_make_status_line): New function to create the
status line. (tuiShowLocatorContent): Use it instead of displayableWinContentAt. * tuiData.h (PROC_PREFIX): Use "In:" to reduce length of prefix. (PC_PREFIX): Use upper case. (SINGLE_KEY, MIN_LINE_WIDTH, MIN_PROC_WIDTH): Define. (MAX_TARGET_WIDTH, MAX_PID_WIDTH): Define.
This commit is contained in:
parent
269c21feac
commit
5026540224
@ -1,3 +1,13 @@
|
||||
2002-09-01 Stephane Carrez <stcarrez@nerim.fr>
|
||||
|
||||
* tuiStack.c (tui_make_status_line): New function to create the
|
||||
status line.
|
||||
(tuiShowLocatorContent): Use it instead of displayableWinContentAt.
|
||||
* tuiData.h (PROC_PREFIX): Use "In:" to reduce length of prefix.
|
||||
(PC_PREFIX): Use upper case.
|
||||
(SINGLE_KEY, MIN_LINE_WIDTH, MIN_PROC_WIDTH): Define.
|
||||
(MAX_TARGET_WIDTH, MAX_PID_WIDTH): Define.
|
||||
|
||||
2002-08-31 Stephane Carrez <stcarrez@nerim.fr>
|
||||
|
||||
* tuiSourceWin.h (tuiUpdateAllExecInfos): Don't declare.
|
||||
|
@ -71,10 +71,18 @@ TuiGenWinInfo, *TuiGenWinInfoPtr;
|
||||
#define MIN_WIN_HEIGHT 3
|
||||
#define MIN_CMD_WIN_HEIGHT 3
|
||||
|
||||
/* Strings to display in the TUI status line. */
|
||||
#define FILE_PREFIX "File: "
|
||||
#define PROC_PREFIX "Procedure: "
|
||||
#define PROC_PREFIX "In: "
|
||||
#define LINE_PREFIX "Line: "
|
||||
#define PC_PREFIX "pc: "
|
||||
#define PC_PREFIX "PC: "
|
||||
#define SINGLE_KEY "(SingleKey)"
|
||||
|
||||
/* Minimum/Maximum length of some fields displayed in the TUI status line. */
|
||||
#define MIN_LINE_WIDTH 4 /* Use at least 4 digits for line numbers. */
|
||||
#define MIN_PROC_WIDTH 12
|
||||
#define MAX_TARGET_WIDTH 10
|
||||
#define MAX_PID_WIDTH 14
|
||||
|
||||
#define TUI_FLOAT_REGS_NAME "$FREGS"
|
||||
#define TUI_FLOAT_REGS_NAME_LOWER "$fregs"
|
||||
|
@ -44,6 +44,8 @@
|
||||
#include "breakpoint.h"
|
||||
#include "frame.h"
|
||||
#include "command.h"
|
||||
#include "inferior.h"
|
||||
#include "target.h"
|
||||
#include "top.h"
|
||||
|
||||
#include "tui.h"
|
||||
@ -70,6 +72,154 @@ static void tui_set_locator_info (const char *filename, const char *procname,
|
||||
static void tui_update_command (char *, int);
|
||||
|
||||
|
||||
/* Create the status line to display as much information as we
|
||||
can on this single line: target name, process number, current
|
||||
function, current line, current PC, SingleKey mode. */
|
||||
static char*
|
||||
tui_make_status_line (TuiLocatorElement* loc)
|
||||
{
|
||||
char* string;
|
||||
char line_buf[50], buf[50], *pname;
|
||||
int status_size = termWidth ();
|
||||
int i, proc_width;
|
||||
const char* pid_name;
|
||||
const char* pc_buf;
|
||||
int target_width;
|
||||
int pid_width;
|
||||
int line_width;
|
||||
int pc_width;
|
||||
struct ui_file *pc_out;
|
||||
|
||||
if (ptid_equal (inferior_ptid, null_ptid))
|
||||
pid_name = "No process";
|
||||
else
|
||||
pid_name = target_pid_to_str (inferior_ptid);
|
||||
|
||||
target_width = strlen (target_shortname);
|
||||
if (target_width > MAX_TARGET_WIDTH)
|
||||
target_width = MAX_TARGET_WIDTH;
|
||||
|
||||
pid_width = strlen (pid_name);
|
||||
if (pid_width > MAX_PID_WIDTH)
|
||||
pid_width = MAX_PID_WIDTH;
|
||||
|
||||
string = (char *) xmalloc (status_size + 1);
|
||||
|
||||
/* Translate line number and obtain its size. */
|
||||
if (loc->lineNo > 0)
|
||||
sprintf (line_buf, "%d", loc->lineNo);
|
||||
else
|
||||
strcpy (line_buf, "??");
|
||||
line_width = strlen (line_buf);
|
||||
if (line_width < MIN_LINE_WIDTH)
|
||||
line_width = MIN_LINE_WIDTH;
|
||||
|
||||
/* Translate PC address. */
|
||||
pc_out = tui_sfileopen (128);
|
||||
print_address_numeric (loc->addr, 1, pc_out);
|
||||
pc_buf = tui_file_get_strbuf (pc_out);
|
||||
pc_width = strlen (pc_buf);
|
||||
|
||||
/* First determine the amount of proc name width we have available.
|
||||
The +1 are for a space separator between fields.
|
||||
The -1 are to take into account the \0 counted by sizeof. */
|
||||
proc_width = (status_size
|
||||
- (target_width + 1)
|
||||
- (pid_width + 1)
|
||||
- (sizeof (PROC_PREFIX) - 1 + 1)
|
||||
- (sizeof (LINE_PREFIX) - 1 + line_width + 1)
|
||||
- (sizeof (PC_PREFIX) - 1 + pc_width + 1)
|
||||
- (tui_current_key_mode == tui_single_key_mode
|
||||
? (sizeof (SINGLE_KEY) - 1 + 1)
|
||||
: 0));
|
||||
|
||||
/* If there is no room to print the function name, try by removing
|
||||
some fields. */
|
||||
if (proc_width < MIN_PROC_WIDTH)
|
||||
{
|
||||
proc_width += target_width + 1;
|
||||
target_width = 0;
|
||||
if (proc_width < MIN_PROC_WIDTH)
|
||||
{
|
||||
proc_width += pid_width + 1;
|
||||
pid_width = 0;
|
||||
if (proc_width <= MIN_PROC_WIDTH)
|
||||
{
|
||||
proc_width += pc_width + sizeof (PC_PREFIX) - 1 + 1;
|
||||
pc_width = 0;
|
||||
if (proc_width < 0)
|
||||
{
|
||||
proc_width += line_width + sizeof (LINE_PREFIX) - 1 + 1;
|
||||
line_width = 0;
|
||||
if (proc_width < 0)
|
||||
proc_width = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Now convert elements to string form */
|
||||
pname = loc->procName;
|
||||
|
||||
/* Now create the locator line from the string version
|
||||
of the elements. We could use sprintf() here but
|
||||
that wouldn't ensure that we don't overrun the size
|
||||
of the allocated buffer. strcat_to_buf() will. */
|
||||
*string = (char) 0;
|
||||
|
||||
if (target_width > 0)
|
||||
{
|
||||
sprintf (buf, "%*.*s ",
|
||||
-target_width, target_width, target_shortname);
|
||||
strcat_to_buf (string, status_size, buf);
|
||||
}
|
||||
if (pid_width > 0)
|
||||
{
|
||||
sprintf (buf, "%*.*s ",
|
||||
-pid_width, pid_width, pid_name);
|
||||
strcat_to_buf (string, status_size, buf);
|
||||
}
|
||||
|
||||
/* Show whether we are in SingleKey mode. */
|
||||
if (tui_current_key_mode == tui_single_key_mode)
|
||||
{
|
||||
strcat_to_buf (string, status_size, SINGLE_KEY);
|
||||
strcat_to_buf (string, status_size, " ");
|
||||
}
|
||||
|
||||
/* procedure/class name */
|
||||
if (proc_width > 0)
|
||||
{
|
||||
if (strlen (pname) > proc_width)
|
||||
sprintf (buf, "%s%*.*s* ", PROC_PREFIX,
|
||||
1 - proc_width, proc_width - 1, pname);
|
||||
else
|
||||
sprintf (buf, "%s%*.*s ", PROC_PREFIX,
|
||||
-proc_width, proc_width, pname);
|
||||
strcat_to_buf (string, status_size, buf);
|
||||
}
|
||||
|
||||
if (line_width > 0)
|
||||
{
|
||||
sprintf (buf, "%s%*.*s ", LINE_PREFIX,
|
||||
-line_width, line_width, line_buf);
|
||||
strcat_to_buf (string, status_size, buf);
|
||||
}
|
||||
if (pc_width > 0)
|
||||
{
|
||||
strcat_to_buf (string, status_size, PC_PREFIX);
|
||||
strcat_to_buf (string, status_size, pc_buf);
|
||||
}
|
||||
|
||||
|
||||
for (i = strlen (string); i < status_size; i++)
|
||||
string[i] = ' ';
|
||||
string[status_size] = (char) 0;
|
||||
|
||||
ui_file_delete (pc_out);
|
||||
return string;
|
||||
}
|
||||
|
||||
/* Get a printable name for the function at the address.
|
||||
The symbol name is demangled if demangling is turned on.
|
||||
Returns a pointer to a static area holding the result. */
|
||||
@ -114,24 +264,23 @@ tuiShowLocatorContent (void)
|
||||
|
||||
if (m_genWinPtrNotNull (locator) && locator->handle != (WINDOW *) NULL)
|
||||
{
|
||||
string = displayableWinContentAt (locator, 0);
|
||||
if (string != (char *) NULL)
|
||||
{
|
||||
wmove (locator->handle, 0, 0);
|
||||
wstandout (locator->handle);
|
||||
waddstr (locator->handle, string);
|
||||
wclrtoeol (locator->handle);
|
||||
wstandend (locator->handle);
|
||||
tuiRefreshWin (locator);
|
||||
wmove (locator->handle, 0, 0);
|
||||
if (string != nullStr ())
|
||||
tuiFree (string);
|
||||
locator->contentInUse = TRUE;
|
||||
}
|
||||
}
|
||||
TuiWinElementPtr element;
|
||||
|
||||
element = (TuiWinElementPtr) locator->content[0];
|
||||
|
||||
string = tui_make_status_line (&element->whichElement.locator);
|
||||
wmove (locator->handle, 0, 0);
|
||||
wstandout (locator->handle);
|
||||
waddstr (locator->handle, string);
|
||||
wclrtoeol (locator->handle);
|
||||
wstandend (locator->handle);
|
||||
tuiRefreshWin (locator);
|
||||
wmove (locator->handle, 0, 0);
|
||||
xfree (string);
|
||||
locator->contentInUse = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
} /* tuiShowLocatorContent */
|
||||
|
||||
/* Set the filename portion of the locator. */
|
||||
static void
|
||||
|
Loading…
Reference in New Issue
Block a user