+ if ( fp == NULL )
+ m_fp = stderr;
+ else
+ 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;