X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Ftop.c;h=4749c38180961b3b945c7a4aab24ca687de76366;hb=de4112fa387b662c7c7a1dd3e334a1274ca54d28;hp=3bffaf4efd4d3915d42e1a712a79ac13fdb97760;hpb=467d85198ffb27a97ef21aa85c044a3ace19990a;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/top.c b/gdb/top.c index 3bffaf4efd..4749c38180 100644 --- 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 @@ -58,10 +61,8 @@ #include "gdb_string.h" #include "gdb_stat.h" #include -#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 }