Minor cleanup.
[deliverable/binutils-gdb.git] / gdb / utils.c
CommitLineData
bd5635a1 1/* General utility routines for GDB, the GNU debugger.
7919c3ed 2 Copyright 1986, 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
bd5635a1
RP
3
4This file is part of GDB.
5
351b221d 6This program is free software; you can redistribute it and/or modify
bd5635a1 7it under the terms of the GNU General Public License as published by
351b221d
JG
8the Free Software Foundation; either version 2 of the License, or
9(at your option) any later version.
bd5635a1 10
351b221d 11This program is distributed in the hope that it will be useful,
bd5635a1
RP
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
351b221d
JG
17along with this program; if not, write to the Free Software
18Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
bd5635a1 19
d747e0af 20#include "defs.h"
51b57ded 21#if !defined(__GO32__)
bd5635a1
RP
22#include <sys/ioctl.h>
23#include <sys/param.h>
24#include <pwd.h>
51b57ded 25#endif
2bc2e684
FF
26#include <varargs.h>
27#include <ctype.h>
28#include <string.h>
29
bd5635a1
RP
30#include "signals.h"
31#include "gdbcmd.h"
32#include "terminal.h"
bd5635a1
RP
33#include "bfd.h"
34#include "target.h"
bcf2e6ab 35#include "demangle.h"
bd5d07d9
FF
36#include "expression.h"
37#include "language.h"
bd5635a1 38
7919c3ed
JG
39/* Prototypes for local functions */
40
41#if !defined (NO_MALLOC_CHECK)
3624c875 42
7919c3ed
JG
43static void
44malloc_botch PARAMS ((void));
3624c875 45
7919c3ed
JG
46#endif /* NO_MALLOC_CHECK */
47
48static void
49fatal_dump_core (); /* Can't prototype with <varargs.h> usage... */
50
51static void
52prompt_for_continue PARAMS ((void));
53
54static void
55set_width_command PARAMS ((char *, int, struct cmd_list_element *));
56
bd5635a1
RP
57/* If this definition isn't overridden by the header files, assume
58 that isatty and fileno exist on this system. */
59#ifndef ISATTY
60#define ISATTY(FP) (isatty (fileno (FP)))
61#endif
62
bd5635a1
RP
63/* Chain of cleanup actions established with make_cleanup,
64 to be executed if an error happens. */
65
66static struct cleanup *cleanup_chain;
67
68/* Nonzero means a quit has been requested. */
69
70int quit_flag;
71
72/* Nonzero means quit immediately if Control-C is typed now,
73 rather than waiting until QUIT is executed. */
74
75int immediate_quit;
76
77/* Nonzero means that encoded C++ names should be printed out in their
78 C++ form rather than raw. */
79
80int demangle = 1;
81
82/* Nonzero means that encoded C++ names should be printed out in their
83 C++ form even in assembler language displays. If this is set, but
84 DEMANGLE is zero, names are printed raw, i.e. DEMANGLE controls. */
85
86int asm_demangle = 0;
87
88/* Nonzero means that strings with character values >0x7F should be printed
89 as octal escapes. Zero means just print the value (e.g. it's an
90 international character, and the terminal or window can cope.) */
91
92int sevenbit_strings = 0;
81066208
JG
93
94/* String to be printed before error messages, if any. */
95
96char *error_pre_print;
3624c875 97char *warning_pre_print = "\nwarning: ";
bd5635a1
RP
98\f
99/* Add a new cleanup to the cleanup_chain,
100 and return the previous chain pointer
101 to be passed later to do_cleanups or discard_cleanups.
102 Args are FUNCTION to clean up with, and ARG to pass to it. */
103
104struct cleanup *
105make_cleanup (function, arg)
7919c3ed
JG
106 void (*function) PARAMS ((PTR));
107 PTR arg;
bd5635a1
RP
108{
109 register struct cleanup *new
110 = (struct cleanup *) xmalloc (sizeof (struct cleanup));
111 register struct cleanup *old_chain = cleanup_chain;
112
113 new->next = cleanup_chain;
114 new->function = function;
115 new->arg = arg;
116 cleanup_chain = new;
117
118 return old_chain;
119}
120
121/* Discard cleanups and do the actions they describe
122 until we get back to the point OLD_CHAIN in the cleanup_chain. */
123
124void
125do_cleanups (old_chain)
126 register struct cleanup *old_chain;
127{
128 register struct cleanup *ptr;
129 while ((ptr = cleanup_chain) != old_chain)
130 {
5e5215eb 131 cleanup_chain = ptr->next; /* Do this first incase recursion */
bd5635a1 132 (*ptr->function) (ptr->arg);
bd5635a1
RP
133 free (ptr);
134 }
135}
136
137/* Discard cleanups, not doing the actions they describe,
138 until we get back to the point OLD_CHAIN in the cleanup_chain. */
139
140void
141discard_cleanups (old_chain)
142 register struct cleanup *old_chain;
143{
144 register struct cleanup *ptr;
145 while ((ptr = cleanup_chain) != old_chain)
146 {
147 cleanup_chain = ptr->next;
be772100 148 free ((PTR)ptr);
bd5635a1
RP
149 }
150}
151
152/* Set the cleanup_chain to 0, and return the old cleanup chain. */
153struct cleanup *
154save_cleanups ()
155{
156 struct cleanup *old_chain = cleanup_chain;
157
158 cleanup_chain = 0;
159 return old_chain;
160}
161
162/* Restore the cleanup chain from a previously saved chain. */
163void
164restore_cleanups (chain)
165 struct cleanup *chain;
166{
167 cleanup_chain = chain;
168}
169
170/* This function is useful for cleanups.
171 Do
172
173 foo = xmalloc (...);
174 old_chain = make_cleanup (free_current_contents, &foo);
175
176 to arrange to free the object thus allocated. */
177
178void
179free_current_contents (location)
180 char **location;
181{
182 free (*location);
183}
088c3a0b
JG
184
185/* Provide a known function that does nothing, to use as a base for
186 for a possibly long chain of cleanups. This is useful where we
187 use the cleanup chain for handling normal cleanups as well as dealing
188 with cleanups that need to be done as a result of a call to error().
189 In such cases, we may not be certain where the first cleanup is, unless
190 we have a do-nothing one to always use as the base. */
191
192/* ARGSUSED */
193void
194null_cleanup (arg)
195 char **arg;
196{
197}
198
bd5635a1 199\f
2bc2e684
FF
200/* Provide a hook for modules wishing to print their own warning messages
201 to set up the terminal state in a compatible way, without them having
202 to import all the target_<...> macros. */
203
204void
205warning_setup ()
206{
207 target_terminal_ours ();
208 wrap_here(""); /* Force out any buffered output */
209 fflush (stdout);
210}
211
212/* Print a warning message.
213 The first argument STRING is the warning message, used as a fprintf string,
214 and the remaining args are passed as arguments to it.
215 The primary difference between warnings and errors is that a warning
216 does not force the return to command level. */
217
218/* VARARGS */
219void
220warning (va_alist)
221 va_dcl
222{
223 va_list args;
224 char *string;
225
226 va_start (args);
227 target_terminal_ours ();
228 wrap_here(""); /* Force out any buffered output */
229 fflush (stdout);
230 if (warning_pre_print)
231 fprintf (stderr, warning_pre_print);
232 string = va_arg (args, char *);
233 vfprintf (stderr, string, args);
234 fprintf (stderr, "\n");
235 va_end (args);
236}
237
bd5635a1
RP
238/* Print an error message and return to command level.
239 The first argument STRING is the error message, used as a fprintf string,
240 and the remaining args are passed as arguments to it. */
241
242/* VARARGS */
7919c3ed 243NORETURN void
bd5635a1
RP
244error (va_alist)
245 va_dcl
246{
247 va_list args;
248 char *string;
249
250 va_start (args);
251 target_terminal_ours ();
2bc2e684 252 wrap_here(""); /* Force out any buffered output */
bd5635a1 253 fflush (stdout);
81066208 254 if (error_pre_print)
bcf2e6ab 255 fprintf_filtered (stderr, error_pre_print);
bd5635a1 256 string = va_arg (args, char *);
bcf2e6ab
SG
257 vfprintf_filtered (stderr, string, args);
258 fprintf_filtered (stderr, "\n");
bd5635a1
RP
259 va_end (args);
260 return_to_top_level ();
261}
262
263/* Print an error message and exit reporting failure.
264 This is for a error that we cannot continue from.
7919c3ed
JG
265 The arguments are printed a la printf.
266
267 This function cannot be declared volatile (NORETURN) in an
268 ANSI environment because exit() is not declared volatile. */
bd5635a1
RP
269
270/* VARARGS */
7919c3ed 271NORETURN void
bd5635a1
RP
272fatal (va_alist)
273 va_dcl
274{
275 va_list args;
276 char *string;
277
278 va_start (args);
279 string = va_arg (args, char *);
3624c875 280 fprintf (stderr, "\ngdb: ");
bd5635a1
RP
281 vfprintf (stderr, string, args);
282 fprintf (stderr, "\n");
283 va_end (args);
284 exit (1);
285}
286
287/* Print an error message and exit, dumping core.
288 The arguments are printed a la printf (). */
7919c3ed 289
bd5635a1 290/* VARARGS */
7919c3ed 291static void
bd5635a1
RP
292fatal_dump_core (va_alist)
293 va_dcl
294{
295 va_list args;
296 char *string;
297
298 va_start (args);
299 string = va_arg (args, char *);
300 /* "internal error" is always correct, since GDB should never dump
301 core, no matter what the input. */
3624c875 302 fprintf (stderr, "\ngdb internal error: ");
bd5635a1
RP
303 vfprintf (stderr, string, args);
304 fprintf (stderr, "\n");
305 va_end (args);
306
307 signal (SIGQUIT, SIG_DFL);
308 kill (getpid (), SIGQUIT);
309 /* We should never get here, but just in case... */
310 exit (1);
311}
7919c3ed 312
4ace50a5
FF
313/* The strerror() function can return NULL for errno values that are
314 out of range. Provide a "safe" version that always returns a
315 printable string. */
316
317char *
318safe_strerror (errnum)
319 int errnum;
320{
321 char *msg;
322 static char buf[32];
323
324 if ((msg = strerror (errnum)) == NULL)
325 {
326 sprintf (buf, "(undocumented errno %d)", errnum);
327 msg = buf;
328 }
329 return (msg);
330}
331
332/* The strsignal() function can return NULL for signal values that are
333 out of range. Provide a "safe" version that always returns a
334 printable string. */
335
336char *
337safe_strsignal (signo)
338 int signo;
339{
340 char *msg;
341 static char buf[32];
342
343 if ((msg = strsignal (signo)) == NULL)
344 {
345 sprintf (buf, "(undocumented signal %d)", signo);
346 msg = buf;
347 }
348 return (msg);
349}
350
351
bd5635a1
RP
352/* Print the system error message for errno, and also mention STRING
353 as the file name for which the error was encountered.
354 Then return to command level. */
355
356void
357perror_with_name (string)
358 char *string;
359{
bd5635a1
RP
360 char *err;
361 char *combined;
362
4ace50a5 363 err = safe_strerror (errno);
bd5635a1
RP
364 combined = (char *) alloca (strlen (err) + strlen (string) + 3);
365 strcpy (combined, string);
366 strcat (combined, ": ");
367 strcat (combined, err);
368
369 /* I understand setting these is a matter of taste. Still, some people
370 may clear errno but not know about bfd_error. Doing this here is not
371 unreasonable. */
372 bfd_error = no_error;
373 errno = 0;
374
375 error ("%s.", combined);
376}
377
378/* Print the system error message for ERRCODE, and also mention STRING
379 as the file name for which the error was encountered. */
380
381void
382print_sys_errmsg (string, errcode)
383 char *string;
384 int errcode;
385{
bd5635a1
RP
386 char *err;
387 char *combined;
388
4ace50a5 389 err = safe_strerror (errcode);
bd5635a1
RP
390 combined = (char *) alloca (strlen (err) + strlen (string) + 3);
391 strcpy (combined, string);
392 strcat (combined, ": ");
393 strcat (combined, err);
394
bcf2e6ab 395 fprintf (stderr, "%s.\n", combined);
bd5635a1
RP
396}
397
398/* Control C eventually causes this to be called, at a convenient time. */
399
400void
401quit ()
402{
403 target_terminal_ours ();
d11c44f1 404 wrap_here ((char *)0); /* Force out any pending output */
51b57ded 405#if !defined(__GO32__)
bd5635a1
RP
406#ifdef HAVE_TERMIO
407 ioctl (fileno (stdout), TCFLSH, 1);
408#else /* not HAVE_TERMIO */
409 ioctl (fileno (stdout), TIOCFLUSH, 0);
410#endif /* not HAVE_TERMIO */
411#ifdef TIOCGPGRP
412 error ("Quit");
413#else
414 error ("Quit (expect signal %d when inferior is resumed)", SIGINT);
415#endif /* TIOCGPGRP */
bd5d07d9
FF
416#else
417 error ("Quit");
51b57ded 418#endif
bd5635a1
RP
419}
420
bd5d07d9
FF
421
422#ifdef __GO32__
423
424/* In the absence of signals, poll keyboard for a quit.
425 Called from #define QUIT pollquit() in xm-go32.h. */
426
427void
428pollquit()
429{
430 if (kbhit ())
431 {
432 int k = getkey ();
433 if (k == 1)
434 quit_flag = 1;
435 else if (k == 2)
436 immediate_quit = 1;
437 quit ();
438 }
439}
440
441#endif
442
bd5635a1
RP
443/* Control C comes here */
444
445void
088c3a0b
JG
446request_quit (signo)
447 int signo;
bd5635a1
RP
448{
449 quit_flag = 1;
450
451#ifdef USG
452 /* Restore the signal handler. */
088c3a0b 453 signal (signo, request_quit);
bd5635a1
RP
454#endif
455
456 if (immediate_quit)
457 quit ();
458}
3624c875
FF
459
460\f
461/* Memory management stuff (malloc friends). */
462
463#if defined (NO_MMALLOC)
464
465PTR
466mmalloc (md, size)
467 PTR md;
468 long size;
469{
470 return (malloc (size));
471}
472
473PTR
474mrealloc (md, ptr, size)
475 PTR md;
476 PTR ptr;
477 long size;
478{
4ace50a5
FF
479 if (ptr == 0) /* Guard against old realloc's */
480 return malloc (size);
481 else
482 return realloc (ptr, size);
3624c875
FF
483}
484
485void
486mfree (md, ptr)
487 PTR md;
488 PTR ptr;
489{
490 free (ptr);
491}
492
493#endif /* NO_MMALLOC */
494
495#if defined (NO_MMALLOC) || defined (NO_MMALLOC_CHECK)
496
497void
498init_malloc (md)
499 PTR md;
500{
501}
502
503#else /* have mmalloc and want corruption checking */
504
505static void
506malloc_botch ()
507{
508 fatal_dump_core ("Memory corruption");
509}
510
511/* Attempt to install hooks in mmalloc/mrealloc/mfree for the heap specified
512 by MD, to detect memory corruption. Note that MD may be NULL to specify
513 the default heap that grows via sbrk.
514
515 Note that for freshly created regions, we must call mmcheck prior to any
516 mallocs in the region. Otherwise, any region which was allocated prior to
517 installing the checking hooks, which is later reallocated or freed, will
518 fail the checks! The mmcheck function only allows initial hooks to be
519 installed before the first mmalloc. However, anytime after we have called
520 mmcheck the first time to install the checking hooks, we can call it again
521 to update the function pointer to the memory corruption handler.
522
523 Returns zero on failure, non-zero on success. */
524
525void
526init_malloc (md)
527 PTR md;
528{
529 if (!mmcheck (md, malloc_botch))
530 {
531 warning ("internal error: failed to install memory consistency checks");
532 }
533
4ed3a9ea 534 mmtrace ();
3624c875
FF
535}
536
537#endif /* Have mmalloc and want corruption checking */
538
539/* Called when a memory allocation fails, with the number of bytes of
540 memory requested in SIZE. */
541
542NORETURN void
543nomem (size)
544 long size;
545{
546 if (size > 0)
547 {
548 fatal ("virtual memory exhausted: can't allocate %ld bytes.", size);
549 }
550 else
551 {
552 fatal ("virtual memory exhausted.");
553 }
554}
555
556/* Like mmalloc but get error if no storage available, and protect against
557 the caller wanting to allocate zero bytes. Whether to return NULL for
558 a zero byte request, or translate the request into a request for one
559 byte of zero'd storage, is a religious issue. */
560
561PTR
562xmmalloc (md, size)
563 PTR md;
564 long size;
565{
566 register PTR val;
567
568 if (size == 0)
569 {
570 val = NULL;
571 }
572 else if ((val = mmalloc (md, size)) == NULL)
573 {
574 nomem (size);
575 }
576 return (val);
577}
578
579/* Like mrealloc but get error if no storage available. */
580
581PTR
582xmrealloc (md, ptr, size)
583 PTR md;
584 PTR ptr;
585 long size;
586{
587 register PTR val;
588
589 if (ptr != NULL)
590 {
591 val = mrealloc (md, ptr, size);
592 }
593 else
594 {
595 val = mmalloc (md, size);
596 }
597 if (val == NULL)
598 {
599 nomem (size);
600 }
601 return (val);
602}
603
604/* Like malloc but get error if no storage available, and protect against
605 the caller wanting to allocate zero bytes. */
606
607PTR
608xmalloc (size)
609 long size;
610{
611 return (xmmalloc ((void *) NULL, size));
612}
613
614/* Like mrealloc but get error if no storage available. */
615
616PTR
617xrealloc (ptr, size)
618 PTR ptr;
619 long size;
620{
621 return (xmrealloc ((void *) NULL, ptr, size));
622}
623
bd5635a1
RP
624\f
625/* My replacement for the read system call.
626 Used like `read' but keeps going if `read' returns too soon. */
627
628int
629myread (desc, addr, len)
630 int desc;
631 char *addr;
632 int len;
633{
634 register int val;
635 int orglen = len;
636
637 while (len > 0)
638 {
639 val = read (desc, addr, len);
640 if (val < 0)
641 return val;
642 if (val == 0)
643 return orglen - len;
644 len -= val;
645 addr += val;
646 }
647 return orglen;
648}
649\f
650/* Make a copy of the string at PTR with SIZE characters
651 (and add a null character at the end in the copy).
652 Uses malloc to get the space. Returns the address of the copy. */
653
654char *
655savestring (ptr, size)
088c3a0b 656 const char *ptr;
bd5635a1
RP
657 int size;
658{
659 register char *p = (char *) xmalloc (size + 1);
4ed3a9ea 660 memcpy (p, ptr, size);
bd5635a1
RP
661 p[size] = 0;
662 return p;
663}
664
3624c875
FF
665char *
666msavestring (md, ptr, size)
667 void *md;
668 const char *ptr;
669 int size;
670{
671 register char *p = (char *) xmmalloc (md, size + 1);
4ed3a9ea 672 memcpy (p, ptr, size);
3624c875
FF
673 p[size] = 0;
674 return p;
675}
676
8aa13b87
JK
677/* The "const" is so it compiles under DGUX (which prototypes strsave
678 in <string.h>. FIXME: This should be named "xstrsave", shouldn't it?
679 Doesn't real strsave return NULL if out of memory? */
bd5635a1
RP
680char *
681strsave (ptr)
8aa13b87 682 const char *ptr;
bd5635a1
RP
683{
684 return savestring (ptr, strlen (ptr));
685}
686
3624c875
FF
687char *
688mstrsave (md, ptr)
689 void *md;
690 const char *ptr;
691{
692 return (msavestring (md, ptr, strlen (ptr)));
693}
694
bd5635a1
RP
695void
696print_spaces (n, file)
697 register int n;
698 register FILE *file;
699{
700 while (n-- > 0)
701 fputc (' ', file);
702}
703
704/* Ask user a y-or-n question and return 1 iff answer is yes.
705 Takes three args which are given to printf to print the question.
706 The first, a control string, should end in "? ".
707 It should not say how to answer, because we do that. */
708
709/* VARARGS */
710int
711query (va_alist)
712 va_dcl
713{
714 va_list args;
715 char *ctlstr;
716 register int answer;
717 register int ans2;
718
719 /* Automatically answer "yes" if input is not from a terminal. */
720 if (!input_from_terminal_p ())
721 return 1;
722
723 while (1)
724 {
546014f7
PB
725 wrap_here (""); /* Flush any buffered output */
726 fflush (stdout);
bd5635a1
RP
727 va_start (args);
728 ctlstr = va_arg (args, char *);
bcf2e6ab 729 vfprintf_filtered (stdout, ctlstr, args);
b36e3a9b 730 va_end (args);
bcf2e6ab 731 printf_filtered ("(y or n) ");
b36e3a9b
SG
732 fflush (stdout);
733 answer = fgetc (stdin);
734 clearerr (stdin); /* in case of C-d */
735 if (answer == EOF) /* C-d */
736 return 1;
737 if (answer != '\n') /* Eat rest of input line, to EOF or newline */
738 do
739 {
740 ans2 = fgetc (stdin);
741 clearerr (stdin);
742 }
743 while (ans2 != EOF && ans2 != '\n');
bd5635a1
RP
744 if (answer >= 'a')
745 answer -= 040;
746 if (answer == 'Y')
747 return 1;
748 if (answer == 'N')
749 return 0;
bcf2e6ab 750 printf_filtered ("Please answer y or n.\n");
bd5635a1
RP
751 }
752}
7919c3ed 753
bd5635a1
RP
754\f
755/* Parse a C escape sequence. STRING_PTR points to a variable
756 containing a pointer to the string to parse. That pointer
757 should point to the character after the \. That pointer
758 is updated past the characters we use. The value of the
759 escape sequence is returned.
760
761 A negative value means the sequence \ newline was seen,
762 which is supposed to be equivalent to nothing at all.
763
764 If \ is followed by a null character, we return a negative
765 value and leave the string pointer pointing at the null character.
766
767 If \ is followed by 000, we return 0 and leave the string pointer
768 after the zeros. A value of 0 does not mean end of string. */
769
770int
771parse_escape (string_ptr)
772 char **string_ptr;
773{
774 register int c = *(*string_ptr)++;
775 switch (c)
776 {
777 case 'a':
2bc2e684 778 return 007; /* Bell (alert) char */
bd5635a1
RP
779 case 'b':
780 return '\b';
2bc2e684 781 case 'e': /* Escape character */
bd5635a1
RP
782 return 033;
783 case 'f':
784 return '\f';
785 case 'n':
786 return '\n';
787 case 'r':
788 return '\r';
789 case 't':
790 return '\t';
791 case 'v':
792 return '\v';
793 case '\n':
794 return -2;
795 case 0:
796 (*string_ptr)--;
797 return 0;
798 case '^':
799 c = *(*string_ptr)++;
800 if (c == '\\')
801 c = parse_escape (string_ptr);
802 if (c == '?')
803 return 0177;
804 return (c & 0200) | (c & 037);
805
806 case '0':
807 case '1':
808 case '2':
809 case '3':
810 case '4':
811 case '5':
812 case '6':
813 case '7':
814 {
815 register int i = c - '0';
816 register int count = 0;
817 while (++count < 3)
818 {
819 if ((c = *(*string_ptr)++) >= '0' && c <= '7')
820 {
821 i *= 8;
822 i += c - '0';
823 }
824 else
825 {
826 (*string_ptr)--;
827 break;
828 }
829 }
830 return i;
831 }
832 default:
833 return c;
834 }
835}
836\f
51b80b00
FF
837/* Print the character C on STREAM as part of the contents of a literal
838 string whose delimiter is QUOTER. Note that this routine should only
839 be call for printing things which are independent of the language
840 of the program being debugged. */
bd5635a1
RP
841
842void
51b80b00 843gdb_printchar (c, stream, quoter)
088c3a0b 844 register int c;
bd5635a1
RP
845 FILE *stream;
846 int quoter;
847{
bd5635a1 848
7e7e2d40
JG
849 c &= 0xFF; /* Avoid sign bit follies */
850
fcdb113e
JG
851 if ( c < 0x20 || /* Low control chars */
852 (c >= 0x7F && c < 0xA0) || /* DEL, High controls */
853 (sevenbit_strings && c >= 0x80)) { /* high order bit set */
bd5635a1
RP
854 switch (c)
855 {
856 case '\n':
857 fputs_filtered ("\\n", stream);
858 break;
859 case '\b':
860 fputs_filtered ("\\b", stream);
861 break;
862 case '\t':
863 fputs_filtered ("\\t", stream);
864 break;
865 case '\f':
866 fputs_filtered ("\\f", stream);
867 break;
868 case '\r':
869 fputs_filtered ("\\r", stream);
870 break;
871 case '\033':
872 fputs_filtered ("\\e", stream);
873 break;
874 case '\007':
875 fputs_filtered ("\\a", stream);
876 break;
877 default:
878 fprintf_filtered (stream, "\\%.3o", (unsigned int) c);
879 break;
880 }
2bc2e684
FF
881 } else {
882 if (c == '\\' || c == quoter)
883 fputs_filtered ("\\", stream);
884 fprintf_filtered (stream, "%c", c);
885 }
bd5635a1
RP
886}
887\f
888/* Number of lines per page or UINT_MAX if paging is disabled. */
889static unsigned int lines_per_page;
890/* Number of chars per line or UNIT_MAX is line folding is disabled. */
891static unsigned int chars_per_line;
892/* Current count of lines printed on this page, chars on this line. */
893static unsigned int lines_printed, chars_printed;
894
895/* Buffer and start column of buffered text, for doing smarter word-
896 wrapping. When someone calls wrap_here(), we start buffering output
897 that comes through fputs_filtered(). If we see a newline, we just
898 spit it out and forget about the wrap_here(). If we see another
899 wrap_here(), we spit it out and remember the newer one. If we see
900 the end of the line, we spit out a newline, the indent, and then
901 the buffered output.
902
903 wrap_column is the column number on the screen where wrap_buffer begins.
904 When wrap_column is zero, wrapping is not in effect.
905 wrap_buffer is malloc'd with chars_per_line+2 bytes.
906 When wrap_buffer[0] is null, the buffer is empty.
907 wrap_pointer points into it at the next character to fill.
908 wrap_indent is the string that should be used as indentation if the
909 wrap occurs. */
910
911static char *wrap_buffer, *wrap_pointer, *wrap_indent;
912static int wrap_column;
913
e1ce8aa5 914/* ARGSUSED */
bd5635a1
RP
915static void
916set_width_command (args, from_tty, c)
917 char *args;
918 int from_tty;
919 struct cmd_list_element *c;
920{
921 if (!wrap_buffer)
922 {
923 wrap_buffer = (char *) xmalloc (chars_per_line + 2);
924 wrap_buffer[0] = '\0';
925 }
926 else
927 wrap_buffer = (char *) xrealloc (wrap_buffer, chars_per_line + 2);
928 wrap_pointer = wrap_buffer; /* Start it at the beginning */
929}
930
d974236f
JG
931/* Wait, so the user can read what's on the screen. Prompt the user
932 to continue by pressing RETURN. */
933
bd5635a1
RP
934static void
935prompt_for_continue ()
936{
351b221d
JG
937 char *ignore;
938
d974236f
JG
939 /* We must do this *before* we call gdb_readline, else it will eventually
940 call us -- thinking that we're trying to print beyond the end of the
941 screen. */
942 reinitialize_more_filter ();
943
bd5635a1 944 immediate_quit++;
351b221d
JG
945 ignore = gdb_readline ("---Type <return> to continue---");
946 if (ignore)
947 free (ignore);
bd5635a1 948 immediate_quit--;
d974236f
JG
949
950 /* Now we have to do this again, so that GDB will know that it doesn't
951 need to save the ---Type <return>--- line at the top of the screen. */
952 reinitialize_more_filter ();
953
351b221d 954 dont_repeat (); /* Forget prev cmd -- CR won't repeat it. */
bd5635a1
RP
955}
956
957/* Reinitialize filter; ie. tell it to reset to original values. */
958
959void
960reinitialize_more_filter ()
961{
962 lines_printed = 0;
963 chars_printed = 0;
964}
965
966/* Indicate that if the next sequence of characters overflows the line,
967 a newline should be inserted here rather than when it hits the end.
968 If INDENT is nonzero, it is a string to be printed to indent the
969 wrapped part on the next line. INDENT must remain accessible until
970 the next call to wrap_here() or until a newline is printed through
971 fputs_filtered().
972
973 If the line is already overfull, we immediately print a newline and
974 the indentation, and disable further wrapping.
975
2bc2e684
FF
976 If we don't know the width of lines, but we know the page height,
977 we must not wrap words, but should still keep track of newlines
978 that were explicitly printed.
979
bd5635a1
RP
980 INDENT should not contain tabs, as that
981 will mess up the char count on the next line. FIXME. */
982
983void
984wrap_here(indent)
985 char *indent;
986{
987 if (wrap_buffer[0])
988 {
989 *wrap_pointer = '\0';
990 fputs (wrap_buffer, stdout);
991 }
992 wrap_pointer = wrap_buffer;
993 wrap_buffer[0] = '\0';
2bc2e684
FF
994 if (chars_per_line == UINT_MAX) /* No line overflow checking */
995 {
996 wrap_column = 0;
997 }
998 else if (chars_printed >= chars_per_line)
bd5635a1
RP
999 {
1000 puts_filtered ("\n");
1001 puts_filtered (indent);
1002 wrap_column = 0;
1003 }
1004 else
1005 {
1006 wrap_column = chars_printed;
1007 wrap_indent = indent;
1008 }
1009}
1010
51b80b00
FF
1011/* Ensure that whatever gets printed next, using the filtered output
1012 commands, starts at the beginning of the line. I.E. if there is
1013 any pending output for the current line, flush it and start a new
1014 line. Otherwise do nothing. */
1015
1016void
1017begin_line ()
1018{
1019 if (chars_printed > 0)
1020 {
1021 puts_filtered ("\n");
1022 }
1023}
1024
bd5635a1
RP
1025/* Like fputs but pause after every screenful, and can wrap at points
1026 other than the final character of a line.
1027 Unlike fputs, fputs_filtered does not return a value.
1028 It is OK for LINEBUFFER to be NULL, in which case just don't print
1029 anything.
1030
1031 Note that a longjmp to top level may occur in this routine
1032 (since prompt_for_continue may do so) so this routine should not be
1033 called when cleanups are not in place. */
1034
1035void
1036fputs_filtered (linebuffer, stream)
088c3a0b 1037 const char *linebuffer;
bd5635a1
RP
1038 FILE *stream;
1039{
7919c3ed 1040 const char *lineptr;
bd5635a1
RP
1041
1042 if (linebuffer == 0)
1043 return;
1044
1045 /* Don't do any filtering if it is disabled. */
1046 if (stream != stdout
1047 || (lines_per_page == UINT_MAX && chars_per_line == UINT_MAX))
1048 {
1049 fputs (linebuffer, stream);
1050 return;
1051 }
1052
1053 /* Go through and output each character. Show line extension
1054 when this is necessary; prompt user for new page when this is
1055 necessary. */
1056
1057 lineptr = linebuffer;
1058 while (*lineptr)
1059 {
1060 /* Possible new page. */
1061 if (lines_printed >= lines_per_page - 1)
1062 prompt_for_continue ();
1063
1064 while (*lineptr && *lineptr != '\n')
1065 {
1066 /* Print a single line. */
1067 if (*lineptr == '\t')
1068 {
1069 if (wrap_column)
1070 *wrap_pointer++ = '\t';
1071 else
1072 putc ('\t', stream);
1073 /* Shifting right by 3 produces the number of tab stops
1074 we have already passed, and then adding one and
1075 shifting left 3 advances to the next tab stop. */
1076 chars_printed = ((chars_printed >> 3) + 1) << 3;
1077 lineptr++;
1078 }
1079 else
1080 {
1081 if (wrap_column)
1082 *wrap_pointer++ = *lineptr;
1083 else
1084 putc (*lineptr, stream);
1085 chars_printed++;
1086 lineptr++;
1087 }
1088
1089 if (chars_printed >= chars_per_line)
1090 {
1091 unsigned int save_chars = chars_printed;
1092
1093 chars_printed = 0;
1094 lines_printed++;
1095 /* If we aren't actually wrapping, don't output newline --
1096 if chars_per_line is right, we probably just overflowed
1097 anyway; if it's wrong, let us keep going. */
1098 if (wrap_column)
1099 putc ('\n', stream);
1100
1101 /* Possible new page. */
1102 if (lines_printed >= lines_per_page - 1)
1103 prompt_for_continue ();
1104
1105 /* Now output indentation and wrapped string */
1106 if (wrap_column)
1107 {
1108 if (wrap_indent)
1109 fputs (wrap_indent, stream);
1110 *wrap_pointer = '\0'; /* Null-terminate saved stuff */
1111 fputs (wrap_buffer, stream); /* and eject it */
1112 /* FIXME, this strlen is what prevents wrap_indent from
1113 containing tabs. However, if we recurse to print it
1114 and count its chars, we risk trouble if wrap_indent is
1115 longer than (the user settable) chars_per_line.
1116 Note also that this can set chars_printed > chars_per_line
1117 if we are printing a long string. */
1118 chars_printed = strlen (wrap_indent)
1119 + (save_chars - wrap_column);
1120 wrap_pointer = wrap_buffer; /* Reset buffer */
1121 wrap_buffer[0] = '\0';
1122 wrap_column = 0; /* And disable fancy wrap */
1123 }
1124 }
1125 }
1126
1127 if (*lineptr == '\n')
1128 {
1129 chars_printed = 0;
d11c44f1 1130 wrap_here ((char *)0); /* Spit out chars, cancel further wraps */
bd5635a1
RP
1131 lines_printed++;
1132 putc ('\n', stream);
1133 lineptr++;
1134 }
1135 }
1136}
1137
1138
bd5d07d9
FF
1139/* fputs_demangled attempts to demangle NAME, a symbol in language LANG, using
1140 demangling args ARG_MODE, and print it filtered to STREAM. If the name is
1141 not mangled, or the language for the name is unknown, or demangling is off,
1142 the name is printed in its "raw" form. */
bd5635a1
RP
1143
1144void
bd5d07d9
FF
1145fputs_demangled (name, stream, arg_mode, lang)
1146 char *name;
bd5635a1
RP
1147 FILE *stream;
1148 int arg_mode;
bd5d07d9 1149 enum language lang;
bd5635a1 1150{
bd5d07d9 1151 char *demangled;
bd5635a1 1152
bd5d07d9
FF
1153 if (name != NULL)
1154 {
1155 /* If user wants to see raw output, no problem. */
1156 if (!demangle)
1157 {
1158 fputs_filtered (name, stream);
1159 }
1160 else
1161 {
1162 switch (lang)
1163 {
1164 case language_cplus:
1165 demangled = cplus_demangle (name, arg_mode);
1166 break;
1167 /* start-sanitize-chill */
1168 case language_chill:
1169 demangled = chill_demangle (name);
1170 break;
1171 /* end-sanitize-chill */
1172 default:
1173 demangled = NULL;
1174 break;
1175 }
1176 fputs_filtered (demangled ? demangled : name, stream);
1177 if (demangled != NULL)
1178 {
1179 free (demangled);
1180 }
1181 }
bd5635a1 1182 }
bd5635a1
RP
1183}
1184
1185/* Print a variable number of ARGS using format FORMAT. If this
1186 information is going to put the amount written (since the last call
d974236f 1187 to REINITIALIZE_MORE_FILTER or the last page break) over the page size,
bd5635a1
RP
1188 print out a pause message and do a gdb_readline to get the users
1189 permision to continue.
1190
1191 Unlike fprintf, this function does not return a value.
1192
1193 We implement three variants, vfprintf (takes a vararg list and stream),
1194 fprintf (takes a stream to write on), and printf (the usual).
1195
1196 Note that this routine has a restriction that the length of the
1197 final output line must be less than 255 characters *or* it must be
1198 less than twice the size of the format string. This is a very
1199 arbitrary restriction, but it is an internal restriction, so I'll
1200 put it in. This means that the %s format specifier is almost
1201 useless; unless the caller can GUARANTEE that the string is short
1202 enough, fputs_filtered should be used instead.
1203
1204 Note also that a longjmp to top level may occur in this routine
1205 (since prompt_for_continue may do so) so this routine should not be
1206 called when cleanups are not in place. */
1207
d974236f
JG
1208#define MIN_LINEBUF 255
1209
a8e033f2 1210void
bd5635a1 1211vfprintf_filtered (stream, format, args)
bd5635a1
RP
1212 FILE *stream;
1213 char *format;
7919c3ed 1214 va_list args;
bd5635a1 1215{
d974236f
JG
1216 char line_buf[MIN_LINEBUF+10];
1217 char *linebuffer = line_buf;
bd5635a1
RP
1218 int format_length;
1219
1220 format_length = strlen (format);
1221
bd5635a1 1222 /* Reallocate buffer to a larger size if this is necessary. */
d974236f 1223 if (format_length * 2 > MIN_LINEBUF)
bd5635a1 1224 {
d974236f 1225 linebuffer = alloca (10 + format_length * 2);
bd5635a1
RP
1226 }
1227
bd5635a1
RP
1228 /* This won't blow up if the restrictions described above are
1229 followed. */
4ed3a9ea 1230 vsprintf (linebuffer, format, args);
bd5635a1
RP
1231
1232 fputs_filtered (linebuffer, stream);
1233}
1234
51b80b00
FF
1235void
1236vprintf_filtered (format, args)
1237 char *format;
1238 va_list args;
1239{
1240 vfprintf_filtered (stdout, format, args);
1241}
1242
bd5635a1
RP
1243/* VARARGS */
1244void
1245fprintf_filtered (va_alist)
1246 va_dcl
1247{
546014f7 1248 va_list args;
bd5635a1
RP
1249 FILE *stream;
1250 char *format;
546014f7
PB
1251
1252 va_start (args);
1253 stream = va_arg (args, FILE *);
1254 format = va_arg (args, char *);
1255
1256 /* This won't blow up if the restrictions described above are
1257 followed. */
1258 vfprintf_filtered (stream, format, args);
1259 va_end (args);
1260}
1261
1262/* Like fprintf_filtered, but prints it's result indent.
1263 Called as fprintfi_filtered (spaces, format, arg1, arg2, ...); */
1264
1265/* VARARGS */
1266void
1267fprintfi_filtered (va_alist)
1268 va_dcl
1269{
7919c3ed 1270 va_list args;
546014f7
PB
1271 int spaces;
1272 FILE *stream;
1273 char *format;
bd5635a1
RP
1274
1275 va_start (args);
546014f7 1276 spaces = va_arg (args, int);
bd5635a1
RP
1277 stream = va_arg (args, FILE *);
1278 format = va_arg (args, char *);
546014f7 1279 print_spaces_filtered (spaces, stream);
bd5635a1
RP
1280
1281 /* This won't blow up if the restrictions described above are
1282 followed. */
7919c3ed 1283 vfprintf_filtered (stream, format, args);
bd5635a1
RP
1284 va_end (args);
1285}
1286
1287/* VARARGS */
1288void
1289printf_filtered (va_alist)
1290 va_dcl
1291{
1292 va_list args;
1293 char *format;
1294
1295 va_start (args);
1296 format = va_arg (args, char *);
1297
7919c3ed 1298 vfprintf_filtered (stdout, format, args);
bd5635a1
RP
1299 va_end (args);
1300}
bd5635a1 1301
546014f7
PB
1302/* Like printf_filtered, but prints it's result indented.
1303 Called as printfi_filtered (spaces, format, arg1, arg2, ...); */
1304
1305/* VARARGS */
1306void
1307printfi_filtered (va_alist)
1308 va_dcl
1309{
1310 va_list args;
1311 int spaces;
1312 char *format;
1313
1314 va_start (args);
1315 spaces = va_arg (args, int);
1316 format = va_arg (args, char *);
1317 print_spaces_filtered (spaces, stdout);
1318 vfprintf_filtered (stdout, format, args);
1319 va_end (args);
1320}
1321
51b80b00
FF
1322/* Easy -- but watch out!
1323
1324 This routine is *not* a replacement for puts()! puts() appends a newline.
1325 This one doesn't, and had better not! */
bd5635a1
RP
1326
1327void
1328puts_filtered (string)
1329 char *string;
1330{
1331 fputs_filtered (string, stdout);
1332}
1333
1334/* Return a pointer to N spaces and a null. The pointer is good
1335 until the next call to here. */
1336char *
1337n_spaces (n)
1338 int n;
1339{
1340 register char *t;
1341 static char *spaces;
1342 static int max_spaces;
1343
1344 if (n > max_spaces)
1345 {
1346 if (spaces)
1347 free (spaces);
3624c875 1348 spaces = (char *) xmalloc (n+1);
bd5635a1
RP
1349 for (t = spaces+n; t != spaces;)
1350 *--t = ' ';
1351 spaces[n] = '\0';
1352 max_spaces = n;
1353 }
1354
1355 return spaces + max_spaces - n;
1356}
1357
1358/* Print N spaces. */
1359void
1360print_spaces_filtered (n, stream)
1361 int n;
1362 FILE *stream;
1363{
1364 fputs_filtered (n_spaces (n), stream);
1365}
1366\f
1367/* C++ demangler stuff. */
bd5635a1
RP
1368
1369/* Print NAME on STREAM, demangling if necessary. */
1370void
1371fprint_symbol (stream, name)
1372 FILE *stream;
1373 char *name;
1374{
bd5d07d9
FF
1375 char *demangled = NULL;
1376
1377 if (demangle)
1378 {
1379 /* Lacking a better method of knowing what demangler to use, pick
1380 one appropriate for whatever the current language is. (FIXME) */
1381 switch (current_language -> la_language)
1382 {
1383 case language_cplus:
1384 demangled = cplus_demangle (name, DMGL_PARAMS | DMGL_ANSI);
1385 break;
1386 /* start-sanitize-chill */
1387 case language_chill:
1388 demangled = chill_demangle (name);
1389 break;
1390 /* end-sanitize-chill */
1391 }
1392 }
1393 if (demangled == NULL)
1394 {
1395 fputs_filtered (name, stream);
1396 }
bd5635a1
RP
1397 else
1398 {
1399 fputs_filtered (demangled, stream);
1400 free (demangled);
1401 }
1402}
51b57ded
FF
1403
1404/* Do a strcmp() type operation on STRING1 and STRING2, ignoring any
1405 differences in whitespace. Returns 0 if they match, non-zero if they
546014f7
PB
1406 don't (slightly different than strcmp()'s range of return values).
1407
1408 As an extra hack, string1=="FOO(ARGS)" matches string2=="FOO".
2e4964ad
FF
1409 This "feature" is useful when searching for matching C++ function names
1410 (such as if the user types 'break FOO', where FOO is a mangled C++
1411 function). */
51b57ded 1412
51b80b00 1413int
51b57ded
FF
1414strcmp_iw (string1, string2)
1415 const char *string1;
1416 const char *string2;
1417{
1418 while ((*string1 != '\0') && (*string2 != '\0'))
1419 {
1420 while (isspace (*string1))
1421 {
1422 string1++;
1423 }
1424 while (isspace (*string2))
1425 {
1426 string2++;
1427 }
1428 if (*string1 != *string2)
1429 {
1430 break;
1431 }
1432 if (*string1 != '\0')
1433 {
1434 string1++;
1435 string2++;
1436 }
1437 }
546014f7 1438 return (*string1 != '\0' && *string1 != '(') || (*string2 != '\0');
51b57ded
FF
1439}
1440
bd5635a1 1441\f
bd5635a1
RP
1442void
1443_initialize_utils ()
1444{
1445 struct cmd_list_element *c;
1446
1447 c = add_set_cmd ("width", class_support, var_uinteger,
1448 (char *)&chars_per_line,
1449 "Set number of characters gdb thinks are in a line.",
1450 &setlist);
1451 add_show_from_set (c, &showlist);
d747e0af 1452 c->function.sfunc = set_width_command;
bd5635a1
RP
1453
1454 add_show_from_set
1455 (add_set_cmd ("height", class_support,
1456 var_uinteger, (char *)&lines_per_page,
1457 "Set number of lines gdb thinks are in a page.", &setlist),
1458 &showlist);
1459
1460 /* These defaults will be used if we are unable to get the correct
1461 values from termcap. */
51b57ded
FF
1462#if defined(__GO32__)
1463 lines_per_page = ScreenRows();
1464 chars_per_line = ScreenCols();
1465#else
bd5635a1
RP
1466 lines_per_page = 24;
1467 chars_per_line = 80;
1468 /* Initialize the screen height and width from termcap. */
1469 {
1470 char *termtype = getenv ("TERM");
1471
1472 /* Positive means success, nonpositive means failure. */
1473 int status;
1474
1475 /* 2048 is large enough for all known terminals, according to the
1476 GNU termcap manual. */
1477 char term_buffer[2048];
1478
1479 if (termtype)
1480 {
1481 status = tgetent (term_buffer, termtype);
1482 if (status > 0)
1483 {
1484 int val;
1485
1486 val = tgetnum ("li");
1487 if (val >= 0)
1488 lines_per_page = val;
1489 else
1490 /* The number of lines per page is not mentioned
1491 in the terminal description. This probably means
1492 that paging is not useful (e.g. emacs shell window),
1493 so disable paging. */
1494 lines_per_page = UINT_MAX;
1495
1496 val = tgetnum ("co");
1497 if (val >= 0)
1498 chars_per_line = val;
1499 }
1500 }
1501 }
1502
1eeba686
PB
1503#if defined(SIGWINCH) && defined(SIGWINCH_HANDLER)
1504
4ace50a5 1505 /* If there is a better way to determine the window size, use it. */
1eeba686
PB
1506 SIGWINCH_HANDLER ();
1507#endif
51b57ded 1508#endif
2bc2e684
FF
1509 /* If the output is not a terminal, don't paginate it. */
1510 if (!ISATTY (stdout))
1511 lines_per_page = UINT_MAX;
1512
bd5635a1
RP
1513 set_width_command ((char *)NULL, 0, c);
1514
1515 add_show_from_set
1516 (add_set_cmd ("demangle", class_support, var_boolean,
1517 (char *)&demangle,
1518 "Set demangling of encoded C++ names when displaying symbols.",
f266e564
JK
1519 &setprintlist),
1520 &showprintlist);
bd5635a1
RP
1521
1522 add_show_from_set
1523 (add_set_cmd ("sevenbit-strings", class_support, var_boolean,
1524 (char *)&sevenbit_strings,
1525 "Set printing of 8-bit characters in strings as \\nnn.",
f266e564
JK
1526 &setprintlist),
1527 &showprintlist);
bd5635a1
RP
1528
1529 add_show_from_set
1530 (add_set_cmd ("asm-demangle", class_support, var_boolean,
1531 (char *)&asm_demangle,
1532 "Set demangling of C++ names in disassembly listings.",
f266e564
JK
1533 &setprintlist),
1534 &showprintlist);
bd5635a1 1535}
1eeba686
PB
1536
1537/* Machine specific function to handle SIGWINCH signal. */
1538
1539#ifdef SIGWINCH_HANDLER_BODY
1540 SIGWINCH_HANDLER_BODY
1541#endif
bd5d07d9 1542
This page took 0.168052 seconds and 4 git commands to generate.