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