2003-01-13 Andrew Cagney <ac131313@redhat.com>
[platform/upstream/binutils.git] / gdb / utils.c
1 /* General utility routines for GDB, the GNU debugger.
2
3    Copyright 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
4    1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software
5    Foundation, Inc.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 2 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program; if not, write to the Free Software
21    Foundation, Inc., 59 Temple Place - Suite 330,
22    Boston, MA 02111-1307, USA.  */
23
24 #include "defs.h"
25 #include "gdb_assert.h"
26 #include <ctype.h>
27 #include "gdb_string.h"
28 #include "event-top.h"
29
30 #ifdef __GO32__
31 #include <pc.h>
32 #endif
33
34 /* SunOS's curses.h has a '#define reg register' in it.  Thank you Sun. */
35 #ifdef reg
36 #undef reg
37 #endif
38
39 #include <signal.h>
40 #include "gdbcmd.h"
41 #include "serial.h"
42 #include "bfd.h"
43 #include "target.h"
44 #include "demangle.h"
45 #include "expression.h"
46 #include "language.h"
47 #include "charset.h"
48 #include "annotate.h"
49 #include "filenames.h"
50
51 #include "inferior.h" /* for signed_pointer_to_address */
52
53 #include <sys/param.h>          /* For MAXPATHLEN */
54
55 #ifdef HAVE_CURSES_H
56 #include <curses.h>
57 #endif
58 #ifdef HAVE_TERM_H
59 #include <term.h>
60 #endif
61
62 #include <readline/readline.h>
63
64 #ifdef USE_MMALLOC
65 #include "mmalloc.h"
66 #endif
67
68 #ifdef NEED_DECLARATION_MALLOC
69 extern PTR malloc ();
70 #endif
71 #ifdef NEED_DECLARATION_REALLOC
72 extern PTR realloc ();
73 #endif
74 #ifdef NEED_DECLARATION_FREE
75 extern void free ();
76 #endif
77 /* Actually, we'll never have the decl, since we don't define _GNU_SOURCE.  */
78 #if defined(HAVE_CANONICALIZE_FILE_NAME) \
79     && defined(NEED_DECLARATION_CANONICALIZE_FILE_NAME)
80 extern char *canonicalize_file_name (const char *);
81 #endif
82
83 /* readline defines this.  */
84 #undef savestring
85
86 void (*error_begin_hook) (void);
87
88 /* Holds the last error message issued by gdb */
89
90 static struct ui_file *gdb_lasterr;
91
92 /* Prototypes for local functions */
93
94 static void vfprintf_maybe_filtered (struct ui_file *, const char *,
95                                      va_list, int);
96
97 static void fputs_maybe_filtered (const char *, struct ui_file *, int);
98
99 #if defined (USE_MMALLOC) && !defined (NO_MMCHECK)
100 static void malloc_botch (void);
101 #endif
102
103 static void prompt_for_continue (void);
104
105 static void set_width_command (char *, int, struct cmd_list_element *);
106
107 static void set_width (void);
108
109 /* Chain of cleanup actions established with make_cleanup,
110    to be executed if an error happens.  */
111
112 static struct cleanup *cleanup_chain;   /* cleaned up after a failed command */
113 static struct cleanup *final_cleanup_chain;     /* cleaned up when gdb exits */
114 static struct cleanup *run_cleanup_chain;       /* cleaned up on each 'run' */
115 static struct cleanup *exec_cleanup_chain;      /* cleaned up on each execution command */
116 /* cleaned up on each error from within an execution command */
117 static struct cleanup *exec_error_cleanup_chain; 
118
119 /* Pointer to what is left to do for an execution command after the
120    target stops. Used only in asynchronous mode, by targets that
121    support async execution.  The finish and until commands use it. So
122    does the target extended-remote command. */
123 struct continuation *cmd_continuation;
124 struct continuation *intermediate_continuation;
125
126 /* Nonzero if we have job control. */
127
128 int job_control;
129
130 /* Nonzero means a quit has been requested.  */
131
132 int quit_flag;
133
134 /* Nonzero means quit immediately if Control-C is typed now, rather
135    than waiting until QUIT is executed.  Be careful in setting this;
136    code which executes with immediate_quit set has to be very careful
137    about being able to deal with being interrupted at any time.  It is
138    almost always better to use QUIT; the only exception I can think of
139    is being able to quit out of a system call (using EINTR loses if
140    the SIGINT happens between the previous QUIT and the system call).
141    To immediately quit in the case in which a SIGINT happens between
142    the previous QUIT and setting immediate_quit (desirable anytime we
143    expect to block), call QUIT after setting immediate_quit.  */
144
145 int immediate_quit;
146
147 /* Nonzero means that encoded C++/ObjC names should be printed out in their
148    C++/ObjC form rather than raw.  */
149
150 int demangle = 1;
151
152 /* Nonzero means that encoded C++/ObjC names should be printed out in their
153    C++/ObjC form even in assembler language displays.  If this is set, but
154    DEMANGLE is zero, names are printed raw, i.e. DEMANGLE controls.  */
155
156 int asm_demangle = 0;
157
158 /* Nonzero means that strings with character values >0x7F should be printed
159    as octal escapes.  Zero means just print the value (e.g. it's an
160    international character, and the terminal or window can cope.)  */
161
162 int sevenbit_strings = 0;
163
164 /* String to be printed before error messages, if any.  */
165
166 char *error_pre_print;
167
168 /* String to be printed before quit messages, if any.  */
169
170 char *quit_pre_print;
171
172 /* String to be printed before warning messages, if any.  */
173
174 char *warning_pre_print = "\nwarning: ";
175
176 int pagination_enabled = 1;
177 \f
178
179 /* Add a new cleanup to the cleanup_chain,
180    and return the previous chain pointer
181    to be passed later to do_cleanups or discard_cleanups.
182    Args are FUNCTION to clean up with, and ARG to pass to it.  */
183
184 struct cleanup *
185 make_cleanup (make_cleanup_ftype *function, void *arg)
186 {
187   return make_my_cleanup (&cleanup_chain, function, arg);
188 }
189
190 struct cleanup *
191 make_final_cleanup (make_cleanup_ftype *function, void *arg)
192 {
193   return make_my_cleanup (&final_cleanup_chain, function, arg);
194 }
195
196 struct cleanup *
197 make_run_cleanup (make_cleanup_ftype *function, void *arg)
198 {
199   return make_my_cleanup (&run_cleanup_chain, function, arg);
200 }
201
202 struct cleanup *
203 make_exec_cleanup (make_cleanup_ftype *function, void *arg)
204 {
205   return make_my_cleanup (&exec_cleanup_chain, function, arg);
206 }
207
208 struct cleanup *
209 make_exec_error_cleanup (make_cleanup_ftype *function, void *arg)
210 {
211   return make_my_cleanup (&exec_error_cleanup_chain, function, arg);
212 }
213
214 static void
215 do_freeargv (void *arg)
216 {
217   freeargv ((char **) arg);
218 }
219
220 struct cleanup *
221 make_cleanup_freeargv (char **arg)
222 {
223   return make_my_cleanup (&cleanup_chain, do_freeargv, arg);
224 }
225
226 static void
227 do_bfd_close_cleanup (void *arg)
228 {
229   bfd_close (arg);
230 }
231
232 struct cleanup *
233 make_cleanup_bfd_close (bfd *abfd)
234 {
235   return make_cleanup (do_bfd_close_cleanup, abfd);
236 }
237
238 static void
239 do_close_cleanup (void *arg)
240 {
241   int *fd = arg;
242   close (*fd);
243   xfree (fd);
244 }
245
246 struct cleanup *
247 make_cleanup_close (int fd)
248 {
249   int *saved_fd = xmalloc (sizeof (fd));
250   *saved_fd = fd;
251   return make_cleanup (do_close_cleanup, saved_fd);
252 }
253
254 static void
255 do_ui_file_delete (void *arg)
256 {
257   ui_file_delete (arg);
258 }
259
260 struct cleanup *
261 make_cleanup_ui_file_delete (struct ui_file *arg)
262 {
263   return make_my_cleanup (&cleanup_chain, do_ui_file_delete, arg);
264 }
265
266 struct cleanup *
267 make_my_cleanup (struct cleanup **pmy_chain, make_cleanup_ftype *function,
268                  void *arg)
269 {
270   register struct cleanup *new
271   = (struct cleanup *) xmalloc (sizeof (struct cleanup));
272   register struct cleanup *old_chain = *pmy_chain;
273
274   new->next = *pmy_chain;
275   new->function = function;
276   new->arg = arg;
277   *pmy_chain = new;
278
279   return old_chain;
280 }
281
282 /* Discard cleanups and do the actions they describe
283    until we get back to the point OLD_CHAIN in the cleanup_chain.  */
284
285 void
286 do_cleanups (register struct cleanup *old_chain)
287 {
288   do_my_cleanups (&cleanup_chain, old_chain);
289 }
290
291 void
292 do_final_cleanups (register struct cleanup *old_chain)
293 {
294   do_my_cleanups (&final_cleanup_chain, old_chain);
295 }
296
297 void
298 do_run_cleanups (register struct cleanup *old_chain)
299 {
300   do_my_cleanups (&run_cleanup_chain, old_chain);
301 }
302
303 void
304 do_exec_cleanups (register struct cleanup *old_chain)
305 {
306   do_my_cleanups (&exec_cleanup_chain, old_chain);
307 }
308
309 void
310 do_exec_error_cleanups (register struct cleanup *old_chain)
311 {
312   do_my_cleanups (&exec_error_cleanup_chain, old_chain);
313 }
314
315 void
316 do_my_cleanups (register struct cleanup **pmy_chain,
317                 register struct cleanup *old_chain)
318 {
319   register struct cleanup *ptr;
320   while ((ptr = *pmy_chain) != old_chain)
321     {
322       *pmy_chain = ptr->next;   /* Do this first incase recursion */
323       (*ptr->function) (ptr->arg);
324       xfree (ptr);
325     }
326 }
327
328 /* Discard cleanups, not doing the actions they describe,
329    until we get back to the point OLD_CHAIN in the cleanup_chain.  */
330
331 void
332 discard_cleanups (register struct cleanup *old_chain)
333 {
334   discard_my_cleanups (&cleanup_chain, old_chain);
335 }
336
337 void
338 discard_final_cleanups (register struct cleanup *old_chain)
339 {
340   discard_my_cleanups (&final_cleanup_chain, old_chain);
341 }
342
343 void
344 discard_exec_error_cleanups (register struct cleanup *old_chain)
345 {
346   discard_my_cleanups (&exec_error_cleanup_chain, old_chain);
347 }
348
349 void
350 discard_my_cleanups (register struct cleanup **pmy_chain,
351                      register struct cleanup *old_chain)
352 {
353   register struct cleanup *ptr;
354   while ((ptr = *pmy_chain) != old_chain)
355     {
356       *pmy_chain = ptr->next;
357       xfree (ptr);
358     }
359 }
360
361 /* Set the cleanup_chain to 0, and return the old cleanup chain.  */
362 struct cleanup *
363 save_cleanups (void)
364 {
365   return save_my_cleanups (&cleanup_chain);
366 }
367
368 struct cleanup *
369 save_final_cleanups (void)
370 {
371   return save_my_cleanups (&final_cleanup_chain);
372 }
373
374 struct cleanup *
375 save_my_cleanups (struct cleanup **pmy_chain)
376 {
377   struct cleanup *old_chain = *pmy_chain;
378
379   *pmy_chain = 0;
380   return old_chain;
381 }
382
383 /* Restore the cleanup chain from a previously saved chain.  */
384 void
385 restore_cleanups (struct cleanup *chain)
386 {
387   restore_my_cleanups (&cleanup_chain, chain);
388 }
389
390 void
391 restore_final_cleanups (struct cleanup *chain)
392 {
393   restore_my_cleanups (&final_cleanup_chain, chain);
394 }
395
396 void
397 restore_my_cleanups (struct cleanup **pmy_chain, struct cleanup *chain)
398 {
399   *pmy_chain = chain;
400 }
401
402 /* This function is useful for cleanups.
403    Do
404
405    foo = xmalloc (...);
406    old_chain = make_cleanup (free_current_contents, &foo);
407
408    to arrange to free the object thus allocated.  */
409
410 void
411 free_current_contents (void *ptr)
412 {
413   void **location = ptr;
414   if (location == NULL)
415     internal_error (__FILE__, __LINE__,
416                     "free_current_contents: NULL pointer");
417   if (*location != NULL)
418     {
419       xfree (*location);
420       *location = NULL;
421     }
422 }
423
424 /* Provide a known function that does nothing, to use as a base for
425    for a possibly long chain of cleanups.  This is useful where we
426    use the cleanup chain for handling normal cleanups as well as dealing
427    with cleanups that need to be done as a result of a call to error().
428    In such cases, we may not be certain where the first cleanup is, unless
429    we have a do-nothing one to always use as the base. */
430
431 /* ARGSUSED */
432 void
433 null_cleanup (void *arg)
434 {
435 }
436
437 /* Add a continuation to the continuation list, the global list
438    cmd_continuation. The new continuation will be added at the front.*/
439 void
440 add_continuation (void (*continuation_hook) (struct continuation_arg *),
441                   struct continuation_arg *arg_list)
442 {
443   struct continuation *continuation_ptr;
444
445   continuation_ptr = (struct continuation *) xmalloc (sizeof (struct continuation));
446   continuation_ptr->continuation_hook = continuation_hook;
447   continuation_ptr->arg_list = arg_list;
448   continuation_ptr->next = cmd_continuation;
449   cmd_continuation = continuation_ptr;
450 }
451
452 /* Walk down the cmd_continuation list, and execute all the
453    continuations. There is a problem though. In some cases new
454    continuations may be added while we are in the middle of this
455    loop. If this happens they will be added in the front, and done
456    before we have a chance of exhausting those that were already
457    there. We need to then save the beginning of the list in a pointer
458    and do the continuations from there on, instead of using the
459    global beginning of list as our iteration pointer.*/
460 void
461 do_all_continuations (void)
462 {
463   struct continuation *continuation_ptr;
464   struct continuation *saved_continuation;
465
466   /* Copy the list header into another pointer, and set the global
467      list header to null, so that the global list can change as a side
468      effect of invoking the continuations and the processing of
469      the preexisting continuations will not be affected. */
470   continuation_ptr = cmd_continuation;
471   cmd_continuation = NULL;
472
473   /* Work now on the list we have set aside. */
474   while (continuation_ptr)
475      {
476        (continuation_ptr->continuation_hook) (continuation_ptr->arg_list);
477        saved_continuation = continuation_ptr;
478        continuation_ptr = continuation_ptr->next;
479        xfree (saved_continuation);
480      }
481 }
482
483 /* Walk down the cmd_continuation list, and get rid of all the
484    continuations. */
485 void
486 discard_all_continuations (void)
487 {
488   struct continuation *continuation_ptr;
489
490   while (cmd_continuation)
491     {
492       continuation_ptr = cmd_continuation;
493       cmd_continuation = continuation_ptr->next;
494       xfree (continuation_ptr);
495     }
496 }
497
498 /* Add a continuation to the continuation list, the global list
499    intermediate_continuation. The new continuation will be added at the front.*/
500 void
501 add_intermediate_continuation (void (*continuation_hook)
502                                (struct continuation_arg *),
503                                struct continuation_arg *arg_list)
504 {
505   struct continuation *continuation_ptr;
506
507   continuation_ptr = (struct continuation *) xmalloc (sizeof (struct continuation));
508   continuation_ptr->continuation_hook = continuation_hook;
509   continuation_ptr->arg_list = arg_list;
510   continuation_ptr->next = intermediate_continuation;
511   intermediate_continuation = continuation_ptr;
512 }
513
514 /* Walk down the cmd_continuation list, and execute all the
515    continuations. There is a problem though. In some cases new
516    continuations may be added while we are in the middle of this
517    loop. If this happens they will be added in the front, and done
518    before we have a chance of exhausting those that were already
519    there. We need to then save the beginning of the list in a pointer
520    and do the continuations from there on, instead of using the
521    global beginning of list as our iteration pointer.*/
522 void
523 do_all_intermediate_continuations (void)
524 {
525   struct continuation *continuation_ptr;
526   struct continuation *saved_continuation;
527
528   /* Copy the list header into another pointer, and set the global
529      list header to null, so that the global list can change as a side
530      effect of invoking the continuations and the processing of
531      the preexisting continuations will not be affected. */
532   continuation_ptr = intermediate_continuation;
533   intermediate_continuation = NULL;
534
535   /* Work now on the list we have set aside. */
536   while (continuation_ptr)
537      {
538        (continuation_ptr->continuation_hook) (continuation_ptr->arg_list);
539        saved_continuation = continuation_ptr;
540        continuation_ptr = continuation_ptr->next;
541        xfree (saved_continuation);
542      }
543 }
544
545 /* Walk down the cmd_continuation list, and get rid of all the
546    continuations. */
547 void
548 discard_all_intermediate_continuations (void)
549 {
550   struct continuation *continuation_ptr;
551
552   while (intermediate_continuation)
553     {
554       continuation_ptr = intermediate_continuation;
555       intermediate_continuation = continuation_ptr->next;
556       xfree (continuation_ptr);
557     }
558 }
559
560 \f
561
562 /* Print a warning message.  The first argument STRING is the warning
563    message, used as an fprintf format string, the second is the
564    va_list of arguments for that string.  A warning is unfiltered (not
565    paginated) so that the user does not need to page through each
566    screen full of warnings when there are lots of them.  */
567
568 void
569 vwarning (const char *string, va_list args)
570 {
571   if (warning_hook)
572     (*warning_hook) (string, args);
573   else
574     {
575       target_terminal_ours ();
576       wrap_here ("");           /* Force out any buffered output */
577       gdb_flush (gdb_stdout);
578       if (warning_pre_print)
579         fprintf_unfiltered (gdb_stderr, warning_pre_print);
580       vfprintf_unfiltered (gdb_stderr, string, args);
581       fprintf_unfiltered (gdb_stderr, "\n");
582       va_end (args);
583     }
584 }
585
586 /* Print a warning message.
587    The first argument STRING is the warning message, used as a fprintf string,
588    and the remaining args are passed as arguments to it.
589    The primary difference between warnings and errors is that a warning
590    does not force the return to command level.  */
591
592 void
593 warning (const char *string,...)
594 {
595   va_list args;
596   va_start (args, string);
597   vwarning (string, args);
598   va_end (args);
599 }
600
601 /* Print an error message and return to command level.
602    The first argument STRING is the error message, used as a fprintf string,
603    and the remaining args are passed as arguments to it.  */
604
605 NORETURN void
606 verror (const char *string, va_list args)
607 {
608   struct ui_file *tmp_stream = mem_fileopen ();
609   make_cleanup_ui_file_delete (tmp_stream);
610   vfprintf_unfiltered (tmp_stream, string, args);
611   error_stream (tmp_stream);
612 }
613
614 NORETURN void
615 error (const char *string,...)
616 {
617   va_list args;
618   va_start (args, string);
619   verror (string, args);
620   va_end (args);
621 }
622
623 static void
624 do_write (void *data, const char *buffer, long length_buffer)
625 {
626   ui_file_write (data, buffer, length_buffer);
627 }
628
629 NORETURN void
630 error_stream (struct ui_file *stream)
631 {
632   if (error_begin_hook)
633     error_begin_hook ();
634
635   /* Copy the stream into the GDB_LASTERR buffer.  */
636   ui_file_rewind (gdb_lasterr);
637   ui_file_put (stream, do_write, gdb_lasterr);
638
639   /* Write the message plus any error_pre_print to gdb_stderr.  */
640   target_terminal_ours ();
641   wrap_here ("");               /* Force out any buffered output */
642   gdb_flush (gdb_stdout);
643   annotate_error_begin ();
644   if (error_pre_print)
645     fprintf_filtered (gdb_stderr, error_pre_print);
646   ui_file_put (stream, do_write, gdb_stderr);
647   fprintf_filtered (gdb_stderr, "\n");
648
649   throw_exception (RETURN_ERROR);
650 }
651
652 /* Get the last error message issued by gdb */
653
654 char *
655 error_last_message (void)
656 {
657   long len;
658   return ui_file_xstrdup (gdb_lasterr, &len);
659 }
660   
661 /* This is to be called by main() at the very beginning */
662
663 void
664 error_init (void)
665 {
666   gdb_lasterr = mem_fileopen ();
667 }
668
669 /* Print a message reporting an internal error/warning. Ask the user
670    if they want to continue, dump core, or just exit.  Return
671    something to indicate a quit.  */
672
673 struct internal_problem
674 {
675   const char *name;
676   /* FIXME: cagney/2002-08-15: There should be ``maint set/show''
677      commands available for controlling these variables.  */
678   enum auto_boolean should_quit;
679   enum auto_boolean should_dump_core;
680 };
681
682 /* Report a problem, internal to GDB, to the user.  Once the problem
683    has been reported, and assuming GDB didn't quit, the caller can
684    either allow execution to resume or throw an error.  */
685
686 static void
687 internal_vproblem (struct internal_problem *problem,
688 const char *file, int line,
689                   const char *fmt, va_list ap)
690 {
691   static char msg[] = "Recursive internal problem.\n";
692   static int dejavu;
693   int quit_p;
694   int dump_core_p;
695
696   /* Don't allow infinite error/warning recursion.  */
697   switch (dejavu)
698     {
699     case 0:
700       dejavu = 1;
701       break;
702     case 1:
703       dejavu = 2;
704       fputs_unfiltered (msg, gdb_stderr);
705       abort (); /* NOTE: GDB has only three calls to abort().  */
706     default:
707       dejavu = 3;
708       write (STDERR_FILENO, msg, sizeof (msg));
709       exit (1);
710     }
711
712   /* Try to get the message out and at the start of a new line.  */
713   target_terminal_ours ();
714   begin_line ();
715
716   /* The error/warning message.  Format using a style similar to a
717      compiler error message.  */
718   fprintf_unfiltered (gdb_stderr, "%s:%d: %s: ", file, line, problem->name);
719   vfprintf_unfiltered (gdb_stderr, fmt, ap);
720   fputs_unfiltered ("\n", gdb_stderr);
721
722   /* Provide more details so that the user knows that they are living
723      on the edge.  */
724   fprintf_unfiltered (gdb_stderr, "\
725 A problem internal to GDB has been detected.  Further\n\
726 debugging may prove unreliable.\n");
727
728   switch (problem->should_quit)
729     {
730     case AUTO_BOOLEAN_AUTO:
731       /* Default (yes/batch case) is to quit GDB.  When in batch mode
732          this lessens the likelhood of GDB going into an infinate
733          loop.  */
734       quit_p = query ("Quit this debugging session? ");
735       break;
736     case AUTO_BOOLEAN_TRUE:
737       quit_p = 1;
738       break;
739     case AUTO_BOOLEAN_FALSE:
740       quit_p = 0;
741       break;
742     default:
743       internal_error (__FILE__, __LINE__, "bad switch");
744     }
745
746   switch (problem->should_dump_core)
747     {
748     case AUTO_BOOLEAN_AUTO:
749       /* Default (yes/batch case) is to dump core.  This leaves a GDB
750          `dropping' so that it is easier to see that something went
751          wrong in GDB.  */
752       dump_core_p = query ("Create a core file of GDB? ");
753       break;
754       break;
755     case AUTO_BOOLEAN_TRUE:
756       dump_core_p = 1;
757       break;
758     case AUTO_BOOLEAN_FALSE:
759       dump_core_p = 0;
760       break;
761     default:
762       internal_error (__FILE__, __LINE__, "bad switch");
763     }
764
765   if (quit_p)
766     {
767       if (dump_core_p)
768         abort (); /* NOTE: GDB has only three calls to abort().  */
769       else
770         exit (1);
771     }
772   else
773     {
774       if (dump_core_p)
775         {
776           if (fork () == 0)
777             abort (); /* NOTE: GDB has only three calls to abort().  */
778         }
779     }
780
781   dejavu = 0;
782 }
783
784 static struct internal_problem internal_error_problem = {
785   "internal-error", AUTO_BOOLEAN_AUTO, AUTO_BOOLEAN_AUTO
786 };
787
788 NORETURN void
789 internal_verror (const char *file, int line,
790                  const char *fmt, va_list ap)
791 {
792   internal_vproblem (&internal_error_problem, file, line, fmt, ap);
793   throw_exception (RETURN_ERROR);
794 }
795
796 NORETURN void
797 internal_error (const char *file, int line, const char *string, ...)
798 {
799   va_list ap;
800   va_start (ap, string);
801   internal_verror (file, line, string, ap);
802   va_end (ap);
803 }
804
805 static struct internal_problem internal_warning_problem = {
806   "internal-error", AUTO_BOOLEAN_AUTO, AUTO_BOOLEAN_AUTO
807 };
808
809 void
810 internal_vwarning (const char *file, int line,
811                    const char *fmt, va_list ap)
812 {
813   internal_vproblem (&internal_warning_problem, file, line, fmt, ap);
814 }
815
816 void
817 internal_warning (const char *file, int line, const char *string, ...)
818 {
819   va_list ap;
820   va_start (ap, string);
821   internal_vwarning (file, line, string, ap);
822   va_end (ap);
823 }
824
825 /* The strerror() function can return NULL for errno values that are
826    out of range.  Provide a "safe" version that always returns a
827    printable string. */
828
829 char *
830 safe_strerror (int errnum)
831 {
832   char *msg;
833   static char buf[32];
834
835   if ((msg = strerror (errnum)) == NULL)
836     {
837       sprintf (buf, "(undocumented errno %d)", errnum);
838       msg = buf;
839     }
840   return (msg);
841 }
842
843 /* Print the system error message for errno, and also mention STRING
844    as the file name for which the error was encountered.
845    Then return to command level.  */
846
847 NORETURN void
848 perror_with_name (const char *string)
849 {
850   char *err;
851   char *combined;
852
853   err = safe_strerror (errno);
854   combined = (char *) alloca (strlen (err) + strlen (string) + 3);
855   strcpy (combined, string);
856   strcat (combined, ": ");
857   strcat (combined, err);
858
859   /* I understand setting these is a matter of taste.  Still, some people
860      may clear errno but not know about bfd_error.  Doing this here is not
861      unreasonable. */
862   bfd_set_error (bfd_error_no_error);
863   errno = 0;
864
865   error ("%s.", combined);
866 }
867
868 /* Print the system error message for ERRCODE, and also mention STRING
869    as the file name for which the error was encountered.  */
870
871 void
872 print_sys_errmsg (const char *string, int errcode)
873 {
874   char *err;
875   char *combined;
876
877   err = safe_strerror (errcode);
878   combined = (char *) alloca (strlen (err) + strlen (string) + 3);
879   strcpy (combined, string);
880   strcat (combined, ": ");
881   strcat (combined, err);
882
883   /* We want anything which was printed on stdout to come out first, before
884      this message.  */
885   gdb_flush (gdb_stdout);
886   fprintf_unfiltered (gdb_stderr, "%s.\n", combined);
887 }
888
889 /* Control C eventually causes this to be called, at a convenient time.  */
890
891 void
892 quit (void)
893 {
894   struct serial *gdb_stdout_serial = serial_fdopen (1);
895
896   target_terminal_ours ();
897
898   /* We want all output to appear now, before we print "Quit".  We
899      have 3 levels of buffering we have to flush (it's possible that
900      some of these should be changed to flush the lower-level ones
901      too):  */
902
903   /* 1.  The _filtered buffer.  */
904   wrap_here ((char *) 0);
905
906   /* 2.  The stdio buffer.  */
907   gdb_flush (gdb_stdout);
908   gdb_flush (gdb_stderr);
909
910   /* 3.  The system-level buffer.  */
911   serial_drain_output (gdb_stdout_serial);
912   serial_un_fdopen (gdb_stdout_serial);
913
914   annotate_error_begin ();
915
916   /* Don't use *_filtered; we don't want to prompt the user to continue.  */
917   if (quit_pre_print)
918     fprintf_unfiltered (gdb_stderr, quit_pre_print);
919
920 #ifdef __MSDOS__
921   /* No steenking SIGINT will ever be coming our way when the
922      program is resumed.  Don't lie.  */
923   fprintf_unfiltered (gdb_stderr, "Quit\n");
924 #else
925   if (job_control
926   /* If there is no terminal switching for this target, then we can't
927      possibly get screwed by the lack of job control.  */
928       || current_target.to_terminal_ours == NULL)
929     fprintf_unfiltered (gdb_stderr, "Quit\n");
930   else
931     fprintf_unfiltered (gdb_stderr,
932                "Quit (expect signal SIGINT when the program is resumed)\n");
933 #endif
934   throw_exception (RETURN_QUIT);
935 }
936
937 /* Control C comes here */
938 void
939 request_quit (int signo)
940 {
941   quit_flag = 1;
942   /* Restore the signal handler.  Harmless with BSD-style signals, needed
943      for System V-style signals.  So just always do it, rather than worrying
944      about USG defines and stuff like that.  */
945   signal (signo, request_quit);
946
947 #ifdef REQUEST_QUIT
948   REQUEST_QUIT;
949 #else
950   if (immediate_quit)
951     quit ();
952 #endif
953 }
954 \f
955 /* Memory management stuff (malloc friends).  */
956
957 #if !defined (USE_MMALLOC)
958
959 /* NOTE: These must use PTR so that their definition matches the
960    declaration found in "mmalloc.h". */
961
962 static void *
963 mmalloc (void *md, size_t size)
964 {
965   return malloc (size); /* NOTE: GDB's only call to malloc() */
966 }
967
968 static void *
969 mrealloc (void *md, void *ptr, size_t size)
970 {
971   if (ptr == 0)                 /* Guard against old realloc's */
972     return mmalloc (md, size);
973   else
974     return realloc (ptr, size); /* NOTE: GDB's only call to ralloc() */
975 }
976
977 static void *
978 mcalloc (void *md, size_t number, size_t size)
979 {
980   return calloc (number, size); /* NOTE: GDB's only call to calloc() */
981 }
982
983 static void
984 mfree (void *md, void *ptr)
985 {
986   free (ptr); /* NOTE: GDB's only call to free() */
987 }
988
989 #endif /* USE_MMALLOC */
990
991 #if !defined (USE_MMALLOC) || defined (NO_MMCHECK)
992
993 void
994 init_malloc (void *md)
995 {
996 }
997
998 #else /* Have mmalloc and want corruption checking */
999
1000 static void
1001 malloc_botch (void)
1002 {
1003   fprintf_unfiltered (gdb_stderr, "Memory corruption\n");
1004   internal_error (__FILE__, __LINE__, "failed internal consistency check");
1005 }
1006
1007 /* Attempt to install hooks in mmalloc/mrealloc/mfree for the heap specified
1008    by MD, to detect memory corruption.  Note that MD may be NULL to specify
1009    the default heap that grows via sbrk.
1010
1011    Note that for freshly created regions, we must call mmcheckf prior to any
1012    mallocs in the region.  Otherwise, any region which was allocated prior to
1013    installing the checking hooks, which is later reallocated or freed, will
1014    fail the checks!  The mmcheck function only allows initial hooks to be
1015    installed before the first mmalloc.  However, anytime after we have called
1016    mmcheck the first time to install the checking hooks, we can call it again
1017    to update the function pointer to the memory corruption handler.
1018
1019    Returns zero on failure, non-zero on success. */
1020
1021 #ifndef MMCHECK_FORCE
1022 #define MMCHECK_FORCE 0
1023 #endif
1024
1025 void
1026 init_malloc (void *md)
1027 {
1028   if (!mmcheckf (md, malloc_botch, MMCHECK_FORCE))
1029     {
1030       /* Don't use warning(), which relies on current_target being set
1031          to something other than dummy_target, until after
1032          initialize_all_files(). */
1033
1034       fprintf_unfiltered
1035         (gdb_stderr, "warning: failed to install memory consistency checks; ");
1036       fprintf_unfiltered
1037         (gdb_stderr, "configuration should define NO_MMCHECK or MMCHECK_FORCE\n");
1038     }
1039
1040   mmtrace ();
1041 }
1042
1043 #endif /* Have mmalloc and want corruption checking  */
1044
1045 /* Called when a memory allocation fails, with the number of bytes of
1046    memory requested in SIZE. */
1047
1048 NORETURN void
1049 nomem (long size)
1050 {
1051   if (size > 0)
1052     {
1053       internal_error (__FILE__, __LINE__,
1054                       "virtual memory exhausted: can't allocate %ld bytes.", size);
1055     }
1056   else
1057     {
1058       internal_error (__FILE__, __LINE__,
1059                       "virtual memory exhausted.");
1060     }
1061 }
1062
1063 /* The xmmalloc() family of memory management routines.
1064
1065    These are are like the mmalloc() family except that they implement
1066    consistent semantics and guard against typical memory management
1067    problems: if a malloc fails, an internal error is thrown; if
1068    free(NULL) is called, it is ignored; if *alloc(0) is called, NULL
1069    is returned.
1070
1071    All these routines are implemented using the mmalloc() family. */
1072
1073 void *
1074 xmmalloc (void *md, size_t size)
1075 {
1076   void *val;
1077
1078   if (size == 0)
1079     {
1080       val = NULL;
1081     }
1082   else
1083     {
1084       val = mmalloc (md, size);
1085       if (val == NULL)
1086         nomem (size);
1087     }
1088   return (val);
1089 }
1090
1091 void *
1092 xmrealloc (void *md, void *ptr, size_t size)
1093 {
1094   void *val;
1095
1096   if (size == 0)
1097     {
1098       if (ptr != NULL)
1099         mfree (md, ptr);
1100       val = NULL;
1101     }
1102   else
1103     {
1104       if (ptr != NULL)
1105         {
1106           val = mrealloc (md, ptr, size);
1107         }
1108       else
1109         {
1110           val = mmalloc (md, size);
1111         }
1112       if (val == NULL)
1113         {
1114           nomem (size);
1115         }
1116     }
1117   return (val);
1118 }
1119
1120 void *
1121 xmcalloc (void *md, size_t number, size_t size)
1122 {
1123   void *mem;
1124   if (number == 0 || size == 0)
1125     mem = NULL;
1126   else
1127     {
1128       mem = mcalloc (md, number, size);
1129       if (mem == NULL)
1130         nomem (number * size);
1131     }
1132   return mem;
1133 }
1134
1135 void
1136 xmfree (void *md, void *ptr)
1137 {
1138   if (ptr != NULL)
1139     mfree (md, ptr);
1140 }
1141
1142 /* The xmalloc() (libiberty.h) family of memory management routines.
1143
1144    These are like the ISO-C malloc() family except that they implement
1145    consistent semantics and guard against typical memory management
1146    problems.  See xmmalloc() above for further information.
1147
1148    All these routines are wrappers to the xmmalloc() family. */
1149
1150 /* NOTE: These are declared using PTR to ensure consistency with
1151    "libiberty.h".  xfree() is GDB local.  */
1152
1153 PTR
1154 xmalloc (size_t size)
1155 {
1156   return xmmalloc (NULL, size);
1157 }
1158
1159 PTR
1160 xrealloc (PTR ptr, size_t size)
1161 {
1162   return xmrealloc (NULL, ptr, size);
1163 }
1164
1165 PTR
1166 xcalloc (size_t number, size_t size)
1167 {
1168   return xmcalloc (NULL, number, size);
1169 }
1170
1171 void
1172 xfree (void *ptr)
1173 {
1174   xmfree (NULL, ptr);
1175 }
1176 \f
1177
1178 /* Like asprintf/vasprintf but get an internal_error if the call
1179    fails. */
1180
1181 void
1182 xasprintf (char **ret, const char *format, ...)
1183 {
1184   va_list args;
1185   va_start (args, format);
1186   xvasprintf (ret, format, args);
1187   va_end (args);
1188 }
1189
1190 void
1191 xvasprintf (char **ret, const char *format, va_list ap)
1192 {
1193   int status = vasprintf (ret, format, ap);
1194   /* NULL could be returned due to a memory allocation problem; a
1195      badly format string; or something else. */
1196   if ((*ret) == NULL)
1197     internal_error (__FILE__, __LINE__,
1198                     "vasprintf returned NULL buffer (errno %d)",
1199                     errno);
1200   /* A negative status with a non-NULL buffer shouldn't never
1201      happen. But to be sure. */
1202   if (status < 0)
1203     internal_error (__FILE__, __LINE__,
1204                     "vasprintf call failed (errno %d)",
1205                     errno);
1206 }
1207
1208
1209 /* My replacement for the read system call.
1210    Used like `read' but keeps going if `read' returns too soon.  */
1211
1212 int
1213 myread (int desc, char *addr, int len)
1214 {
1215   register int val;
1216   int orglen = len;
1217
1218   while (len > 0)
1219     {
1220       val = read (desc, addr, len);
1221       if (val < 0)
1222         return val;
1223       if (val == 0)
1224         return orglen - len;
1225       len -= val;
1226       addr += val;
1227     }
1228   return orglen;
1229 }
1230 \f
1231 /* Make a copy of the string at PTR with SIZE characters
1232    (and add a null character at the end in the copy).
1233    Uses malloc to get the space.  Returns the address of the copy.  */
1234
1235 char *
1236 savestring (const char *ptr, size_t size)
1237 {
1238   register char *p = (char *) xmalloc (size + 1);
1239   memcpy (p, ptr, size);
1240   p[size] = 0;
1241   return p;
1242 }
1243
1244 char *
1245 msavestring (void *md, const char *ptr, size_t size)
1246 {
1247   register char *p = (char *) xmmalloc (md, size + 1);
1248   memcpy (p, ptr, size);
1249   p[size] = 0;
1250   return p;
1251 }
1252
1253 char *
1254 mstrsave (void *md, const char *ptr)
1255 {
1256   return (msavestring (md, ptr, strlen (ptr)));
1257 }
1258
1259 void
1260 print_spaces (register int n, register struct ui_file *file)
1261 {
1262   fputs_unfiltered (n_spaces (n), file);
1263 }
1264
1265 /* Print a host address.  */
1266
1267 void
1268 gdb_print_host_address (void *addr, struct ui_file *stream)
1269 {
1270
1271   /* We could use the %p conversion specifier to fprintf if we had any
1272      way of knowing whether this host supports it.  But the following
1273      should work on the Alpha and on 32 bit machines.  */
1274
1275   fprintf_filtered (stream, "0x%lx", (unsigned long) addr);
1276 }
1277
1278 /* Ask user a y-or-n question and return 1 iff answer is yes.
1279    Takes three args which are given to printf to print the question.
1280    The first, a control string, should end in "? ".
1281    It should not say how to answer, because we do that.  */
1282
1283 /* VARARGS */
1284 int
1285 query (const char *ctlstr,...)
1286 {
1287   va_list args;
1288   register int answer;
1289   register int ans2;
1290   int retval;
1291
1292   va_start (args, ctlstr);
1293
1294   if (query_hook)
1295     {
1296       return query_hook (ctlstr, args);
1297     }
1298
1299   /* Automatically answer "yes" if input is not from a terminal.  */
1300   if (!input_from_terminal_p ())
1301     return 1;
1302
1303   while (1)
1304     {
1305       wrap_here ("");           /* Flush any buffered output */
1306       gdb_flush (gdb_stdout);
1307
1308       if (annotation_level > 1)
1309         printf_filtered ("\n\032\032pre-query\n");
1310
1311       vfprintf_filtered (gdb_stdout, ctlstr, args);
1312       printf_filtered ("(y or n) ");
1313
1314       if (annotation_level > 1)
1315         printf_filtered ("\n\032\032query\n");
1316
1317       wrap_here ("");
1318       gdb_flush (gdb_stdout);
1319
1320       answer = fgetc (stdin);
1321       clearerr (stdin);         /* in case of C-d */
1322       if (answer == EOF)        /* C-d */
1323         {
1324           retval = 1;
1325           break;
1326         }
1327       /* Eat rest of input line, to EOF or newline */
1328       if (answer != '\n')
1329         do
1330           {
1331             ans2 = fgetc (stdin);
1332             clearerr (stdin);
1333           }
1334         while (ans2 != EOF && ans2 != '\n' && ans2 != '\r');
1335
1336       if (answer >= 'a')
1337         answer -= 040;
1338       if (answer == 'Y')
1339         {
1340           retval = 1;
1341           break;
1342         }
1343       if (answer == 'N')
1344         {
1345           retval = 0;
1346           break;
1347         }
1348       printf_filtered ("Please answer y or n.\n");
1349     }
1350
1351   if (annotation_level > 1)
1352     printf_filtered ("\n\032\032post-query\n");
1353   return retval;
1354 }
1355 \f
1356
1357 /* Print an error message saying that we couldn't make sense of a
1358    \^mumble sequence in a string or character constant.  START and END
1359    indicate a substring of some larger string that contains the
1360    erroneous backslash sequence, missing the initial backslash.  */
1361 static NORETURN int
1362 no_control_char_error (const char *start, const char *end)
1363 {
1364   int len = end - start;
1365   char *copy = alloca (end - start + 1);
1366
1367   memcpy (copy, start, len);
1368   copy[len] = '\0';
1369
1370   error ("There is no control character `\\%s' in the `%s' character set.",
1371          copy, target_charset ());
1372 }
1373
1374 /* Parse a C escape sequence.  STRING_PTR points to a variable
1375    containing a pointer to the string to parse.  That pointer
1376    should point to the character after the \.  That pointer
1377    is updated past the characters we use.  The value of the
1378    escape sequence is returned.
1379
1380    A negative value means the sequence \ newline was seen,
1381    which is supposed to be equivalent to nothing at all.
1382
1383    If \ is followed by a null character, we return a negative
1384    value and leave the string pointer pointing at the null character.
1385
1386    If \ is followed by 000, we return 0 and leave the string pointer
1387    after the zeros.  A value of 0 does not mean end of string.  */
1388
1389 int
1390 parse_escape (char **string_ptr)
1391 {
1392   int target_char;
1393   register int c = *(*string_ptr)++;
1394   if (c_parse_backslash (c, &target_char))
1395     return target_char;
1396   else switch (c)
1397     {
1398     case '\n':
1399       return -2;
1400     case 0:
1401       (*string_ptr)--;
1402       return 0;
1403     case '^':
1404       {
1405         /* Remember where this escape sequence started, for reporting
1406            errors.  */
1407         char *sequence_start_pos = *string_ptr - 1;
1408
1409         c = *(*string_ptr)++;
1410
1411         if (c == '?')
1412           {
1413             /* XXXCHARSET: What is `delete' in the host character set?  */
1414             c = 0177;
1415
1416             if (! host_char_to_target (c, &target_char))
1417               error ("There is no character corresponding to `Delete' "
1418                      "in the target character set `%s'.",
1419                      host_charset ());
1420
1421             return target_char;
1422           }
1423         else if (c == '\\')
1424           target_char = parse_escape (string_ptr);
1425         else
1426           {
1427             if (! host_char_to_target (c, &target_char))
1428               no_control_char_error (sequence_start_pos, *string_ptr);
1429           }          
1430
1431         /* Now target_char is something like `c', and we want to find
1432            its control-character equivalent.  */
1433         if (! target_char_to_control_char (target_char, &target_char))
1434           no_control_char_error (sequence_start_pos, *string_ptr);
1435
1436         return target_char;
1437       }
1438
1439       /* XXXCHARSET: we need to use isdigit and value-of-digit
1440          methods of the host character set here.  */
1441
1442     case '0':
1443     case '1':
1444     case '2':
1445     case '3':
1446     case '4':
1447     case '5':
1448     case '6':
1449     case '7':
1450       {
1451         register int i = c - '0';
1452         register int count = 0;
1453         while (++count < 3)
1454           {
1455             if ((c = *(*string_ptr)++) >= '0' && c <= '7')
1456               {
1457                 i *= 8;
1458                 i += c - '0';
1459               }
1460             else
1461               {
1462                 (*string_ptr)--;
1463                 break;
1464               }
1465           }
1466         return i;
1467       }
1468     default:
1469       if (! host_char_to_target (c, &target_char))
1470         error ("The escape sequence `\%c' is equivalent to plain `%c', which"
1471                " has no equivalent\n"
1472                "in the `%s' character set.",
1473                c, c, target_charset ());
1474       return target_char;
1475     }
1476 }
1477 \f
1478 /* Print the character C on STREAM as part of the contents of a literal
1479    string whose delimiter is QUOTER.  Note that this routine should only
1480    be call for printing things which are independent of the language
1481    of the program being debugged. */
1482
1483 static void
1484 printchar (int c, void (*do_fputs) (const char *, struct ui_file *),
1485            void (*do_fprintf) (struct ui_file *, const char *, ...),
1486            struct ui_file *stream, int quoter)
1487 {
1488
1489   c &= 0xFF;                    /* Avoid sign bit follies */
1490
1491   if (c < 0x20 ||               /* Low control chars */
1492       (c >= 0x7F && c < 0xA0) ||        /* DEL, High controls */
1493       (sevenbit_strings && c >= 0x80))
1494     {                           /* high order bit set */
1495       switch (c)
1496         {
1497         case '\n':
1498           do_fputs ("\\n", stream);
1499           break;
1500         case '\b':
1501           do_fputs ("\\b", stream);
1502           break;
1503         case '\t':
1504           do_fputs ("\\t", stream);
1505           break;
1506         case '\f':
1507           do_fputs ("\\f", stream);
1508           break;
1509         case '\r':
1510           do_fputs ("\\r", stream);
1511           break;
1512         case '\033':
1513           do_fputs ("\\e", stream);
1514           break;
1515         case '\007':
1516           do_fputs ("\\a", stream);
1517           break;
1518         default:
1519           do_fprintf (stream, "\\%.3o", (unsigned int) c);
1520           break;
1521         }
1522     }
1523   else
1524     {
1525       if (c == '\\' || c == quoter)
1526         do_fputs ("\\", stream);
1527       do_fprintf (stream, "%c", c);
1528     }
1529 }
1530
1531 /* Print the character C on STREAM as part of the contents of a
1532    literal string whose delimiter is QUOTER.  Note that these routines
1533    should only be call for printing things which are independent of
1534    the language of the program being debugged. */
1535
1536 void
1537 fputstr_filtered (const char *str, int quoter, struct ui_file *stream)
1538 {
1539   while (*str)
1540     printchar (*str++, fputs_filtered, fprintf_filtered, stream, quoter);
1541 }
1542
1543 void
1544 fputstr_unfiltered (const char *str, int quoter, struct ui_file *stream)
1545 {
1546   while (*str)
1547     printchar (*str++, fputs_unfiltered, fprintf_unfiltered, stream, quoter);
1548 }
1549
1550 void
1551 fputstrn_unfiltered (const char *str, int n, int quoter, struct ui_file *stream)
1552 {
1553   int i;
1554   for (i = 0; i < n; i++)
1555     printchar (str[i], fputs_unfiltered, fprintf_unfiltered, stream, quoter);
1556 }
1557
1558 \f
1559
1560 /* Number of lines per page or UINT_MAX if paging is disabled.  */
1561 static unsigned int lines_per_page;
1562 /* Number of chars per line or UINT_MAX if line folding is disabled.  */
1563 static unsigned int chars_per_line;
1564 /* Current count of lines printed on this page, chars on this line.  */
1565 static unsigned int lines_printed, chars_printed;
1566
1567 /* Buffer and start column of buffered text, for doing smarter word-
1568    wrapping.  When someone calls wrap_here(), we start buffering output
1569    that comes through fputs_filtered().  If we see a newline, we just
1570    spit it out and forget about the wrap_here().  If we see another
1571    wrap_here(), we spit it out and remember the newer one.  If we see
1572    the end of the line, we spit out a newline, the indent, and then
1573    the buffered output.  */
1574
1575 /* Malloc'd buffer with chars_per_line+2 bytes.  Contains characters which
1576    are waiting to be output (they have already been counted in chars_printed).
1577    When wrap_buffer[0] is null, the buffer is empty.  */
1578 static char *wrap_buffer;
1579
1580 /* Pointer in wrap_buffer to the next character to fill.  */
1581 static char *wrap_pointer;
1582
1583 /* String to indent by if the wrap occurs.  Must not be NULL if wrap_column
1584    is non-zero.  */
1585 static char *wrap_indent;
1586
1587 /* Column number on the screen where wrap_buffer begins, or 0 if wrapping
1588    is not in effect.  */
1589 static int wrap_column;
1590 \f
1591
1592 /* Inialize the lines and chars per page */
1593 void
1594 init_page_info (void)
1595 {
1596 #if defined(TUI)
1597   if (!tui_get_command_dimension (&chars_per_line, &lines_per_page))
1598 #endif
1599     {
1600       /* These defaults will be used if we are unable to get the correct
1601          values from termcap.  */
1602 #if defined(__GO32__)
1603       lines_per_page = ScreenRows ();
1604       chars_per_line = ScreenCols ();
1605 #else
1606       lines_per_page = 24;
1607       chars_per_line = 80;
1608
1609 #if !defined (_WIN32)
1610       /* No termcap under MPW, although might be cool to do something
1611          by looking at worksheet or console window sizes. */
1612       /* Initialize the screen height and width from termcap.  */
1613       {
1614         char *termtype = getenv ("TERM");
1615
1616         /* Positive means success, nonpositive means failure.  */
1617         int status;
1618
1619         /* 2048 is large enough for all known terminals, according to the
1620            GNU termcap manual.  */
1621         char term_buffer[2048];
1622
1623         if (termtype)
1624           {
1625             status = tgetent (term_buffer, termtype);
1626             if (status > 0)
1627               {
1628                 int val;
1629                 int running_in_emacs = getenv ("EMACS") != NULL;
1630
1631                 val = tgetnum ("li");
1632                 if (val >= 0 && !running_in_emacs)
1633                   lines_per_page = val;
1634                 else
1635                   /* The number of lines per page is not mentioned
1636                      in the terminal description.  This probably means
1637                      that paging is not useful (e.g. emacs shell window),
1638                      so disable paging.  */
1639                   lines_per_page = UINT_MAX;
1640
1641                 val = tgetnum ("co");
1642                 if (val >= 0)
1643                   chars_per_line = val;
1644               }
1645           }
1646       }
1647 #endif /* MPW */
1648
1649 #if defined(SIGWINCH) && defined(SIGWINCH_HANDLER)
1650
1651       /* If there is a better way to determine the window size, use it. */
1652       SIGWINCH_HANDLER (SIGWINCH);
1653 #endif
1654 #endif
1655       /* If the output is not a terminal, don't paginate it.  */
1656       if (!ui_file_isatty (gdb_stdout))
1657         lines_per_page = UINT_MAX;
1658     }                           /* the command_line_version */
1659   set_width ();
1660 }
1661
1662 static void
1663 set_width (void)
1664 {
1665   if (chars_per_line == 0)
1666     init_page_info ();
1667
1668   if (!wrap_buffer)
1669     {
1670       wrap_buffer = (char *) xmalloc (chars_per_line + 2);
1671       wrap_buffer[0] = '\0';
1672     }
1673   else
1674     wrap_buffer = (char *) xrealloc (wrap_buffer, chars_per_line + 2);
1675   wrap_pointer = wrap_buffer;   /* Start it at the beginning */
1676 }
1677
1678 /* ARGSUSED */
1679 static void
1680 set_width_command (char *args, int from_tty, struct cmd_list_element *c)
1681 {
1682   set_width ();
1683 }
1684
1685 /* Wait, so the user can read what's on the screen.  Prompt the user
1686    to continue by pressing RETURN.  */
1687
1688 static void
1689 prompt_for_continue (void)
1690 {
1691   char *ignore;
1692   char cont_prompt[120];
1693
1694   if (annotation_level > 1)
1695     printf_unfiltered ("\n\032\032pre-prompt-for-continue\n");
1696
1697   strcpy (cont_prompt,
1698           "---Type <return> to continue, or q <return> to quit---");
1699   if (annotation_level > 1)
1700     strcat (cont_prompt, "\n\032\032prompt-for-continue\n");
1701
1702   /* We must do this *before* we call gdb_readline, else it will eventually
1703      call us -- thinking that we're trying to print beyond the end of the 
1704      screen.  */
1705   reinitialize_more_filter ();
1706
1707   immediate_quit++;
1708   /* On a real operating system, the user can quit with SIGINT.
1709      But not on GO32.
1710
1711      'q' is provided on all systems so users don't have to change habits
1712      from system to system, and because telling them what to do in
1713      the prompt is more user-friendly than expecting them to think of
1714      SIGINT.  */
1715   /* Call readline, not gdb_readline, because GO32 readline handles control-C
1716      whereas control-C to gdb_readline will cause the user to get dumped
1717      out to DOS.  */
1718   ignore = gdb_readline_wrapper (cont_prompt);
1719
1720   if (annotation_level > 1)
1721     printf_unfiltered ("\n\032\032post-prompt-for-continue\n");
1722
1723   if (ignore)
1724     {
1725       char *p = ignore;
1726       while (*p == ' ' || *p == '\t')
1727         ++p;
1728       if (p[0] == 'q')
1729         {
1730           if (!event_loop_p)
1731             request_quit (SIGINT);
1732           else
1733             async_request_quit (0);
1734         }
1735       xfree (ignore);
1736     }
1737   immediate_quit--;
1738
1739   /* Now we have to do this again, so that GDB will know that it doesn't
1740      need to save the ---Type <return>--- line at the top of the screen.  */
1741   reinitialize_more_filter ();
1742
1743   dont_repeat ();               /* Forget prev cmd -- CR won't repeat it. */
1744 }
1745
1746 /* Reinitialize filter; ie. tell it to reset to original values.  */
1747
1748 void
1749 reinitialize_more_filter (void)
1750 {
1751   lines_printed = 0;
1752   chars_printed = 0;
1753 }
1754
1755 /* Indicate that if the next sequence of characters overflows the line,
1756    a newline should be inserted here rather than when it hits the end. 
1757    If INDENT is non-null, it is a string to be printed to indent the
1758    wrapped part on the next line.  INDENT must remain accessible until
1759    the next call to wrap_here() or until a newline is printed through
1760    fputs_filtered().
1761
1762    If the line is already overfull, we immediately print a newline and
1763    the indentation, and disable further wrapping.
1764
1765    If we don't know the width of lines, but we know the page height,
1766    we must not wrap words, but should still keep track of newlines
1767    that were explicitly printed.
1768
1769    INDENT should not contain tabs, as that will mess up the char count
1770    on the next line.  FIXME.
1771
1772    This routine is guaranteed to force out any output which has been
1773    squirreled away in the wrap_buffer, so wrap_here ((char *)0) can be
1774    used to force out output from the wrap_buffer.  */
1775
1776 void
1777 wrap_here (char *indent)
1778 {
1779   /* This should have been allocated, but be paranoid anyway. */
1780   if (!wrap_buffer)
1781     internal_error (__FILE__, __LINE__, "failed internal consistency check");
1782
1783   if (wrap_buffer[0])
1784     {
1785       *wrap_pointer = '\0';
1786       fputs_unfiltered (wrap_buffer, gdb_stdout);
1787     }
1788   wrap_pointer = wrap_buffer;
1789   wrap_buffer[0] = '\0';
1790   if (chars_per_line == UINT_MAX)       /* No line overflow checking */
1791     {
1792       wrap_column = 0;
1793     }
1794   else if (chars_printed >= chars_per_line)
1795     {
1796       puts_filtered ("\n");
1797       if (indent != NULL)
1798         puts_filtered (indent);
1799       wrap_column = 0;
1800     }
1801   else
1802     {
1803       wrap_column = chars_printed;
1804       if (indent == NULL)
1805         wrap_indent = "";
1806       else
1807         wrap_indent = indent;
1808     }
1809 }
1810
1811 /* Print input string to gdb_stdout, filtered, with wrap, 
1812    arranging strings in columns of n chars. String can be
1813    right or left justified in the column.  Never prints 
1814    trailing spaces.  String should never be longer than
1815    width.  FIXME: this could be useful for the EXAMINE 
1816    command, which currently doesn't tabulate very well */
1817
1818 void
1819 puts_filtered_tabular (char *string, int width, int right)
1820 {
1821   int spaces = 0;
1822   int stringlen;
1823   char *spacebuf;
1824
1825   gdb_assert (chars_per_line > 0);
1826   if (chars_per_line == UINT_MAX)
1827     {
1828       fputs_filtered (string, gdb_stdout);
1829       fputs_filtered ("\n", gdb_stdout);
1830       return;
1831     }
1832
1833   if (((chars_printed - 1) / width + 2) * width >= chars_per_line)
1834     fputs_filtered ("\n", gdb_stdout);
1835
1836   if (width >= chars_per_line)
1837     width = chars_per_line - 1;
1838
1839   stringlen = strlen (string);
1840
1841   if (chars_printed > 0)
1842     spaces = width - (chars_printed - 1) % width - 1;
1843   if (right)
1844     spaces += width - stringlen;
1845
1846   spacebuf = alloca (spaces + 1);
1847   spacebuf[spaces] = '\0';
1848   while (spaces--)
1849     spacebuf[spaces] = ' ';
1850
1851   fputs_filtered (spacebuf, gdb_stdout);
1852   fputs_filtered (string, gdb_stdout);
1853 }
1854
1855
1856 /* Ensure that whatever gets printed next, using the filtered output
1857    commands, starts at the beginning of the line.  I.E. if there is
1858    any pending output for the current line, flush it and start a new
1859    line.  Otherwise do nothing. */
1860
1861 void
1862 begin_line (void)
1863 {
1864   if (chars_printed > 0)
1865     {
1866       puts_filtered ("\n");
1867     }
1868 }
1869
1870
1871 /* Like fputs but if FILTER is true, pause after every screenful.
1872
1873    Regardless of FILTER can wrap at points other than the final
1874    character of a line.
1875
1876    Unlike fputs, fputs_maybe_filtered does not return a value.
1877    It is OK for LINEBUFFER to be NULL, in which case just don't print
1878    anything.
1879
1880    Note that a longjmp to top level may occur in this routine (only if
1881    FILTER is true) (since prompt_for_continue may do so) so this
1882    routine should not be called when cleanups are not in place.  */
1883
1884 static void
1885 fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
1886                       int filter)
1887 {
1888   const char *lineptr;
1889
1890   if (linebuffer == 0)
1891     return;
1892
1893   /* Don't do any filtering if it is disabled.  */
1894   if ((stream != gdb_stdout) || !pagination_enabled
1895       || (lines_per_page == UINT_MAX && chars_per_line == UINT_MAX))
1896     {
1897       fputs_unfiltered (linebuffer, stream);
1898       return;
1899     }
1900
1901   /* Go through and output each character.  Show line extension
1902      when this is necessary; prompt user for new page when this is
1903      necessary.  */
1904
1905   lineptr = linebuffer;
1906   while (*lineptr)
1907     {
1908       /* Possible new page.  */
1909       if (filter &&
1910           (lines_printed >= lines_per_page - 1))
1911         prompt_for_continue ();
1912
1913       while (*lineptr && *lineptr != '\n')
1914         {
1915           /* Print a single line.  */
1916           if (*lineptr == '\t')
1917             {
1918               if (wrap_column)
1919                 *wrap_pointer++ = '\t';
1920               else
1921                 fputc_unfiltered ('\t', stream);
1922               /* Shifting right by 3 produces the number of tab stops
1923                  we have already passed, and then adding one and
1924                  shifting left 3 advances to the next tab stop.  */
1925               chars_printed = ((chars_printed >> 3) + 1) << 3;
1926               lineptr++;
1927             }
1928           else
1929             {
1930               if (wrap_column)
1931                 *wrap_pointer++ = *lineptr;
1932               else
1933                 fputc_unfiltered (*lineptr, stream);
1934               chars_printed++;
1935               lineptr++;
1936             }
1937
1938           if (chars_printed >= chars_per_line)
1939             {
1940               unsigned int save_chars = chars_printed;
1941
1942               chars_printed = 0;
1943               lines_printed++;
1944               /* If we aren't actually wrapping, don't output newline --
1945                  if chars_per_line is right, we probably just overflowed
1946                  anyway; if it's wrong, let us keep going.  */
1947               if (wrap_column)
1948                 fputc_unfiltered ('\n', stream);
1949
1950               /* Possible new page.  */
1951               if (lines_printed >= lines_per_page - 1)
1952                 prompt_for_continue ();
1953
1954               /* Now output indentation and wrapped string */
1955               if (wrap_column)
1956                 {
1957                   fputs_unfiltered (wrap_indent, stream);
1958                   *wrap_pointer = '\0';         /* Null-terminate saved stuff */
1959                   fputs_unfiltered (wrap_buffer, stream);       /* and eject it */
1960                   /* FIXME, this strlen is what prevents wrap_indent from
1961                      containing tabs.  However, if we recurse to print it
1962                      and count its chars, we risk trouble if wrap_indent is
1963                      longer than (the user settable) chars_per_line. 
1964                      Note also that this can set chars_printed > chars_per_line
1965                      if we are printing a long string.  */
1966                   chars_printed = strlen (wrap_indent)
1967                     + (save_chars - wrap_column);
1968                   wrap_pointer = wrap_buffer;   /* Reset buffer */
1969                   wrap_buffer[0] = '\0';
1970                   wrap_column = 0;      /* And disable fancy wrap */
1971                 }
1972             }
1973         }
1974
1975       if (*lineptr == '\n')
1976         {
1977           chars_printed = 0;
1978           wrap_here ((char *) 0);       /* Spit out chars, cancel further wraps */
1979           lines_printed++;
1980           fputc_unfiltered ('\n', stream);
1981           lineptr++;
1982         }
1983     }
1984 }
1985
1986 void
1987 fputs_filtered (const char *linebuffer, struct ui_file *stream)
1988 {
1989   fputs_maybe_filtered (linebuffer, stream, 1);
1990 }
1991
1992 int
1993 putchar_unfiltered (int c)
1994 {
1995   char buf = c;
1996   ui_file_write (gdb_stdout, &buf, 1);
1997   return c;
1998 }
1999
2000 /* Write character C to gdb_stdout using GDB's paging mechanism and return C.
2001    May return nonlocally.  */
2002
2003 int
2004 putchar_filtered (int c)
2005 {
2006   return fputc_filtered (c, gdb_stdout);
2007 }
2008
2009 int
2010 fputc_unfiltered (int c, struct ui_file *stream)
2011 {
2012   char buf = c;
2013   ui_file_write (stream, &buf, 1);
2014   return c;
2015 }
2016
2017 int
2018 fputc_filtered (int c, struct ui_file *stream)
2019 {
2020   char buf[2];
2021
2022   buf[0] = c;
2023   buf[1] = 0;
2024   fputs_filtered (buf, stream);
2025   return c;
2026 }
2027
2028 /* puts_debug is like fputs_unfiltered, except it prints special
2029    characters in printable fashion.  */
2030
2031 void
2032 puts_debug (char *prefix, char *string, char *suffix)
2033 {
2034   int ch;
2035
2036   /* Print prefix and suffix after each line.  */
2037   static int new_line = 1;
2038   static int return_p = 0;
2039   static char *prev_prefix = "";
2040   static char *prev_suffix = "";
2041
2042   if (*string == '\n')
2043     return_p = 0;
2044
2045   /* If the prefix is changing, print the previous suffix, a new line,
2046      and the new prefix.  */
2047   if ((return_p || (strcmp (prev_prefix, prefix) != 0)) && !new_line)
2048     {
2049       fputs_unfiltered (prev_suffix, gdb_stdlog);
2050       fputs_unfiltered ("\n", gdb_stdlog);
2051       fputs_unfiltered (prefix, gdb_stdlog);
2052     }
2053
2054   /* Print prefix if we printed a newline during the previous call.  */
2055   if (new_line)
2056     {
2057       new_line = 0;
2058       fputs_unfiltered (prefix, gdb_stdlog);
2059     }
2060
2061   prev_prefix = prefix;
2062   prev_suffix = suffix;
2063
2064   /* Output characters in a printable format.  */
2065   while ((ch = *string++) != '\0')
2066     {
2067       switch (ch)
2068         {
2069         default:
2070           if (isprint (ch))
2071             fputc_unfiltered (ch, gdb_stdlog);
2072
2073           else
2074             fprintf_unfiltered (gdb_stdlog, "\\x%02x", ch & 0xff);
2075           break;
2076
2077         case '\\':
2078           fputs_unfiltered ("\\\\", gdb_stdlog);
2079           break;
2080         case '\b':
2081           fputs_unfiltered ("\\b", gdb_stdlog);
2082           break;
2083         case '\f':
2084           fputs_unfiltered ("\\f", gdb_stdlog);
2085           break;
2086         case '\n':
2087           new_line = 1;
2088           fputs_unfiltered ("\\n", gdb_stdlog);
2089           break;
2090         case '\r':
2091           fputs_unfiltered ("\\r", gdb_stdlog);
2092           break;
2093         case '\t':
2094           fputs_unfiltered ("\\t", gdb_stdlog);
2095           break;
2096         case '\v':
2097           fputs_unfiltered ("\\v", gdb_stdlog);
2098           break;
2099         }
2100
2101       return_p = ch == '\r';
2102     }
2103
2104   /* Print suffix if we printed a newline.  */
2105   if (new_line)
2106     {
2107       fputs_unfiltered (suffix, gdb_stdlog);
2108       fputs_unfiltered ("\n", gdb_stdlog);
2109     }
2110 }
2111
2112
2113 /* Print a variable number of ARGS using format FORMAT.  If this
2114    information is going to put the amount written (since the last call
2115    to REINITIALIZE_MORE_FILTER or the last page break) over the page size,
2116    call prompt_for_continue to get the users permision to continue.
2117
2118    Unlike fprintf, this function does not return a value.
2119
2120    We implement three variants, vfprintf (takes a vararg list and stream),
2121    fprintf (takes a stream to write on), and printf (the usual).
2122
2123    Note also that a longjmp to top level may occur in this routine
2124    (since prompt_for_continue may do so) so this routine should not be
2125    called when cleanups are not in place.  */
2126
2127 static void
2128 vfprintf_maybe_filtered (struct ui_file *stream, const char *format,
2129                          va_list args, int filter)
2130 {
2131   char *linebuffer;
2132   struct cleanup *old_cleanups;
2133
2134   xvasprintf (&linebuffer, format, args);
2135   old_cleanups = make_cleanup (xfree, linebuffer);
2136   fputs_maybe_filtered (linebuffer, stream, filter);
2137   do_cleanups (old_cleanups);
2138 }
2139
2140
2141 void
2142 vfprintf_filtered (struct ui_file *stream, const char *format, va_list args)
2143 {
2144   vfprintf_maybe_filtered (stream, format, args, 1);
2145 }
2146
2147 void
2148 vfprintf_unfiltered (struct ui_file *stream, const char *format, va_list args)
2149 {
2150   char *linebuffer;
2151   struct cleanup *old_cleanups;
2152
2153   xvasprintf (&linebuffer, format, args);
2154   old_cleanups = make_cleanup (xfree, linebuffer);
2155   fputs_unfiltered (linebuffer, stream);
2156   do_cleanups (old_cleanups);
2157 }
2158
2159 void
2160 vprintf_filtered (const char *format, va_list args)
2161 {
2162   vfprintf_maybe_filtered (gdb_stdout, format, args, 1);
2163 }
2164
2165 void
2166 vprintf_unfiltered (const char *format, va_list args)
2167 {
2168   vfprintf_unfiltered (gdb_stdout, format, args);
2169 }
2170
2171 void
2172 fprintf_filtered (struct ui_file * stream, const char *format,...)
2173 {
2174   va_list args;
2175   va_start (args, format);
2176   vfprintf_filtered (stream, format, args);
2177   va_end (args);
2178 }
2179
2180 void
2181 fprintf_unfiltered (struct ui_file * stream, const char *format,...)
2182 {
2183   va_list args;
2184   va_start (args, format);
2185   vfprintf_unfiltered (stream, format, args);
2186   va_end (args);
2187 }
2188
2189 /* Like fprintf_filtered, but prints its result indented.
2190    Called as fprintfi_filtered (spaces, stream, format, ...);  */
2191
2192 void
2193 fprintfi_filtered (int spaces, struct ui_file * stream, const char *format,...)
2194 {
2195   va_list args;
2196   va_start (args, format);
2197   print_spaces_filtered (spaces, stream);
2198
2199   vfprintf_filtered (stream, format, args);
2200   va_end (args);
2201 }
2202
2203
2204 void
2205 printf_filtered (const char *format,...)
2206 {
2207   va_list args;
2208   va_start (args, format);
2209   vfprintf_filtered (gdb_stdout, format, args);
2210   va_end (args);
2211 }
2212
2213
2214 void
2215 printf_unfiltered (const char *format,...)
2216 {
2217   va_list args;
2218   va_start (args, format);
2219   vfprintf_unfiltered (gdb_stdout, format, args);
2220   va_end (args);
2221 }
2222
2223 /* Like printf_filtered, but prints it's result indented.
2224    Called as printfi_filtered (spaces, format, ...);  */
2225
2226 void
2227 printfi_filtered (int spaces, const char *format,...)
2228 {
2229   va_list args;
2230   va_start (args, format);
2231   print_spaces_filtered (spaces, gdb_stdout);
2232   vfprintf_filtered (gdb_stdout, format, args);
2233   va_end (args);
2234 }
2235
2236 /* Easy -- but watch out!
2237
2238    This routine is *not* a replacement for puts()!  puts() appends a newline.
2239    This one doesn't, and had better not!  */
2240
2241 void
2242 puts_filtered (const char *string)
2243 {
2244   fputs_filtered (string, gdb_stdout);
2245 }
2246
2247 void
2248 puts_unfiltered (const char *string)
2249 {
2250   fputs_unfiltered (string, gdb_stdout);
2251 }
2252
2253 /* Return a pointer to N spaces and a null.  The pointer is good
2254    until the next call to here.  */
2255 char *
2256 n_spaces (int n)
2257 {
2258   char *t;
2259   static char *spaces = 0;
2260   static int max_spaces = -1;
2261
2262   if (n > max_spaces)
2263     {
2264       if (spaces)
2265         xfree (spaces);
2266       spaces = (char *) xmalloc (n + 1);
2267       for (t = spaces + n; t != spaces;)
2268         *--t = ' ';
2269       spaces[n] = '\0';
2270       max_spaces = n;
2271     }
2272
2273   return spaces + max_spaces - n;
2274 }
2275
2276 /* Print N spaces.  */
2277 void
2278 print_spaces_filtered (int n, struct ui_file *stream)
2279 {
2280   fputs_filtered (n_spaces (n), stream);
2281 }
2282 \f
2283 /* C++/ObjC demangler stuff.  */
2284
2285 /* fprintf_symbol_filtered attempts to demangle NAME, a symbol in language
2286    LANG, using demangling args ARG_MODE, and print it filtered to STREAM.
2287    If the name is not mangled, or the language for the name is unknown, or
2288    demangling is off, the name is printed in its "raw" form. */
2289
2290 void
2291 fprintf_symbol_filtered (struct ui_file *stream, char *name, enum language lang,
2292                          int arg_mode)
2293 {
2294   char *demangled;
2295
2296   if (name != NULL)
2297     {
2298       /* If user wants to see raw output, no problem.  */
2299       if (!demangle)
2300         {
2301           fputs_filtered (name, stream);
2302         }
2303       else
2304         {
2305           switch (lang)
2306             {
2307             case language_cplus:
2308               demangled = cplus_demangle (name, arg_mode);
2309               break;
2310             case language_java:
2311               demangled = cplus_demangle (name, arg_mode | DMGL_JAVA);
2312               break;
2313             case language_objc:
2314               /* Commented out until ObjC handling is enabled.  */
2315               /*demangled = objc_demangle (name);*/
2316               /*break;*/
2317             default:
2318               demangled = NULL;
2319               break;
2320             }
2321           fputs_filtered (demangled ? demangled : name, stream);
2322           if (demangled != NULL)
2323             {
2324               xfree (demangled);
2325             }
2326         }
2327     }
2328 }
2329
2330 /* Do a strcmp() type operation on STRING1 and STRING2, ignoring any
2331    differences in whitespace.  Returns 0 if they match, non-zero if they
2332    don't (slightly different than strcmp()'s range of return values).
2333
2334    As an extra hack, string1=="FOO(ARGS)" matches string2=="FOO".
2335    This "feature" is useful when searching for matching C++ function names
2336    (such as if the user types 'break FOO', where FOO is a mangled C++
2337    function). */
2338
2339 int
2340 strcmp_iw (const char *string1, const char *string2)
2341 {
2342   while ((*string1 != '\0') && (*string2 != '\0'))
2343     {
2344       while (isspace (*string1))
2345         {
2346           string1++;
2347         }
2348       while (isspace (*string2))
2349         {
2350           string2++;
2351         }
2352       if (*string1 != *string2)
2353         {
2354           break;
2355         }
2356       if (*string1 != '\0')
2357         {
2358           string1++;
2359           string2++;
2360         }
2361     }
2362   return (*string1 != '\0' && *string1 != '(') || (*string2 != '\0');
2363 }
2364 \f
2365
2366 /*
2367    ** subset_compare()
2368    **    Answer whether string_to_compare is a full or partial match to
2369    **    template_string.  The partial match must be in sequence starting
2370    **    at index 0.
2371  */
2372 int
2373 subset_compare (char *string_to_compare, char *template_string)
2374 {
2375   int match;
2376   if (template_string != (char *) NULL && string_to_compare != (char *) NULL &&
2377       strlen (string_to_compare) <= strlen (template_string))
2378     match = (strncmp (template_string,
2379                       string_to_compare,
2380                       strlen (string_to_compare)) == 0);
2381   else
2382     match = 0;
2383   return match;
2384 }
2385
2386
2387 static void pagination_on_command (char *arg, int from_tty);
2388 static void
2389 pagination_on_command (char *arg, int from_tty)
2390 {
2391   pagination_enabled = 1;
2392 }
2393
2394 static void pagination_on_command (char *arg, int from_tty);
2395 static void
2396 pagination_off_command (char *arg, int from_tty)
2397 {
2398   pagination_enabled = 0;
2399 }
2400 \f
2401
2402 void
2403 initialize_utils (void)
2404 {
2405   struct cmd_list_element *c;
2406
2407   c = add_set_cmd ("width", class_support, var_uinteger,
2408                    (char *) &chars_per_line,
2409                    "Set number of characters gdb thinks are in a line.",
2410                    &setlist);
2411   add_show_from_set (c, &showlist);
2412   set_cmd_sfunc (c, set_width_command);
2413
2414   add_show_from_set
2415     (add_set_cmd ("height", class_support,
2416                   var_uinteger, (char *) &lines_per_page,
2417                   "Set number of lines gdb thinks are in a page.", &setlist),
2418      &showlist);
2419
2420   init_page_info ();
2421
2422   /* If the output is not a terminal, don't paginate it.  */
2423   if (!ui_file_isatty (gdb_stdout))
2424     lines_per_page = UINT_MAX;
2425
2426   set_width_command ((char *) NULL, 0, c);
2427
2428   add_show_from_set
2429     (add_set_cmd ("demangle", class_support, var_boolean,
2430                   (char *) &demangle,
2431              "Set demangling of encoded C++/ObjC names when displaying symbols.",
2432                   &setprintlist),
2433      &showprintlist);
2434
2435   add_show_from_set
2436     (add_set_cmd ("pagination", class_support,
2437                   var_boolean, (char *) &pagination_enabled,
2438                   "Set state of pagination.", &setlist),
2439      &showlist);
2440
2441   if (xdb_commands)
2442     {
2443       add_com ("am", class_support, pagination_on_command,
2444                "Enable pagination");
2445       add_com ("sm", class_support, pagination_off_command,
2446                "Disable pagination");
2447     }
2448
2449   add_show_from_set
2450     (add_set_cmd ("sevenbit-strings", class_support, var_boolean,
2451                   (char *) &sevenbit_strings,
2452                   "Set printing of 8-bit characters in strings as \\nnn.",
2453                   &setprintlist),
2454      &showprintlist);
2455
2456   add_show_from_set
2457     (add_set_cmd ("asm-demangle", class_support, var_boolean,
2458                   (char *) &asm_demangle,
2459                   "Set demangling of C++/ObjC names in disassembly listings.",
2460                   &setprintlist),
2461      &showprintlist);
2462 }
2463
2464 /* Machine specific function to handle SIGWINCH signal. */
2465
2466 #ifdef  SIGWINCH_HANDLER_BODY
2467 SIGWINCH_HANDLER_BODY
2468 #endif
2469
2470 /* print routines to handle variable size regs, etc. */
2471
2472 /* temporary storage using circular buffer */
2473 #define NUMCELLS 16
2474 #define CELLSIZE 32
2475 static char *
2476 get_cell (void)
2477 {
2478   static char buf[NUMCELLS][CELLSIZE];
2479   static int cell = 0;
2480   if (++cell >= NUMCELLS)
2481     cell = 0;
2482   return buf[cell];
2483 }
2484
2485 int
2486 strlen_paddr (void)
2487 {
2488   return (TARGET_ADDR_BIT / 8 * 2);
2489 }
2490
2491 char *
2492 paddr (CORE_ADDR addr)
2493 {
2494   return phex (addr, TARGET_ADDR_BIT / 8);
2495 }
2496
2497 char *
2498 paddr_nz (CORE_ADDR addr)
2499 {
2500   return phex_nz (addr, TARGET_ADDR_BIT / 8);
2501 }
2502
2503 static void
2504 decimal2str (char *paddr_str, char *sign, ULONGEST addr)
2505 {
2506   /* steal code from valprint.c:print_decimal().  Should this worry
2507      about the real size of addr as the above does? */
2508   unsigned long temp[3];
2509   int i = 0;
2510   do
2511     {
2512       temp[i] = addr % (1000 * 1000 * 1000);
2513       addr /= (1000 * 1000 * 1000);
2514       i++;
2515     }
2516   while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0])));
2517   switch (i)
2518     {
2519     case 1:
2520       sprintf (paddr_str, "%s%lu",
2521                sign, temp[0]);
2522       break;
2523     case 2:
2524       sprintf (paddr_str, "%s%lu%09lu",
2525                sign, temp[1], temp[0]);
2526       break;
2527     case 3:
2528       sprintf (paddr_str, "%s%lu%09lu%09lu",
2529                sign, temp[2], temp[1], temp[0]);
2530       break;
2531     default:
2532       internal_error (__FILE__, __LINE__, "failed internal consistency check");
2533     }
2534 }
2535
2536 char *
2537 paddr_u (CORE_ADDR addr)
2538 {
2539   char *paddr_str = get_cell ();
2540   decimal2str (paddr_str, "", addr);
2541   return paddr_str;
2542 }
2543
2544 char *
2545 paddr_d (LONGEST addr)
2546 {
2547   char *paddr_str = get_cell ();
2548   if (addr < 0)
2549     decimal2str (paddr_str, "-", -addr);
2550   else
2551     decimal2str (paddr_str, "", addr);
2552   return paddr_str;
2553 }
2554
2555 /* eliminate warning from compiler on 32-bit systems */
2556 static int thirty_two = 32;
2557
2558 char *
2559 phex (ULONGEST l, int sizeof_l)
2560 {
2561   char *str;
2562   switch (sizeof_l)
2563     {
2564     case 8:
2565       str = get_cell ();
2566       sprintf (str, "%08lx%08lx",
2567                (unsigned long) (l >> thirty_two),
2568                (unsigned long) (l & 0xffffffff));
2569       break;
2570     case 4:
2571       str = get_cell ();
2572       sprintf (str, "%08lx", (unsigned long) l);
2573       break;
2574     case 2:
2575       str = get_cell ();
2576       sprintf (str, "%04x", (unsigned short) (l & 0xffff));
2577       break;
2578     default:
2579       str = phex (l, sizeof (l));
2580       break;
2581     }
2582   return str;
2583 }
2584
2585 char *
2586 phex_nz (ULONGEST l, int sizeof_l)
2587 {
2588   char *str;
2589   switch (sizeof_l)
2590     {
2591     case 8:
2592       {
2593         unsigned long high = (unsigned long) (l >> thirty_two);
2594         str = get_cell ();
2595         if (high == 0)
2596           sprintf (str, "%lx", (unsigned long) (l & 0xffffffff));
2597         else
2598           sprintf (str, "%lx%08lx",
2599                    high, (unsigned long) (l & 0xffffffff));
2600         break;
2601       }
2602     case 4:
2603       str = get_cell ();
2604       sprintf (str, "%lx", (unsigned long) l);
2605       break;
2606     case 2:
2607       str = get_cell ();
2608       sprintf (str, "%x", (unsigned short) (l & 0xffff));
2609       break;
2610     default:
2611       str = phex_nz (l, sizeof (l));
2612       break;
2613     }
2614   return str;
2615 }
2616
2617
2618 /* Convert to / from the hosts pointer to GDB's internal CORE_ADDR
2619    using the target's conversion routines. */
2620 CORE_ADDR
2621 host_pointer_to_address (void *ptr)
2622 {
2623   gdb_assert (sizeof (ptr) == TYPE_LENGTH (builtin_type_void_data_ptr));
2624   return POINTER_TO_ADDRESS (builtin_type_void_data_ptr, &ptr);
2625 }
2626
2627 void *
2628 address_to_host_pointer (CORE_ADDR addr)
2629 {
2630   void *ptr;
2631
2632   gdb_assert (sizeof (ptr) == TYPE_LENGTH (builtin_type_void_data_ptr));
2633   ADDRESS_TO_POINTER (builtin_type_void_data_ptr, &ptr, addr);
2634   return ptr;
2635 }
2636
2637 /* Convert a CORE_ADDR into a string.  */
2638 const char *
2639 core_addr_to_string (const CORE_ADDR addr)
2640 {
2641   char *str = get_cell ();
2642   strcpy (str, "0x");
2643   strcat (str, phex (addr, sizeof (addr)));
2644   return str;
2645 }
2646
2647 const char *
2648 core_addr_to_string_nz (const CORE_ADDR addr)
2649 {
2650   char *str = get_cell ();
2651   strcpy (str, "0x");
2652   strcat (str, phex_nz (addr, sizeof (addr)));
2653   return str;
2654 }
2655
2656 /* Convert a string back into a CORE_ADDR.  */
2657 CORE_ADDR
2658 string_to_core_addr (const char *my_string)
2659 {
2660   CORE_ADDR addr = 0;
2661   if (my_string[0] == '0' && tolower (my_string[1]) == 'x')
2662     {
2663       /* Assume that it is in decimal.  */
2664       int i;
2665       for (i = 2; my_string[i] != '\0'; i++)
2666         {
2667           if (isdigit (my_string[i]))
2668             addr = (my_string[i] - '0') + (addr * 16);
2669           else if (isxdigit (my_string[i])) 
2670             addr = (tolower (my_string[i]) - 'a' + 0xa) + (addr * 16);
2671           else
2672             internal_error (__FILE__, __LINE__, "invalid hex");
2673         }
2674     }
2675   else
2676     {
2677       /* Assume that it is in decimal.  */
2678       int i;
2679       for (i = 0; my_string[i] != '\0'; i++)
2680         {
2681           if (isdigit (my_string[i]))
2682             addr = (my_string[i] - '0') + (addr * 10);
2683           else
2684             internal_error (__FILE__, __LINE__, "invalid decimal");
2685         }
2686     }
2687   return addr;
2688 }
2689
2690 char *
2691 gdb_realpath (const char *filename)
2692 {
2693   /* Method 1: The system has a compile time upper bound on a filename
2694      path.  Use that and realpath() to canonicalize the name.  This is
2695      the most common case.  Note that, if there isn't a compile time
2696      upper bound, you want to avoid realpath() at all costs.  */
2697 #if defined(HAVE_REALPATH)
2698   {
2699 # if defined (PATH_MAX)
2700     char buf[PATH_MAX];
2701 #  define USE_REALPATH
2702 # elif defined (MAXPATHLEN)
2703     char buf[MAXPATHLEN];
2704 #  define USE_REALPATH
2705 # endif
2706 # if defined (USE_REALPATH)
2707     const char *rp = realpath (filename, buf);
2708     if (rp == NULL)
2709       rp = filename;
2710     return xstrdup (rp);
2711   }
2712 # endif
2713 #endif /* HAVE_REALPATH */
2714
2715   /* Method 2: The host system (i.e., GNU) has the function
2716      canonicalize_file_name() which malloc's a chunk of memory and
2717      returns that, use that.  */
2718 #if defined(HAVE_CANONICALIZE_FILE_NAME)
2719   {
2720     char *rp = canonicalize_file_name (filename);
2721     if (rp == NULL)
2722       return xstrdup (filename);
2723     else
2724       return rp;
2725   }
2726 #endif
2727
2728   /* FIXME: cagney/2002-11-13:
2729
2730      Method 2a: Use realpath() with a NULL buffer.  Some systems, due
2731      to the problems described in in method 3, have modified their
2732      realpath() implementation so that it will allocate a buffer when
2733      NULL is passed in.  Before this can be used, though, some sort of
2734      configure time test would need to be added.  Otherwize the code
2735      will likely core dump.  */
2736
2737   /* Method 3: Now we're getting desperate!  The system doesn't have a
2738      compile time buffer size and no alternative function.  Query the
2739      OS, using pathconf(), for the buffer limit.  Care is needed
2740      though, some systems do not limit PATH_MAX (return -1 for
2741      pathconf()) making it impossible to pass a correctly sized buffer
2742      to realpath() (it could always overflow).  On those systems, we
2743      skip this.  */
2744 #if defined (HAVE_REALPATH) && defined (HAVE_UNISTD_H) && defined(HAVE_ALLOCA)
2745   {
2746     /* Find out the max path size.  */
2747     long path_max = pathconf ("/", _PC_PATH_MAX);
2748     if (path_max > 0)
2749       {
2750         /* PATH_MAX is bounded.  */
2751         char *buf = alloca (path_max);
2752         char *rp = realpath (filename, buf);
2753         return xstrdup (rp ? rp : filename);
2754       }
2755   }
2756 #endif
2757
2758   /* This system is a lost cause, just dup the buffer.  */
2759   return xstrdup (filename);
2760 }
2761
2762 /* Return a copy of FILENAME, with its directory prefix canonicalized
2763    by gdb_realpath.  */
2764
2765 char *
2766 xfullpath (const char *filename)
2767 {
2768   const char *base_name = lbasename (filename);
2769   char *dir_name;
2770   char *real_path;
2771   char *result;
2772
2773   /* Extract the basename of filename, and return immediately 
2774      a copy of filename if it does not contain any directory prefix. */
2775   if (base_name == filename)
2776     return xstrdup (filename);
2777
2778   dir_name = alloca ((size_t) (base_name - filename + 2));
2779   /* Allocate enough space to store the dir_name + plus one extra
2780      character sometimes needed under Windows (see below), and
2781      then the closing \000 character */
2782   strncpy (dir_name, filename, base_name - filename);
2783   dir_name[base_name - filename] = '\000';
2784
2785 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
2786   /* We need to be careful when filename is of the form 'd:foo', which
2787      is equivalent of d:./foo, which is totally different from d:/foo.  */
2788   if (strlen (dir_name) == 2 &&
2789       isalpha (dir_name[0]) && dir_name[1] == ':')
2790     {
2791       dir_name[2] = '.';
2792       dir_name[3] = '\000';
2793     }
2794 #endif
2795
2796   /* Canonicalize the directory prefix, and build the resulting
2797      filename. If the dirname realpath already contains an ending
2798      directory separator, avoid doubling it.  */
2799   real_path = gdb_realpath (dir_name);
2800   if (IS_DIR_SEPARATOR (real_path[strlen (real_path) - 1]))
2801     result = concat (real_path, base_name, NULL);
2802   else
2803     result = concat (real_path, SLASH_STRING, base_name, NULL);
2804
2805   xfree (real_path);
2806   return result;
2807 }