#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(__WXWINE__) && !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
#include <dir.h>
#endif
-#ifdef __WIN32__
+#if defined(__WIN32__) && !defined(__WXWINE__)
#include <io.h>
#ifndef __GNUWIN32__
#include <stdlib.h>
#include <string.h>
#ifndef __WATCOMC__
-#if !(defined(_MSC_VER) && (_MSC_VER > 800))
-#include <errno.h>
-#endif
+ #if !(defined(_MSC_VER) && (_MSC_VER > 800))
+ #include <errno.h>
+ #endif
#endif
#include <stdarg.h>
+//// BEGIN for console support: VC++ only
+#ifdef __VISUALC__
+
+#include "wx/msw/msvcrt.h"
+
+#include <fcntl.h>
+
+#include "wx/ioswrap.h"
+
+#if wxUSE_IOSTREAMH
+// N.B. BC++ doesn't have istream.h, ostream.h
+# include <io.h>
+# include <fstream.h>
+#else
+# include <fstream>
+#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
+ // __VISUALC__
+/// 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?
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 );
}
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)
{
#endif
{
// Could use NIS, MS-Mail or other site specific programs
- // Use wxWindows configuration data
- GetProfileString(WX_SECTION, eUSERNAME, default_name, buf, maxSize - 1);
+ // Use wxWindows configuration data
+ 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)
+long wxGetFreeMemory()
{
-#if defined(__WIN32__) && !defined(__BORLANDC__)
+#if defined(__WIN32__) && !defined(__BORLANDC__) && !defined(__TWIN32__)
MEMORYSTATUS memStatus;
memStatus.dwLength = sizeof(MEMORYSTATUS);
GlobalMemoryStatus(&memStatus);
class wxSleepTimer: public wxTimer
{
public:
- inline void Notify(void)
+ inline void Notify()
{
inTimer = FALSE;
Stop();
static wxTimer *wxTheSleepTimer = NULL;
+void wxUsleep(unsigned long milliseconds)
+{
+#ifdef __WIN32__
+ ::Sleep(milliseconds);
+#else
+ if (inTimer)
+ return;
+
+ wxTheSleepTimer = new wxSleepTimer;
+ inTimer = TRUE;
+ wxTheSleepTimer->Start(milliseconds);
+ while (inTimer)
+ {
+ if (wxTheApp->Pending())
+ wxTheApp->Dispatch();
+ }
+ delete wxTheSleepTimer;
+ wxTheSleepTimer = NULL;
+#endif
+}
+
void wxSleep(int nSecs)
{
#if 0 // WIN32 hangs app
}
// Consume all events until no more left
-void wxFlushEvents(void)
+void wxFlushEvents()
{
// wxYield();
}
}
// Emit a beeeeeep
-void wxBell(void)
+void wxBell()
{
-#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 (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
if (succ)
{
*value = (int)strtol(s, NULL, 10);
- delete[] s;
+ delete[] s;
return TRUE;
}
else return FALSE;
}
#endif // wxUSE_RESOURCES
-// Old cursor
-static HCURSOR wxBusyCursorOld = 0;
-static int wxBusyCursorCount = 0;
+// ---------------------------------------------------------------------------
+// helper functions for showing a "busy" cursor
+// ---------------------------------------------------------------------------
+
+HCURSOR gs_wxBusyCursor = 0; // new, busy cursor
+HCURSOR gs_wxBusyCursorOld = 0; // old cursor
+static int gs_wxBusyCursorCount = 0;
// Set the cursor to the busy cursor for all windows
void wxBeginBusyCursor(wxCursor *cursor)
{
- wxBusyCursorCount ++;
- if (wxBusyCursorCount == 1)
- {
- wxBusyCursorOld = ::SetCursor((HCURSOR) cursor->GetHCURSOR());
- }
- else
- {
- (void)::SetCursor((HCURSOR) cursor->GetHCURSOR());
- }
+ if ( gs_wxBusyCursorCount++ == 0 )
+ {
+ gs_wxBusyCursor = (HCURSOR)cursor->GetHCURSOR();
+ gs_wxBusyCursorOld = ::SetCursor(gs_wxBusyCursor);
+ }
+ //else: nothing to do, already set
}
// Restore cursor to normal
-void wxEndBusyCursor(void)
+void wxEndBusyCursor()
{
- if (wxBusyCursorCount == 0)
- return;
-
- wxBusyCursorCount --;
- if (wxBusyCursorCount == 0)
- {
- ::SetCursor(wxBusyCursorOld);
- wxBusyCursorOld = 0;
- }
+ wxCHECK_RET( gs_wxBusyCursorCount > 0,
+ "no matching wxBeginBusyCursor() for wxEndBusyCursor()" );
+
+ if ( --gs_wxBusyCursorCount == 0 )
+ {
+ ::SetCursor(gs_wxBusyCursorOld);
+
+ gs_wxBusyCursorOld = 0;
+ }
}
// TRUE if we're between the above two calls
-bool wxIsBusy(void)
+bool wxIsBusy()
{
- return (wxBusyCursorCount > 0);
-}
+ return (gs_wxBusyCursorCount > 0);
+}
+// ---------------------------------------------------------------------------
const char* wxGetHomeDir(wxString *pstr)
{
wxString& strDir = *pstr;
- #ifdef __UNIX__
+ #if defined(__UNIX__) && !defined(__TWIN32__)
const char *szHome = getenv("HOME");
if ( szHome == NULL ) {
// we're homeless...
if ((home = getenv("TMP")) != NULL ||
(home = getenv("TMPDIR")) != NULL ||
(home = getenv("TEMP")) != NULL)
- return *home ? home : "\\";
+ return *home ? home : (char*)"\\";
}
if (Stricmp(tmp, WXSTRINGCAST user1) == 0)
user1 = "";
return TRUE;//*** temporary?
}
else{
- wxError("wnd==NULL !!!");
+ wxFAIL_MSG("wnd==NULL !!!");
+
return FALSE;//*** temporary?
}
}
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
char *theText = (char *)LockResource(hData);
if (!theText)
return NULL;
-
+
s = copystring(theText);
// Obsolete in WIN32
};
// Return TRUE if we have a colour display
-bool wxColourDisplay(void)
+bool wxColourDisplay()
{
- 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)
+int wxDisplayDepth()
{
- 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)
#endif
#if defined(__WIN32__)
- HANDLE h = FindFirstFile((LPTSTR) WXSTRINGCAST dir,(LPWIN32_FIND_DATA)&fileInfo);
-
- if (h==INVALID_HANDLE_VALUE)
- return FALSE;
- else {
- FindClose(h);
- return ((fileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY);
- }
+ HANDLE h = FindFirstFile((LPTSTR) WXSTRINGCAST dir,(LPWIN32_FIND_DATA)&fileInfo);
+
+ if (h==INVALID_HANDLE_VALUE)
+ return FALSE;
+ else {
+ FindClose(h);
+ return ((fileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY);
+ }
#else
// In Borland findfirst has a different argument
// ordering from _dos_findfirst. But _dos_findfirst
#endif
}
+// ---------------------------------------------------------------------------
+// window information functions
+// ---------------------------------------------------------------------------
+
wxString WXDLLEXPORT wxGetWindowText(WXHWND hWnd)
{
wxString str;
return str;
}
+wxString WXDLLEXPORT wxGetWindowClass(WXHWND hWnd)
+{
+ wxString str;
+
+ int len = 256; // some starting value
+
+ for ( ;; )
+ {
+ // as we've #undefined GetClassName we must now manually choose the
+ // right function to call
+ int count =
+
+ #ifndef __WIN32__
+ GetClassName
+ #else // Win32
+ #ifdef UNICODE
+ GetClassNameW
+ #else // !Unicode
+ #ifdef __TWIN32__
+ GetClassName
+ #else // !Twin32
+ GetClassNameA
+ #endif // Twin32/!Twin32
+ #endif // Unicode/ANSI
+ #endif // Win16/32
+ ((HWND)hWnd, str.GetWriteBuf(len), len);
+
+ str.UngetWriteBuf();
+ if ( count == len )
+ {
+ // the class name might have been truncated, retry with larger
+ // buffer
+ len *= 2;
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ return str;
+}
+
+WXWORD WXDLLEXPORT wxGetWindowId(WXHWND hWnd)
+{
+#ifndef __WIN32__
+ return GetWindowWord((HWND)hWnd, GWW_ID);
+#else // Win32
+ return GetWindowLong((HWND)hWnd, GWL_ID);
+#endif // Win16/32
+}
+
#if 0
//------------------------------------------------------------------------
// wild character routines
wxString tmp = pattern;
char *pat = WXSTRINGCAST(tmp);
while (*pat) {
- switch (*pat++) {
- case '?': case '*': case '[': case '{':
- return TRUE;
- case '\\':
- if (!*pat++)
- return FALSE;
- }
+ switch (*pat++) {
+ case '?': case '*': case '[': case '{':
+ return TRUE;
+ case '\\':
+ if (!*pat++)
+ return FALSE;
+ }
}
return FALSE;
};
// dot_special means '.' only matches '.'
if (dot_special && *str == '.' && *pattern != *str)
- return FALSE;
+ return FALSE;
while ((*pattern != '\0') && (!done)
&& (((*str=='\0')&&((*pattern==OB)||(*pattern=='*')))||(*str!='\0'))) {
- switch (*pattern) {
- case '\\':
- pattern++;
- if (*pattern != '\0')
- pattern++;
- break;
- case '*':
- pattern++;
- ret_code = FALSE;
- while ((*str!='\0')
- && (!(ret_code=wxMatchWild(pattern, str++, FALSE))))
- /*loop*/;
- if (ret_code) {
- while (*str != '\0')
- str++;
- while (*pattern != '\0')
- pattern++;
- }
- break;
- case '[':
- pattern++;
- repeat:
- if ((*pattern == '\0') || (*pattern == ']')) {
- done = TRUE;
- break;
- }
- if (*pattern == '\\') {
- pattern++;
- if (*pattern == '\0') {
- done = TRUE;
- break;
- }
- }
- if (*(pattern + 1) == '-') {
- c = *pattern;
- pattern += 2;
- if (*pattern == ']') {
- done = TRUE;
- break;
- }
- if (*pattern == '\\') {
- pattern++;
- if (*pattern == '\0') {
- done = TRUE;
- break;
- }
- }
- if ((*str < c) || (*str > *pattern)) {
- pattern++;
- goto repeat;
- }
- } else if (*pattern != *str) {
- pattern++;
- goto repeat;
- }
- pattern++;
- while ((*pattern != ']') && (*pattern != '\0')) {
- if ((*pattern == '\\') && (*(pattern + 1) != '\0'))
- pattern++;
- pattern++;
- }
- if (*pattern != '\0') {
- pattern++, str++;
- }
- break;
- case '?':
- pattern++;
- str++;
- break;
- case OB:
- pattern++;
- while ((*pattern != CB) && (*pattern != '\0')) {
- cp = str;
- ok = TRUE;
- while (ok && (*cp != '\0') && (*pattern != '\0')
- && (*pattern != ',') && (*pattern != CB)) {
- if (*pattern == '\\')
- pattern++;
- ok = (*pattern++ == *cp++);
- }
- if (*pattern == '\0') {
- ok = FALSE;
- done = TRUE;
- break;
- } else if (ok) {
- str = cp;
- while ((*pattern != CB) && (*pattern != '\0')) {
- if (*++pattern == '\\') {
- if (*++pattern == CB)
- pattern++;
- }
- }
- } else {
- while (*pattern!=CB && *pattern!=',' && *pattern!='\0') {
- if (*++pattern == '\\') {
+ switch (*pattern) {
+ case '\\':
+ pattern++;
+ if (*pattern != '\0')
+ pattern++;
+ break;
+ case '*':
+ pattern++;
+ ret_code = FALSE;
+ while ((*str!='\0')
+ && (!(ret_code=wxMatchWild(pattern, str++, FALSE))))
+ /*loop*/;
+ if (ret_code) {
+ while (*str != '\0')
+ str++;
+ while (*pattern != '\0')
+ pattern++;
+ }
+ break;
+ case '[':
+ pattern++;
+ repeat:
+ if ((*pattern == '\0') || (*pattern == ']')) {
+ done = TRUE;
+ break;
+ }
+ if (*pattern == '\\') {
+ pattern++;
+ if (*pattern == '\0') {
+ done = TRUE;
+ break;
+ }
+ }
+ if (*(pattern + 1) == '-') {
+ c = *pattern;
+ pattern += 2;
+ if (*pattern == ']') {
+ done = TRUE;
+ break;
+ }
+ if (*pattern == '\\') {
+ pattern++;
+ if (*pattern == '\0') {
+ done = TRUE;
+ break;
+ }
+ }
+ if ((*str < c) || (*str > *pattern)) {
+ pattern++;
+ goto repeat;
+ }
+ } else if (*pattern != *str) {
+ pattern++;
+ goto repeat;
+ }
+ pattern++;
+ while ((*pattern != ']') && (*pattern != '\0')) {
+ if ((*pattern == '\\') && (*(pattern + 1) != '\0'))
+ pattern++;
+ pattern++;
+ }
+ if (*pattern != '\0') {
+ pattern++, str++;
+ }
+ break;
+ case '?':
+ pattern++;
+ str++;
+ break;
+ case OB:
+ pattern++;
+ while ((*pattern != CB) && (*pattern != '\0')) {
+ cp = str;
+ ok = TRUE;
+ while (ok && (*cp != '\0') && (*pattern != '\0')
+ && (*pattern != ',') && (*pattern != CB)) {
+ if (*pattern == '\\')
+ pattern++;
+ ok = (*pattern++ == *cp++);
+ }
+ if (*pattern == '\0') {
+ ok = FALSE;
+ done = TRUE;
+ break;
+ } else if (ok) {
+ str = cp;
+ while ((*pattern != CB) && (*pattern != '\0')) {
+ if (*++pattern == '\\') {
+ if (*++pattern == CB)
+ pattern++;
+ }
+ }
+ } else {
+ while (*pattern!=CB && *pattern!=',' && *pattern!='\0') {
+ if (*++pattern == '\\') {
if (*++pattern == CB || *pattern == ',')
- pattern++;
- }
- }
- }
- if (*pattern != '\0')
- pattern++;
- }
- break;
- default:
- if (*str == *pattern) {
- str++, pattern++;
- } else {
- done = TRUE;
- }
- }
+ pattern++;
+ }
+ }
+ }
+ if (*pattern != '\0')
+ pattern++;
+ }
+ break;
+ default:
+ if (*str == *pattern) {
+ str++, pattern++;
+ } else {
+ done = TRUE;
+ }
+ }
}
while (*pattern == '*')
- pattern++;
+ pattern++;
return ((*str == '\0') && (*pattern == '\0'));
};
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.
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, ...)
{
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
::OutputDebugStringW(achBuffer);
+#else
+#ifdef __TWIN32__
+ ::OutputDebugString(achBuffer);
#else
::OutputDebugStringA(achBuffer);
+#endif
#endif
/* bail if it's not Win95 */
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);
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
+
+#if 0
+
+// 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
+
+