OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gdb-7.1/] [gdb/] [cli/] [cli-interp.c] - Diff between revs 834 and 842

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 834 Rev 842
/* CLI Definitions for GDB, the GNU debugger.
/* CLI Definitions for GDB, the GNU debugger.
 
 
   Copyright (c) 2002, 2003, 2007, 2008, 2009, 2010
   Copyright (c) 2002, 2003, 2007, 2008, 2009, 2010
   Free Software Foundation, Inc.
   Free Software Foundation, Inc.
 
 
   This file is part of GDB.
   This file is part of GDB.
 
 
   This program is free software; you can redistribute it and/or modify
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.
   (at your option) any later version.
 
 
   This program is distributed in the hope that it will be useful,
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   GNU General Public License for more details.
 
 
   You should have received a copy of the GNU General Public License
   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 
#include "defs.h"
#include "defs.h"
#include "interps.h"
#include "interps.h"
#include "wrapper.h"
#include "wrapper.h"
#include "event-top.h"
#include "event-top.h"
#include "ui-out.h"
#include "ui-out.h"
#include "cli-out.h"
#include "cli-out.h"
#include "top.h"                /* for "execute_command" */
#include "top.h"                /* for "execute_command" */
#include "gdb_string.h"
#include "gdb_string.h"
#include "exceptions.h"
#include "exceptions.h"
 
 
struct ui_out *cli_uiout;
struct ui_out *cli_uiout;
 
 
/* These are the ui_out and the interpreter for the console interpreter.  */
/* These are the ui_out and the interpreter for the console interpreter.  */
 
 
/* Longjmp-safe wrapper for "execute_command".  */
/* Longjmp-safe wrapper for "execute_command".  */
static struct gdb_exception safe_execute_command (struct ui_out *uiout,
static struct gdb_exception safe_execute_command (struct ui_out *uiout,
                                                  char *command, int from_tty);
                                                  char *command, int from_tty);
struct captured_execute_command_args
struct captured_execute_command_args
{
{
  char *command;
  char *command;
  int from_tty;
  int from_tty;
};
};
 
 
/* These implement the cli out interpreter: */
/* These implement the cli out interpreter: */
 
 
static void *
static void *
cli_interpreter_init (int top_level)
cli_interpreter_init (int top_level)
{
{
  return NULL;
  return NULL;
}
}
 
 
static int
static int
cli_interpreter_resume (void *data)
cli_interpreter_resume (void *data)
{
{
  struct ui_file *stream;
  struct ui_file *stream;
 
 
  /*sync_execution = 1; */
  /*sync_execution = 1; */
 
 
  /* gdb_setup_readline will change gdb_stdout.  If the CLI was previously
  /* gdb_setup_readline will change gdb_stdout.  If the CLI was previously
     writing to gdb_stdout, then set it to the new gdb_stdout afterwards.  */
     writing to gdb_stdout, then set it to the new gdb_stdout afterwards.  */
 
 
  stream = cli_out_set_stream (cli_uiout, gdb_stdout);
  stream = cli_out_set_stream (cli_uiout, gdb_stdout);
  if (stream != gdb_stdout)
  if (stream != gdb_stdout)
    {
    {
      cli_out_set_stream (cli_uiout, stream);
      cli_out_set_stream (cli_uiout, stream);
      stream = NULL;
      stream = NULL;
    }
    }
 
 
  gdb_setup_readline ();
  gdb_setup_readline ();
 
 
  if (stream != NULL)
  if (stream != NULL)
    cli_out_set_stream (cli_uiout, gdb_stdout);
    cli_out_set_stream (cli_uiout, gdb_stdout);
 
 
  return 1;
  return 1;
}
}
 
 
static int
static int
cli_interpreter_suspend (void *data)
cli_interpreter_suspend (void *data)
{
{
  gdb_disable_readline ();
  gdb_disable_readline ();
  return 1;
  return 1;
}
}
 
 
/* Don't display the prompt if we are set quiet.  */
/* Don't display the prompt if we are set quiet.  */
static int
static int
cli_interpreter_display_prompt_p (void *data)
cli_interpreter_display_prompt_p (void *data)
{
{
  if (interp_quiet_p (NULL))
  if (interp_quiet_p (NULL))
    return 0;
    return 0;
  else
  else
    return 1;
    return 1;
}
}
 
 
static struct gdb_exception
static struct gdb_exception
cli_interpreter_exec (void *data, const char *command_str)
cli_interpreter_exec (void *data, const char *command_str)
{
{
  struct ui_file *old_stream;
  struct ui_file *old_stream;
  struct gdb_exception result;
  struct gdb_exception result;
 
 
  /* FIXME: cagney/2003-02-01: Need to const char *propogate
  /* FIXME: cagney/2003-02-01: Need to const char *propogate
     safe_execute_command.  */
     safe_execute_command.  */
  char *str = strcpy (alloca (strlen (command_str) + 1), command_str);
  char *str = strcpy (alloca (strlen (command_str) + 1), command_str);
 
 
  /* gdb_stdout could change between the time cli_uiout was initialized
  /* gdb_stdout could change between the time cli_uiout was initialized
     and now. Since we're probably using a different interpreter which has
     and now. Since we're probably using a different interpreter which has
     a new ui_file for gdb_stdout, use that one instead of the default.
     a new ui_file for gdb_stdout, use that one instead of the default.
 
 
     It is important that it gets reset everytime, since the user could
     It is important that it gets reset everytime, since the user could
     set gdb to use a different interpreter.  */
     set gdb to use a different interpreter.  */
  old_stream = cli_out_set_stream (cli_uiout, gdb_stdout);
  old_stream = cli_out_set_stream (cli_uiout, gdb_stdout);
  result = safe_execute_command (cli_uiout, str, 1);
  result = safe_execute_command (cli_uiout, str, 1);
  cli_out_set_stream (cli_uiout, old_stream);
  cli_out_set_stream (cli_uiout, old_stream);
  return result;
  return result;
}
}
 
 
static void
static void
do_captured_execute_command (struct ui_out *uiout, void *data)
do_captured_execute_command (struct ui_out *uiout, void *data)
{
{
  struct captured_execute_command_args *args =
  struct captured_execute_command_args *args =
    (struct captured_execute_command_args *) data;
    (struct captured_execute_command_args *) data;
  execute_command (args->command, args->from_tty);
  execute_command (args->command, args->from_tty);
}
}
 
 
static struct gdb_exception
static struct gdb_exception
safe_execute_command (struct ui_out *uiout, char *command, int from_tty)
safe_execute_command (struct ui_out *uiout, char *command, int from_tty)
{
{
  struct gdb_exception e;
  struct gdb_exception e;
  struct captured_execute_command_args args;
  struct captured_execute_command_args args;
  args.command = command;
  args.command = command;
  args.from_tty = from_tty;
  args.from_tty = from_tty;
  e = catch_exception (uiout, do_captured_execute_command, &args,
  e = catch_exception (uiout, do_captured_execute_command, &args,
                       RETURN_MASK_ALL);
                       RETURN_MASK_ALL);
  /* FIXME: cagney/2005-01-13: This shouldn't be needed.  Instead the
  /* FIXME: cagney/2005-01-13: This shouldn't be needed.  Instead the
     caller should print the exception.  */
     caller should print the exception.  */
  exception_print (gdb_stderr, e);
  exception_print (gdb_stderr, e);
  return e;
  return e;
}
}
 
 
 
 
/* Standard gdb initialization hook.  */
/* Standard gdb initialization hook.  */
extern initialize_file_ftype _initialize_cli_interp; /* -Wmissing-prototypes */
extern initialize_file_ftype _initialize_cli_interp; /* -Wmissing-prototypes */
 
 
void
void
_initialize_cli_interp (void)
_initialize_cli_interp (void)
{
{
  static const struct interp_procs procs = {
  static const struct interp_procs procs = {
    cli_interpreter_init,       /* init_proc */
    cli_interpreter_init,       /* init_proc */
    cli_interpreter_resume,     /* resume_proc */
    cli_interpreter_resume,     /* resume_proc */
    cli_interpreter_suspend,    /* suspend_proc */
    cli_interpreter_suspend,    /* suspend_proc */
    cli_interpreter_exec,       /* exec_proc */
    cli_interpreter_exec,       /* exec_proc */
    cli_interpreter_display_prompt_p    /* prompt_proc_p */
    cli_interpreter_display_prompt_p    /* prompt_proc_p */
  };
  };
  struct interp *cli_interp;
  struct interp *cli_interp;
 
 
  /* Create a default uiout builder for the CLI.  */
  /* Create a default uiout builder for the CLI.  */
  cli_uiout = cli_out_new (gdb_stdout);
  cli_uiout = cli_out_new (gdb_stdout);
  cli_interp = interp_new (INTERP_CONSOLE, NULL, cli_uiout, &procs);
  cli_interp = interp_new (INTERP_CONSOLE, NULL, cli_uiout, &procs);
 
 
  interp_add (cli_interp);
  interp_add (cli_interp);
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.