// Author: Vadim Zeitlin
// Modified by:
// Created: 29/01/98
-// RCS-ID: $Id$
// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#include <stdlib.h>
-#ifndef __WXPALMOS5__
#ifndef __WXWINCE__
#include <time.h>
#else
#include "wx/msw/wince/time.h"
#endif
-#endif /* ! __WXPALMOS5__ */
#if defined(__WINDOWS__)
#include "wx/msw/private.h" // includes windows.h
const wxString& msg,
const wxLogRecordInfo& info) const
{
- wxString prefix = FormatTime(info.timestamp);
+ wxString prefix;
+
+ // don't time stamp debug messages under MSW as debug viewers usually
+ // already have an option to do it
+#ifdef __WINDOWS__
+ if ( level != wxLOG_Debug && level != wxLOG_Trace )
+#endif // __WINDOWS__
+ prefix = FormatTime(info.timestamp);
switch ( level )
{
// don't prepend "debug/trace" prefix under MSW as it goes to the debug
// window anyhow and so can't be confused with something else
-#ifndef __WXMSW__
+#ifndef __WINDOWS__
case wxLOG_Debug:
// this prefix (as well as the one below) is intentionally not
// translated as nobody translates debug messages anyhow
case wxLOG_Trace:
prefix += "Trace: ";
break;
-#endif // !__WXMSW__
+#endif // !__WINDOWS__
}
return prefix + msg;
wxLogFormatter::FormatTime(time_t t) const
{
wxString str;
-
- // don't time stamp debug messages under MSW as debug viewers usually
- // already have an option to do it
-#ifdef __WXMSW__
- if ( level != wxLOG_Debug && level != wxLOG_Trace )
-#endif // __WXMSW__
- wxLog::TimeStamp(&str, t);
+ wxLog::TimeStamp(&str, t);
return str;
}
{
wxSafeShowMessage(wxS("Fatal Error"), msg);
-#ifdef __WXWINCE__
- ExitThread(3);
-#else
- abort();
-#endif
+ wxAbort();
}
wxLog *logger;
void wxLogStderr::DoLogText(const wxString& msg)
{
- wxFputs(msg + '\n', m_fp);
- fflush(m_fp);
+ // First send it to stderr, even if we don't have it (e.g. in a Windows GUI
+ // application under) it's not a problem to try to use it and it's easier
+ // than determining whether we do have it or not.
+ wxMessageOutputStderr(m_fp).Output(msg);
// under GUI systems such as Windows or Mac, programs usually don't have
// stderr at all, so show the messages also somewhere else, typically in
m_bPassMessages = true;
m_logNew = logger;
- m_logOld = wxLog::SetActiveTarget(this);
+
+ // Notice that we use GetActiveTarget() here instead of directly calling
+ // SetActiveTarget() to trigger wxLog auto-creation: if we're created as
+ // the first logger, we should still chain with the standard, implicit and
+ // possibly still not created standard logger instead of disabling normal
+ // logging entirely.
+ m_logOld = wxLog::GetActiveTarget();
+ wxLog::SetActiveTarget(this);
}
wxLogChain::~wxLogChain()
// get error code from syste
unsigned long wxSysErrorCode()
{
-#if defined(__WXMSW__) && !defined(__WXMICROWIN__)
+#if defined(__WINDOWS__) && !defined(__WXMICROWIN__)
return ::GetLastError();
#else //Unix
return errno;
if ( nErrCode == 0 )
nErrCode = wxSysErrorCode();
-#if defined(__WXMSW__) && !defined(__WXMICROWIN__)
+#if defined(__WINDOWS__) && !defined(__WXMICROWIN__)
static wxChar s_szBuf[1024];
// get error message from system
}
return s_szBuf;
-#else // !__WXMSW__
+#else // !__WINDOWS__
#if wxUSE_UNICODE
static wchar_t s_wzBuf[1024];
wxConvCurrent->MB2WC(s_wzBuf, strerror((int)nErrCode),
#else
return strerror((int)nErrCode);
#endif
-#endif // __WXMSW__/!__WXMSW__
+#endif // __WINDOWS__/!__WINDOWS__
}
#endif // wxUSE_LOG