+static const mach_header* CarbonHandle = NULL;
+static const mach_header* AGLHandle = NULL;
+static const mach_header* SCHandle = NULL;
+#define CARBON_LIBRARY_PATH "/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon"
+#define AGL_LIBRARY_PATH "/System/Library/Frameworks/AGL.framework/Versions/A/AGL"
+#define SC_LIBRARY_PATH "/System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration"
+
+static void* dlsym(char* symbol) {
+ if (CarbonHandle == NULL) CarbonHandle = NSAddImage(CARBON_LIBRARY_PATH, NSADDIMAGE_OPTION_NONE);
+ if (AGLHandle == NULL) AGLHandle = NSAddImage(AGL_LIBRARY_PATH, NSADDIMAGE_OPTION_NONE);
+ if (SCHandle == NULL) SCHandle = NSAddImage(SC_LIBRARY_PATH, NSADDIMAGE_OPTION_NONE);
+ void* ret = NSAddressOfSymbol(NSLookupSymbolInImage(CarbonHandle, symbol,
+ NSLOOKUPSYMBOLINIMAGE_OPTION_BIND));
+ if (ret == NULL) ret = NSAddressOfSymbol(NSLookupSymbolInImage(AGLHandle, symbol,
+ NSLOOKUPSYMBOLINIMAGE_OPTION_BIND));
+ if (ret == NULL) ret = NSAddressOfSymbol(NSLookupSymbolInImage(SCHandle, symbol,
+ NSLOOKUPSYMBOLINIMAGE_OPTION_BIND));
+ printf("linking symbol %s to address %x\n", symbol, ret);
+ fflush(stdout);
+ return ret;
+}
+
+#define declare_weak(symbol) typeof(symbol) *symbol##_weak = NULL
+#define WC(func) \
+ (*((func##_weak != NULL) ? func##_weak : func##_weak = (typeof(func##_weak))dlsym("_" #func)))
+
+declare_weak(GetRegionBounds);
+declare_weak(RegisterToolboxObjectClass);
+declare_weak(GetWindowProperty);
+declare_weak(SetWindowProperty);
+declare_weak(CreateCustomWindow);
+declare_weak(InstallWindowContentPaintProc);
+declare_weak(AEGetNthPtr);
+declare_weak(CFArrayGetCount);
+declare_weak(CFArrayGetTypeID);
+declare_weak(CFArrayGetValueAtIndex);
+declare_weak(CFDictionaryGetValue);
+declare_weak(CFGetTypeID);
+declare_weak(CFNumberGetTypeID);
+declare_weak(CFNumberGetValue);
+declare_weak(CFRelease);
+declare_weak(CFStringCompare);
+declare_weak(CFStringCreateWithCString);
+declare_weak(CFStringCreateWithCharacters);
+declare_weak(CFStringGetCharacters);
+declare_weak(CFStringGetLength);
+declare_weak(CFStringGetTypeID);
+declare_weak(CFURLCopyScheme);
+declare_weak(CFURLCreateWithString);
+declare_weak(CGDisplayPixelsHigh);
+declare_weak(CGDisplayPixelsWide);
+declare_weak(CallNextEventHandler);
+declare_weak(CollapseWindow);
+declare_weak(ConstrainWindowToScreen);
+declare_weak(CreateEvent);
+declare_weak(CreateNewWindow);
+declare_weak(DisposeEventHandlerUPP);
+declare_weak(DisposeNavEventUPP);
+declare_weak(DisposeWindow);
+declare_weak(ExitToShell);
+declare_weak(FSRefMakePath);
+declare_weak(FrontWindow);
+declare_weak(Gestalt);
+declare_weak(GetApplicationEventTarget);
+declare_weak(GetCurrentProcess);
+declare_weak(GetCurrentScrap);
+declare_weak(GetEventClass);
+declare_weak(GetEventKind);
+declare_weak(GetEventParameter);
+declare_weak(GetMainEventQueue);
+declare_weak(GetScrapFlavorData);
+declare_weak(GetScrapFlavorSize);
+declare_weak(GetWindowBounds);
+declare_weak(GetWindowEventTarget);
+declare_weak(GetWindowPort);
+declare_weak(HideWindow);
+declare_weak(InstallEventHandler);
+declare_weak(IsWindowCollapsed);
+declare_weak(LSOpenCFURLRef);
+declare_weak(NavCreateGetFileDialog);
+declare_weak(NavCreatePutFileDialog);
+declare_weak(NavDialogDispose);
+declare_weak(NavDialogGetReply);
+declare_weak(NavDialogGetUserAction);
+declare_weak(NavDialogRun);
+declare_weak(NavDisposeReply);
+declare_weak(NavGetDefaultDialogCreationOptions);
+declare_weak(NewEventHandlerUPP);
+declare_weak(NewNavEventUPP);
+declare_weak(PostEventToQueue);
+declare_weak(PutScrapFlavor);
+declare_weak(QuitApplicationEventLoop);
+declare_weak(ReleaseEvent);
+declare_weak(RunApplicationEventLoop);
+declare_weak(SCDynamicStoreCopyProxies);
+declare_weak(SelectWindow);
+declare_weak(SendBehind);
+declare_weak(SetEventParameter);
+declare_weak(SetThemeCursor);
+declare_weak(SetWindowBounds);
+declare_weak(SetWindowResizeLimits);
+declare_weak(SetWindowTitleWithCFString);
+declare_weak(ShowWindow);
+declare_weak(ZoomWindowIdeal);
+declare_weak(__CFStringMakeConstantString);
+declare_weak(aglChoosePixelFormat);
+declare_weak(aglCreateContext);
+declare_weak(aglDestroyContext);
+declare_weak(aglSetCurrentContext);
+declare_weak(aglSetDrawable);
+declare_weak(aglSurfaceTexture);
+declare_weak(aglUpdateContext);
+declare_weak(CPSEnableForegroundOperation);
+declare_weak(CPSSetFrontProcess);
+declare_weak(kCFAllocatorDefault);
+
+#define GetWindowEventTarget WC(GetWindowEventTarget)
+#define InstallEventHandler WC(InstallEventHandler)
+#define __CFStringMakeConstantString WC(__CFStringMakeConstantString)