- // put the text into our window
- wxTextCtrl *pText = m_pLogFrame->TextCtrl();
-
- // remove selection (WriteText is in fact ReplaceSelection)
- #ifdef __WXMSW__
- long nLen = pText->GetLastPosition();
- pText->SetSelection(nLen, nLen);
- #endif // Windows
-
- pText->WriteText(szString);
- pText->WriteText("\n"); // "\n" ok here (_not_ "\r\n")
-
- // ensure that the line can be seen
- // @@@ TODO
+ if ( fp == NULL )
+ m_fp = stderr;
+ else
+ m_fp = fp;
+}
+
+#if defined(__WXMAC__) && !defined(__UNIX__)
+#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;