constify tui/tui-io.c
[deliverable/binutils-gdb.git] / gdb / tui / tui-command.c
1 /* Specific command window processing.
2
3 Copyright (C) 1998-2015 Free Software Foundation, Inc.
4
5 Contributed by Hewlett-Packard Company.
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
21
22 #include "defs.h"
23 #include <ctype.h>
24 #include "tui/tui.h"
25 #include "tui/tui-data.h"
26 #include "tui/tui-win.h"
27 #include "tui/tui-io.h"
28 #include "tui/tui-command.h"
29
30 #include "gdb_curses.h"
31 /*****************************************
32 ** STATIC LOCAL FUNCTIONS FORWARD DECLS **
33 ******************************************/
34
35
36
37 /*****************************************
38 ** PUBLIC FUNCTIONS **
39 ******************************************/
40
41 /* Dispatch the correct tui function based upon the control
42 character. */
43 unsigned int
44 tui_dispatch_ctrl_char (unsigned int ch)
45 {
46 struct tui_win_info *win_info = tui_win_with_focus ();
47
48 /* Handle the CTRL-L refresh for each window. */
49 if (ch == '\f')
50 tui_refresh_all_win ();
51
52 /* If the command window has the logical focus, or no-one does
53 assume it is the command window; in this case, pass the character
54 on through and do nothing here. */
55 if (win_info == NULL || win_info == TUI_CMD_WIN)
56 return ch;
57 else
58 {
59 unsigned int c = 0, ch_copy = ch;
60 int i;
61 char *term;
62
63 /* If this is an xterm, page next/prev keys aren't returned by
64 keypad as a single char, so we must handle them here. Seems
65 like a bug in the curses library? */
66 term = (char *) getenv ("TERM");
67 if (term)
68 {
69 for (i = 0; term[i]; i++)
70 term[i] = toupper (term[i]);
71 if ((strcmp (term, "XTERM") == 0)
72 && key_is_start_sequence (ch))
73 {
74 unsigned int page_ch = 0;
75 unsigned int tmp_char;
76 WINDOW *w = TUI_CMD_WIN->generic.handle;
77
78 tmp_char = 0;
79 while (!key_is_end_sequence (tmp_char))
80 {
81 tmp_char = (int) wgetch (w);
82 if (tmp_char == ERR)
83 {
84 return ch;
85 }
86 if (!tmp_char)
87 break;
88 if (tmp_char == 53)
89 page_ch = KEY_PPAGE;
90 else if (tmp_char == 54)
91 page_ch = KEY_NPAGE;
92 else
93 {
94 return 0;
95 }
96 }
97 ch_copy = page_ch;
98 }
99 }
100
101 switch (ch_copy)
102 {
103 case KEY_NPAGE:
104 tui_scroll_forward (win_info, 0);
105 break;
106 case KEY_PPAGE:
107 tui_scroll_backward (win_info, 0);
108 break;
109 case KEY_DOWN:
110 case KEY_SF:
111 tui_scroll_forward (win_info, 1);
112 break;
113 case KEY_UP:
114 case KEY_SR:
115 tui_scroll_backward (win_info, 1);
116 break;
117 case KEY_RIGHT:
118 tui_scroll_left (win_info, 1);
119 break;
120 case KEY_LEFT:
121 tui_scroll_right (win_info, 1);
122 break;
123 case '\f':
124 break;
125 default:
126 c = ch_copy;
127 break;
128 }
129 return c;
130 }
131 }
132
133 /* See tui-command.h. */
134
135 void
136 tui_refresh_cmd_win (void)
137 {
138 WINDOW *w = TUI_CMD_WIN->generic.handle;
139
140 wrefresh (w);
141
142 /* FIXME: It's not clear why this is here.
143 It was present in the original tui_puts code and is kept in order to
144 not introduce some subtle breakage. */
145 fflush (stdout);
146 }
This page took 0.031942 seconds and 4 git commands to generate.