-#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;
+#if defined(__WXMAC__) && !defined(__DARWIN__) && defined(__MWERKS__) && (__MWERKS__ >= 0x2400)
+
+// MetroNub stuff doesn't seem to work in CodeWarrior 5.3 Carbon builds...
+
+#ifndef __MetroNubUtils__
+#include "MetroNubUtils.h"
+#endif
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+#ifndef __GESTALT__
+#include <Gestalt.h>
+#endif
+
+#ifndef true
+#define true 1
+#endif
+
+#ifndef false
+#define false 0
+#endif
+
+#if TARGET_API_MAC_CARBON
+
+ #include <CodeFragments.h>
+
+ EXTERN_API_C( long )
+ CallUniversalProc(UniversalProcPtr theProcPtr, ProcInfoType procInfo, ...);
+
+ ProcPtr gCallUniversalProc_Proc = NULL;
+
+#endif
+
+static MetroNubUserEntryBlock* gMetroNubEntry = NULL;
+
+static long fRunOnce = false;
+
+Boolean IsCompatibleVersion(short inVersion);
+
+/* ---------------------------------------------------------------------------
+ IsCompatibleVersion
+ --------------------------------------------------------------------------- */
+
+Boolean IsCompatibleVersion(short inVersion)
+{
+ Boolean result = false;
+
+ if (fRunOnce)
+ {
+ MetroNubUserEntryBlock* block = (MetroNubUserEntryBlock *)result;
+
+ result = (inVersion <= block->apiHiVersion);
+ }
+
+ return result;