*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / valprint.c
CommitLineData
c906108c 1/* Print values for GDB, the GNU debugger.
5c1c87f0
AC
2
3 Copyright 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
4 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation,
5 Inc.
c906108c 6
c5aa993b 7 This file is part of GDB.
c906108c 8
c5aa993b
JM
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
c906108c 13
c5aa993b
JM
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
c906108c 18
c5aa993b
JM
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place - Suite 330,
22 Boston, MA 02111-1307, USA. */
c906108c
SS
23
24#include "defs.h"
25#include "gdb_string.h"
26#include "symtab.h"
27#include "gdbtypes.h"
28#include "value.h"
29#include "gdbcore.h"
30#include "gdbcmd.h"
31#include "target.h"
c906108c 32#include "language.h"
c906108c
SS
33#include "annotate.h"
34#include "valprint.h"
39424bef 35#include "floatformat.h"
d16aafd8 36#include "doublest.h"
c906108c
SS
37
38#include <errno.h>
39
40/* Prototypes for local functions */
41
917317f4
JM
42static int partial_memory_read (CORE_ADDR memaddr, char *myaddr,
43 int len, int *errnoptr);
44
d9fcf2fb
JM
45static void print_hex_chars (struct ui_file *, unsigned char *,
46 unsigned int);
c906108c 47
a14ed312 48static void show_print (char *, int);
c906108c 49
a14ed312 50static void set_print (char *, int);
c906108c 51
a14ed312 52static void set_radix (char *, int);
c906108c 53
a14ed312 54static void show_radix (char *, int);
c906108c 55
a14ed312 56static void set_input_radix (char *, int, struct cmd_list_element *);
c906108c 57
a14ed312 58static void set_input_radix_1 (int, unsigned);
c906108c 59
a14ed312 60static void set_output_radix (char *, int, struct cmd_list_element *);
c906108c 61
a14ed312 62static void set_output_radix_1 (int, unsigned);
c906108c 63
a14ed312 64void _initialize_valprint (void);
c906108c
SS
65
66/* Maximum number of chars to print for a string pointer value or vector
67 contents, or UINT_MAX for no limit. Note that "set print elements 0"
68 stores UINT_MAX in print_max, which displays in a show command as
69 "unlimited". */
70
71unsigned int print_max;
72#define PRINT_MAX_DEFAULT 200 /* Start print_max off at this value. */
73
74/* Default input and output radixes, and output format letter. */
75
76unsigned input_radix = 10;
77unsigned output_radix = 10;
78int output_format = 0;
79
80/* Print repeat counts if there are more than this many repetitions of an
81 element in an array. Referenced by the low level language dependent
82 print routines. */
83
84unsigned int repeat_count_threshold = 10;
85
86/* If nonzero, stops printing of char arrays at first null. */
87
88int stop_print_at_null;
89
90/* Controls pretty printing of structures. */
91
92int prettyprint_structs;
93
94/* Controls pretty printing of arrays. */
95
96int prettyprint_arrays;
97
98/* If nonzero, causes unions inside structures or other unions to be
99 printed. */
100
101int unionprint; /* Controls printing of nested unions. */
102
103/* If nonzero, causes machine addresses to be printed in certain contexts. */
104
105int addressprint; /* Controls printing of machine addresses */
c906108c 106\f
c5aa993b 107
c906108c
SS
108/* Print data of type TYPE located at VALADDR (within GDB), which came from
109 the inferior at address ADDRESS, onto stdio stream STREAM according to
110 FORMAT (a letter, or 0 for natural format using TYPE).
111
112 If DEREF_REF is nonzero, then dereference references, otherwise just print
113 them like pointers.
114
115 The PRETTY parameter controls prettyprinting.
116
117 If the data are a string pointer, returns the number of string characters
118 printed.
119
120 FIXME: The data at VALADDR is in target byte order. If gdb is ever
121 enhanced to be able to debug more than the single target it was compiled
122 for (specific CPU type and thus specific target byte ordering), then
123 either the print routines are going to have to take this into account,
124 or the data is going to have to be passed into here already converted
125 to the host byte ordering, whichever is more convenient. */
126
127
128int
fba45db2
KB
129val_print (struct type *type, char *valaddr, int embedded_offset,
130 CORE_ADDR address, struct ui_file *stream, int format, int deref_ref,
131 int recurse, enum val_prettyprint pretty)
c906108c
SS
132{
133 struct type *real_type = check_typedef (type);
134 if (pretty == Val_pretty_default)
135 {
136 pretty = prettyprint_structs ? Val_prettyprint : Val_no_prettyprint;
137 }
c5aa993b 138
c906108c
SS
139 QUIT;
140
141 /* Ensure that the type is complete and not just a stub. If the type is
142 only a stub and we can't find and substitute its complete type, then
143 print appropriate string and return. */
144
74a9bb82 145 if (TYPE_STUB (real_type))
c906108c
SS
146 {
147 fprintf_filtered (stream, "<incomplete type>");
148 gdb_flush (stream);
149 return (0);
150 }
c5aa993b 151
c906108c 152 return (LA_VAL_PRINT (type, valaddr, embedded_offset, address,
c5aa993b 153 stream, format, deref_ref, recurse, pretty));
c906108c
SS
154}
155
156/* Print the value VAL in C-ish syntax on stream STREAM.
157 FORMAT is a format-letter, or 0 for print in natural format of data type.
158 If the object printed is a string pointer, returns
159 the number of string bytes printed. */
160
161int
3d6d86c6 162value_print (struct value *val, struct ui_file *stream, int format,
fba45db2 163 enum val_prettyprint pretty)
c906108c
SS
164{
165 if (val == 0)
166 {
167 printf_filtered ("<address of value unknown>");
168 return 0;
169 }
170 if (VALUE_OPTIMIZED_OUT (val))
171 {
172 printf_filtered ("<value optimized out>");
173 return 0;
174 }
175 return LA_VALUE_PRINT (val, stream, format, pretty);
176}
177
178/* Called by various <lang>_val_print routines to print
179 TYPE_CODE_INT's. TYPE is the type. VALADDR is the address of the
180 value. STREAM is where to print the value. */
181
182void
fba45db2
KB
183val_print_type_code_int (struct type *type, char *valaddr,
184 struct ui_file *stream)
c906108c
SS
185{
186 if (TYPE_LENGTH (type) > sizeof (LONGEST))
187 {
188 LONGEST val;
189
190 if (TYPE_UNSIGNED (type)
191 && extract_long_unsigned_integer (valaddr, TYPE_LENGTH (type),
192 &val))
193 {
194 print_longest (stream, 'u', 0, val);
195 }
196 else
197 {
198 /* Signed, or we couldn't turn an unsigned value into a
199 LONGEST. For signed values, one could assume two's
200 complement (a reasonable assumption, I think) and do
201 better than this. */
202 print_hex_chars (stream, (unsigned char *) valaddr,
203 TYPE_LENGTH (type));
204 }
205 }
206 else
207 {
c906108c
SS
208 print_longest (stream, TYPE_UNSIGNED (type) ? 'u' : 'd', 0,
209 unpack_long (type, valaddr));
c906108c
SS
210 }
211}
212
213/* Print a number according to FORMAT which is one of d,u,x,o,b,h,w,g.
214 The raison d'etre of this function is to consolidate printing of
215 LONG_LONG's into this one function. Some platforms have long longs but
216 don't have a printf() that supports "ll" in the format string. We handle
217 these by seeing if the number is representable as either a signed or
218 unsigned long, depending upon what format is desired, and if not we just
219 bail out and print the number in hex.
220
221 The format chars b,h,w,g are from print_scalar_formatted(). If USE_LOCAL,
222 format it according to the current language (this should be used for most
223 integers which GDB prints, the exception is things like protocols where
224 the format of the integer is a protocol thing, not a user-visible thing).
c5aa993b 225 */
c906108c
SS
226
227#if defined (CC_HAS_LONG_LONG) && !defined (PRINTF_HAS_LONG_LONG)
d9fcf2fb
JM
228static void print_decimal (struct ui_file * stream, char *sign,
229 int use_local, ULONGEST val_ulong);
c906108c 230static void
fba45db2
KB
231print_decimal (struct ui_file *stream, char *sign, int use_local,
232 ULONGEST val_ulong)
c906108c
SS
233{
234 unsigned long temp[3];
235 int i = 0;
236 do
237 {
238 temp[i] = val_ulong % (1000 * 1000 * 1000);
239 val_ulong /= (1000 * 1000 * 1000);
240 i++;
241 }
242 while (val_ulong != 0 && i < (sizeof (temp) / sizeof (temp[0])));
243 switch (i)
244 {
245 case 1:
246 fprintf_filtered (stream, "%s%lu",
247 sign, temp[0]);
248 break;
249 case 2:
250 fprintf_filtered (stream, "%s%lu%09lu",
251 sign, temp[1], temp[0]);
252 break;
253 case 3:
254 fprintf_filtered (stream, "%s%lu%09lu%09lu",
255 sign, temp[2], temp[1], temp[0]);
256 break;
257 default:
e1e9e218 258 internal_error (__FILE__, __LINE__, "failed internal consistency check");
c906108c
SS
259 }
260 return;
261}
262#endif
263
264void
fba45db2
KB
265print_longest (struct ui_file *stream, int format, int use_local,
266 LONGEST val_long)
c906108c
SS
267{
268#if defined (CC_HAS_LONG_LONG) && !defined (PRINTF_HAS_LONG_LONG)
269 if (sizeof (long) < sizeof (LONGEST))
270 {
271 switch (format)
272 {
273 case 'd':
274 {
275 /* Print a signed value, that doesn't fit in a long */
276 if ((long) val_long != val_long)
277 {
278 if (val_long < 0)
279 print_decimal (stream, "-", use_local, -val_long);
280 else
281 print_decimal (stream, "", use_local, val_long);
282 return;
283 }
284 break;
285 }
286 case 'u':
287 {
288 /* Print an unsigned value, that doesn't fit in a long */
289 if ((unsigned long) val_long != (ULONGEST) val_long)
290 {
291 print_decimal (stream, "", use_local, val_long);
292 return;
293 }
294 break;
295 }
296 case 'x':
297 case 'o':
298 case 'b':
299 case 'h':
300 case 'w':
301 case 'g':
302 /* Print as unsigned value, must fit completely in unsigned long */
303 {
304 unsigned long temp = val_long;
305 if (temp != val_long)
306 {
307 /* Urk, can't represent value in long so print in hex.
308 Do shift in two operations so that if sizeof (long)
309 == sizeof (LONGEST) we can avoid warnings from
310 picky compilers about shifts >= the size of the
311 shiftee in bits */
312 unsigned long vbot = (unsigned long) val_long;
313 LONGEST temp = (val_long >> (sizeof (long) * HOST_CHAR_BIT - 1));
314 unsigned long vtop = temp >> 1;
315 fprintf_filtered (stream, "0x%lx%08lx", vtop, vbot);
316 return;
317 }
318 break;
319 }
320 }
321 }
322#endif
323
324#if defined (CC_HAS_LONG_LONG) && defined (PRINTF_HAS_LONG_LONG)
325 switch (format)
326 {
327 case 'd':
328 fprintf_filtered (stream,
329 use_local ? local_decimal_format_custom ("ll")
c5aa993b 330 : "%lld",
853c7bd0 331 (long long) val_long);
c906108c
SS
332 break;
333 case 'u':
baa6f10b 334 fprintf_filtered (stream, "%llu", (long long) val_long);
c906108c
SS
335 break;
336 case 'x':
337 fprintf_filtered (stream,
338 use_local ? local_hex_format_custom ("ll")
c5aa993b 339 : "%llx",
853c7bd0 340 (unsigned long long) val_long);
c906108c
SS
341 break;
342 case 'o':
343 fprintf_filtered (stream,
344 use_local ? local_octal_format_custom ("ll")
c5aa993b 345 : "%llo",
853c7bd0 346 (unsigned long long) val_long);
c906108c
SS
347 break;
348 case 'b':
349 fprintf_filtered (stream, local_hex_format_custom ("02ll"), val_long);
350 break;
351 case 'h':
352 fprintf_filtered (stream, local_hex_format_custom ("04ll"), val_long);
353 break;
354 case 'w':
355 fprintf_filtered (stream, local_hex_format_custom ("08ll"), val_long);
356 break;
357 case 'g':
358 fprintf_filtered (stream, local_hex_format_custom ("016ll"), val_long);
359 break;
360 default:
e1e9e218 361 internal_error (__FILE__, __LINE__, "failed internal consistency check");
c906108c 362 }
c5aa993b 363#else /* !CC_HAS_LONG_LONG || !PRINTF_HAS_LONG_LONG */
c906108c
SS
364 /* In the following it is important to coerce (val_long) to a long. It does
365 nothing if !LONG_LONG, but it will chop off the top half (which we know
366 we can ignore) if the host supports long longs. */
367
368 switch (format)
369 {
370 case 'd':
371 fprintf_filtered (stream,
372 use_local ? local_decimal_format_custom ("l")
c5aa993b 373 : "%ld",
c906108c
SS
374 (long) val_long);
375 break;
376 case 'u':
377 fprintf_filtered (stream, "%lu", (unsigned long) val_long);
378 break;
379 case 'x':
380 fprintf_filtered (stream,
381 use_local ? local_hex_format_custom ("l")
c5aa993b 382 : "%lx",
c906108c
SS
383 (unsigned long) val_long);
384 break;
385 case 'o':
386 fprintf_filtered (stream,
387 use_local ? local_octal_format_custom ("l")
c5aa993b 388 : "%lo",
c906108c
SS
389 (unsigned long) val_long);
390 break;
391 case 'b':
392 fprintf_filtered (stream, local_hex_format_custom ("02l"),
393 (unsigned long) val_long);
394 break;
395 case 'h':
396 fprintf_filtered (stream, local_hex_format_custom ("04l"),
397 (unsigned long) val_long);
398 break;
399 case 'w':
400 fprintf_filtered (stream, local_hex_format_custom ("08l"),
401 (unsigned long) val_long);
402 break;
403 case 'g':
404 fprintf_filtered (stream, local_hex_format_custom ("016l"),
405 (unsigned long) val_long);
406 break;
407 default:
e1e9e218 408 internal_error (__FILE__, __LINE__, "failed internal consistency check");
c906108c
SS
409 }
410#endif /* CC_HAS_LONG_LONG || PRINTF_HAS_LONG_LONG */
411}
412
c906108c
SS
413/* This used to be a macro, but I don't think it is called often enough
414 to merit such treatment. */
415/* Convert a LONGEST to an int. This is used in contexts (e.g. number of
416 arguments to a function, number in a value history, register number, etc.)
417 where the value must not be larger than can fit in an int. */
418
419int
fba45db2 420longest_to_int (LONGEST arg)
c906108c
SS
421{
422 /* Let the compiler do the work */
423 int rtnval = (int) arg;
424
425 /* Check for overflows or underflows */
426 if (sizeof (LONGEST) > sizeof (int))
427 {
428 if (rtnval != arg)
429 {
430 error ("Value out of range.");
431 }
432 }
433 return (rtnval);
434}
435
a73c86fb
AC
436/* Print a floating point value of type TYPE (not always a
437 TYPE_CODE_FLT), pointed to in GDB by VALADDR, on STREAM. */
c906108c
SS
438
439void
fba45db2 440print_floating (char *valaddr, struct type *type, struct ui_file *stream)
c906108c
SS
441{
442 DOUBLEST doub;
443 int inv;
a73c86fb 444 const struct floatformat *fmt = NULL;
c906108c 445 unsigned len = TYPE_LENGTH (type);
c5aa993b 446
a73c86fb
AC
447 /* If it is a floating-point, check for obvious problems. */
448 if (TYPE_CODE (type) == TYPE_CODE_FLT)
449 fmt = floatformat_from_type (type);
450 if (fmt != NULL && floatformat_is_nan (fmt, valaddr))
39424bef
MK
451 {
452 if (floatformat_is_negative (fmt, valaddr))
453 fprintf_filtered (stream, "-");
454 fprintf_filtered (stream, "nan(");
306d9ac5
DC
455 fputs_filtered (local_hex_format_prefix (), stream);
456 fputs_filtered (floatformat_mantissa (fmt, valaddr), stream);
457 fputs_filtered (local_hex_format_suffix (), stream);
39424bef
MK
458 fprintf_filtered (stream, ")");
459 return;
7355ddba 460 }
c906108c 461
a73c86fb
AC
462 /* NOTE: cagney/2002-01-15: The TYPE passed into print_floating()
463 isn't necessarily a TYPE_CODE_FLT. Consequently, unpack_double
464 needs to be used as that takes care of any necessary type
465 conversions. Such conversions are of course direct to DOUBLEST
466 and disregard any possible target floating point limitations.
467 For instance, a u64 would be converted and displayed exactly on a
468 host with 80 bit DOUBLEST but with loss of information on a host
469 with 64 bit DOUBLEST. */
c2f05ac9 470
c906108c
SS
471 doub = unpack_double (type, valaddr, &inv);
472 if (inv)
473 {
474 fprintf_filtered (stream, "<invalid float value>");
475 return;
476 }
477
39424bef
MK
478 /* FIXME: kettenis/2001-01-20: The following code makes too much
479 assumptions about the host and target floating point format. */
480
a73c86fb
AC
481 /* NOTE: cagney/2002-02-03: Since the TYPE of what was passed in may
482 not necessarially be a TYPE_CODE_FLT, the below ignores that and
483 instead uses the type's length to determine the precision of the
484 floating-point value being printed. */
c2f05ac9 485
c906108c 486 if (len < sizeof (double))
c5aa993b 487 fprintf_filtered (stream, "%.9g", (double) doub);
c906108c 488 else if (len == sizeof (double))
c5aa993b 489 fprintf_filtered (stream, "%.17g", (double) doub);
c906108c
SS
490 else
491#ifdef PRINTF_HAS_LONG_DOUBLE
492 fprintf_filtered (stream, "%.35Lg", doub);
493#else
39424bef
MK
494 /* This at least wins with values that are representable as
495 doubles. */
c906108c
SS
496 fprintf_filtered (stream, "%.17g", (double) doub);
497#endif
498}
499
c5aa993b 500void
fba45db2
KB
501print_binary_chars (struct ui_file *stream, unsigned char *valaddr,
502 unsigned len)
c906108c
SS
503{
504
505#define BITS_IN_BYTES 8
506
507 unsigned char *p;
745b8ca0 508 unsigned int i;
c5aa993b 509 int b;
c906108c
SS
510
511 /* Declared "int" so it will be signed.
512 * This ensures that right shift will shift in zeros.
513 */
c5aa993b 514 const int mask = 0x080;
c906108c
SS
515
516 /* FIXME: We should be not printing leading zeroes in most cases. */
517
306d9ac5 518 fputs_filtered (local_binary_format_prefix (), stream);
d7449b42 519 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
c906108c
SS
520 {
521 for (p = valaddr;
522 p < valaddr + len;
523 p++)
524 {
c5aa993b
JM
525 /* Every byte has 8 binary characters; peel off
526 * and print from the MSB end.
527 */
528 for (i = 0; i < (BITS_IN_BYTES * sizeof (*p)); i++)
529 {
530 if (*p & (mask >> i))
531 b = 1;
532 else
533 b = 0;
534
535 fprintf_filtered (stream, "%1d", b);
536 }
c906108c
SS
537 }
538 }
539 else
540 {
541 for (p = valaddr + len - 1;
542 p >= valaddr;
543 p--)
544 {
c5aa993b
JM
545 for (i = 0; i < (BITS_IN_BYTES * sizeof (*p)); i++)
546 {
547 if (*p & (mask >> i))
548 b = 1;
549 else
550 b = 0;
551
552 fprintf_filtered (stream, "%1d", b);
553 }
c906108c
SS
554 }
555 }
306d9ac5 556 fputs_filtered (local_binary_format_suffix (), stream);
c906108c
SS
557}
558
559/* VALADDR points to an integer of LEN bytes.
560 * Print it in octal on stream or format it in buf.
561 */
562void
fba45db2 563print_octal_chars (struct ui_file *stream, unsigned char *valaddr, unsigned len)
c906108c
SS
564{
565 unsigned char *p;
566 unsigned char octa1, octa2, octa3, carry;
c5aa993b
JM
567 int cycle;
568
c906108c
SS
569 /* FIXME: We should be not printing leading zeroes in most cases. */
570
571
572 /* Octal is 3 bits, which doesn't fit. Yuk. So we have to track
573 * the extra bits, which cycle every three bytes:
574 *
575 * Byte side: 0 1 2 3
576 * | | | |
577 * bit number 123 456 78 | 9 012 345 6 | 78 901 234 | 567 890 12 |
578 *
579 * Octal side: 0 1 carry 3 4 carry ...
580 *
581 * Cycle number: 0 1 2
582 *
583 * But of course we are printing from the high side, so we have to
584 * figure out where in the cycle we are so that we end up with no
585 * left over bits at the end.
586 */
587#define BITS_IN_OCTAL 3
588#define HIGH_ZERO 0340
589#define LOW_ZERO 0016
590#define CARRY_ZERO 0003
591#define HIGH_ONE 0200
592#define MID_ONE 0160
593#define LOW_ONE 0016
594#define CARRY_ONE 0001
595#define HIGH_TWO 0300
596#define MID_TWO 0070
597#define LOW_TWO 0007
598
599 /* For 32 we start in cycle 2, with two bits and one bit carry;
600 * for 64 in cycle in cycle 1, with one bit and a two bit carry.
601 */
602 cycle = (len * BITS_IN_BYTES) % BITS_IN_OCTAL;
603 carry = 0;
c5aa993b 604
306d9ac5 605 fputs_filtered (local_octal_format_prefix (), stream);
d7449b42 606 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
c906108c
SS
607 {
608 for (p = valaddr;
609 p < valaddr + len;
610 p++)
611 {
c5aa993b
JM
612 switch (cycle)
613 {
614 case 0:
615 /* No carry in, carry out two bits.
616 */
617 octa1 = (HIGH_ZERO & *p) >> 5;
618 octa2 = (LOW_ZERO & *p) >> 2;
619 carry = (CARRY_ZERO & *p);
620 fprintf_filtered (stream, "%o", octa1);
621 fprintf_filtered (stream, "%o", octa2);
622 break;
623
624 case 1:
625 /* Carry in two bits, carry out one bit.
626 */
627 octa1 = (carry << 1) | ((HIGH_ONE & *p) >> 7);
628 octa2 = (MID_ONE & *p) >> 4;
629 octa3 = (LOW_ONE & *p) >> 1;
630 carry = (CARRY_ONE & *p);
631 fprintf_filtered (stream, "%o", octa1);
632 fprintf_filtered (stream, "%o", octa2);
633 fprintf_filtered (stream, "%o", octa3);
634 break;
635
636 case 2:
637 /* Carry in one bit, no carry out.
638 */
639 octa1 = (carry << 2) | ((HIGH_TWO & *p) >> 6);
640 octa2 = (MID_TWO & *p) >> 3;
641 octa3 = (LOW_TWO & *p);
642 carry = 0;
643 fprintf_filtered (stream, "%o", octa1);
644 fprintf_filtered (stream, "%o", octa2);
645 fprintf_filtered (stream, "%o", octa3);
646 break;
647
648 default:
649 error ("Internal error in octal conversion;");
650 }
651
652 cycle++;
653 cycle = cycle % BITS_IN_OCTAL;
c906108c
SS
654 }
655 }
656 else
657 {
658 for (p = valaddr + len - 1;
659 p >= valaddr;
660 p--)
661 {
c5aa993b
JM
662 switch (cycle)
663 {
664 case 0:
665 /* Carry out, no carry in */
666 octa1 = (HIGH_ZERO & *p) >> 5;
667 octa2 = (LOW_ZERO & *p) >> 2;
668 carry = (CARRY_ZERO & *p);
669 fprintf_filtered (stream, "%o", octa1);
670 fprintf_filtered (stream, "%o", octa2);
671 break;
672
673 case 1:
674 /* Carry in, carry out */
675 octa1 = (carry << 1) | ((HIGH_ONE & *p) >> 7);
676 octa2 = (MID_ONE & *p) >> 4;
677 octa3 = (LOW_ONE & *p) >> 1;
678 carry = (CARRY_ONE & *p);
679 fprintf_filtered (stream, "%o", octa1);
680 fprintf_filtered (stream, "%o", octa2);
681 fprintf_filtered (stream, "%o", octa3);
682 break;
683
684 case 2:
685 /* Carry in, no carry out */
686 octa1 = (carry << 2) | ((HIGH_TWO & *p) >> 6);
687 octa2 = (MID_TWO & *p) >> 3;
688 octa3 = (LOW_TWO & *p);
689 carry = 0;
690 fprintf_filtered (stream, "%o", octa1);
691 fprintf_filtered (stream, "%o", octa2);
692 fprintf_filtered (stream, "%o", octa3);
693 break;
694
695 default:
696 error ("Internal error in octal conversion;");
697 }
698
699 cycle++;
700 cycle = cycle % BITS_IN_OCTAL;
c906108c
SS
701 }
702 }
703
306d9ac5 704 fputs_filtered (local_octal_format_suffix (), stream);
c906108c
SS
705}
706
707/* VALADDR points to an integer of LEN bytes.
708 * Print it in decimal on stream or format it in buf.
709 */
710void
fba45db2
KB
711print_decimal_chars (struct ui_file *stream, unsigned char *valaddr,
712 unsigned len)
c906108c
SS
713{
714#define TEN 10
715#define TWO_TO_FOURTH 16
c5aa993b 716#define CARRY_OUT( x ) ((x) / TEN) /* extend char to int */
c906108c
SS
717#define CARRY_LEFT( x ) ((x) % TEN)
718#define SHIFT( x ) ((x) << 4)
719#define START_P \
d7449b42 720 ((TARGET_BYTE_ORDER == BFD_ENDIAN_BIG) ? valaddr : valaddr + len - 1)
c906108c 721#define NOT_END_P \
d7449b42 722 ((TARGET_BYTE_ORDER == BFD_ENDIAN_BIG) ? (p < valaddr + len) : (p >= valaddr))
c906108c 723#define NEXT_P \
d7449b42 724 ((TARGET_BYTE_ORDER == BFD_ENDIAN_BIG) ? p++ : p-- )
c906108c
SS
725#define LOW_NIBBLE( x ) ( (x) & 0x00F)
726#define HIGH_NIBBLE( x ) (((x) & 0x0F0) >> 4)
727
728 unsigned char *p;
729 unsigned char *digits;
c5aa993b
JM
730 int carry;
731 int decimal_len;
732 int i, j, decimal_digits;
733 int dummy;
734 int flip;
735
c906108c
SS
736 /* Base-ten number is less than twice as many digits
737 * as the base 16 number, which is 2 digits per byte.
738 */
739 decimal_len = len * 2 * 2;
3c37485b 740 digits = xmalloc (decimal_len);
c906108c 741
c5aa993b
JM
742 for (i = 0; i < decimal_len; i++)
743 {
c906108c 744 digits[i] = 0;
c5aa993b 745 }
c906108c 746
306d9ac5 747 fputs_filtered (local_decimal_format_prefix (), stream);
c906108c
SS
748
749 /* Ok, we have an unknown number of bytes of data to be printed in
750 * decimal.
751 *
752 * Given a hex number (in nibbles) as XYZ, we start by taking X and
753 * decemalizing it as "x1 x2" in two decimal nibbles. Then we multiply
754 * the nibbles by 16, add Y and re-decimalize. Repeat with Z.
755 *
756 * The trick is that "digits" holds a base-10 number, but sometimes
757 * the individual digits are > 10.
758 *
759 * Outer loop is per nibble (hex digit) of input, from MSD end to
760 * LSD end.
761 */
c5aa993b 762 decimal_digits = 0; /* Number of decimal digits so far */
c906108c
SS
763 p = START_P;
764 flip = 0;
c5aa993b
JM
765 while (NOT_END_P)
766 {
c906108c
SS
767 /*
768 * Multiply current base-ten number by 16 in place.
769 * Each digit was between 0 and 9, now is between
770 * 0 and 144.
771 */
c5aa993b
JM
772 for (j = 0; j < decimal_digits; j++)
773 {
774 digits[j] = SHIFT (digits[j]);
775 }
776
c906108c
SS
777 /* Take the next nibble off the input and add it to what
778 * we've got in the LSB position. Bottom 'digit' is now
779 * between 0 and 159.
780 *
781 * "flip" is used to run this loop twice for each byte.
782 */
c5aa993b
JM
783 if (flip == 0)
784 {
785 /* Take top nibble.
786 */
787 digits[0] += HIGH_NIBBLE (*p);
788 flip = 1;
789 }
790 else
791 {
792 /* Take low nibble and bump our pointer "p".
793 */
794 digits[0] += LOW_NIBBLE (*p);
795 NEXT_P;
796 flip = 0;
797 }
c906108c
SS
798
799 /* Re-decimalize. We have to do this often enough
800 * that we don't overflow, but once per nibble is
801 * overkill. Easier this way, though. Note that the
802 * carry is often larger than 10 (e.g. max initial
803 * carry out of lowest nibble is 15, could bubble all
804 * the way up greater than 10). So we have to do
805 * the carrying beyond the last current digit.
806 */
807 carry = 0;
c5aa993b
JM
808 for (j = 0; j < decimal_len - 1; j++)
809 {
810 digits[j] += carry;
811
812 /* "/" won't handle an unsigned char with
813 * a value that if signed would be negative.
814 * So extend to longword int via "dummy".
815 */
816 dummy = digits[j];
817 carry = CARRY_OUT (dummy);
818 digits[j] = CARRY_LEFT (dummy);
819
820 if (j >= decimal_digits && carry == 0)
821 {
822 /*
823 * All higher digits are 0 and we
824 * no longer have a carry.
825 *
826 * Note: "j" is 0-based, "decimal_digits" is
827 * 1-based.
828 */
829 decimal_digits = j + 1;
830 break;
831 }
832 }
833 }
c906108c
SS
834
835 /* Ok, now "digits" is the decimal representation, with
836 * the "decimal_digits" actual digits. Print!
837 */
c5aa993b
JM
838 for (i = decimal_digits - 1; i >= 0; i--)
839 {
840 fprintf_filtered (stream, "%1d", digits[i]);
841 }
b8c9b27d 842 xfree (digits);
c5aa993b 843
306d9ac5 844 fputs_filtered (local_decimal_format_suffix (), stream);
c906108c
SS
845}
846
847/* VALADDR points to an integer of LEN bytes. Print it in hex on stream. */
848
849static void
fba45db2 850print_hex_chars (struct ui_file *stream, unsigned char *valaddr, unsigned len)
c906108c
SS
851{
852 unsigned char *p;
853
854 /* FIXME: We should be not printing leading zeroes in most cases. */
855
306d9ac5 856 fputs_filtered (local_hex_format_prefix (), stream);
d7449b42 857 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
c906108c
SS
858 {
859 for (p = valaddr;
860 p < valaddr + len;
861 p++)
862 {
863 fprintf_filtered (stream, "%02x", *p);
864 }
865 }
866 else
867 {
868 for (p = valaddr + len - 1;
869 p >= valaddr;
870 p--)
871 {
872 fprintf_filtered (stream, "%02x", *p);
873 }
874 }
306d9ac5 875 fputs_filtered (local_hex_format_suffix (), stream);
c906108c
SS
876}
877
878/* Called by various <lang>_val_print routines to print elements of an
c5aa993b 879 array in the form "<elem1>, <elem2>, <elem3>, ...".
c906108c 880
c5aa993b
JM
881 (FIXME?) Assumes array element separator is a comma, which is correct
882 for all languages currently handled.
883 (FIXME?) Some languages have a notation for repeated array elements,
884 perhaps we should try to use that notation when appropriate.
885 */
c906108c
SS
886
887void
fba45db2
KB
888val_print_array_elements (struct type *type, char *valaddr, CORE_ADDR address,
889 struct ui_file *stream, int format, int deref_ref,
890 int recurse, enum val_prettyprint pretty,
891 unsigned int i)
c906108c
SS
892{
893 unsigned int things_printed = 0;
894 unsigned len;
895 struct type *elttype;
896 unsigned eltlen;
897 /* Position of the array element we are examining to see
898 whether it is repeated. */
899 unsigned int rep1;
900 /* Number of repetitions we have detected so far. */
901 unsigned int reps;
c5aa993b 902
c906108c
SS
903 elttype = TYPE_TARGET_TYPE (type);
904 eltlen = TYPE_LENGTH (check_typedef (elttype));
905 len = TYPE_LENGTH (type) / eltlen;
906
907 annotate_array_section_begin (i, elttype);
908
909 for (; i < len && things_printed < print_max; i++)
910 {
911 if (i != 0)
912 {
913 if (prettyprint_arrays)
914 {
915 fprintf_filtered (stream, ",\n");
916 print_spaces_filtered (2 + 2 * recurse, stream);
917 }
918 else
919 {
920 fprintf_filtered (stream, ", ");
921 }
922 }
923 wrap_here (n_spaces (2 + 2 * recurse));
924
925 rep1 = i + 1;
926 reps = 1;
c5aa993b 927 while ((rep1 < len) &&
c906108c
SS
928 !memcmp (valaddr + i * eltlen, valaddr + rep1 * eltlen, eltlen))
929 {
930 ++reps;
931 ++rep1;
932 }
933
934 if (reps > repeat_count_threshold)
935 {
936 val_print (elttype, valaddr + i * eltlen, 0, 0, stream, format,
937 deref_ref, recurse + 1, pretty);
938 annotate_elt_rep (reps);
939 fprintf_filtered (stream, " <repeats %u times>", reps);
940 annotate_elt_rep_end ();
941
942 i = rep1 - 1;
943 things_printed += repeat_count_threshold;
944 }
945 else
946 {
947 val_print (elttype, valaddr + i * eltlen, 0, 0, stream, format,
948 deref_ref, recurse + 1, pretty);
949 annotate_elt ();
950 things_printed++;
951 }
952 }
953 annotate_array_section_end ();
954 if (i < len)
955 {
956 fprintf_filtered (stream, "...");
957 }
958}
959
917317f4
JM
960/* Read LEN bytes of target memory at address MEMADDR, placing the
961 results in GDB's memory at MYADDR. Returns a count of the bytes
962 actually read, and optionally an errno value in the location
963 pointed to by ERRNOPTR if ERRNOPTR is non-null. */
964
965/* FIXME: cagney/1999-10-14: Only used by val_print_string. Can this
966 function be eliminated. */
967
968static int
969partial_memory_read (CORE_ADDR memaddr, char *myaddr, int len, int *errnoptr)
970{
971 int nread; /* Number of bytes actually read. */
972 int errcode; /* Error from last read. */
973
974 /* First try a complete read. */
975 errcode = target_read_memory (memaddr, myaddr, len);
976 if (errcode == 0)
977 {
978 /* Got it all. */
979 nread = len;
980 }
981 else
982 {
983 /* Loop, reading one byte at a time until we get as much as we can. */
984 for (errcode = 0, nread = 0; len > 0 && errcode == 0; nread++, len--)
985 {
986 errcode = target_read_memory (memaddr++, myaddr++, 1);
987 }
988 /* If an error, the last read was unsuccessful, so adjust count. */
989 if (errcode != 0)
990 {
991 nread--;
992 }
993 }
994 if (errnoptr != NULL)
995 {
996 *errnoptr = errcode;
997 }
998 return (nread);
999}
1000
c906108c 1001/* Print a string from the inferior, starting at ADDR and printing up to LEN
c5aa993b
JM
1002 characters, of WIDTH bytes a piece, to STREAM. If LEN is -1, printing
1003 stops at the first null byte, otherwise printing proceeds (including null
1004 bytes) until either print_max or LEN characters have been printed,
1005 whichever is smaller. */
c906108c
SS
1006
1007/* FIXME: Use target_read_string. */
1008
1009int
fba45db2 1010val_print_string (CORE_ADDR addr, int len, int width, struct ui_file *stream)
c906108c
SS
1011{
1012 int force_ellipsis = 0; /* Force ellipsis to be printed if nonzero. */
1013 int errcode; /* Errno returned from bad reads. */
1014 unsigned int fetchlimit; /* Maximum number of chars to print. */
1015 unsigned int nfetch; /* Chars to fetch / chars fetched. */
1016 unsigned int chunksize; /* Size of each fetch, in chars. */
1017 char *buffer = NULL; /* Dynamically growable fetch buffer. */
1018 char *bufptr; /* Pointer to next available byte in buffer. */
1019 char *limit; /* First location past end of fetch buffer. */
c5aa993b 1020 struct cleanup *old_chain = NULL; /* Top of the old cleanup chain. */
c906108c
SS
1021 int found_nul; /* Non-zero if we found the nul char */
1022
1023 /* First we need to figure out the limit on the number of characters we are
1024 going to attempt to fetch and print. This is actually pretty simple. If
1025 LEN >= zero, then the limit is the minimum of LEN and print_max. If
1026 LEN is -1, then the limit is print_max. This is true regardless of
1027 whether print_max is zero, UINT_MAX (unlimited), or something in between,
1028 because finding the null byte (or available memory) is what actually
1029 limits the fetch. */
1030
1031 fetchlimit = (len == -1 ? print_max : min (len, print_max));
1032
1033 /* Now decide how large of chunks to try to read in one operation. This
1034 is also pretty simple. If LEN >= zero, then we want fetchlimit chars,
1035 so we might as well read them all in one operation. If LEN is -1, we
1036 are looking for a null terminator to end the fetching, so we might as
1037 well read in blocks that are large enough to be efficient, but not so
1038 large as to be slow if fetchlimit happens to be large. So we choose the
1039 minimum of 8 and fetchlimit. We used to use 200 instead of 8 but
1040 200 is way too big for remote debugging over a serial line. */
1041
1042 chunksize = (len == -1 ? min (8, fetchlimit) : fetchlimit);
1043
1044 /* Loop until we either have all the characters to print, or we encounter
1045 some error, such as bumping into the end of the address space. */
1046
1047 found_nul = 0;
1048 old_chain = make_cleanup (null_cleanup, 0);
1049
1050 if (len > 0)
1051 {
1052 buffer = (char *) xmalloc (len * width);
1053 bufptr = buffer;
b8c9b27d 1054 old_chain = make_cleanup (xfree, buffer);
c906108c 1055
917317f4 1056 nfetch = partial_memory_read (addr, bufptr, len * width, &errcode)
c906108c
SS
1057 / width;
1058 addr += nfetch * width;
1059 bufptr += nfetch * width;
1060 }
1061 else if (len == -1)
1062 {
1063 unsigned long bufsize = 0;
1064 do
1065 {
1066 QUIT;
1067 nfetch = min (chunksize, fetchlimit - bufsize);
1068
1069 if (buffer == NULL)
1070 buffer = (char *) xmalloc (nfetch * width);
1071 else
1072 {
1073 discard_cleanups (old_chain);
1074 buffer = (char *) xrealloc (buffer, (nfetch + bufsize) * width);
1075 }
1076
b8c9b27d 1077 old_chain = make_cleanup (xfree, buffer);
c906108c
SS
1078 bufptr = buffer + bufsize * width;
1079 bufsize += nfetch;
1080
1081 /* Read as much as we can. */
917317f4 1082 nfetch = partial_memory_read (addr, bufptr, nfetch * width, &errcode)
c5aa993b 1083 / width;
c906108c
SS
1084
1085 /* Scan this chunk for the null byte that terminates the string
1086 to print. If found, we don't need to fetch any more. Note
1087 that bufptr is explicitly left pointing at the next character
1088 after the null byte, or at the next character after the end of
1089 the buffer. */
1090
1091 limit = bufptr + nfetch * width;
1092 while (bufptr < limit)
1093 {
1094 unsigned long c;
1095
1096 c = extract_unsigned_integer (bufptr, width);
1097 addr += width;
1098 bufptr += width;
1099 if (c == 0)
1100 {
1101 /* We don't care about any error which happened after
1102 the NULL terminator. */
1103 errcode = 0;
1104 found_nul = 1;
1105 break;
1106 }
1107 }
1108 }
c5aa993b
JM
1109 while (errcode == 0 /* no error */
1110 && bufptr - buffer < fetchlimit * width /* no overrun */
1111 && !found_nul); /* haven't found nul yet */
c906108c
SS
1112 }
1113 else
1114 { /* length of string is really 0! */
1115 buffer = bufptr = NULL;
1116 errcode = 0;
1117 }
1118
1119 /* bufptr and addr now point immediately beyond the last byte which we
1120 consider part of the string (including a '\0' which ends the string). */
1121
1122 /* We now have either successfully filled the buffer to fetchlimit, or
1123 terminated early due to an error or finding a null char when LEN is -1. */
1124
1125 if (len == -1 && !found_nul)
1126 {
1127 char *peekbuf;
1128
1129 /* We didn't find a null terminator we were looking for. Attempt
c5aa993b
JM
1130 to peek at the next character. If not successful, or it is not
1131 a null byte, then force ellipsis to be printed. */
c906108c
SS
1132
1133 peekbuf = (char *) alloca (width);
1134
1135 if (target_read_memory (addr, peekbuf, width) == 0
1136 && extract_unsigned_integer (peekbuf, width) != 0)
1137 force_ellipsis = 1;
1138 }
c5aa993b 1139 else if ((len >= 0 && errcode != 0) || (len > (bufptr - buffer) / width))
c906108c
SS
1140 {
1141 /* Getting an error when we have a requested length, or fetching less
c5aa993b
JM
1142 than the number of characters actually requested, always make us
1143 print ellipsis. */
c906108c
SS
1144 force_ellipsis = 1;
1145 }
1146
1147 QUIT;
1148
1149 /* If we get an error before fetching anything, don't print a string.
1150 But if we fetch something and then get an error, print the string
1151 and then the error message. */
1152 if (errcode == 0 || bufptr > buffer)
1153 {
1154 if (addressprint)
1155 {
1156 fputs_filtered (" ", stream);
1157 }
c5aa993b 1158 LA_PRINT_STRING (stream, buffer, (bufptr - buffer) / width, width, force_ellipsis);
c906108c
SS
1159 }
1160
1161 if (errcode != 0)
1162 {
1163 if (errcode == EIO)
1164 {
1165 fprintf_filtered (stream, " <Address ");
1166 print_address_numeric (addr, 1, stream);
1167 fprintf_filtered (stream, " out of bounds>");
1168 }
1169 else
1170 {
1171 fprintf_filtered (stream, " <Error reading address ");
1172 print_address_numeric (addr, 1, stream);
1173 fprintf_filtered (stream, ": %s>", safe_strerror (errcode));
1174 }
1175 }
1176 gdb_flush (stream);
1177 do_cleanups (old_chain);
c5aa993b 1178 return ((bufptr - buffer) / width);
c906108c 1179}
c906108c 1180\f
c5aa993b 1181
c906108c
SS
1182/* Validate an input or output radix setting, and make sure the user
1183 knows what they really did here. Radix setting is confusing, e.g.
1184 setting the input radix to "10" never changes it! */
1185
c906108c 1186static void
fba45db2 1187set_input_radix (char *args, int from_tty, struct cmd_list_element *c)
c906108c 1188{
f66c9f11 1189 set_input_radix_1 (from_tty, input_radix);
c906108c
SS
1190}
1191
c906108c 1192static void
fba45db2 1193set_input_radix_1 (int from_tty, unsigned radix)
c906108c
SS
1194{
1195 /* We don't currently disallow any input radix except 0 or 1, which don't
1196 make any mathematical sense. In theory, we can deal with any input
1197 radix greater than 1, even if we don't have unique digits for every
1198 value from 0 to radix-1, but in practice we lose on large radix values.
1199 We should either fix the lossage or restrict the radix range more.
1200 (FIXME). */
1201
1202 if (radix < 2)
1203 {
f66c9f11
AC
1204 /* FIXME: cagney/2002-03-17: This needs to revert the bad radix
1205 value. */
c906108c
SS
1206 error ("Nonsense input radix ``decimal %u''; input radix unchanged.",
1207 radix);
1208 }
1209 input_radix = radix;
1210 if (from_tty)
1211 {
1212 printf_filtered ("Input radix now set to decimal %u, hex %x, octal %o.\n",
1213 radix, radix, radix);
1214 }
1215}
1216
c906108c 1217static void
fba45db2 1218set_output_radix (char *args, int from_tty, struct cmd_list_element *c)
c906108c 1219{
f66c9f11 1220 set_output_radix_1 (from_tty, output_radix);
c906108c
SS
1221}
1222
1223static void
fba45db2 1224set_output_radix_1 (int from_tty, unsigned radix)
c906108c
SS
1225{
1226 /* Validate the radix and disallow ones that we aren't prepared to
1227 handle correctly, leaving the radix unchanged. */
1228 switch (radix)
1229 {
1230 case 16:
c5aa993b 1231 output_format = 'x'; /* hex */
c906108c
SS
1232 break;
1233 case 10:
c5aa993b 1234 output_format = 0; /* decimal */
c906108c
SS
1235 break;
1236 case 8:
c5aa993b 1237 output_format = 'o'; /* octal */
c906108c
SS
1238 break;
1239 default:
f66c9f11
AC
1240 /* FIXME: cagney/2002-03-17: This needs to revert the bad radix
1241 value. */
c906108c
SS
1242 error ("Unsupported output radix ``decimal %u''; output radix unchanged.",
1243 radix);
1244 }
1245 output_radix = radix;
1246 if (from_tty)
1247 {
1248 printf_filtered ("Output radix now set to decimal %u, hex %x, octal %o.\n",
1249 radix, radix, radix);
1250 }
1251}
1252
1253/* Set both the input and output radix at once. Try to set the output radix
1254 first, since it has the most restrictive range. An radix that is valid as
1255 an output radix is also valid as an input radix.
1256
1257 It may be useful to have an unusual input radix. If the user wishes to
1258 set an input radix that is not valid as an output radix, he needs to use
1259 the 'set input-radix' command. */
1260
1261static void
fba45db2 1262set_radix (char *arg, int from_tty)
c906108c
SS
1263{
1264 unsigned radix;
1265
bb518678 1266 radix = (arg == NULL) ? 10 : parse_and_eval_long (arg);
c906108c
SS
1267 set_output_radix_1 (0, radix);
1268 set_input_radix_1 (0, radix);
1269 if (from_tty)
1270 {
1271 printf_filtered ("Input and output radices now set to decimal %u, hex %x, octal %o.\n",
1272 radix, radix, radix);
1273 }
1274}
1275
1276/* Show both the input and output radices. */
1277
c906108c 1278static void
fba45db2 1279show_radix (char *arg, int from_tty)
c906108c
SS
1280{
1281 if (from_tty)
1282 {
1283 if (input_radix == output_radix)
1284 {
1285 printf_filtered ("Input and output radices set to decimal %u, hex %x, octal %o.\n",
1286 input_radix, input_radix, input_radix);
1287 }
1288 else
1289 {
1290 printf_filtered ("Input radix set to decimal %u, hex %x, octal %o.\n",
1291 input_radix, input_radix, input_radix);
1292 printf_filtered ("Output radix set to decimal %u, hex %x, octal %o.\n",
1293 output_radix, output_radix, output_radix);
1294 }
1295 }
1296}
c906108c 1297\f
c5aa993b 1298
c906108c 1299static void
fba45db2 1300set_print (char *arg, int from_tty)
c906108c
SS
1301{
1302 printf_unfiltered (
c5aa993b 1303 "\"set print\" must be followed by the name of a print subcommand.\n");
c906108c
SS
1304 help_list (setprintlist, "set print ", -1, gdb_stdout);
1305}
1306
c906108c 1307static void
fba45db2 1308show_print (char *args, int from_tty)
c906108c
SS
1309{
1310 cmd_show_list (showprintlist, from_tty, "");
1311}
1312\f
1313void
fba45db2 1314_initialize_valprint (void)
c906108c
SS
1315{
1316 struct cmd_list_element *c;
1317
1318 add_prefix_cmd ("print", no_class, set_print,
1319 "Generic command for setting how things print.",
1320 &setprintlist, "set print ", 0, &setlist);
c5aa993b
JM
1321 add_alias_cmd ("p", "print", no_class, 1, &setlist);
1322 /* prefer set print to set prompt */
c906108c
SS
1323 add_alias_cmd ("pr", "print", no_class, 1, &setlist);
1324
1325 add_prefix_cmd ("print", no_class, show_print,
1326 "Generic command for showing print settings.",
1327 &showprintlist, "show print ", 0, &showlist);
c5aa993b
JM
1328 add_alias_cmd ("p", "print", no_class, 1, &showlist);
1329 add_alias_cmd ("pr", "print", no_class, 1, &showlist);
c906108c
SS
1330
1331 add_show_from_set
c5aa993b 1332 (add_set_cmd ("elements", no_class, var_uinteger, (char *) &print_max,
c906108c
SS
1333 "Set limit on string chars or array elements to print.\n\
1334\"set print elements 0\" causes there to be no limit.",
1335 &setprintlist),
1336 &showprintlist);
1337
1338 add_show_from_set
1339 (add_set_cmd ("null-stop", no_class, var_boolean,
c5aa993b 1340 (char *) &stop_print_at_null,
c906108c
SS
1341 "Set printing of char arrays to stop at first null char.",
1342 &setprintlist),
1343 &showprintlist);
1344
1345 add_show_from_set
1346 (add_set_cmd ("repeats", no_class, var_uinteger,
c5aa993b 1347 (char *) &repeat_count_threshold,
c906108c
SS
1348 "Set threshold for repeated print elements.\n\
1349\"set print repeats 0\" causes all elements to be individually printed.",
1350 &setprintlist),
1351 &showprintlist);
1352
1353 add_show_from_set
1354 (add_set_cmd ("pretty", class_support, var_boolean,
c5aa993b 1355 (char *) &prettyprint_structs,
c906108c
SS
1356 "Set prettyprinting of structures.",
1357 &setprintlist),
1358 &showprintlist);
1359
1360 add_show_from_set
c5aa993b 1361 (add_set_cmd ("union", class_support, var_boolean, (char *) &unionprint,
c906108c
SS
1362 "Set printing of unions interior to structures.",
1363 &setprintlist),
1364 &showprintlist);
c5aa993b 1365
c906108c
SS
1366 add_show_from_set
1367 (add_set_cmd ("array", class_support, var_boolean,
c5aa993b 1368 (char *) &prettyprint_arrays,
c906108c
SS
1369 "Set prettyprinting of arrays.",
1370 &setprintlist),
1371 &showprintlist);
1372
1373 add_show_from_set
c5aa993b 1374 (add_set_cmd ("address", class_support, var_boolean, (char *) &addressprint,
c906108c
SS
1375 "Set printing of addresses.",
1376 &setprintlist),
1377 &showprintlist);
1378
1379 c = add_set_cmd ("input-radix", class_support, var_uinteger,
c5aa993b
JM
1380 (char *) &input_radix,
1381 "Set default input radix for entering numbers.",
1382 &setlist);
c906108c 1383 add_show_from_set (c, &showlist);
9f60d481 1384 set_cmd_sfunc (c, set_input_radix);
c906108c
SS
1385
1386 c = add_set_cmd ("output-radix", class_support, var_uinteger,
c5aa993b
JM
1387 (char *) &output_radix,
1388 "Set default output radix for printing of values.",
1389 &setlist);
c906108c 1390 add_show_from_set (c, &showlist);
9f60d481 1391 set_cmd_sfunc (c, set_output_radix);
c906108c
SS
1392
1393 /* The "set radix" and "show radix" commands are special in that they are
1394 like normal set and show commands but allow two normally independent
1395 variables to be either set or shown with a single command. So the
1396 usual add_set_cmd() and add_show_from_set() commands aren't really
1397 appropriate. */
1398 add_cmd ("radix", class_support, set_radix,
1399 "Set default input and output number radices.\n\
1400Use 'set input-radix' or 'set output-radix' to independently set each.\n\
1401Without an argument, sets both radices back to the default value of 10.",
1402 &setlist);
1403 add_cmd ("radix", class_support, show_radix,
1404 "Show the default input and output number radices.\n\
1405Use 'show input-radix' or 'show output-radix' to independently show each.",
1406 &showlist);
1407
1408 /* Give people the defaults which they are used to. */
1409 prettyprint_structs = 0;
1410 prettyprint_arrays = 0;
1411 unionprint = 1;
1412 addressprint = 1;
1413 print_max = PRINT_MAX_DEFAULT;
1414}
This page took 0.951746 seconds and 4 git commands to generate.