Add support for target specific command line switches to old-style simualtors.
[deliverable/binutils-gdb.git] / gdb / top.c
index 3bffaf4efd4d3915d42e1a712a79ac13fdb97760..4749c38180961b3b945c7a4aab24ca687de76366 100644 (file)
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -1,6 +1,8 @@
 /* Top level stuff for GDB, the GNU debugger.
-   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
-   1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+
+   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
+   1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
+   Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -25,6 +27,7 @@
 #include "cli/cli-cmds.h"
 #include "cli/cli-script.h"
 #include "cli/cli-setshow.h"
+#include "cli/cli-decode.h"
 #include "symtab.h"
 #include "inferior.h"
 #include <signal.h>
 #include "gdb_string.h"
 #include "gdb_stat.h"
 #include <ctype.h>
-#ifdef UI_OUT
 #include "ui-out.h"
 #include "cli-out.h"
-#endif
 
 /* Default command line prompt.  This is overriden in some configs. */
 
@@ -196,7 +197,7 @@ void (*init_ui_hook) (char *argv0);
 int (*ui_loop_hook) (int);
 
 /* Called instead of command_loop at top level.  Can be invoked via
-   return_to_top_level.  */
+   throw_exception().  */
 
 void (*command_loop_hook) (void);
 
@@ -298,13 +299,13 @@ NORETURN void (*error_hook) (void) ATTR_NORETURN;
 #define SIGLONGJMP(buf,val)    longjmp((buf), (val))
 #endif
 
-/* Where to go for return_to_top_level.  */
+/* Where to go for throw_exception().  */
 static SIGJMP_BUF *catch_return;
 
 /* Return for reason REASON to the nearest containing catch_errors().  */
 
 NORETURN void
-return_to_top_level (enum return_reason reason)
+throw_exception (enum return_reason reason)
 {
   quit_flag = 0;
   immediate_quit = 0;
@@ -340,7 +341,7 @@ return_to_top_level (enum return_reason reason)
 
 /* Call FUNC() with args FUNC_UIOUT and FUNC_ARGS, catching any
    errors.  Set FUNC_CAUGHT to an ``enum return_reason'' if the
-   function is aborted (using return_to_top_level() or zero if the
+   function is aborted (using throw_exception() or zero if the
    function returns normally.  Set FUNC_VAL to the value returned by
    the function or 0 if the function was aborted.
 
@@ -458,7 +459,7 @@ catcher (catch_exceptions_ftype *func,
   /* The caller didn't request that the event be caught, relay the
      event to the next containing catch_errors(). */
 
-  return_to_top_level (caught);
+  throw_exception (caught);
 }
 
 int
@@ -672,10 +673,19 @@ execute_command (char *p, int from_tty)
       /* Pass null arg rather than an empty one.  */
       arg = *p ? p : 0;
 
-      /* Clear off trailing whitespace, except for set and complete command.  */
+      /* FIXME: cagney/2002-02-02: The c->type test is pretty dodgy
+         while the is_complete_command(cfunc) test is just plain
+         bogus.  They should both be replaced by a test of the form
+         c->strip_trailing_white_space_p.  */
+      /* NOTE: cagney/2002-02-02: The function.cfunc in the below
+         can't be replaced with func.  This is because it is the
+         cfunc, and not the func, that has the value that the
+         is_complete_command hack is testing for.  */
+      /* Clear off trailing whitespace, except for set and complete
+         command.  */
       if (arg
          && c->type != set_cmd
-         && !is_complete_command (c->function.cfunc))
+         && !is_complete_command (c))
        {
          p = arg + strlen (arg) - 1;
          while (p >= arg && (*p == ' ' || *p == '\t'))
@@ -684,12 +694,7 @@ execute_command (char *p, int from_tty)
        }
 
       /* If this command has been pre-hooked, run the hook first. */
-      if ((c->hook_pre) && (!c->hook_in))
-      {
-        c->hook_in = 1; /* Prevent recursive hooking */
-        execute_user_command (c->hook_pre, (char *) 0);
-        c->hook_in = 0; /* Allow hook to work again once it is complete */
-      }
+      execute_cmd_pre_hook (c);
 
       if (c->flags & DEPRECATED_WARN_USER)
        deprecated_cmd_warning (&line);
@@ -698,20 +703,15 @@ execute_command (char *p, int from_tty)
        execute_user_command (c, arg);
       else if (c->type == set_cmd || c->type == show_cmd)
        do_setshow_command (arg, from_tty & caution, c);
-      else if (c->function.cfunc == NO_FUNCTION)
+      else if (c->func == NULL)
        error ("That is not a command, just a help topic.");
       else if (call_command_hook)
        call_command_hook (c, arg, from_tty & caution);
       else
-       (*c->function.cfunc) (arg, from_tty & caution);
+       (*c->func) (c, arg, from_tty & caution);
        
       /* If this command has been post-hooked, run the hook last. */
-      if ((c->hook_post) && (!c->hook_in))
-      {
-        c->hook_in = 1; /* Prevent recursive hooking */
-        execute_user_command (c->hook_post, (char *) 0);
-        c->hook_in = 0; /* allow hook to work again once it is complete */
-      }
+      execute_cmd_post_hook (c);
 
     }
 
@@ -890,11 +890,6 @@ gdb_readline (char *prompt_arg)
          character position to be off, since the newline we read from
          the user is not accounted for.  */
       fputs_unfiltered (prompt_arg, gdb_stdout);
-      /* OBSOLETE #ifdef MPW */
-      /* OBSOLETE          Move to a new line so the entered line doesn't have a prompt */
-      /* OBSOLETE          on the front of it. */
-      /* OBSOLETE       fputs_unfiltered ("\n", gdb_stdout); */
-      /* OBSOLETE #endif  *//* MPW */
       gdb_flush (gdb_stdout);
     }
 
@@ -1325,7 +1320,7 @@ print_gdb_version (struct ui_file *stream)
 
   /* Second line is a copyright notice. */
 
-  fprintf_filtered (stream, "Copyright 2001 Free Software Foundation, Inc.\n");
+  fprintf_filtered (stream, "Copyright 2002 Free Software Foundation, Inc.\n");
 
   /* Following the copyright is a brief statement that the program is
      free software, that users are free to copy and change it on
@@ -1440,7 +1435,7 @@ get_prompt_1 (void *data)
 
                  if (*promptp != gdb_prompt_escape)
                    error ("Syntax error at prompt position %d",
-                          promptp - local_prompt);
+                          (int) (promptp - local_prompt));
                  else
                    {
                      promptp++;        /* skip second escape char */
@@ -1586,7 +1581,7 @@ get_prompt_1 (void *data)
                  break;        /* void type -- no output */
                default:
                  error ("bad data type at prompt position %d",
-                        promptp - local_prompt);
+                        (int) (promptp - local_prompt));
                  break;
                }
              outp += strlen (outp);
@@ -1948,7 +1943,7 @@ init_main (void)
                       (char *) &new_async_prompt, "Set gdb's prompt",
                       &setlist);
       add_show_from_set (c, &showlist);
-      c->function.sfunc = set_async_prompt;
+      set_cmd_sfunc (c, set_async_prompt);
     }
 
   add_show_from_set
@@ -1984,7 +1979,7 @@ Without an argument, command line editing is enabled.  To edit, use\n\
 EMACS-like or VI-like commands like control-P or ESC.", &setlist);
 
       add_show_from_set (c, &showlist);
-      c->function.sfunc = set_async_editing_command;
+      set_cmd_sfunc (c, set_async_editing_command);
     }
 
   add_show_from_set
@@ -1995,16 +1990,16 @@ Without an argument, saving is enabled.", &sethistlist),
      &showhistlist);
 
   c = add_set_cmd ("size", no_class, var_integer, (char *) &history_size,
-                  "Set the size of the command history, \n\
+                  "Set the size of the command history,\n\
 ie. the number of previous commands to keep a record of.", &sethistlist);
   add_show_from_set (c, &showhistlist);
-  c->function.sfunc = set_history_size_command;
+  set_cmd_sfunc (c, set_history_size_command);
 
   c = add_set_cmd ("filename", no_class, var_filename,
                   (char *) &history_filename,
                   "Set the filename in which to record the command history\n\
- (the list of previous commands of which a record is kept).", &sethistlist);
-  c->completer = filename_completer;
+(the list of previous commands of which a record is kept).", &sethistlist);
+  set_cmd_completer (c, filename_completer);
   add_show_from_set (c, &showhistlist);
 
   add_show_from_set
@@ -2035,7 +2030,7 @@ ie. the number of previous commands to keep a record of.", &sethistlist);
 2 == output annotated suitably for use by programs that control GDB.",
                       &setlist);
       add_show_from_set (c, &showlist);
-      c->function.sfunc = set_async_annotation_level;
+      set_cmd_sfunc (c, set_async_annotation_level);
     }
   if (event_loop_p)
     {
@@ -2092,7 +2087,6 @@ gdb_init (char *argv0)
   if (init_ui_hook)
     init_ui_hook (argv0);
 
-#ifdef UI_OUT
   /* Install the default UI */
   if (!init_ui_hook)
     {
@@ -2107,5 +2101,4 @@ gdb_init (char *argv0)
          exit (1);
        }
     }
-#endif
 }
This page took 0.026765 seconds and 4 git commands to generate.