]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/tui/tui-command.c
Update years in copyright notice for the GDB files.
[thirdparty/binutils-gdb.git] / gdb / tui / tui-command.c
CommitLineData
f377b406 1/* Specific command window processing.
f33c6cbf 2
8acc9f48 3 Copyright (C) 1998-2013 Free Software Foundation, Inc.
f33c6cbf 4
f377b406
SC
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
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
f377b406
SC
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
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c 21
96ec9981
DJ
22#include "defs.h"
23#include <ctype.h>
d7b2e967
AC
24#include "tui/tui.h"
25#include "tui/tui-data.h"
26#include "tui/tui-win.h"
27#include "tui/tui-io.h"
2c0b251b 28#include "tui/tui-command.h"
f33c6cbf 29
6a83354a 30#include "gdb_curses.h"
88289b6e 31#include "gdb_string.h"
4e8f7a8b 32
c906108c
SS
33
34/*****************************************
35** STATIC LOCAL FUNCTIONS FORWARD DECLS **
36******************************************/
37
38
39
40/*****************************************
41** PUBLIC FUNCTIONS **
42******************************************/
43
1cc6d956
MS
44/* Dispatch the correct tui function based upon the control
45 character. */
c906108c 46unsigned int
b0a30fce 47tui_dispatch_ctrl_char (unsigned int ch)
c906108c 48{
6d012f14 49 struct tui_win_info *win_info = tui_win_with_focus ();
c906108c 50
ca9d4aea
SC
51 /* Handle the CTRL-L refresh for each window. */
52 if (ch == '\f')
53 tui_refresh_all_win ();
54
55 /* If the command window has the logical focus, or no-one does
1cc6d956
MS
56 assume it is the command window; in this case, pass the character
57 on through and do nothing here. */
6d012f14 58 if (win_info == NULL || win_info == TUI_CMD_WIN)
c906108c
SS
59 return ch;
60 else
61 {
6ba8e26f 62 unsigned int c = 0, ch_copy = ch;
d02c80cd 63 int i;
c906108c
SS
64 char *term;
65
ef5eab5a
MS
66 /* If this is an xterm, page next/prev keys aren't returned by
67 keypad as a single char, so we must handle them here. Seems
68 like a bug in the curses library? */
c906108c 69 term = (char *) getenv ("TERM");
bbe6b987 70 if (term)
c906108c 71 {
bbe6b987
AS
72 for (i = 0; term[i]; i++)
73 term[i] = toupper (term[i]);
e5908723
MS
74 if ((strcmp (term, "XTERM") == 0)
75 && key_is_start_sequence (ch))
c906108c 76 {
bbe6b987
AS
77 unsigned int page_ch = 0;
78 unsigned int tmp_char;
ca9d4aea 79 WINDOW *w = TUI_CMD_WIN->generic.handle;
bbe6b987
AS
80
81 tmp_char = 0;
82 while (!key_is_end_sequence (tmp_char))
9b2d6cca 83 {
bbe6b987
AS
84 tmp_char = (int) wgetch (w);
85 if (tmp_char == ERR)
86 {
87 return ch;
88 }
89 if (!tmp_char)
90 break;
91 if (tmp_char == 53)
92 page_ch = KEY_PPAGE;
93 else if (tmp_char == 54)
94 page_ch = KEY_NPAGE;
95 else
96 {
97 return 0;
98 }
9b2d6cca 99 }
bbe6b987 100 ch_copy = page_ch;
c906108c 101 }
c906108c
SS
102 }
103
6ba8e26f 104 switch (ch_copy)
c906108c
SS
105 {
106 case KEY_NPAGE:
6d012f14 107 tui_scroll_forward (win_info, 0);
c906108c
SS
108 break;
109 case KEY_PPAGE:
6d012f14 110 tui_scroll_backward (win_info, 0);
c906108c
SS
111 break;
112 case KEY_DOWN:
113 case KEY_SF:
6d012f14 114 tui_scroll_forward (win_info, 1);
c906108c
SS
115 break;
116 case KEY_UP:
117 case KEY_SR:
6d012f14 118 tui_scroll_backward (win_info, 1);
c906108c
SS
119 break;
120 case KEY_RIGHT:
6d012f14 121 tui_scroll_left (win_info, 1);
c906108c
SS
122 break;
123 case KEY_LEFT:
6d012f14 124 tui_scroll_right (win_info, 1);
c906108c
SS
125 break;
126 case '\f':
ca9d4aea 127 break;
c906108c 128 default:
6ba8e26f 129 c = ch_copy;
c906108c
SS
130 break;
131 }
132 return c;
133 }
9b2d6cca 134}