X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Ftop.c;h=98ad51b7f8ec1c4be604cf8a9efc40639050c7b5;hb=7be1c4891a2036c31e706908d43f33f7f59ae5a9;hp=98e50100228b4982dd2d2d05b8cdf2d96625496b;hpb=98bbd631ccdf061b430ff2699ed82b92933ae937;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/top.c b/gdb/top.c index 98e5010022..98ad51b7f8 100644 --- a/gdb/top.c +++ b/gdb/top.c @@ -1,7 +1,7 @@ /* 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, 2002, 2003, 2004 + 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of GDB. @@ -30,6 +30,7 @@ #include "cli/cli-decode.h" #include "symtab.h" #include "inferior.h" +#include "exceptions.h" #include #include "target.h" #include "breakpoint.h" @@ -55,8 +56,6 @@ #include -#include - #include "event-top.h" #include "gdb_string.h" #include "gdb_stat.h" @@ -72,10 +71,18 @@ /* Initialization file name for gdb. This is overridden in some configs. */ +#ifndef PATH_MAX +# ifdef FILENAME_MAX +# define PATH_MAX FILENAME_MAX +# else +# define PATH_MAX 512 +# endif +#endif + #ifndef GDBINIT_FILENAME #define GDBINIT_FILENAME ".gdbinit" #endif -char gdbinit[] = GDBINIT_FILENAME; +char gdbinit[PATH_MAX + 1] = GDBINIT_FILENAME; int inhibit_gdbinit = 0; @@ -89,6 +96,14 @@ extern char lang_frame_mismatch_warn[]; /* language.c */ /* Flag for whether we want all the "from_tty" gubbish printed. */ int caution = 1; /* Default is yes, sigh. */ +static void +show_caution (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (file, _("\ +Whether to confirm potentially dangerous operations is %s.\n"), + value); +} /* stdio stream that command input is being read from. Set to stdin normally. Set by source_command to the file we are sourcing. Set to NULL if we are @@ -290,296 +305,11 @@ void (*deprecated_context_hook) (int id); /* Takes control from error (). Typically used to prevent longjmps out of the middle of the GUI. Usually used in conjunction with a catch routine. */ -NORETURN void (*deprecated_error_hook) (void) ATTR_NORETURN; - - -/* One should use catch_errors rather than manipulating these - directly. */ -#if defined(HAVE_SIGSETJMP) -#define SIGJMP_BUF sigjmp_buf -#define SIGSETJMP(buf) sigsetjmp((buf), 1) -#define SIGLONGJMP(buf,val) siglongjmp((buf), (val)) -#else -#define SIGJMP_BUF jmp_buf -#define SIGSETJMP(buf) setjmp(buf) -#define SIGLONGJMP(buf,val) longjmp((buf), (val)) -#endif - -/* Where to go for throw_exception(). */ -static SIGJMP_BUF *catch_return; - -/* Return for reason REASON to the nearest containing catch_errors(). */ - -NORETURN void -throw_exception (enum return_reason reason) -{ - quit_flag = 0; - immediate_quit = 0; - - /* Perhaps it would be cleaner to do this via the cleanup chain (not sure - I can think of a reason why that is vital, though). */ - bpstat_clear_actions (stop_bpstat); /* Clear queued breakpoint commands */ - - disable_current_display (); - do_cleanups (ALL_CLEANUPS); - if (event_loop_p && target_can_async_p () && !target_executing) - do_exec_cleanups (ALL_CLEANUPS); - if (event_loop_p && sync_execution) - do_exec_error_cleanups (ALL_CLEANUPS); - - if (annotation_level > 1) - switch (reason) - { - case RETURN_QUIT: - annotate_quit (); - break; - case RETURN_ERROR: - annotate_error (); - break; - } - - /* Jump to the containing catch_errors() call, communicating REASON - to that call via setjmp's return value. Note that REASON can't - be zero, by definition in defs.h. */ - - (NORETURN void) SIGLONGJMP (*catch_return, (int) 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 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. - - Must not be called with immediate_quit in effect (bad things might - happen, say we got a signal in the middle of a memcpy to quit_return). - This is an OK restriction; with very few exceptions immediate_quit can - be replaced by judicious use of QUIT. - - MASK specifies what to catch; it is normally set to - RETURN_MASK_ALL, if for no other reason than that the code which - calls catch_errors might not be set up to deal with a quit which - isn't caught. But if the code can deal with it, it generally - should be RETURN_MASK_ERROR, unless for some reason it is more - useful to abort only the portion of the operation inside the - catch_errors. Note that quit should return to the command line - fairly quickly, even if some further processing is being done. */ - -/* MAYBE: cagney/1999-11-05: catch_errors() in conjunction with - error() et.al. could maintain a set of flags that indicate the the - current state of each of the longjmp buffers. This would give the - longjmp code the chance to detect a longjmp botch (before it gets - to longjmperror()). Prior to 1999-11-05 this wasn't possible as - code also randomly used a SET_TOP_LEVEL macro that directly - initialize the longjmp buffers. */ - -/* MAYBE: cagney/1999-11-05: Should the catch_errors and cleanups code - be consolidated into a single file instead of being distributed - between utils.c and top.c? */ - -static void -catcher (catch_exceptions_ftype *func, - struct ui_out *func_uiout, - void *func_args, - int *func_val, - enum return_reason *func_caught, - char *errstring, - char **gdberrmsg, - return_mask mask) -{ - SIGJMP_BUF *saved_catch; - SIGJMP_BUF catch; - struct cleanup *saved_cleanup_chain; - char *saved_error_pre_print; - char *saved_quit_pre_print; - struct ui_out *saved_uiout; - - /* Return value from SIGSETJMP(): enum return_reason if error or - quit caught, 0 otherwise. */ - int caught; - - /* Return value from FUNC(): Hopefully non-zero. Explicitly set to - zero if an error quit was caught. */ - int val; - - /* Override error/quit messages during FUNC. */ - - saved_error_pre_print = error_pre_print; - saved_quit_pre_print = quit_pre_print; - - if (mask & RETURN_MASK_ERROR) - error_pre_print = errstring; - if (mask & RETURN_MASK_QUIT) - quit_pre_print = errstring; - - /* Override the global ``struct ui_out'' builder. */ - - saved_uiout = uiout; - uiout = func_uiout; - - /* Prevent error/quit during FUNC from calling cleanups established - prior to here. */ - - saved_cleanup_chain = save_cleanups (); - - /* Call FUNC, catching error/quit events. */ - - saved_catch = catch_return; - catch_return = &catch; - caught = SIGSETJMP (catch); - if (!caught) - val = (*func) (func_uiout, func_args); - else - { - val = 0; - /* If caller wants a copy of the low-level error message, make one. - This is used in the case of a silent error whereby the caller - may optionally want to issue the message. */ - if (gdberrmsg) - *gdberrmsg = error_last_message (); - } - catch_return = saved_catch; - - /* FIXME: cagney/1999-11-05: A correct FUNC implementation will - clean things up (restoring the cleanup chain) to the state they - were just prior to the call. Unfortunately, many FUNC's are not - that well behaved. This could be fixed by adding either a - do_cleanups call (to cover the problem) or an assertion check to - detect bad FUNCs code. */ - - /* Restore the cleanup chain, the error/quit messages, and the uiout - builder, to their original states. */ - - restore_cleanups (saved_cleanup_chain); - - uiout = saved_uiout; - - if (mask & RETURN_MASK_QUIT) - quit_pre_print = saved_quit_pre_print; - if (mask & RETURN_MASK_ERROR) - error_pre_print = saved_error_pre_print; - - /* Return normally if no error/quit event occurred or this catcher - can handle this exception. The caller analyses the func return - values. */ - - if (!caught || (mask & RETURN_MASK (caught))) - { - *func_val = val; - *func_caught = caught; - return; - } - - /* The caller didn't request that the event be caught, relay the - event to the next containing catch_errors(). */ - - throw_exception (caught); -} - -int -catch_exceptions (struct ui_out *uiout, - catch_exceptions_ftype *func, - void *func_args, - char *errstring, - return_mask mask) -{ - int val; - enum return_reason caught; - catcher (func, uiout, func_args, &val, &caught, errstring, NULL, mask); - gdb_assert (val >= 0); - gdb_assert (caught <= 0); - if (caught < 0) - return caught; - return val; -} - -int -catch_exceptions_with_msg (struct ui_out *uiout, - catch_exceptions_ftype *func, - void *func_args, - char *errstring, - char **gdberrmsg, - return_mask mask) -{ - int val; - enum return_reason caught; - catcher (func, uiout, func_args, &val, &caught, errstring, gdberrmsg, mask); - gdb_assert (val >= 0); - gdb_assert (caught <= 0); - if (caught < 0) - return caught; - return val; -} - -struct catch_errors_args -{ - catch_errors_ftype *func; - void *func_args; -}; - -static int -do_catch_errors (struct ui_out *uiout, void *data) -{ - struct catch_errors_args *args = data; - return args->func (args->func_args); -} - -int -catch_errors (catch_errors_ftype *func, void *func_args, char *errstring, - return_mask mask) -{ - int val; - enum return_reason caught; - struct catch_errors_args args; - args.func = func; - args.func_args = func_args; - catcher (do_catch_errors, uiout, &args, &val, &caught, errstring, - NULL, mask); - if (caught != 0) - return 0; - return val; -} - -struct captured_command_args - { - catch_command_errors_ftype *command; - char *arg; - int from_tty; - }; - -static int -do_captured_command (void *data) -{ - struct captured_command_args *context = data; - context->command (context->arg, context->from_tty); - /* FIXME: cagney/1999-11-07: Technically this do_cleanups() call - isn't needed. Instead an assertion check could be made that - simply confirmed that the called function correctly cleaned up - after itself. Unfortunately, old code (prior to 1999-11-04) in - main.c was calling SET_TOP_LEVEL(), calling the command function, - and then *always* calling do_cleanups(). For the moment we - remain ``bug compatible'' with that old code.. */ - do_cleanups (ALL_CLEANUPS); - return 1; -} - -int -catch_command_errors (catch_command_errors_ftype * command, - char *arg, int from_tty, return_mask mask) -{ - struct captured_command_args args; - args.command = command; - args.arg = arg; - args.from_tty = from_tty; - return catch_errors (do_captured_command, &args, "", mask); -} - +void (*deprecated_error_hook) (void); /* Handler for SIGHUP. */ #ifdef SIGHUP -/* Just a little helper function for disconnect(). */ - /* NOTE 1999-04-29: This function will be static again, once we modify gdb to use the event loop as the default command loop and we merge event-top.c into this file, top.c */ @@ -591,15 +321,6 @@ quit_cover (void *s) quit_command ((char *) 0, 0); return 0; } - -static void -disconnect (int signo) -{ - catch_errors (quit_cover, NULL, - "Could not kill the program being debugged", RETURN_MASK_ALL); - signal (SIGHUP, SIG_DFL); - kill (getpid (), SIGHUP); -} #endif /* defined SIGHUP */ /* Line number we are currently in in a file which is being sourced. */ @@ -614,21 +335,6 @@ disconnect (int signo) event-top.c into this file, top.c */ /* static */ char *source_file_name; -/* Buffer containing the error_pre_print used by the source stuff. - Malloc'd. */ -/* NOTE 1999-04-29: This variable will be static again, once we modify - gdb to use the event loop as the default command loop and we merge - event-top.c into this file, top.c */ -/* static */ char *source_error; -static int source_error_allocated; - -/* Something to glom on to the start of error_pre_print if source_file_name - is set. */ -/* NOTE 1999-04-29: This variable will be static again, once we modify - gdb to use the event loop as the default command loop and we merge - event-top.c into this file, top.c */ -/* static */ char *source_pre_error; - /* Clean up on error during a "source" command (or execution of a user-defined command). */ @@ -696,12 +402,12 @@ execute_command (char *p, int from_tty) /* If the target is running, we allow only a limited set of commands. */ - if (event_loop_p && target_can_async_p () && target_executing) + if (target_can_async_p () && target_executing) if (strcmp (c->name, "help") != 0 && strcmp (c->name, "pwd") != 0 && strcmp (c->name, "show") != 0 && strcmp (c->name, "stop") != 0) - error ("Cannot execute this command while the target is running."); + error (_("Cannot execute this command while the target is running.")); /* Pass null arg rather than an empty one. */ arg = *p ? p : 0; @@ -737,7 +443,7 @@ execute_command (char *p, int from_tty) else if (c->type == set_cmd || c->type == show_cmd) do_setshow_command (arg, from_tty & caution, c); else if (!cmd_func_p (c)) - error ("That is not a command, just a help topic."); + error (_("That is not a command, just a help topic.")); else if (deprecated_call_command_hook) deprecated_call_command_hook (c, arg, from_tty & caution); else @@ -829,7 +535,7 @@ command_loop (void) { long cmd_time = get_run_time () - time_at_cmd_start; - printf_unfiltered ("Command execution time: %ld.%06ld\n", + printf_unfiltered (_("Command execution time: %ld.%06ld\n"), cmd_time / 1000000, cmd_time % 1000000); } @@ -840,7 +546,7 @@ command_loop (void) long space_now = lim - lim_at_start; long space_diff = space_now - space_at_cmd_start; - printf_unfiltered ("Space used: %ld (%c%ld for this command)\n", + printf_unfiltered (_("Space used: %ld (%c%ld for this command)\n"), space_now, (space_diff >= 0 ? '+' : '-'), space_diff); @@ -943,15 +649,11 @@ gdb_readline (char *prompt_arg) } if (c == '\n') -#ifndef CRLF_SOURCE_FILES - break; -#else { if (input_index > 0 && result[input_index - 1] == '\r') input_index--; break; } -#endif result[input_index++] = c; while (input_index >= result_size) @@ -969,13 +671,40 @@ gdb_readline (char *prompt_arg) substitution. These variables are given default values at the end of this file. */ static int command_editing_p; + /* NOTE 1999-04-29: This variable will be static again, once we modify gdb to use the event loop as the default command loop and we merge event-top.c into this file, top.c */ + /* static */ int history_expansion_p; + static int write_history_p; +static void +show_write_history_p (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (file, _("Saving of the history record on exit is %s.\n"), + value); +} + static int history_size; +static void +show_history_size (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (file, _("The size of the command history is %s.\n"), + value); +} + static char *history_filename; +static void +show_history_filename (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (file, _("\ +The filename in which to record the command history is \"%s\".\n"), + value); +} /* This is like readline(), but it has some gdb-specific behavior. gdb can use readline in both the synchronous and async modes during @@ -991,7 +720,7 @@ char * gdb_readline_wrapper (char *prompt) { /* Set the hook that works in this case. */ - if (event_loop_p && after_char_processing_hook) + if (after_char_processing_hook) { rl_pre_input_hook = (Function *) after_char_processing_hook; after_char_processing_hook = NULL; @@ -1037,7 +766,7 @@ float_handler (int signo) /* This message is based on ANSI C, section 4.7. Note that integer divide by zero causes this, so "float" is a misnomer. */ signal (SIGFPE, float_handler); - error ("Erroneous arithmetic operation."); + error (_("Erroneous arithmetic operation.")); } static void @@ -1052,37 +781,6 @@ do_nothing (int signo) signal (signo, do_nothing); } -static void -init_signals (void) -{ - signal (SIGINT, request_quit); - - /* If SIGTRAP was set to SIG_IGN, then the SIG_IGN will get passed - to the inferior and breakpoints will be ignored. */ -#ifdef SIGTRAP - signal (SIGTRAP, SIG_DFL); -#endif - - /* If we initialize SIGQUIT to SIG_IGN, then the SIG_IGN will get - passed to the inferior, which we don't want. It would be - possible to do a "signal (SIGQUIT, SIG_DFL)" after we fork, but - on BSD4.3 systems using vfork, that can affect the - GDB process as well as the inferior (the signal handling tables - might be in memory, shared between the two). Since we establish - a handler for SIGQUIT, when we call exec it will set the signal - to SIG_DFL for us. */ - signal (SIGQUIT, do_nothing); -#ifdef SIGHUP - if (signal (SIGHUP, do_nothing) != SIG_IGN) - signal (SIGHUP, disconnect); -#endif - signal (SIGFPE, float_handler); - -#if defined(SIGWINCH) && defined(SIGWINCH_HANDLER) - signal (SIGWINCH, SIGWINCH_HANDLER); -#endif -} - /* The current saved history number from operate-and-get-next. This is -1 if not valid. */ static int operate_saved_history = -1; @@ -1114,17 +812,8 @@ gdb_rl_operate_and_get_next (int count, int key) { int where; - if (event_loop_p) - { - /* Use the async hook. */ - after_char_processing_hook = gdb_rl_operate_and_get_next_completion; - } - else - { - /* This hook only works correctly when we are using the - synchronous readline. */ - rl_pre_input_hook = (Function *) gdb_rl_operate_and_get_next_completion; - } + /* Use the async hook. */ + after_char_processing_hook = gdb_rl_operate_and_get_next_completion; /* Find the current line, and find the next line to use. */ where = where_history(); @@ -1200,12 +889,7 @@ command_line_input (char *prompt_arg, int repeat, char *annotation_suffix) immediate_quit++; #ifdef STOP_SIGNAL if (job_control) - { - if (event_loop_p) - signal (STOP_SIGNAL, handle_stop_sig); - else - signal (STOP_SIGNAL, stop_sig); - } + signal (STOP_SIGNAL, handle_stop_sig); #endif while (1) @@ -1217,15 +901,7 @@ command_line_input (char *prompt_arg, int repeat, char *annotation_suffix) gdb_flush (gdb_stderr); if (source_file_name != NULL) - { - ++source_line_number; - sprintf (source_error, - "%s%s:%d: Error in sourced command file:\n", - source_pre_error, - source_file_name, - source_line_number); - error_pre_print = source_error; - } + ++source_line_number; if (annotation_level > 1 && instream == stdin) { @@ -1419,10 +1095,7 @@ There is absolutely no warranty for GDB. Type \"show warranty\" for details.\n" char * get_prompt (void) { - if (event_loop_p) - return PROMPT (0); - else - return gdb_prompt_string; + return PROMPT (0); } void @@ -1433,10 +1106,7 @@ set_prompt (char *s) if (prompt != NULL) xfree (prompt); */ - if (event_loop_p) - PROMPT (0) = savestring (s, strlen (s)); - else - gdb_prompt_string = savestring (s, strlen (s)); + PROMPT (0) = savestring (s, strlen (s)); } @@ -1631,14 +1301,14 @@ set_history_size_command (char *args, int from_tty, struct cmd_list_element *c) else { history_size = INT_MAX; - error ("History size must be non-negative"); + error (_("History size must be non-negative")); } } void set_history (char *args, int from_tty) { - printf_unfiltered ("\"set history\" must be followed by the name of a history subcommand.\n"); + printf_unfiltered (_("\"set history\" must be followed by the name of a history subcommand.\n")); help_list (sethistlist, "set history ", -1, gdb_stdout); } @@ -1700,45 +1370,69 @@ init_history (void) that was read. */ #ifdef __MSDOS__ /* No leading dots in file names are allowed on MSDOS. */ - history_filename = concat (current_directory, "/_gdb_history", NULL); + history_filename = concat (current_directory, "/_gdb_history", + (char *)NULL); #else - history_filename = concat (current_directory, "/.gdb_history", NULL); + history_filename = concat (current_directory, "/.gdb_history", + (char *)NULL); #endif } read_history (history_filename); } +static void +show_new_async_prompt (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (file, _("Gdb's prompt is \"%s\".\n"), value); +} + +static void +show_async_command_editing_p (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (file, _("\ +Editing of command lines as they are typed is %s.\n"), + value); +} + +static void +show_annotation_level (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (file, _("Annotation_level is %s.\n"), value); +} + +static void +show_exec_done_display_p (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (file, _("\ +Notification of completion for asynchronous execution commands is %s.\n"), + value); +} static void init_main (void) { struct cmd_list_element *c; - /* If we are running the asynchronous version, - we initialize the prompts differently. */ - if (!event_loop_p) - { - gdb_prompt_string = savestring (DEFAULT_PROMPT, strlen (DEFAULT_PROMPT)); - } - else - { - /* initialize the prompt stack to a simple "(gdb) " prompt or to - whatever the DEFAULT_PROMPT is. */ - the_prompts.top = 0; - PREFIX (0) = ""; - PROMPT (0) = savestring (DEFAULT_PROMPT, strlen (DEFAULT_PROMPT)); - SUFFIX (0) = ""; - /* Set things up for annotation_level > 1, if the user ever decides - to use it. */ - async_annotation_suffix = "prompt"; - /* Set the variable associated with the setshow prompt command. */ - new_async_prompt = savestring (PROMPT (0), strlen (PROMPT (0))); - - /* If gdb was started with --annotate=2, this is equivalent to - the user entering the command 'set annotate 2' at the gdb - prompt, so we need to do extra processing. */ - if (annotation_level > 1) - set_async_annotation_level (NULL, 0, NULL); - } + /* initialize the prompt stack to a simple "(gdb) " prompt or to + whatever the DEFAULT_PROMPT is. */ + the_prompts.top = 0; + PREFIX (0) = ""; + PROMPT (0) = savestring (DEFAULT_PROMPT, strlen (DEFAULT_PROMPT)); + SUFFIX (0) = ""; + /* Set things up for annotation_level > 1, if the user ever decides + to use it. */ + async_annotation_suffix = "prompt"; + /* Set the variable associated with the setshow prompt command. */ + new_async_prompt = savestring (PROMPT (0), strlen (PROMPT (0))); + + /* If gdb was started with --annotate=2, this is equivalent to the + user entering the command 'set annotate 2' at the gdb prompt, so + we need to do extra processing. */ + if (annotation_level > 1) + set_async_annotation_level (NULL, 0, NULL); /* Set the important stuff up for command editing. */ command_editing_p = 1; @@ -1756,114 +1450,79 @@ init_main (void) 15 is Control-o, the same binding this function has in Bash. */ rl_add_defun ("operate-and-get-next", gdb_rl_operate_and_get_next, 15); - /* The set prompt command is different depending whether or not the - async version is run. NOTE: this difference is going to - disappear as we make the event loop be the default engine of - gdb. */ - if (!event_loop_p) - { - add_show_from_set - (add_set_cmd ("prompt", class_support, var_string, - (char *) &gdb_prompt_string, "Set gdb's prompt", - &setlist), - &showlist); - } - else - { - c = add_set_cmd ("prompt", class_support, var_string, - (char *) &new_async_prompt, "Set gdb's prompt", - &setlist); - add_show_from_set (c, &showlist); - set_cmd_sfunc (c, set_async_prompt); - } + add_setshow_string_cmd ("prompt", class_support, + &new_async_prompt, _("\ +Set gdb's prompt"), _("\ +Show gdb's prompt"), NULL, + set_async_prompt, + show_new_async_prompt, + &setlist, &showlist); - add_com ("dont-repeat", class_support, dont_repeat_command, "Don't repeat this command.\n\ + add_com ("dont-repeat", class_support, dont_repeat_command, _("\ +Don't repeat this command.\n\ Primarily used inside of user-defined commands that should not be repeated when\n\ -hitting return."); +hitting return.")); - /* The set editing command is different depending whether or not the - async version is run. NOTE: this difference is going to disappear - as we make the event loop be the default engine of gdb. */ - if (!event_loop_p) - { - add_show_from_set - (add_set_cmd ("editing", class_support, var_boolean, (char *) &command_editing_p, - "Set editing of command lines as they are typed.\n\ + add_setshow_boolean_cmd ("editing", class_support, + &async_command_editing_p, _("\ +Set editing of command lines as they are typed."), _("\ +Show editing of command lines as they are typed."), _("\ Use \"on\" to enable the editing, and \"off\" to disable it.\n\ Without an argument, command line editing is enabled. To edit, use\n\ -EMACS-like or VI-like commands like control-P or ESC.", &setlist), - &showlist); - } - else - { - c = add_set_cmd ("editing", class_support, var_boolean, (char *) &async_command_editing_p, - "Set editing of command lines as they are typed.\n\ -Use \"on\" to enable the editing, and \"off\" to disable it.\n\ -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); - set_cmd_sfunc (c, set_async_editing_command); - } - - add_show_from_set - (add_set_cmd ("save", no_class, var_boolean, (char *) &write_history_p, - "Set saving of the history record on exit.\n\ +EMACS-like or VI-like commands like control-P or ESC."), + set_async_editing_command, + show_async_command_editing_p, + &setlist, &showlist); + + add_setshow_boolean_cmd ("save", no_class, &write_history_p, _("\ +Set saving of the history record on exit."), _("\ +Show saving of the history record on exit."), _("\ Use \"on\" to enable the saving, and \"off\" to disable it.\n\ -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\ -ie. the number of previous commands to keep a record of.", &sethistlist); - add_show_from_set (c, &showhistlist); - 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); - set_cmd_completer (c, filename_completer); - add_show_from_set (c, &showhistlist); - - add_show_from_set - (add_set_cmd ("confirm", class_support, var_boolean, - (char *) &caution, - "Set whether to confirm potentially dangerous operations.", - &setlist), - &showlist); - - /* The set annotate command is different depending whether or not - the async version is run. NOTE: this difference is going to - disappear as we make the event loop be the default engine of - gdb. */ - if (!event_loop_p) - { - c = add_set_cmd ("annotate", class_obscure, var_zinteger, - (char *) &annotation_level, "Set annotation_level.\n\ +Without an argument, saving is enabled."), + NULL, + show_write_history_p, + &sethistlist, &showhistlist); + + add_setshow_integer_cmd ("size", no_class, &history_size, _("\ +Set the size of the command history,"), _("\ +Show the size of the command history,"), _("\ +ie. the number of previous commands to keep a record of."), + set_history_size_command, + show_history_size, + &sethistlist, &showhistlist); + + add_setshow_filename_cmd ("filename", no_class, &history_filename, _("\ +Set the filename in which to record the command history"), _("\ +Show the filename in which to record the command history"), _("\ +(the list of previous commands of which a record is kept)."), + NULL, + show_history_filename, + &sethistlist, &showhistlist); + + add_setshow_boolean_cmd ("confirm", class_support, &caution, _("\ +Set whether to confirm potentially dangerous operations."), _("\ +Show whether to confirm potentially dangerous operations."), NULL, + NULL, + show_caution, + &setlist, &showlist); + + add_setshow_zinteger_cmd ("annotate", class_obscure, &annotation_level, _("\ +Set annotation_level."), _("\ +Show annotation_level."), _("\ 0 == normal; 1 == fullname (for use when running under emacs)\n\ -2 == output annotated suitably for use by programs that control GDB.", - &setlist); - c = add_show_from_set (c, &showlist); - } - else - { - c = add_set_cmd ("annotate", class_obscure, var_zinteger, - (char *) &annotation_level, "Set annotation_level.\n\ -0 == normal; 1 == fullname (for use when running under emacs)\n\ -2 == output annotated suitably for use by programs that control GDB.", - &setlist); - add_show_from_set (c, &showlist); - set_cmd_sfunc (c, set_async_annotation_level); - } - if (event_loop_p) - { - add_show_from_set - (add_set_cmd ("exec-done-display", class_support, var_boolean, (char *) &exec_done_display_p, - "Set notification of completion for asynchronous execution commands.\n\ -Use \"on\" to enable the notification, and \"off\" to disable it.", &setlist), - &showlist); - } +2 == output annotated suitably for use by programs that control GDB."), + set_async_annotation_level, + show_annotation_level, + &setlist, &showlist); + + add_setshow_boolean_cmd ("exec-done-display", class_support, + &exec_done_display_p, _("\ +Set notification of completion for asynchronous execution commands."), _("\ +Show notification of completion for asynchronous execution commands."), _("\ +Use \"on\" to enable the notification, and \"off\" to disable it."), + NULL, + show_exec_done_display_p, + &setlist, &showlist); } void @@ -1891,14 +1550,7 @@ gdb_init (char *argv0) init_cli_cmds(); init_main (); /* But that omits this file! Do it now */ - /* The signal handling mechanism is different depending whether or - not the async version is run. NOTE: in the future we plan to make - the event loop be the default engine of gdb, and this difference - will disappear. */ - if (event_loop_p) - async_init_signals (); - else - init_signals (); + async_init_signals (); /* We need a default language for parsing expressions, so simple things like "set width 0" won't fail if no language is explicitly set in a config file