Updare French translation for binutils and German translation for opcodes.
[deliverable/binutils-gdb.git] / gdb / tui / tui-interp.c
CommitLineData
021e7609
AC
1/* TUI Interpreter definitions for GDB, the GNU debugger.
2
32d0add0 3 Copyright (C) 2003-2015 Free Software Foundation, Inc.
021e7609
AC
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
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
021e7609
AC
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
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
021e7609
AC
19
20#include "defs.h"
21#include "interps.h"
22#include "top.h"
23#include "event-top.h"
24#include "event-loop.h"
25#include "ui-out.h"
95cd630e 26#include "cli-out.h"
d7b2e967 27#include "tui/tui-data.h"
021e7609 28#include "readline/readline.h"
d7b2e967 29#include "tui/tui-win.h"
021e7609 30#include "tui/tui.h"
d7b2e967 31#include "tui/tui-io.h"
fd664c91
PA
32#include "infrun.h"
33#include "observer.h"
34
35static struct ui_out *tui_ui_out (struct interp *self);
021e7609 36
1cc6d956
MS
37/* Set to 1 when the TUI mode must be activated when we first start
38 gdb. */
63858210
SC
39static int tui_start_enabled = 0;
40
fd664c91
PA
41/* The TUI interpreter. */
42static struct interp *tui_interp;
43
021e7609
AC
44/* Cleanup the tui before exiting. */
45
46static void
47tui_exit (void)
48{
1cc6d956
MS
49 /* Disable the tui. Curses mode is left leaving the screen in a
50 clean state (see endwin()). */
021e7609
AC
51 tui_disable ();
52}
53
fd664c91
PA
54/* Observers for several run control events. If the interpreter is
55 quiet (i.e., another interpreter is being run with
56 interpreter-exec), print nothing. */
57
243a9253
PA
58/* Observer for the normal_stop notification. */
59
60static void
61tui_on_normal_stop (struct bpstats *bs, int print_frame)
62{
63 if (!interp_quiet_p (tui_interp))
64 {
65 if (print_frame)
66 print_stop_event (tui_ui_out (tui_interp));
67 }
68}
69
fd664c91
PA
70/* Observer for the signal_received notification. */
71
72static void
73tui_on_signal_received (enum gdb_signal siggnal)
74{
75 if (!interp_quiet_p (tui_interp))
76 print_signal_received_reason (tui_ui_out (tui_interp), siggnal);
77}
78
79/* Observer for the end_stepping_range notification. */
80
81static void
82tui_on_end_stepping_range (void)
83{
84 if (!interp_quiet_p (tui_interp))
85 print_end_stepping_range_reason (tui_ui_out (tui_interp));
86}
87
88/* Observer for the signal_exited notification. */
89
90static void
91tui_on_signal_exited (enum gdb_signal siggnal)
92{
93 if (!interp_quiet_p (tui_interp))
94 print_signal_exited_reason (tui_ui_out (tui_interp), siggnal);
95}
96
97/* Observer for the exited notification. */
98
99static void
100tui_on_exited (int exitstatus)
101{
102 if (!interp_quiet_p (tui_interp))
103 print_exited_reason (tui_ui_out (tui_interp), exitstatus);
104}
105
106/* Observer for the no_history notification. */
107
108static void
109tui_on_no_history (void)
110{
111 if (!interp_quiet_p (tui_interp))
112 print_no_history_reason (tui_ui_out (tui_interp));
113}
114
92bcb5f9
PA
115/* Observer for the sync_execution_done notification. */
116
117static void
118tui_on_sync_execution_done (void)
119{
120 if (!interp_quiet_p (tui_interp))
121 display_gdb_prompt (NULL);
122}
123
124/* Observer for the command_error notification. */
125
126static void
127tui_on_command_error (void)
128{
129 if (!interp_quiet_p (tui_interp))
130 display_gdb_prompt (NULL);
131}
132
021e7609
AC
133/* These implement the TUI interpreter. */
134
135static void *
4801a9a3 136tui_init (struct interp *self, int top_level)
021e7609
AC
137{
138 /* Install exit handler to leave the screen in a good shape. */
139 atexit (tui_exit);
140
dd1abb8c 141 tui_initialize_static_data ();
021e7609
AC
142
143 tui_initialize_io ();
9612b5ec 144 tui_initialize_win ();
1180b2c8
L
145 if (ui_file_isatty (gdb_stdout))
146 tui_initialize_readline ();
021e7609 147
fd664c91 148 /* If changing this, remember to update cli-interp.c as well. */
243a9253 149 observer_attach_normal_stop (tui_on_normal_stop);
fd664c91
PA
150 observer_attach_signal_received (tui_on_signal_received);
151 observer_attach_end_stepping_range (tui_on_end_stepping_range);
152 observer_attach_signal_exited (tui_on_signal_exited);
153 observer_attach_exited (tui_on_exited);
154 observer_attach_no_history (tui_on_no_history);
92bcb5f9
PA
155 observer_attach_sync_execution_done (tui_on_sync_execution_done);
156 observer_attach_command_error (tui_on_command_error);
fd664c91 157
021e7609
AC
158 return NULL;
159}
160
161static int
162tui_resume (void *data)
163{
95cd630e
DJ
164 struct ui_file *stream;
165
1cc6d956
MS
166 /* gdb_setup_readline will change gdb_stdout. If the TUI was
167 previously writing to gdb_stdout, then set it to the new
168 gdb_stdout afterwards. */
95cd630e
DJ
169
170 stream = cli_out_set_stream (tui_old_uiout, gdb_stdout);
171 if (stream != gdb_stdout)
172 {
173 cli_out_set_stream (tui_old_uiout, stream);
174 stream = NULL;
175 }
176
021e7609 177 gdb_setup_readline ();
95cd630e
DJ
178
179 if (stream != NULL)
180 cli_out_set_stream (tui_old_uiout, gdb_stdout);
181
63858210
SC
182 if (tui_start_enabled)
183 tui_enable ();
021e7609
AC
184 return 1;
185}
186
187static int
188tui_suspend (void *data)
189{
63858210 190 tui_start_enabled = tui_active;
021e7609
AC
191 tui_disable ();
192 return 1;
193}
194
4801a9a3
PA
195static struct ui_out *
196tui_ui_out (struct interp *self)
197{
198 if (tui_active)
199 return tui_out;
200 else
201 return tui_old_uiout;
202}
203
71fff37b 204static struct gdb_exception
021e7609
AC
205tui_exec (void *data, const char *command_str)
206{
e2e0b3e5 207 internal_error (__FILE__, __LINE__, _("tui_exec called"));
021e7609
AC
208}
209
2c0b251b
PA
210/* Provide a prototype to silence -Wmissing-prototypes. */
211extern initialize_file_ftype _initialize_tui_interp;
212
021e7609
AC
213void
214_initialize_tui_interp (void)
215{
216 static const struct interp_procs procs = {
217 tui_init,
218 tui_resume,
219 tui_suspend,
220 tui_exec,
4801a9a3 221 tui_ui_out,
4d09c5b4
AB
222 NULL,
223 cli_command_loop
021e7609 224 };
021e7609 225
1cc6d956 226 /* Create a default uiout builder for the TUI. */
4801a9a3
PA
227 tui_interp = interp_new (INTERP_TUI, &procs);
228 interp_add (tui_interp);
cc4349ed 229 if (interpreter_p && strcmp (interpreter_p, INTERP_TUI) == 0)
63858210
SC
230 tui_start_enabled = 1;
231
232 if (interpreter_p && strcmp (interpreter_p, INTERP_CONSOLE) == 0)
233 {
234 xfree (interpreter_p);
cc4349ed 235 interpreter_p = xstrdup (INTERP_TUI);
63858210 236 }
021e7609 237}
This page took 1.272433 seconds and 4 git commands to generate.