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