51gdb_select (
int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
52 struct timeval *timeout)
54 static HANDLE never_handle;
55 HANDLE handles[MAXIMUM_WAIT_OBJECTS];
61 struct serial *scbs[MAXIMUM_WAIT_OBJECTS];
74 Sleep (timeout->tv_sec * 1000 + timeout->tv_usec / 1000);
84 HANDLE
read = NULL, except = NULL;
90 gdb_assert (!writefds || !FD_ISSET (
fd, writefds));
92 if ((!readfds || !FD_ISSET (
fd, readfds))
93 && (!exceptfds || !FD_ISSET (
fd, exceptfds)))
99 serial_wait_handle (scb, &
read, &except);
100 scbs[num_scbs++] = scb;
104 read = (HANDLE) _get_osfhandle (
fd);
108 never_handle = CreateEvent (0, FALSE, FALSE, 0);
110 except = never_handle;
113 if (readfds && FD_ISSET (
fd, readfds))
115 gdb_assert (num_handles < MAXIMUM_WAIT_OBJECTS);
116 handles[num_handles++] =
read;
119 if (exceptfds && FD_ISSET (
fd, exceptfds))
121 gdb_assert (num_handles < MAXIMUM_WAIT_OBJECTS);
122 handles[num_handles++] = except;
126 gdb_assert (num_handles <= MAXIMUM_WAIT_OBJECTS);
128 event = WaitForMultipleObjects (num_handles,
132 ? (timeout->tv_sec * 1000
133 + timeout->tv_usec / 1000)
138 gdb_assert (!(WAIT_ABANDONED_0 <= event
139 && event < WAIT_ABANDONED_0 + num_handles));
141 for (indx = 0; indx < num_scbs; ++indx)
142 serial_done_wait_handle (scbs[indx]);
143 if (event == WAIT_FAILED)
145 if (event == WAIT_TIMEOUT)
149 h = handles[
event - WAIT_OBJECT_0];
150 for (
fd = 0, indx = 0;
fd < n; ++
fd)
154 if ((!readfds || !FD_ISSET (
fd, readfds))
155 && (!exceptfds || !FD_ISSET (
fd, exceptfds)))
158 if (readfds && FD_ISSET (
fd, readfds))
160 fd_h = handles[indx++];
163 if (fd_h != h && WaitForSingleObject (fd_h, 0) != WAIT_OBJECT_0)
164 FD_CLR (
fd, readfds);
169 if (exceptfds && FD_ISSET (
fd, exceptfds))
171 fd_h = handles[indx++];
174 if (fd_h != h && WaitForSingleObject (fd_h, 0) != WAIT_OBJECT_0)
175 FD_CLR (
fd, exceptfds);
229 hstdout = (HANDLE)_get_osfhandle (fileno (fstream));
231 CONSOLE_SCREEN_BUFFER_INFO csbi;
233 if (
hstdout != INVALID_HANDLE_VALUE
234 && GetConsoleMode (
hstdout, &cmode) != 0
235 && GetConsoleScreenBufferInfo (
hstdout, &csbi))
240 else if (
hstdout != INVALID_HANDLE_VALUE)
249 static int fg_color[] = {
253 FOREGROUND_GREEN | FOREGROUND_RED,
255 FOREGROUND_BLUE | FOREGROUND_RED,
256 FOREGROUND_BLUE | FOREGROUND_GREEN,
257 FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE
259 static int bg_color[] = {
263 BACKGROUND_GREEN | BACKGROUND_RED,
265 BACKGROUND_BLUE | BACKGROUND_RED,
266 BACKGROUND_BLUE | BACKGROUND_GREEN,
267 BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE
274 for ( ; (c = *linebuf) != 0; linebuf += n_read)
279 bool parsed = style.parse (linebuf, &n_read);
291 int fgcolor, bgcolor, bright, inverse;
295 fgcolor = fg_color[fg.
get_value () & 15];
301 bgcolor = bg_color[bg.
get_value () & 15];
306 switch (style.get_intensity ())
316 gdb_assert_not_reached (
"invalid intensity");
320 if (style.is_reverse ())
329 fgcolor = (bgcolor >> 4);
333 fgcolor |= FOREGROUND_INTENSITY;
335 SHORT attr = (bgcolor & (15 << 4)) | (fgcolor & 15);
338 SetConsoleTextAttribute (
hstdout, attr);
351 CONSOLE_SCREEN_BUFFER_INFO csbi;
354 GetConsoleScreenBufferInfo (
hstdout, &csbi);
358 start_pos = csbi.dwCursorPosition;
359 nchars = csbi.dwSize.X - start_pos.X;
362 start_pos, &written);
363 FillConsoleOutputCharacter (
hstdout,
' ', nchars,
364 start_pos, &written);