/* Print values for GNU debugger GDB.
Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
- 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software
+ 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
Foundation, Inc.
This file is part of GDB.
#include "block.h"
#include "disasm.h"
+#ifdef TUI
+#include "tui/tui.h" /* For tui_active et.al. */
+#endif
+
extern int asm_demangle; /* Whether to demangle syms in asm printouts */
extern int addressprint; /* Whether to print hex addresses in HLL " */
print_scalar_formatted (void *valaddr, struct type *type, int format, int size,
struct ui_file *stream)
{
- LONGEST val_long;
+ LONGEST val_long = 0;
unsigned int len = TYPE_LENGTH (type);
- if (len > sizeof (LONGEST)
- && (format == 't'
- || format == 'c'
- || format == 'o'
- || format == 'u'
- || format == 'd'
- || format == 'x'))
+ if (len > sizeof(LONGEST) &&
+ (TYPE_CODE (type) == TYPE_CODE_INT
+ || TYPE_CODE (type) == TYPE_CODE_ENUM))
{
- if (!TYPE_UNSIGNED (type)
- || !extract_long_unsigned_integer (valaddr, len, &val_long))
+ switch (format)
{
- /* We can't print it normally, but we can print it in hex.
- Printing it in the wrong radix is more useful than saying
- "use /x, you dummy". */
- /* FIXME: we could also do octal or binary if that was the
- desired format. */
- /* FIXME: we should be using the size field to give us a
- minimum field width to print. */
-
- if (format == 'o')
- print_octal_chars (stream, valaddr, len);
- else if (format == 'd')
- print_decimal_chars (stream, valaddr, len);
- else if (format == 't')
- print_binary_chars (stream, valaddr, len);
- else
- /* replace with call to print_hex_chars? Looks
- like val_print_type_code_int is redoing
- work. - edie */
-
- val_print_type_code_int (type, valaddr, stream);
-
+ case 'o':
+ print_octal_chars (stream, valaddr, len);
return;
- }
-
- /* If we get here, extract_long_unsigned_integer set val_long. */
+ case 'u':
+ case 'd':
+ print_decimal_chars (stream, valaddr, len);
+ return;
+ case 't':
+ print_binary_chars (stream, valaddr, len);
+ return;
+ case 'x':
+ print_hex_chars (stream, valaddr, len);
+ return;
+ case 'c':
+ print_char_chars (stream, valaddr, len);
+ return;
+ default:
+ break;
+ };
}
- else if (format != 'f')
+
+ if (format != 'f')
val_long = unpack_long (type, valaddr);
/* If the value is a pointer, and pointers and addresses are not the
#if defined(TUI)
/* NOTE: cagney/2003-02-13 The `tui_active' was previously
`tui_version'. */
- if (tui_active && *exp == '$')
+ if (tui_active && exp != NULL && *exp == '$')
display_it = (tui_set_layout_for_display_command (exp) == TUI_FAILURE);
#endif