Do not increment of decrement enums
[deliverable/binutils-gdb.git] / gdb / tui / tui-hooks.c
CommitLineData
2611b1a5 1/* GDB hooks for TUI.
f33c6cbf 2
32d0add0 3 Copyright (C) 2001-2015 Free Software Foundation, Inc.
2611b1a5
SC
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
2611b1a5
SC
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/>. */
2611b1a5
SC
19
20#include "defs.h"
21#include "symtab.h"
22#include "inferior.h"
23#include "command.h"
24#include "bfd.h"
25#include "symfile.h"
26#include "objfiles.h"
27#include "target.h"
28#include "gdbcore.h"
29#include "event-loop.h"
2b68e2c5 30#include "event-top.h"
2611b1a5
SC
31#include "frame.h"
32#include "breakpoint.h"
2b68e2c5
SC
33#include "ui-out.h"
34#include "top.h"
06d3b283 35#include "observer.h"
2611b1a5
SC
36#include <unistd.h>
37#include <fcntl.h>
38
d7b2e967 39#include "tui/tui.h"
6a83354a 40#include "tui/tui-hooks.h"
d7b2e967
AC
41#include "tui/tui-data.h"
42#include "tui/tui-layout.h"
43#include "tui/tui-io.h"
44#include "tui/tui-regs.h"
45#include "tui/tui-win.h"
46#include "tui/tui-stack.h"
47#include "tui/tui-windata.h"
48#include "tui/tui-winsource.h"
2611b1a5 49
6a83354a 50#include "gdb_curses.h"
96ec9981 51
4a1bcc8c
MK
52/* This redefines CTRL if it is not already defined, so it must come
53 after terminal state releated include files like <term.h> and
54 "gdb_curses.h". */
55#include "readline/readline.h"
56
2611b1a5
SC
57int tui_target_has_run = 0;
58
2611b1a5
SC
59static void
60tui_new_objfile_hook (struct objfile* objfile)
61{
62 if (tui_active)
1f393769 63 tui_display_main ();
2611b1a5
SC
64}
65
3adda9d8 66/* Prevent recursion of deprecated_register_changed_hook(). */
2611b1a5
SC
67static int tui_refreshing_registers = 0;
68
2611b1a5
SC
69static void
70tui_register_changed_hook (int regno)
71{
72 struct frame_info *fi;
73
206415a3
DJ
74 fi = get_selected_frame (NULL);
75 if (tui_refreshing_registers == 0)
2611b1a5
SC
76 {
77 tui_refreshing_registers = 1;
edae1ccf 78 tui_check_data_values (fi);
2611b1a5
SC
79 tui_refreshing_registers = 0;
80 }
81}
82
2611b1a5
SC
83/* Breakpoint creation hook.
84 Update the screen to show the new breakpoint. */
85static void
8d3788bd 86tui_event_create_breakpoint (struct breakpoint *b)
2611b1a5 87{
00b2bad4 88 tui_update_all_breakpoint_info ();
2611b1a5
SC
89}
90
91/* Breakpoint deletion hook.
92 Refresh the screen to update the breakpoint marks. */
93static void
8d3788bd 94tui_event_delete_breakpoint (struct breakpoint *b)
2611b1a5 95{
00b2bad4 96 tui_update_all_breakpoint_info ();
2611b1a5
SC
97}
98
99static void
8d3788bd 100tui_event_modify_breakpoint (struct breakpoint *b)
2611b1a5 101{
00b2bad4 102 tui_update_all_breakpoint_info ();
2611b1a5
SC
103}
104
4ca4d161 105/* Called when a command is about to proceed the inferior. */
2611b1a5 106
4ca4d161
SC
107static void
108tui_about_to_proceed (void)
109{
2611b1a5
SC
110 /* Leave tui mode (optional). */
111#if 0
112 if (tui_active)
113 {
114 target_terminal_ours ();
115 endwin ();
116 target_terminal_inferior ();
117 }
118#endif
119 tui_target_has_run = 1;
2611b1a5
SC
120}
121
122/* The selected frame has changed. This is happens after a target
1cc6d956
MS
123 stop or when the user explicitly changes the frame
124 (up/down/thread/...). */
2611b1a5
SC
125static void
126tui_selected_frame_level_changed_hook (int level)
127{
128 struct frame_info *fi;
f23d1b92 129 CORE_ADDR pc;
2611b1a5 130
3adda9d8
DJ
131 /* Negative level means that the selected frame was cleared. */
132 if (level < 0)
133 return;
134
135 fi = get_selected_frame (NULL);
1cc6d956
MS
136 /* Ensure that symbols for this frame are read in. Also, determine
137 the source language of this frame, and switch to it if
138 desired. */
f23d1b92 139 if (get_frame_pc_if_available (fi, &pc))
2611b1a5
SC
140 {
141 struct symtab *s;
f23d1b92 142
34248c3a 143 s = find_pc_line_symtab (pc);
1cc6d956 144 /* elz: This if here fixes the problem with the pc not being
f23d1b92
PA
145 displayed in the tui asm layout, with no debug symbols. The
146 value of s would be 0 here, and select_source_symtab would
147 abort the command by calling the 'error' function. */
2611b1a5 148 if (s)
f23d1b92
PA
149 select_source_symtab (s);
150 }
151
152 /* Display the frame position (even if there is no symbols or the PC
153 is not known). */
154 tui_show_frame_info (fi);
155
156 /* Refresh the register window if it's visible. */
157 if (tui_is_window_visible (DATA_WIN))
158 {
159 tui_refreshing_registers = 1;
160 tui_check_data_values (fi);
161 tui_refreshing_registers = 0;
2611b1a5
SC
162 }
163}
164
165/* Called from print_frame_info to list the line we stopped in. */
166static void
08ef48c5
MS
167tui_print_frame_info_listing_hook (struct symtab *s,
168 int line,
169 int stopline,
170 int noerror)
2611b1a5
SC
171{
172 select_source_symtab (s);
206415a3 173 tui_show_frame_info (get_selected_frame (NULL));
2611b1a5
SC
174}
175
d69e6a33
SC
176/* Perform all necessary cleanups regarding our module's inferior data
177 that is required after the inferior INF just exited. */
178
cda8ab40 179static void
d69e6a33 180tui_inferior_exit (struct inferior *inf)
cda8ab40 181{
d69e6a33
SC
182 /* Leave the SingleKey mode to make sure the gdb prompt is visible. */
183 tui_set_key_mode (TUI_COMMAND_MODE);
47d3492a 184 tui_show_frame_info (0);
cda8ab40
SC
185 tui_display_main ();
186}
187
383f836e
TT
188/* Observers created when installing TUI hooks. */
189static struct observer *tui_bp_created_observer;
190static struct observer *tui_bp_deleted_observer;
191static struct observer *tui_bp_modified_observer;
d69e6a33 192static struct observer *tui_inferior_exit_observer;
4ca4d161 193static struct observer *tui_about_to_proceed_observer;
383f836e 194
2611b1a5
SC
195/* Install the TUI specific hooks. */
196void
197tui_install_hooks (void)
198{
9a2b4c1b
MS
199 deprecated_selected_frame_level_changed_hook
200 = tui_selected_frame_level_changed_hook;
201 deprecated_print_frame_info_listing_hook
202 = tui_print_frame_info_listing_hook;
2611b1a5 203
2611b1a5 204 /* Install the event hooks. */
383f836e
TT
205 tui_bp_created_observer
206 = observer_attach_breakpoint_created (tui_event_create_breakpoint);
207 tui_bp_deleted_observer
208 = observer_attach_breakpoint_deleted (tui_event_delete_breakpoint);
209 tui_bp_modified_observer
210 = observer_attach_breakpoint_modified (tui_event_modify_breakpoint);
d69e6a33
SC
211 tui_inferior_exit_observer
212 = observer_attach_inferior_exit (tui_inferior_exit);
4ca4d161
SC
213 tui_about_to_proceed_observer
214 = observer_attach_about_to_proceed (tui_about_to_proceed);
2611b1a5 215
9a4105ab 216 deprecated_register_changed_hook = tui_register_changed_hook;
2611b1a5
SC
217}
218
219/* Remove the TUI specific hooks. */
220void
221tui_remove_hooks (void)
222{
9a4105ab
AC
223 deprecated_selected_frame_level_changed_hook = 0;
224 deprecated_print_frame_info_listing_hook = 0;
225 deprecated_query_hook = 0;
9a4105ab 226 deprecated_register_changed_hook = 0;
2611b1a5 227
383f836e
TT
228 /* Remove our observers. */
229 observer_detach_breakpoint_created (tui_bp_created_observer);
230 tui_bp_created_observer = NULL;
231 observer_detach_breakpoint_deleted (tui_bp_deleted_observer);
232 tui_bp_deleted_observer = NULL;
233 observer_detach_breakpoint_modified (tui_bp_modified_observer);
234 tui_bp_modified_observer = NULL;
d69e6a33
SC
235 observer_detach_inferior_exit (tui_inferior_exit_observer);
236 tui_inferior_exit_observer = NULL;
4ca4d161
SC
237 observer_detach_about_to_proceed (tui_about_to_proceed_observer);
238 tui_about_to_proceed_observer = NULL;
2611b1a5
SC
239}
240
021e7609 241void _initialize_tui_hooks (void);
2b68e2c5 242
021e7609
AC
243void
244_initialize_tui_hooks (void)
2611b1a5 245{
2611b1a5 246 /* Install the permanent hooks. */
06d3b283 247 observer_attach_new_objfile (tui_new_objfile_hook);
2611b1a5 248}
This page took 1.425707 seconds and 4 git commands to generate.