2011-07-22 Phil Muldoon <pmuldoon@redhat.com>
authorPhil Muldoon <pmuldoon@redhat.com>
Fri, 22 Jul 2011 09:22:50 +0000 (09:22 +0000)
committerPhil Muldoon <pmuldoon@redhat.com>
Fri, 22 Jul 2011 09:22:50 +0000 (09:22 +0000)
* event-top.c (cli_command_loop): Use get_prompt, get_suffix,
get_prefix.
(display_gdb_prompt): Likewise.
(change_annotation_level): Likewise.
(push_prompt): Likewise.
(pop_prompt): Likewise.
(handle_stop_sig): Use get_prompt with a level.
* top.c (command_loop): Use get_prompt with a level.
(set_async_annotation_level): Use set_prompt with a level.
(get_prefix): New function.
(set_prefix): Ditto.
(set_suffix): Ditto.
(get_suffix): Ditto.
(get_prompt): Accept a level argument.
(set_prompt): Accept a level argument.  Free old prompts.  Set
new_async_prompt if level is 0.
(init_main): Use set_prompt with a level.  Do not set
new_async_prompt.
* event-top.h (PROMPT, SUFFIX, PREFIX): Move to top.c
* top.h: Declare set_suffix, get_suffix, set_prefix, get_prefix.
Modify set_prompt, get_prompt to account for levels.
* tui/tui-interp.c (tui_command_loop): Use get_prompt with a
level
* python/python.c (before_prompt_hook): Use set_prompt.

gdb/ChangeLog
gdb/event-top.c
gdb/event-top.h
gdb/python/python.c
gdb/top.c
gdb/top.h
gdb/tui/tui-interp.c

index 14e2a7f8f7a217983f02a91a94510142e0703ee2..614fca4ac21d9213c43d081ee0a1f0c04906775e 100644 (file)
@@ -1,3 +1,30 @@
+2011-07-22  Phil Muldoon  <pmuldoon@redhat.com>
+
+       * event-top.c (cli_command_loop): Use get_prompt, get_suffix,
+       get_prefix.
+       (display_gdb_prompt): Likewise.
+       (change_annotation_level): Likewise.
+       (push_prompt): Likewise.
+       (pop_prompt): Likewise.
+       (handle_stop_sig): Use get_prompt with a level.
+       * top.c (command_loop): Use get_prompt with a level.
+       (set_async_annotation_level): Use set_prompt with a level.
+       (get_prefix): New function.
+       (set_prefix): Ditto.
+       (set_suffix): Ditto.
+       (get_suffix): Ditto.
+       (get_prompt): Accept a level argument.
+       (set_prompt): Accept a level argument.  Free old prompts.  Set
+       new_async_prompt if level is 0.
+       (init_main): Use set_prompt with a level.  Do not set
+       new_async_prompt.
+       * event-top.h (PROMPT, SUFFIX, PREFIX): Move to top.c
+       * top.h: Declare set_suffix, get_suffix, set_prefix, get_prefix.
+       Modify set_prompt, get_prompt to account for levels.
+       * tui/tui-interp.c (tui_command_loop): Use get_prompt with a
+       level.
+       * python/python.c (before_prompt_hook): Use set_prompt.
+       
 2011-07-22  Kwok Cheung Yeung  <kcy@codesourcery.com>
 
        * defs.h: Add guard against inclusion in gdbserver.
index 22f94409acff7dc516b570a272602d5d324991ac..378827282fa22a68b79a01d2dce7c33445808491 100644 (file)
@@ -191,17 +191,17 @@ cli_command_loop (void)
     {
       int length;
       char *a_prompt;
-      char *gdb_prompt = get_prompt ();
+      char *gdb_prompt = get_prompt (0);
 
       /* Tell readline what the prompt to display is and what function
          it will need to call after a whole line is read.  This also
          displays the first prompt.  */
-      length = strlen (PREFIX (0)) 
-       + strlen (gdb_prompt) + strlen (SUFFIX (0)) + 1;
+      length = strlen (get_prefix (0))
+       + strlen (gdb_prompt) + strlen (get_suffix(0)) + 1;
       a_prompt = (char *) alloca (length);
-      strcpy (a_prompt, PREFIX (0));
+      strcpy (a_prompt, get_prefix (0));
       strcat (a_prompt, gdb_prompt);
-      strcat (a_prompt, SUFFIX (0));
+      strcat (a_prompt, get_suffix (0));
       rl_callback_handler_install (a_prompt, input_handler);
     }
   else
@@ -276,10 +276,10 @@ display_gdb_prompt (char *new_prompt)
   if (! new_prompt)
     {
       char *post_gdb_prompt = NULL;
-      char *pre_gdb_prompt = xstrdup (get_prompt ());
+      char *pre_gdb_prompt = xstrdup (get_prompt (0));
 
       observer_notify_before_prompt (pre_gdb_prompt);
-      post_gdb_prompt = get_prompt ();
+      post_gdb_prompt = get_prompt (0);
 
       /* If the observer changed the prompt, use that prompt.  */
       if (strcmp (pre_gdb_prompt, post_gdb_prompt) != 0)
@@ -317,18 +317,18 @@ display_gdb_prompt (char *new_prompt)
       if (! new_prompt)
        {
          /* Just use the top of the prompt stack.  */
-         prompt_length = strlen (PREFIX (0)) +
-           strlen (SUFFIX (0)) +
-           strlen (get_prompt()) + 1;
+         prompt_length = strlen (get_prefix (0)) +
+           strlen (get_suffix (0)) +
+           strlen (get_prompt (0)) + 1;
 
          actual_gdb_prompt = (char *) alloca (prompt_length);
 
          /* Prefix needs to have new line at end.  */
-         strcpy (actual_gdb_prompt, PREFIX (0));
-         strcat (actual_gdb_prompt, get_prompt());
+         strcpy (actual_gdb_prompt, get_prefix (0));
+         strcat (actual_gdb_prompt, get_prompt (0));
          /* Suffix needs to have a new line at end and \032 \032 at
             beginning.  */
-         strcat (actual_gdb_prompt, SUFFIX (0));
+         strcat (actual_gdb_prompt, get_suffix (0));
        }
       else
        actual_gdb_prompt = new_prompt;;
@@ -361,7 +361,7 @@ change_annotation_level (void)
 {
   char *prefix, *suffix;
 
-  if (!PREFIX (0) || !PROMPT (0) || !SUFFIX (0))
+  if (!get_prefix (0) || !get_prompt (0) || !get_suffix (0))
     {
       /* The prompt stack has not been initialized to "", we are
          using gdb w/o the --async switch.  */
@@ -371,7 +371,7 @@ change_annotation_level (void)
 
   if (annotation_level > 1)
     {
-      if (!strcmp (PREFIX (0), "") && !strcmp (SUFFIX (0), ""))
+      if (!strcmp (get_prefix (0), "") && !strcmp (get_suffix (0), ""))
        {
          /* Push a new prompt if the previous annotation_level was not >1.  */
          prefix = (char *) alloca (strlen (async_annotation_suffix) + 10);
@@ -389,7 +389,7 @@ change_annotation_level (void)
     }
   else
     {
-      if (strcmp (PREFIX (0), "") && strcmp (SUFFIX (0), ""))
+      if (strcmp (get_prefix (0), "") && strcmp (get_suffix (0), ""))
        {
          /* Pop the top of the stack, we are going back to annotation < 1.  */
          pop_prompt ();
@@ -405,17 +405,17 @@ void
 push_prompt (char *prefix, char *prompt, char *suffix)
 {
   the_prompts.top++;
-  PREFIX (0) = xstrdup (prefix);
+  set_prefix (prefix, 0);
 
   /* Note that this function is used by the set annotate 2
      command.  This is why we take care of saving the old prompt
      in case a new one is not specified.  */
   if (prompt)
-    PROMPT (0) = xstrdup (prompt);
+    set_prompt (prompt, 0);
   else
-    PROMPT (0) = xstrdup (PROMPT (-1));
+    set_prompt (get_prompt (-1), 0);
 
-  SUFFIX (0) = xstrdup (suffix);
+  set_suffix (suffix, 0);
 }
 
 /* Pops the top of the prompt stack, and frees the memory allocated
@@ -425,20 +425,17 @@ pop_prompt (void)
 {
   /* If we are not during a 'synchronous' execution command, in which
      case, the top prompt would be empty.  */
-  if (strcmp (PROMPT (0), ""))
+  if (strcmp (get_prompt (0), ""))
     /* This is for the case in which the prompt is set while the
        annotation level is 2.  The top prompt will be changed, but when
        we return to annotation level < 2, we want that new prompt to be
        in effect, until the user does another 'set prompt'.  */
-    if (strcmp (PROMPT (0), PROMPT (-1)))
-      {
-       xfree (PROMPT (-1));
-       PROMPT (-1) = xstrdup (PROMPT (0));
-      }
-
-  xfree (PREFIX (0));
-  xfree (PROMPT (0));
-  xfree (SUFFIX (0));
+    if (strcmp (get_prompt (0), get_prompt (-1)))
+      set_prompt (get_prompt (0), -1);
+
+  set_prefix (NULL, 0);
+  set_prompt (NULL, 0);
+  set_suffix (NULL, 0);
   the_prompts.top--;
 }
 
@@ -983,7 +980,7 @@ handle_stop_sig (int sig)
 static void
 async_stop_sig (gdb_client_data arg)
 {
-  char *prompt = get_prompt ();
+  char *prompt = get_prompt (0);
 
 #if STOP_SIGNAL == SIGTSTP
   signal (SIGTSTP, SIG_DFL);
@@ -1061,7 +1058,7 @@ set_async_annotation_level (char *args, int from_tty,
 void
 set_async_prompt (char *args, int from_tty, struct cmd_list_element *c)
 {
-  PROMPT (0) = xstrdup (new_async_prompt);
+  set_prompt (new_async_prompt, 0);
 }
 
 /* Set things up for readline to be invoked via the alternate
index 8550164423531049a6040e734de607e3a6ed6c5c..952abdb39bd06c35321a4b97a521a451a00c9292 100644 (file)
@@ -69,9 +69,6 @@ struct prompts
     int top;
   };
 
-#define PROMPT(X) the_prompts.prompt_stack[the_prompts.top + X].prompt
-#define PREFIX(X) the_prompts.prompt_stack[the_prompts.top + X].prefix
-#define SUFFIX(X) the_prompts.prompt_stack[the_prompts.top + X].suffix
 
 /* Exported functions from event-top.c.
    FIXME: these should really go into top.h.  */
index e3a8d195e456f57d71fdcaca5dc0355b0e584f58..16c0a6e27b4fec6360e8416aa9d0942a90e56fc3 100644 (file)
@@ -745,7 +745,7 @@ before_prompt_hook (const char *current_gdb_prompt)
   /* If a prompt has been set, PROMPT will not be NULL.  If it is
      NULL, do not set the prompt.  */
   if (prompt != NULL)
-    set_prompt (prompt);
+    set_prompt (prompt, 0);
 
   do_cleanups (cleanup);
   return;
index 3ffd000257544e6d3182bc6f108804a46a75e017..8dba0e086b3a3a246b7f735984b9808ee82061a9 100644 (file)
--- a/gdb/top.c
+++ b/gdb/top.c
 #include "ui-out.h"
 #include "cli-out.h"
 
+#define PROMPT(X) the_prompts.prompt_stack[the_prompts.top + X].prompt
+#define PREFIX(X) the_prompts.prompt_stack[the_prompts.top + X].prefix
+#define SUFFIX(X) the_prompts.prompt_stack[the_prompts.top + X].suffix
+
 /* Default command line prompt.  This is overriden in some configs.  */
 
 #ifndef DEFAULT_PROMPT
@@ -533,7 +537,7 @@ command_loop (void)
   while (instream && !feof (instream))
     {
       if (window_hook && instream == stdin)
-       (*window_hook) (instream, get_prompt ());
+       (*window_hook) (instream, get_prompt (0));
 
       quit_flag = 0;
       if (instream == stdin && stdin_is_tty)
@@ -542,7 +546,7 @@ command_loop (void)
 
       /* Get a command-line.  This calls the readline package.  */
       command = command_line_input (instream == stdin ?
-                                   get_prompt () : (char *) NULL,
+                                   get_prompt (0) : (char *) NULL,
                                    instream == stdin, "prompt");
       if (command == 0)
        {
@@ -1124,26 +1128,98 @@ and \"show warranty\" for details.\n");
     }
 }
 \f
-/* get_prompt: access method for the GDB prompt string.  */
+
+/* get_prefix: access method for the GDB prefix string.  */
 
 char *
-get_prompt (void)
+get_prefix (int level)
 {
-  return PROMPT (0);
+  return PREFIX (level);
 }
 
+/* set_prefix: set method for the GDB prefix string.  */
+
 void
-set_prompt (const char *s)
+set_prefix (const char *s, int level)
+{
+  /* If S is NULL, just free the PREFIX at level LEVEL and set to
+     NULL.  */
+  if (s == NULL)
+    {
+      xfree (PREFIX (level));
+      PREFIX (level) = NULL;
+    }
+  else
+    {
+      char *p = xstrdup (s);
+
+      xfree (PREFIX (level));
+      PREFIX (level) =  p;
+    }
+}
+
+/* get_suffix: access method for the GDB suffix string.  */
+
+char *
+get_suffix (int level)
 {
-  char *p = xstrdup (s);
+  return SUFFIX (level);
+}
 
-  xfree (PROMPT (0));
-  PROMPT (0) = p;
+/* set_suffix: set method for the GDB suffix string.  */
 
-  /* Also, free and set new_async_prompt so prompt changes sync up
-     with set/show prompt.  */
-  xfree (new_async_prompt);
-  new_async_prompt = xstrdup (PROMPT (0));
+void
+set_suffix (const char *s, int level)
+{
+  /* If S is NULL, just free the SUFFIX at level LEVEL and set to
+     NULL.  */
+  if (s == NULL)
+    {
+      xfree (SUFFIX (level));
+      SUFFIX (level) = NULL;
+    }
+  else
+    {
+      char *p = xstrdup (s);
+
+      xfree (SUFFIX (level));
+      SUFFIX (level) =  p;
+    }
+}
+
+ /* get_prompt: access method for the GDB prompt string.  */
+
+char *
+get_prompt (int level)
+{
+  return PROMPT (level);
+}
+
+void
+set_prompt (const char *s, int level)
+{
+  /* If S is NULL, just free the PROMPT at level LEVEL and set to
+     NULL.  */
+  if (s == NULL)
+    {
+      xfree (PROMPT (level));
+      PROMPT (level) = NULL;
+    }
+  else
+    {
+      char *p = xstrdup (s);
+
+      xfree (PROMPT (0));
+      PROMPT (0) = p;
+
+      if (level == 0)
+       {
+         /* Also, free and set new_async_prompt so prompt changes sync up
+            with set/show prompt.  */
+           xfree (new_async_prompt);
+           new_async_prompt = xstrdup (PROMPT (0));
+         }
+      }
 }
 \f
 
@@ -1534,13 +1610,11 @@ init_main (void)
      whatever the DEFAULT_PROMPT is.  */
   the_prompts.top = 0;
   PREFIX (0) = "";
-  PROMPT (0) = xstrdup (DEFAULT_PROMPT);
+  set_prompt (DEFAULT_PROMPT, 0);
   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 = xstrdup (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
index 24ec2f20c518bc5149841140832bc74356eb5605..3c1ec1493decb95efc7352d2ea8355a215bfbdec 100644 (file)
--- a/gdb/top.h
+++ b/gdb/top.h
@@ -51,11 +51,27 @@ extern struct cleanup *prepare_execute_command (void);
 
 /* This function returns a pointer to the string that is used
    by gdb for its command prompt.  */
-extern char *get_prompt (void);
+extern char *get_prompt (int);
 
 /* This function copies the specified string into the string that
    is used by gdb for its command prompt.  */
-extern void set_prompt (const char *);
+extern void set_prompt (const char *, int level);
+
+/* This function returns a pointer to the string that is used
+   by gdb for its command prompt prefix.  */
+extern char *get_prefix (int);
+
+/* This function copies the specified string into the string that
+   is used by gdb for its command prompt prefix.  */
+extern void set_prefix (const char *, int);
+
+/* This function returns a pointer to the string that is used
+   by gdb for its command prompt suffix.  */
+extern char *get_suffix (int);
+
+/* This function copies the specified string into the string that
+   is used by gdb for its command prompt suffix.  */
+extern void set_suffix (const char *, int);
 
 /* From random places.  */
 extern int readnow_symbol_files;
index d79de2bf990993010c2e9214ccc16793023c9e25..919d1ac4ba310e26f90a6c49ed3aabaa6e5af1ee 100644 (file)
@@ -145,17 +145,17 @@ tui_command_loop (void *data)
     {
       int length;
       char *a_prompt;
-      char *gdb_prompt = get_prompt ();
+      char *gdb_prompt = get_prompt (0);
 
       /* Tell readline what the prompt to display is and what function
          it will need to call after a whole line is read. This also
          displays the first prompt.  */
-      length = strlen (PREFIX (0)) 
-       + strlen (gdb_prompt) + strlen (SUFFIX (0)) + 1;
+      length = strlen (get_prefix (0))
+       + strlen (gdb_prompt) + strlen (get_suffix (0)) + 1;
       a_prompt = (char *) alloca (length);
-      strcpy (a_prompt, PREFIX (0));
+      strcpy (a_prompt, get_prefix (0));
       strcat (a_prompt, gdb_prompt);
-      strcat (a_prompt, SUFFIX (0));
+      strcat (a_prompt, get_suffix (0));
       rl_callback_handler_install (a_prompt, input_handler);
     }
   else