From: "Pierre Muller" <pierre.muller@ics-cnrs.unistra.fr>
To: <gdb-patches@sourceware.org>
Subject: [RFA] windows-nat.c: Copy console information for new console
Date: Fri, 21 May 2010 22:37:00 -0000 [thread overview]
Message-ID: <001901caf934$fd580460$f8080d20$@muller@ics-cnrs.unistra.fr> (raw)
Using
(gdb) set new-console on
on Windows native is nice for some features but is
also terribly annoying sometimes.
Especially on nice big displays, because
the newly created console is 25 lines times 80 columns
by default which is really not much when you usually work on
60 or more lines.
This patch copies the values of the current console
(if it exists) and uses the same parameters to start
the new-console. I copied both the window and the buffer
size (having a long buffer allows to see history of output...).
I did, on purpose not set the same position for the new
console, which results in a usual shift to the left and down
avoid a complete overlap of the windows.
This make using new-console much easier to use.
A possible extension would be to be able to
specify these parameters with something like
(gdb) set w32 console lines 45
There is apparently no way to specify the
font. This might lead to windows size that are not optimal
for the buffer size used, and it is calculated on the current
console font which might not be the default font. But I don't know
how to find out what the default font is.
I tested this patch on Windows XP and on
Windows 2008 64-bit run mingw64 GDB.
Pierre Muller
Pascal language support maintainer for GDB
2010-05-21 Pierre Muller <muller@ics.u-strasbg.fr>
* windows-nat.c (GetConsoleFontSize, GetCurrentConsoleFont):
New macros.
(windows_create_inferior): Copy current console information
into SI structure if on a console if new-console is on.
(bad_GetCurrentConsoleFont, bad_GetConsoleFontSize): New functions.
(_initialize_loadable): Initialize GetConsoleFontSize and
GetCurrentConsoleFont.
Index: windows-nat.c
===================================================================
RCS file: /cvs/src/src/gdb/windows-nat.c,v
retrieving revision 1.208
diff -u -p -r1.208 windows-nat.c
--- windows-nat.c 16 Apr 2010 07:49:35 -0000 1.208
+++ windows-nat.c 21 May 2010 21:04:16 -0000
@@ -75,6 +75,8 @@
#define GetModuleInformation dyn_GetModuleInformation
#define LookupPrivilegeValueA dyn_LookupPrivilegeValueA
#define OpenProcessToken dyn_OpenProcessToken
+#define GetConsoleFontSize dyn_GetConsoleFontSize
+#define GetCurrentConsoleFont dyn_GetCurrentConsoleFont
static BOOL WINAPI (*AdjustTokenPrivileges)(HANDLE, BOOL,
PTOKEN_PRIVILEGES,
DWORD, PTOKEN_PRIVILEGES,
PDWORD);
@@ -87,7 +89,8 @@ static BOOL WINAPI (*GetModuleInformatio
DWORD);
static BOOL WINAPI (*LookupPrivilegeValueA)(LPCSTR, LPCSTR, PLUID);
static BOOL WINAPI (*OpenProcessToken)(HANDLE, DWORD, PHANDLE);
-
+static BOOL WINAPI (*GetCurrentConsoleFont) (HANDLE, BOOL,
CONSOLE_FONT_INFO *);
+static COORD WINAPI (*GetConsoleFontSize) (HANDLE, DWORD);
static struct target_ops windows_ops;
#undef STARTUPINFO
@@ -1933,7 +1940,39 @@ windows_create_inferior (struct target_o
flags |= CREATE_NEW_PROCESS_GROUP;
if (new_console)
- flags |= CREATE_NEW_CONSOLE;
+ {
+ HANDLE hconsole = CreateFile ("CONOUT$", GENERIC_READ |
GENERIC_WRITE,
+ FILE_SHARE_READ, NULL, OPEN_EXISTING, 0,
0);
+
+ /* If we are on a console, try to copy the parameters of that console
+ to create the new console.
+ The size of the used font is not available on all versions of
+ Windows OS. Furthermore, the current font might not be the default
+ font, but this is still better than before. */
+ if (hconsole != INVALID_HANDLE_VALUE)
+ {
+ CONSOLE_SCREEN_BUFFER_INFO sbinfo;
+ COORD font_size;
+ CONSOLE_FONT_INFO cfi;
+ GetCurrentConsoleFont (hconsole, FALSE, &cfi);
+ font_size = GetConsoleFontSize (hconsole, cfi.nFont);
+ GetConsoleScreenBufferInfo(hconsole, &sbinfo);
+ si.dwXSize = sbinfo.srWindow.Right - sbinfo.srWindow.Left + 1;
+ si.dwYSize = sbinfo.srWindow.Bottom - sbinfo.srWindow.Top + 1;
+ if (font_size.X)
+ si.dwXSize *= font_size.X;
+ else
+ si.dwXSize *= 8;
+ if (font_size.Y)
+ si.dwYSize *= font_size.Y;
+ else
+ si.dwYSize *= 12;
+ si.dwXCountChars = sbinfo.dwSize.X;
+ si.dwYCountChars = sbinfo.dwSize.Y;
+ si.dwFlags |= STARTF_USESIZE | STARTF_USECOUNTCHARS;
+ }
+ flags |= CREATE_NEW_CONSOLE;
+ }
#ifdef __CYGWIN__
if (!useshell)
@@ -2570,6 +2609,21 @@ bad_OpenProcessToken (HANDLE w, DWORD x,
return FALSE;
}
+static BOOL WINAPI
+bad_GetCurrentConsoleFont (HANDLE w, BOOL bMaxWindow, CONSOLE_FONT_INFO *f)
+{
+ f->nFont = 0;
+ return 1;
+}
+static COORD WINAPI
+bad_GetConsoleFontSize (HANDLE w, DWORD nFont)
+{
+ COORD size;
+ size.X = 8;
+ size.Y = 12;
+ return size;
+}
+
/* Load any functions which may not be available in ancient versions
of Windows. */
void
@@ -2586,6 +2640,10 @@ _initialize_loadable (void)
GetProcAddress (hm, "DebugBreakProcess");
DebugSetProcessKillOnExit = (void *)
GetProcAddress (hm, "DebugSetProcessKillOnExit");
+ GetConsoleFontSize = (void *)
+ GetProcAddress (hm, "GetConsoleFontSize");
+ GetCurrentConsoleFont = (void *)
+ GetProcAddress (hm, "GetCurrentConsoleFont");
}
/* Set variables to dummy versions of these processes if the function
@@ -2597,6 +2655,10 @@ _initialize_loadable (void)
DebugActiveProcessStop = bad_DebugActiveProcessStop;
DebugSetProcessKillOnExit = bad_DebugSetProcessKillOnExit;
}
+ if (!GetConsoleFontSize)
+ GetConsoleFontSize = bad_GetConsoleFontSize;
+ if (!GetCurrentConsoleFont)
+ GetCurrentConsoleFont = bad_GetCurrentConsoleFont;
/* Load optional functions used for retrieving filename information
associated with the currently debugged process or its dlls. */
next reply other threads:[~2010-05-21 22:28 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-21 22:37 Pierre Muller [this message]
2010-05-25 21:01 ` Christopher Faylor
2010-05-26 8:07 ` Pierre Muller
2010-05-26 17:20 ` Christopher Faylor
2010-05-27 7:14 ` Pierre Muller
2010-05-27 12:59 ` Pierre Muller
2010-05-27 15:43 ` Christopher Faylor
2010-05-28 15:28 ` Pierre Muller
2010-05-30 18:00 ` Christopher Faylor
2010-06-01 6:57 ` [RFC] windows-nat.c: New oddity after copy console information for new console patch Pierre Muller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='001901caf934$fd580460$f8080d20$@muller@ics-cnrs.unistra.fr' \
--to=pierre.muller@ics-cnrs.unistra.fr \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox