#include "wx/msw/private.h"
#include "wx/timer.h"
+#include <windows.h>
+
#include <ctype.h>
#ifndef __GNUWIN32__
#endif
#include <stdarg.h>
+//// BEGIN for console support: VC++ only
+
+#if defined(__WXDEBUG__) && defined(_MSC_VER) && !defined(__NO_VC_CRTDBG__)
+ #define wxUSE_VC_CRTDBG
+#else
+ #undef wxUSE_VC_CRTDBG
+#endif
+
+#ifdef wxUSE_VC_CRTDBG
+ // VC++ uses this macro as debug/release mode indicator
+ #ifndef _DEBUG
+ #define _DEBUG
+ #endif
+
+ #include <fcntl.h>
+
+#if wxUSE_IOSTREAMH
+// N.B. BC++ doesn't have istream.h, ostream.h
+# include <iostream.h>
+# include <io.h>
+# include <fstream.h>
+
+#else
+# include <istream>
+# include <ostream>
+# include <fstream>
+# ifdef _MSC_VER
+ using namespace std;
+# endif
+#endif
+
+/* Need to undef new if including crtdbg.h */
+# ifdef new
+# undef new
+# endif
+
+# include <crtdbg.h>
+
+# if defined(__WXDEBUG__) && wxUSE_GLOBAL_MEMORY_OPERATORS && wxUSE_DEBUG_NEW_ALWAYS
+# define new new(__FILE__,__LINE__)
+# endif
+
+#endif
+
+/// END for console support
+
// In the WIN.INI file
static const char WX_SECTION[] = "wxWindows";
static const char eHOSTNAME[] = "HostName";
WCHAR wszUserName[256]; // Unicode user name
WCHAR wszDomain[256];
LPBYTE ComputerName;
-
+
struct _SERVER_INFO_100 *si100; // Server structure
struct _USER_INFO_2 *ui; // User structure
-
+
// Convert ASCII user name and domain to Unicode.
-
+
MultiByteToWideChar( CP_ACP, 0, UserName,
strlen(UserName)+1, wszUserName, sizeof(wszUserName) );
MultiByteToWideChar( CP_ACP, 0, Domain,
// Get the computer name of a DC for the specified domain.
// >If you get a link error on this, include netapi32.lib<
-
+
NetGetDCName( NULL, wszDomain, &ComputerName );
-
+
// Look up the user on the DC.
-
+
if(NetUserGetInfo( (LPWSTR) ComputerName,
(LPWSTR) &wszUserName, 2, (LPBYTE *) &ui))
{
printf( "Error getting user information.\n" );
return( FALSE );
}
-
+
// Convert the Unicode full name to ASCII.
-
+
WideCharToMultiByte( CP_ACP, 0, ui->usri2_full_name,
-1, buf, 256, NULL, NULL );
}
// Get user name e.g. Julian Smart
bool wxGetUserName(char *buf, int maxSize)
{
- const char *default_name = "Unknown User";
+ const char *default_name = "Unknown User";
#if defined(__WIN32__)
/*
DWORD nSize = maxSize;
else
*/
// Could use NIS, MS-Mail or other site specific programs
- // Use wxWindows configuration data
+ // Use wxWindows configuration data
GetProfileString(WX_SECTION, eUSERNAME, default_name, buf, maxSize - 1);
return *buf ? TRUE : FALSE;
// }
#endif
{
// Could use NIS, MS-Mail or other site specific programs
- // Use wxWindows configuration data
+ // Use wxWindows configuration data
GetProfileString(WX_SECTION, eUSERNAME, default_name, buf, maxSize - 1);
}
return *buf ? TRUE : FALSE;
// Emit a beeeeeep
void wxBell(void)
{
-#ifdef __WIN32__
- Beep(1000,1000) ; // 1kHz during 1 sec.
-#else
- MessageBeep(-1) ;
-#endif
+ // Removed by RD because IHMO syncronous sound is a Bad Thing. MessageBeep
+ // will do a similar thing anyway if there is no sound card...
+//#ifdef __WIN32__
+// Beep(1000,1000) ; // 1kHz during 1 sec.
+//#else
+ MessageBeep((UINT)-1) ;
+//#endif
}
// Chris Breeze 27/5/98: revised WIN32 code to
if (succ)
{
*value = (int)strtol(s, NULL, 10);
- delete[] s;
+ delete[] s;
return TRUE;
}
else return FALSE;
{
if (wxBusyCursorCount == 0)
return;
-
+
wxBusyCursorCount --;
if (wxBusyCursorCount == 0)
{
bool wxIsBusy(void)
{
return (wxBusyCursorCount > 0);
-}
+}
const char* wxGetHomeDir(wxString *pstr)
{
char *theText = (char *)LockResource(hData);
if (!theText)
return NULL;
-
+
s = copystring(theText);
// Obsolete in WIN32
and thus has limited features and extensibility. DBWIN32 is my creation
to solve this problem.
-The code is essentially a merging of a stripped down version of the DBWIN code
+The code is essentially a merging of a stripped down version of the DBWIN code
from VC 1.5 and DBMON.C with a few 32 bit changes.
-As of version 1.2B, DBWIN32 supports both Win95 and NT. The NT support is
+As of version 1.2B, DBWIN32 supports both Win95 and NT. The NT support is
built into the operating system and works just by running DBWIN32. The Win95
team decided not to support this hook, so I have provided code that will do
this for you. See the file WIN95.TXT for instructions on installing this.
vsprintf(achBuffer, lpOutputString, args);
va_end(args);
- /*
- Do a regular OutputDebugString so that the output is
+ /*
+ Do a regular OutputDebugString so that the output is
still seen in the debugger window if it exists.
- This ifdef is necessary to avoid infinite recursion
+ This ifdef is necessary to avoid infinite recursion
from the inclusion of W95TRACE.H
*/
#ifdef _UNICODE
if ( !heventDBWIN )
{
//MessageBox(NULL, "DBWIN_BUFFER_READY nonexistent", NULL, MB_OK);
- return;
+ return;
}
/* get a handle to the data synch object */
{
// MessageBox(NULL, "DBWIN_DATA_READY nonexistent", NULL, MB_OK);
CloseHandle(heventDBWIN);
- return;
+ return;
}
-
+
hSharedFile = CreateFileMapping((HANDLE)-1, NULL, PAGE_READWRITE, 0, 4096, "DBWIN_BUFFER");
- if (!hSharedFile)
+ if (!hSharedFile)
{
//MessageBox(NULL, "DebugTrace: Unable to create file mapping object DBWIN_BUFFER", "Error", MB_OK);
CloseHandle(heventDBWIN);
}
lpszSharedMem = (LPSTR)MapViewOfFile(hSharedFile, FILE_MAP_WRITE, 0, 0, 512);
- if (!lpszSharedMem)
+ if (!lpszSharedMem)
{
//MessageBox(NULL, "DebugTrace: Unable to map shared memory", "Error", MB_OK);
CloseHandle(heventDBWIN);
#endif
+
+#ifdef wxUSE_VC_CRTDBG
+
+// maximum mumber of lines the output console should have
+static const WORD MAX_CONSOLE_LINES = 500;
+
+BOOL WINAPI MyConsoleHandler( DWORD dwCtrlType ) { // control signal type
+ FreeConsole();
+ return TRUE;
+}
+
+void wxRedirectIOToConsole()
+{
+ int hConHandle;
+ long lStdHandle;
+ CONSOLE_SCREEN_BUFFER_INFO coninfo;
+ FILE *fp;
+
+ // allocate a console for this app
+ AllocConsole();
+
+ // set the screen buffer to be big enough to let us scroll text
+ GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE),
+ &coninfo);
+ coninfo.dwSize.Y = MAX_CONSOLE_LINES;
+ SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE),
+ coninfo.dwSize);
+
+ // redirect unbuffered STDOUT to the console
+ lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);
+ hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
+ if(hConHandle <= 0) return;
+ fp = _fdopen( hConHandle, "w" );
+ *stdout = *fp;
+ setvbuf( stdout, NULL, _IONBF, 0 );
+
+ // redirect unbuffered STDIN to the console
+ lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE);
+ hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
+ if(hConHandle <= 0) return;
+ fp = _fdopen( hConHandle, "r" );
+ *stdin = *fp;
+ setvbuf( stdin, NULL, _IONBF, 0 );
+
+ // redirect unbuffered STDERR to the console
+ lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE);
+ hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
+ if(hConHandle <= 0) return;
+ fp = _fdopen( hConHandle, "w" );
+ *stderr = *fp;
+ setvbuf( stderr, NULL, _IONBF, 0 );
+
+ // make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog
+ // point to console as well
+ ios::sync_with_stdio();
+
+ SetConsoleCtrlHandler(MyConsoleHandler, TRUE);
+
+}
+#else
+// Not supported
+void wxRedirectIOToConsole()
+{
+}
+#endif
+
+