]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/tui/tuiCommand.c
Initial creation of sourceware repository
[thirdparty/binutils-gdb.git] / gdb / tui / tuiCommand.c
1 /*
2 ** tuiCommand.c
3 ** This module contains functions specific to command window processing.
4 */
5
6
7 #include "defs.h"
8 #include "tui.h"
9 #include "tuiData.h"
10 #include "tuiWin.h"
11 #include "tuiIO.h"
12
13
14 /*****************************************
15 ** STATIC LOCAL FUNCTIONS FORWARD DECLS **
16 ******************************************/
17
18
19
20 /*****************************************
21 ** PUBLIC FUNCTIONS **
22 ******************************************/
23
24 /*
25 ** tuiDispatchCtrlChar().
26 ** Dispatch the correct tui function based upon the control character.
27 */
28 unsigned int
29 #ifdef __STDC__
30 tuiDispatchCtrlChar (
31 unsigned int ch)
32 #else
33 tuiDispatchCtrlChar (ch)
34 unsigned int ch;
35 #endif
36 {
37 TuiWinInfoPtr winInfo = tuiWinWithFocus ();
38
39 /*
40 ** If the command window has the logical focus, or no-one does
41 ** assume it is the command window; in this case, pass the
42 ** character on through and do nothing here.
43 */
44 if (winInfo == (TuiWinInfoPtr) NULL || winInfo == cmdWin)
45 return ch;
46 else
47 {
48 unsigned int c = 0, chCopy = ch;
49 register int i;
50 char *term;
51
52 /* If this is an xterm, page next/prev keys aren't returned
53 ** by keypad as a single char, so we must handle them here.
54 ** Seems like a bug in the curses library?
55 */
56 term = (char *) getenv ("TERM");
57 for (i = 0; (term && term[i]); i++)
58 term[i] = toupper (term[i]);
59 if ((strcmp (term, "XTERM") == 0) && m_isStartSequence (ch))
60 {
61 unsigned int pageCh = 0, tmpChar;
62
63 tmpChar = 0;
64 while (!m_isEndSequence (tmpChar))
65 {
66 tmpChar = (int) wgetch (cmdWin->generic.handle);
67 if (!tmpChar)
68 break;
69 if (tmpChar == 53)
70 pageCh = KEY_PPAGE;
71 else if (tmpChar == 54)
72 pageCh = KEY_NPAGE;
73 }
74 chCopy = pageCh;
75 }
76
77 switch (chCopy)
78 {
79 case KEY_NPAGE:
80 tuiScrollForward (winInfo, 0);
81 break;
82 case KEY_PPAGE:
83 tuiScrollBackward (winInfo, 0);
84 break;
85 case KEY_DOWN:
86 case KEY_SF:
87 tuiScrollForward (winInfo, 1);
88 break;
89 case KEY_UP:
90 case KEY_SR:
91 tuiScrollBackward (winInfo, 1);
92 break;
93 case KEY_RIGHT:
94 tuiScrollLeft (winInfo, 1);
95 break;
96 case KEY_LEFT:
97 tuiScrollRight (winInfo, 1);
98 break;
99 case '\f':
100 tuiRefreshAll ();
101 break;
102 default:
103 c = chCopy;
104 break;
105 }
106 return c;
107 }
108 } /* tuiDispatchCtrlChar */
109
110
111 /*
112 ** tuiIncrCommandCharCountBy()
113 ** Increment the current character count in the command window,
114 ** checking for overflow. Returns the new value of the char count.
115 */
116 int
117 #ifdef __STDC__
118 tuiIncrCommandCharCountBy (
119 int count)
120 #else
121 tuiIncrCommandCharCountBy (count)
122 int count;
123 #endif
124 {
125 if (tui_version)
126 {
127 if ((count + cmdWin->detail.commandInfo.curch) >= cmdWin->generic.width)
128 cmdWin->detail.commandInfo.curch =
129 (count + cmdWin->detail.commandInfo.curch) - cmdWin->generic.width;
130 else
131 cmdWin->detail.commandInfo.curch += count;
132 }
133
134 return cmdWin->detail.commandInfo.curch;
135 } /* tuiIncrCommandCharCountBy */
136
137
138 /*
139 ** tuiDecrCommandCharCountBy()
140 ** Decrement the current character count in the command window,
141 ** checking for overflow. Returns the new value of the char count.
142 */
143 int
144 #ifdef __STDC__
145 tuiDecrCommandCharCountBy (
146 int count)
147 #else
148 tuiDecrCommandCharCountBy (count)
149 int count;
150 #endif
151 {
152 if (tui_version)
153 {
154 if ((cmdWin->detail.commandInfo.curch - count) < 0)
155 cmdWin->detail.commandInfo.curch =
156 cmdWin->generic.width + (cmdWin->detail.commandInfo.curch - count);
157 else
158 cmdWin->detail.commandInfo.curch -= count;
159 }
160
161 return cmdWin->detail.commandInfo.curch;
162 } /* tuiDecrCommandCharCountBy */
163
164
165 /*
166 ** tuiSetCommandCharCountTo()
167 ** Set the character count to count.
168 */
169 int
170 #ifdef __STDC__
171 tuiSetCommandCharCountTo (
172 int count)
173 #else
174 tuiSetCommandCharCountTo (count)
175 int count;
176 #endif
177 {
178 if (tui_version)
179 {
180 if (count > cmdWin->generic.width - 1)
181 {
182 cmdWin->detail.commandInfo.curch = 0;
183 tuiIncrCommandCharCountBy (count);
184 }
185 else
186 cmdWin->detail.commandInfo.curch -= count;
187 }
188
189 return cmdWin->detail.commandInfo.curch;
190 } /* tuiSetCommandCharCountTo */
191
192
193
194 /*
195 ** tuiClearCommandCharCount()
196 ** Clear the character count to count.
197 */
198 int
199 #ifdef __STDC__
200 tuiClearCommandCharCount (void)
201 #else
202 tuiClearCommandCharCount ()
203 #endif
204 {
205 if (tui_version)
206 cmdWin->detail.commandInfo.curch = 0;
207
208 return cmdWin->detail.commandInfo.curch;
209 } /* tuiClearCommandCharCount */
210
211
212
213 /*****************************************
214 ** STATIC LOCAL FUNCTIONS **
215 ******************************************/