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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-6.8/] [gdb/] [cli/] [cli-interp.c] - Blame information for rev 294

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 24 jeremybenn
/* CLI Definitions for GDB, the GNU debugger.
2
 
3
   Copyright (c) 2002, 2003, 2007, 2008 Free Software Foundation, Inc.
4
 
5
   This file is part of GDB.
6
 
7
   This program is free software; you can redistribute it and/or modify
8
   it under the terms of the GNU General Public License as published by
9
   the Free Software Foundation; either version 3 of the License, or
10
   (at your option) any later version.
11
 
12
   This program is distributed in the hope that it will be useful,
13
   but WITHOUT ANY WARRANTY; without even the implied warranty of
14
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
   GNU General Public License for more details.
16
 
17
   You should have received a copy of the GNU General Public License
18
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
 
20
#include "defs.h"
21
#include "interps.h"
22
#include "wrapper.h"
23
#include "event-top.h"
24
#include "ui-out.h"
25
#include "cli-out.h"
26
#include "top.h"                /* for "execute_command" */
27
#include "gdb_string.h"
28
#include "exceptions.h"
29
 
30
struct ui_out *cli_uiout;
31
 
32
/* These are the ui_out and the interpreter for the console interpreter.  */
33
 
34
/* Longjmp-safe wrapper for "execute_command".  */
35
static struct gdb_exception safe_execute_command (struct ui_out *uiout,
36
                                                  char *command, int from_tty);
37
struct captured_execute_command_args
38
{
39
  char *command;
40
  int from_tty;
41
};
42
 
43
/* These implement the cli out interpreter: */
44
 
45
static void *
46
cli_interpreter_init (void)
47
{
48
  return NULL;
49
}
50
 
51
static int
52
cli_interpreter_resume (void *data)
53
{
54
  struct ui_file *stream;
55
 
56
  /*sync_execution = 1; */
57
 
58
  /* gdb_setup_readline will change gdb_stdout.  If the CLI was previously
59
     writing to gdb_stdout, then set it to the new gdb_stdout afterwards.  */
60
 
61
  stream = cli_out_set_stream (cli_uiout, gdb_stdout);
62
  if (stream != gdb_stdout)
63
    {
64
      cli_out_set_stream (cli_uiout, stream);
65
      stream = NULL;
66
    }
67
 
68
  gdb_setup_readline ();
69
 
70
  if (stream != NULL)
71
    cli_out_set_stream (cli_uiout, gdb_stdout);
72
 
73
  return 1;
74
}
75
 
76
static int
77
cli_interpreter_suspend (void *data)
78
{
79
  gdb_disable_readline ();
80
  return 1;
81
}
82
 
83
/* Don't display the prompt if we are set quiet.  */
84
static int
85
cli_interpreter_display_prompt_p (void *data)
86
{
87
  if (interp_quiet_p (NULL))
88
    return 0;
89
  else
90
    return 1;
91
}
92
 
93
static struct gdb_exception
94
cli_interpreter_exec (void *data, const char *command_str)
95
{
96
  struct ui_file *old_stream;
97
  struct gdb_exception result;
98
 
99
  /* FIXME: cagney/2003-02-01: Need to const char *propogate
100
     safe_execute_command.  */
101
  char *str = strcpy (alloca (strlen (command_str) + 1), command_str);
102
 
103
  /* gdb_stdout could change between the time cli_uiout was initialized
104
     and now. Since we're probably using a different interpreter which has
105
     a new ui_file for gdb_stdout, use that one instead of the default.
106
 
107
     It is important that it gets reset everytime, since the user could
108
     set gdb to use a different interpreter.  */
109
  old_stream = cli_out_set_stream (cli_uiout, gdb_stdout);
110
  result = safe_execute_command (cli_uiout, str, 1);
111
  cli_out_set_stream (cli_uiout, old_stream);
112
  return result;
113
}
114
 
115
static void
116
do_captured_execute_command (struct ui_out *uiout, void *data)
117
{
118
  struct captured_execute_command_args *args =
119
    (struct captured_execute_command_args *) data;
120
  execute_command (args->command, args->from_tty);
121
}
122
 
123
static struct gdb_exception
124
safe_execute_command (struct ui_out *uiout, char *command, int from_tty)
125
{
126
  struct gdb_exception e;
127
  struct captured_execute_command_args args;
128
  args.command = command;
129
  args.from_tty = from_tty;
130
  e = catch_exception (uiout, do_captured_execute_command, &args,
131
                       RETURN_MASK_ALL);
132
  /* FIXME: cagney/2005-01-13: This shouldn't be needed.  Instead the
133
     caller should print the exception.  */
134
  exception_print (gdb_stderr, e);
135
  return e;
136
}
137
 
138
 
139
/* Standard gdb initialization hook.  */
140
extern initialize_file_ftype _initialize_cli_interp; /* -Wmissing-prototypes */
141
 
142
void
143
_initialize_cli_interp (void)
144
{
145
  static const struct interp_procs procs = {
146
    cli_interpreter_init,       /* init_proc */
147
    cli_interpreter_resume,     /* resume_proc */
148
    cli_interpreter_suspend,    /* suspend_proc */
149
    cli_interpreter_exec,       /* exec_proc */
150
    cli_interpreter_display_prompt_p    /* prompt_proc_p */
151
  };
152
  struct interp *cli_interp;
153
 
154
  /* Create a default uiout builder for the CLI.  */
155
  cli_uiout = cli_out_new (gdb_stdout);
156
  cli_interp = interp_new (INTERP_CONSOLE, NULL, cli_uiout, &procs);
157
 
158
  interp_add (cli_interp);
159
}

powered by: WebSVN 2.1.0

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