]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/tui/tui-interp.c
Update years in copyright notice for the GDB files.
[thirdparty/binutils-gdb.git] / gdb / tui / tui-interp.c
CommitLineData
021e7609
AC
1/* TUI Interpreter definitions for GDB, the GNU debugger.
2
8acc9f48 3 Copyright (C) 2003-2013 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"
60250e8b 32#include "exceptions.h"
021e7609 33
1cc6d956
MS
34/* Set to 1 when the TUI mode must be activated when we first start
35 gdb. */
63858210
SC
36static int tui_start_enabled = 0;
37
021e7609
AC
38/* Cleanup the tui before exiting. */
39
40static void
41tui_exit (void)
42{
1cc6d956
MS
43 /* Disable the tui. Curses mode is left leaving the screen in a
44 clean state (see endwin()). */
021e7609
AC
45 tui_disable ();
46}
47
956c2c8b
PA
48/* True if TUI is the top-level interpreter. */
49static int tui_is_toplevel = 0;
50
021e7609
AC
51/* These implement the TUI interpreter. */
52
53static void *
4801a9a3 54tui_init (struct interp *self, int top_level)
021e7609 55{
956c2c8b
PA
56 tui_is_toplevel = top_level;
57
021e7609
AC
58 /* Install exit handler to leave the screen in a good shape. */
59 atexit (tui_exit);
60
dd1abb8c 61 tui_initialize_static_data ();
021e7609
AC
62
63 tui_initialize_io ();
9612b5ec 64 tui_initialize_win ();
1180b2c8
L
65 if (ui_file_isatty (gdb_stdout))
66 tui_initialize_readline ();
021e7609
AC
67
68 return NULL;
69}
70
956c2c8b
PA
71/* True if enabling the TUI is allowed. Example, if the top level
72 interpreter is MI, enabling curses will certainly lose. */
73
74int
75tui_allowed_p (void)
76{
77 /* Only if TUI is the top level interpreter. Also don't try to
78 setup curses (and print funny control characters) if we're not
79 outputting to a terminal. */
80 return tui_is_toplevel && ui_file_isatty (gdb_stdout);
81}
82
021e7609
AC
83static int
84tui_resume (void *data)
85{
95cd630e
DJ
86 struct ui_file *stream;
87
1cc6d956
MS
88 /* gdb_setup_readline will change gdb_stdout. If the TUI was
89 previously writing to gdb_stdout, then set it to the new
90 gdb_stdout afterwards. */
95cd630e
DJ
91
92 stream = cli_out_set_stream (tui_old_uiout, gdb_stdout);
93 if (stream != gdb_stdout)
94 {
95 cli_out_set_stream (tui_old_uiout, stream);
96 stream = NULL;
97 }
98
021e7609 99 gdb_setup_readline ();
95cd630e
DJ
100
101 if (stream != NULL)
102 cli_out_set_stream (tui_old_uiout, gdb_stdout);
103
63858210
SC
104 if (tui_start_enabled)
105 tui_enable ();
021e7609
AC
106 return 1;
107}
108
109static int
110tui_suspend (void *data)
111{
63858210 112 tui_start_enabled = tui_active;
021e7609
AC
113 tui_disable ();
114 return 1;
115}
116
117/* Display the prompt if we are silent. */
118
119static int
120tui_display_prompt_p (void *data)
121{
122 if (interp_quiet_p (NULL))
123 return 0;
124 else
125 return 1;
126}
127
4801a9a3
PA
128static struct ui_out *
129tui_ui_out (struct interp *self)
130{
131 if (tui_active)
132 return tui_out;
133 else
134 return tui_old_uiout;
135}
136
71fff37b 137static struct gdb_exception
021e7609
AC
138tui_exec (void *data, const char *command_str)
139{
e2e0b3e5 140 internal_error (__FILE__, __LINE__, _("tui_exec called"));
021e7609
AC
141}
142
2c0b251b
PA
143/* Provide a prototype to silence -Wmissing-prototypes. */
144extern initialize_file_ftype _initialize_tui_interp;
145
021e7609
AC
146void
147_initialize_tui_interp (void)
148{
149 static const struct interp_procs procs = {
150 tui_init,
151 tui_resume,
152 tui_suspend,
153 tui_exec,
154 tui_display_prompt_p,
4801a9a3 155 tui_ui_out,
021e7609 156 };
4801a9a3 157 struct interp *tui_interp;
021e7609 158
1cc6d956 159 /* Create a default uiout builder for the TUI. */
4801a9a3
PA
160 tui_interp = interp_new (INTERP_TUI, &procs);
161 interp_add (tui_interp);
cc4349ed 162 if (interpreter_p && strcmp (interpreter_p, INTERP_TUI) == 0)
63858210
SC
163 tui_start_enabled = 1;
164
165 if (interpreter_p && strcmp (interpreter_p, INTERP_CONSOLE) == 0)
166 {
167 xfree (interpreter_p);
cc4349ed 168 interpreter_p = xstrdup (INTERP_TUI);
63858210 169 }
021e7609 170}