From: "Pierre Muller" <pierre.muller@ics-cnrs.unistra.fr>
To: <gdb-patches@sourceware.org>
Subject: RE: [RFA] windows-nat.c: Copy console information for new console
Date: Wed, 26 May 2010 08:07:00 -0000 [thread overview]
Message-ID: <000601cafca7$ead3af80$c07b0e80$@muller@ics-cnrs.unistra.fr> (raw)
In-Reply-To: <20100525205241.GA5298@ednor.casa.cgf.cx>
> -----Message d'origine-----
De : gdb-patches-owner@sourceware.org [mailto:gdb-patches-
> owner@sourceware.org] De la part de Christopher Faylor
> I don't mind the concept but this function is becoming pretty big so I
> would appreciate it if you would move all of the logic into a function.
> Maybe call it "set_console_info()" and pass it &flags, &si.
>
> cgf
You are right, this is cleaner, nevertheless flags isn't
used much, thus I moved the code into a new function
called windows_set_console_info, with a unique parameter &si.
How does that look like now?
Pierre
2010-05-26 Pierre Muller <muller@ics.u-strasbg.fr>
* windows-nat.c (GetConsoleFontSize, GetCurrentConsoleFont):
New macros.
(windows_set_console_info): New function.
(windows_create_inferior): Call windows_set_console_info
if NEW_CONSOLE is true.
(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.209
diff -u -p -r1.209 windows-nat.c
--- windows-nat.c 25 May 2010 07:38:18 -0000 1.209
+++ windows-nat.c 26 May 2010 07:43:22 -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,6 +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;
@@ -1895,6 +1899,43 @@ windows_open (char *arg, int from_tty)
error (_("Use the \"run\" command to start a Unix child process."));
}
+/* 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. */
+
+static void
+windows_set_console_info (STARTUPINFO *si)
+{
+ HANDLE hconsole = CreateFile ("CONOUT$", GENERIC_READ | GENERIC_WRITE,
+ FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0);
+
+ 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;
+ }
+}
+
/* Start an inferior windows child process and sets inferior_ptid to its
pid.
EXEC_FILE is the file to run.
ALLARGS is a string containing the arguments to the program.
@@ -1937,7 +1978,10 @@ windows_create_inferior (struct target_o
flags |= CREATE_NEW_PROCESS_GROUP;
if (new_console)
- flags |= CREATE_NEW_CONSOLE;
+ {
+ windows_set_console_info (&si);
+ flags |= CREATE_NEW_CONSOLE;
+ }
#ifdef __CYGWIN__
if (!useshell)
@@ -2574,6 +2618,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
@@ -2590,6 +2649,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
@@ -2601,6 +2664,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 prev parent reply other threads:[~2010-05-26 7:49 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-21 22:37 Pierre Muller
2010-05-25 21:01 ` Christopher Faylor
2010-05-26 8:07 ` Pierre Muller [this message]
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='000601cafca7$ead3af80$c07b0e80$@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