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