Merge branch 'master' of http://www-dev.cockos.com/wdl/WDL into updatewdl
[wdl/wdl-ol.git] / WDL / swell / swell-modstub.mm
blobcb5f88ff1b8893e104bd89d8ec01f8aa6aee8820
1 #ifdef SWELL_PROVIDED_BY_APP
3 #import <Cocoa/Cocoa.h>
4 #import <objc/objc-runtime.h>
5 #define SWELL_API_DEFPARM(x)
6 #define SWELL_API_DEFINE(ret,func,parms) ret (*func) parms ;
7 #include "swell.h"
9 // only include this file in projects that are linked to swell.dylib
11 struct SWELL_CursorResourceIndex *SWELL_curmodule_cursorresource_head;
12 struct SWELL_DialogResourceIndex *SWELL_curmodule_dialogresource_head;
13 struct SWELL_MenuResourceIndex *SWELL_curmodule_menuresource_head;
15 // define the functions
17 static struct
19   const char *name;
20   void **func;
21 } api_tab[]={
22   
23 #undef _WDL_SWELL_H_API_DEFINED_
24 #undef SWELL_API_DEFINE
25 #define SWELL_API_DEFINE(ret, func, parms) {#func, (void **)&func },
27 #include "swell-functions.h"
28   
31 static int dummyFunc() { return 0; }
33 class SwellAPPInitializer
35 public:
36   SwellAPPInitializer()
37   {
38     void *(*SWELLAPI_GetFunc)(const char *name)=NULL;
39     
40     id del = [NSApp delegate];
41     if (del && [del respondsToSelector:@selector(swellGetAPPAPIFunc)])
42       *(void **)&SWELLAPI_GetFunc = (void *)objc_msgSend(del,@selector(swellGetAPPAPIFunc));
43       
44     if (SWELLAPI_GetFunc && SWELLAPI_GetFunc(NULL)!=(void*)0x100) SWELLAPI_GetFunc=0;
45       
46     int x;
47     for (x = 0; x < sizeof(api_tab)/sizeof(api_tab[0]); x ++)
48     {
49       *api_tab[x].func=SWELLAPI_GetFunc?SWELLAPI_GetFunc(api_tab[x].name):0;
50       if (!*api_tab[x].func)
51       {
52         printf("SWELL API not found: %s\n",api_tab[x].name);
53         *api_tab[x].func = (void*)&dummyFunc;
54       }
55     }
56   }
57   ~SwellAPPInitializer()
58   {
59   }
62 SwellAPPInitializer m_swell_appAPIinit;
64 extern "C" __attribute__ ((visibility ("default"))) int SWELL_dllMain(HINSTANCE hInst, DWORD callMode, LPVOID _GetFunc)
66   // this returning 1 allows DllMain to be called, if available
67   return 1;
70 #endif