1 module derelict.angelscript.ascpp; 2 import derelict.angelscript.types; 3 4 private { 5 import core.stdc.config; 6 import std.stdio; 7 import derelict.util.loader; 8 import derelict.util.system; 9 10 static if(Derelict_OS_Windows) 11 enum libNames = "angelscript.dll"; 12 else static if(Derelict_OS_Mac) 13 enum libNames = "libangelscript.dylib"; 14 else static if(Derelict_OS_Posix) 15 enum libNames = "libangelscript.so,/usr/local/lib/libangelscript.so"; 16 else 17 static assert(0, "Need to implement libangelscript libnames for this operating system."); 18 19 //Redfine the vtypes here, else it doesn't compile 20 alias asBYTE = ubyte; 21 alias asWORD = ushort; 22 alias asUINT = uint; 23 alias asPWORD = size_t; 24 static if ((void*).sizeof == long.sizeof) { 25 alias asDWORD = uint; 26 alias asQWORD = ulong; 27 alias asINT64 = long; 28 } else { 29 alias asDWORD = ulong; 30 // TODO: Implement __GNUC__/__MWERKS__ from angelscript_c.h 31 // TODO: Implement else part of that. 32 } 33 } 34 35 extern (C) @nogc nothrow { 36 // engine 37 alias da_asCreateScriptEngine = asIScriptEngine* function(asDWORD); 38 alias da_asGetLibraryVersion = const(char*) function(); 39 alias da_asGetLibraryOptions = const(char*) function(); 40 41 // context 42 alias da_asGetActiveContext = asIScriptContext* function(); 43 44 // threading 45 alias da_asPrepareMultithread = int function(asIThreadManager*); 46 alias da_asUnprepareMultithread = void function(); 47 alias da_asGetThreadManager = asIThreadManager* function(); 48 alias da_asAcquireExclusiveLock = void function(); 49 alias da_asReleaseExclusiveLock = void function(); 50 alias da_asAcquireSharedLock = void function(); 51 alias da_asReleaseSharedLock = void function(); 52 alias da_asAtomicInc = int function(ref int); 53 alias da_asAtomicDec = int function(ref int); 54 alias da_asThreadCleanup = int function(); 55 56 // memory managment 57 alias da_asSetGlobalMemoryFunctions = int function(asALLOCFUNC_t, asFREEFUNC_t); 58 alias da_asResetGlobalMemoryFunctions = int function(); 59 alias da_asAllocMem = void* function(size_t); 60 alias da_asFreeMem = void function(void*); 61 62 // aux 63 alias da_asCreateLockableSharedBool = asILockableSharedBool* function(); 64 } 65 66 __gshared { 67 da_asCreateScriptEngine asCreateScriptEngine; 68 da_asGetLibraryVersion asGetLibraryVersion; 69 da_asGetLibraryOptions asGetLibraryOptions; 70 71 da_asGetActiveContext asGetActiveContext; 72 73 da_asPrepareMultithread asPrepareMultithread; 74 da_asUnprepareMultithread asUnprepareMultithread; 75 da_asGetThreadManager asGetThreadManager; 76 da_asAcquireExclusiveLock asAcquireExclusiveLock; 77 da_asReleaseExclusiveLock asReleaseExclusiveLock; 78 da_asAcquireSharedLock asAcquireSharedLock; 79 da_asReleaseSharedLock asReleaseSharedLock; 80 da_asAtomicInc asAtomicInc; 81 da_asAtomicDec asAtomicDec; 82 da_asThreadCleanup asThreadCleanup; 83 84 da_asSetGlobalMemoryFunctions asSetGlobalMemoryFunctions; 85 da_asResetGlobalMemoryFunctions asResetGlobalMemoryFunctions; 86 da_asAllocMem asAllocMem; 87 da_asFreeMem asFreeMem; 88 89 da_asCreateLockableSharedBool asCreateLockableSharedBool; 90 } 91 92 public class DerelictAngelscriptCPPLoader : SharedLibLoader { 93 public this() { 94 super(libNames); 95 } 96 97 public this(string names) { 98 super(names); 99 } 100 101 protected override void loadSymbols() { 102 bindFunc(cast(void**)&asCreateScriptEngine, "asCreateScriptEngine"); 103 bindFunc(cast(void**)&asGetLibraryVersion, "asGetLibraryVersion"); 104 bindFunc(cast(void**)&asGetLibraryOptions, "asGetLibraryOptions"); 105 bindFunc(cast(void**)&asGetActiveContext, "asGetActiveContext"); 106 bindFunc(cast(void**)&asPrepareMultithread, "asPrepareMultithread"); 107 bindFunc(cast(void**)&asUnprepareMultithread, "asUnprepareMultithread"); 108 bindFunc(cast(void**)&asGetThreadManager, "asGetThreadManager"); 109 bindFunc(cast(void**)&asAcquireExclusiveLock, "asAcquireExclusiveLock"); 110 bindFunc(cast(void**)&asReleaseExclusiveLock, "asReleaseExclusiveLock"); 111 bindFunc(cast(void**)&asAcquireSharedLock, "asAcquireSharedLock"); 112 bindFunc(cast(void**)&asReleaseSharedLock, "asReleaseSharedLock"); 113 bindFunc(cast(void**)&asAtomicInc, "asAtomicInc"); 114 bindFunc(cast(void**)&asAtomicDec, "asAtomicDec"); 115 bindFunc(cast(void**)&asThreadCleanup, "asThreadCleanup"); 116 bindFunc(cast(void**)&asSetGlobalMemoryFunctions, "asSetGlobalMemoryFunctions"); 117 bindFunc(cast(void**)&asResetGlobalMemoryFunctions, "asResetGlobalMemoryFunctions"); 118 bindFunc(cast(void**)&asAllocMem, "asAllocMem"); 119 bindFunc(cast(void**)&asFreeMem, "asFreeMem"); 120 bindFunc(cast(void**)&asCreateLockableSharedBool, "asCreateLockableSharedBool"); 121 } 122 } 123 124 __gshared DerelictAngelscriptCPPLoader DerelictAngelscriptCPP; 125 126 shared static this() { 127 DerelictAngelscriptCPP = new DerelictAngelscriptCPPLoader(); 128 }