#include "wx/msw/private.h"
#include "wx/timer.h"
+#include "wx/intl.h"
+
+#include <windows.h>
#include <ctype.h>
-#ifndef __GNUWIN32__
+#if !defined(__GNUWIN32__) && !defined(__SALFORDC__)
#include <direct.h>
+
+#ifndef __MWERKS__
#include <dos.h>
+#endif
#endif //GNUWIN32
-#ifdef __GNUWIN32__
+#if defined(__GNUWIN32__) && !defined(__TWIN32__)
#include <sys/unistd.h>
#include <sys/stat.h>
#endif //GNUWIN32
#endif
#include <stdarg.h>
+//// BEGIN for console support: VC++ only
+
+#if defined(__WXDEBUG__) && !defined(__WIN16__) && 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
+
+#ifndef __WIN16__
+# include <crtdbg.h>
+#endif
+
+# 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";
// Get full hostname (eg. DoDo.BSn-Germany.crg.de)
bool wxGetHostName(char *buf, int maxSize)
{
-#ifdef __WIN32__
+#if defined(__WIN32__) && !defined(__TWIN32__)
DWORD nSize = maxSize;
return (::GetComputerName(buf, &nSize) != 0);
#else
// Get user ID e.g. jacs
bool wxGetUserId(char *buf, int maxSize)
{
-#if defined(__WIN32__) && !defined(__win32s__) && 0
+#if defined(__WIN32__) && !defined(__win32s__) && !defined(__TWIN32__)
+
+ // VZ: why should it be so complicated??
+#if 0
// Gets the current user's full name according to the MS article PSS ID
// Number: Q119670
// Seems to be the same as the login name for me?
-1, buf, 256, NULL, NULL );
}
return( TRUE );
-/*
- DWORD nSize = maxSize;
- return ::GetUserName(buf, &nSize);
-*/
-#else
+#else // 1
+ DWORD nSize = maxSize;
+ if ( ::GetUserName(buf, &nSize) == 0 )
+ {
+ wxLogSysError("Can not get user name");
+
+ return FALSE;
+ }
+
+ return TRUE;
+#endif // 0/1
+
+#else // Win16 or Win32s
char *user;
const char *default_id = "anonymous";
// Get user name e.g. Julian Smart
bool wxGetUserName(char *buf, int maxSize)
{
- const char *default_name = "Unknown User";
-#if defined(__WIN32__)
-/*
- DWORD nSize = maxSize;
- In VC++ 4.0, results in unresolved symbol __imp__GetUserNameA
- if (GetUserName(buf, &nSize))
- return TRUE;
- else
-*/
- // Could use NIS, MS-Mail or other site specific programs
- // Use wxWindows configuration data
- GetProfileString(WX_SECTION, eUSERNAME, default_name, buf, maxSize - 1);
- return *buf ? TRUE : FALSE;
-// }
-#else
-#if !defined(__WATCOMC__) && !defined(__GNUWIN32__) && wxUSE_PENWINDOWS
+#if wxUSE_PENWINDOWS && !defined(__WATCOMC__) && !defined(__GNUWIN32__)
extern HANDLE g_hPenWin; // PenWindows Running?
if (g_hPenWin)
{
{
// Could use NIS, MS-Mail or other site specific programs
// Use wxWindows configuration data
- GetProfileString(WX_SECTION, eUSERNAME, default_name, buf, maxSize - 1);
+ bool ok = GetProfileString(WX_SECTION, eUSERNAME, "", buf, maxSize - 1) != 0;
+ if ( !ok )
+ {
+ ok = wxGetUserId(buf, maxSize);
+ }
+
+ if ( !ok )
+ {
+ strncpy(buf, "Unknown User", maxSize);
+ }
}
- return *buf ? TRUE : FALSE;
-#endif
+
+ return TRUE;
}
int wxKill(long pid, int sig)
// Get free memory in bytes, or -1 if cannot determine amount (e.g. on UNIX)
long wxGetFreeMemory(void)
{
-#if defined(__WIN32__) && !defined(__BORLANDC__)
+#if defined(__WIN32__) && !defined(__BORLANDC__) && !defined(__TWIN32__)
MEMORYSTATUS memStatus;
memStatus.dwLength = sizeof(MEMORYSTATUS);
GlobalMemoryStatus(&memStatus);
//#ifdef __WIN32__
// Beep(1000,1000) ; // 1kHz during 1 sec.
//#else
- MessageBeep(-1) ;
+ MessageBeep((UINT)-1) ;
//#endif
}
if (majorVsn) *majorVsn = 0;
if (minorVsn) *minorVsn = 0;
-#ifdef WIN32
+#if defined(__WIN32__) && !defined(__SC__)
OSVERSIONINFO info;
memset(&info, 0, sizeof(OSVERSIONINFO));
info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
return wxWINDOWS; // error if we get here, return generic value
#else
// Win16 code...
- int retValue ;
+ int retValue = 0;
# ifdef __WINDOWS_386__
retValue = wxWIN386;
# else
{
wxString& strDir = *pstr;
- #ifdef __UNIX__
+ #if defined(__UNIX__) && !defined(__TWIN32__)
const char *szHome = getenv("HOME");
if ( szHome == NULL ) {
// we're homeless...
char *wxLoadUserResource(const wxString& resourceName, const wxString& resourceType)
{
char *s = NULL;
-#ifndef __WIN32__
+#if !defined(__WIN32__) || defined(__TWIN32__)
HRSRC hResource = ::FindResource(wxGetInstance(), WXSTRINGCAST resourceName, WXSTRINGCAST resourceType);
#else
#ifdef UNICODE
// Return TRUE if we have a colour display
bool wxColourDisplay(void)
{
- HDC dc = ::GetDC(NULL);
+ HDC dc = ::GetDC((HWND) NULL);
bool flag;
int noCols = GetDeviceCaps(dc, NUMCOLORS);
if ((noCols == -1) || (noCols > 2))
flag = TRUE;
else
flag = FALSE;
- ReleaseDC(NULL, dc);
+ ReleaseDC((HWND) NULL, dc);
return flag;
}
// Returns depth of screen
int wxDisplayDepth(void)
{
- HDC dc = ::GetDC(NULL);
+ HDC dc = ::GetDC((HWND) NULL);
int planes = GetDeviceCaps(dc, PLANES);
int bitsPerPixel = GetDeviceCaps(dc, BITSPIXEL);
int depth = planes*bitsPerPixel;
- ReleaseDC(NULL, dc);
+ ReleaseDC((HWND) NULL, dc);
return depth;
}
// Get size of display
void wxDisplaySize(int *width, int *height)
{
- HDC dc = ::GetDC(NULL);
+ HDC dc = ::GetDC((HWND) NULL);
*width = GetDeviceCaps(dc, HORZRES); *height = GetDeviceCaps(dc, VERTRES);
- ReleaseDC(NULL, dc);
+ ReleaseDC((HWND) NULL, dc);
}
bool wxDirExists(const wxString& dir)
http://ftp.digital.com/pub/micro/NT/WinSite/programr/dbwin32.zip
*/
+#if !defined(__MWERKS__) && !defined(__SALFORDC__) && !defined(__TWIN32__)
#include <process.h>
+#endif
void OutputDebugStringW95(const char* lpOutputString, ...)
{
*/
#ifdef _UNICODE
::OutputDebugStringW(achBuffer);
+#else
+#ifdef __TWIN32__
+ ::OutputDebugString(achBuffer);
#else
::OutputDebugStringA(achBuffer);
+#endif
#endif
/* bail if it's not Win95 */
WaitForSingleObject(heventDBWIN, INFINITE);
/* write it to the shared memory */
-#ifdef __BORLANDC__
+#if defined( __BORLANDC__ ) || defined( __MWERKS__ ) || defined(__SALFORDC__)
*((LPDWORD)lpszSharedMem) = getpid();
#else
*((LPDWORD)lpszSharedMem) = _getpid();
#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
+
+