merge of wxMac into main repository

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@7988 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2000-08-09 10:36:50 +00:00
parent f71c3b49e2
commit 7d610b90ff
8 changed files with 201 additions and 111 deletions

View File

@@ -402,6 +402,86 @@ wxLogStderr::wxLogStderr(FILE *fp)
m_fp = fp;
}
#if defined(__WXMAC__)
#define kDebuggerSignature 'MWDB'
static Boolean FindProcessBySignature(OSType signature, ProcessInfoRec* info)
{
OSErr err;
ProcessSerialNumber psn;
Boolean found = false;
psn.highLongOfPSN = 0;
psn.lowLongOfPSN = kNoProcess;
if (!info) return false;
info->processInfoLength = sizeof(ProcessInfoRec);
info->processName = NULL;
info->processAppSpec = NULL;
err = noErr;
while (!found && err == noErr)
{
err = GetNextProcess(&psn);
if (err == noErr)
{
err = GetProcessInformation(&psn, info);
found = err == noErr && info->processSignature == signature;
}
}
return found;
}
pascal Boolean MWDebuggerIsRunning(void)
{
ProcessInfoRec info;
return FindProcessBySignature(kDebuggerSignature, &info);
}
pascal OSErr AmIBeingMWDebugged(Boolean* result)
{
OSErr err;
ProcessSerialNumber psn;
OSType sig = kDebuggerSignature;
AppleEvent theAE = {typeNull, NULL};
AppleEvent theReply = {typeNull, NULL};
AEAddressDesc addr = {typeNull, NULL};
DescType actualType;
Size actualSize;
if (!result) return paramErr;
err = AECreateDesc(typeApplSignature, &sig, sizeof(sig), &addr);
if (err != noErr) goto exit;
err = AECreateAppleEvent('MWDB', 'Dbg?', &addr,
kAutoGenerateReturnID, kAnyTransactionID, &theAE);
if (err != noErr) goto exit;
GetCurrentProcess(&psn);
err = AEPutParamPtr(&theAE, keyDirectObject, typeProcessSerialNumber,
&psn, sizeof(psn));
if (err != noErr) goto exit;
err = AESend(&theAE, &theReply, kAEWaitReply, kAENormalPriority,
kAEDefaultTimeout, NULL, NULL);
if (err != noErr) goto exit;
err = AEGetParamPtr(&theReply, keyAEResult, typeBoolean, &actualType, result,
sizeof(Boolean), &actualSize);
exit:
if (addr.dataHandle)
AEDisposeDesc(&addr);
if (theAE.dataHandle)
AEDisposeDesc(&theAE);
if (theReply.dataHandle)
AEDisposeDesc(&theReply);
return err;
}
#endif
void wxLogStderr::DoLogString(const wxChar *szString, time_t WXUNUSED(t))
{
wxString str;
@@ -419,7 +499,36 @@ void wxLogStderr::DoLogString(const wxChar *szString, time_t WXUNUSED(t))
OutputDebugString(str.c_str());
#endif // MSW
#if defined(__WXMAC__) && wxUSE_GUI
debugstr(str + wxT("\r\n"));
Str255 pstr ;
strcpy( (char*) pstr , str.c_str() ) ;
strcat( (char*) pstr , ";g" ) ;
c2pstr( (char*) pstr ) ;
#if __WXDEBUG__
Boolean running = false ;
/*
if ( MWDebuggerIsRunning() )
{
AmIBeingMWDebugged( &running ) ;
}
*/
if (running)
{
#ifdef __powerc
DebugStr(pstr);
#else
SysBreakStr(pstr);
#endif
}
else
#endif
{
#ifdef __powerc
DebugStr(pstr);
#else
DebugStr(pstr);
#endif
}
#endif // MSW
}