1 module derelict.angelscript.asc; 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 = "as_c.dll"; 12 else static if(Derelict_OS_Mac) 13 enum libNames = "libas_c.dylib"; 14 else static if(Derelict_OS_Posix) 15 enum libNames = "libas_c.so,/usr/local/lib/libas_c.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 // --- script engine 37 38 // memory managment 39 alias da_asEngine_AddRef = int function(asIScriptEngine*); 40 alias da_asEngine_Release = int function(asIScriptEngine*); 41 alias da_asEngine_ShutDownAndRelease = int function(asIScriptEngine*); 42 43 // engine properties 44 alias da_asEngine_SetEngineProperty = int function(asIScriptEngine*, asEEngineProp, asPWORD); 45 alias da_asEngine_GetEngineProperty = asPWORD function(asIScriptEngine*, asEEngineProp); 46 47 // compiler messages 48 alias da_asEngine_SetMessageCallback = int function(asIScriptEngine*, asFUNCTION_t, void*, asDWORD); 49 alias da_asEngine_ClearMessageCallback = int function(asIScriptEngine*); 50 alias da_asEngine_WriteMessage = int function(asIScriptEngine*, const(char*), int, int, asEMsgType, const(char*)); 51 52 // jit compiler 53 alias da_asEngine_SetJITCompiler = int function(asIScriptEngine*, asIJITCompiler*); 54 alias da_asEngine_GetJITCompiler = asIJITCompiler* function(asIScriptEngine*); 55 56 // global functions 57 alias da_asEngine_RegisterGlobalFunction = int function(asIScriptEngine*, const(char*), asFUNCTION_t, asDWORD, void*); 58 alias da_asEngine_GetGlobalFunctionCount = asUINT function(asIScriptEngine*); 59 alias da_asEngine_GetGlobalFunctionByIndex = asIScriptFunction* function(asIScriptEngine*, asUINT); 60 alias da_asEngine_GetGlobalFunctionByDecl = asIScriptFunction* function(asIScriptEngine*, const(char*)); 61 62 alias da_asEngine_CreateContext = asIScriptContext* function(asIScriptEngine*); 63 alias da_asEngine_GetModule = asIScriptModule* function(asIScriptEngine*, const(char*)); 64 65 alias da_asContext_Release = int function(asIScriptContext*); 66 alias da_asContext_Prepare = int function(asIScriptContext*, asIScriptFunction*); 67 alias da_asContext_Execute = int function(asIScriptContext*); 68 69 alias da_asModule_Release = int function(asIScriptModule*); 70 alias da_asModule_GetFunctionByDecl = asIScriptFunction* function(asIScriptModule*, const(char*)); 71 72 alias da_asScript_Release = int function(asIScriptFunction*); 73 //alias da_asEngine_ExecuteString() 74 75 // global properties 76 /* 77 TODO: Define all functions 78 alias da_asEngine_ = int function(asIScriptEngine*,); 79 alias da_asEngine_ = asUINT function(asIScriptEngine*,); 80 alias da_asEngine_ = int function(asIScriptEngine*,); 81 alias da_asEngine_ = int function(asIScriptEngine*,); 82 alias da_asEngine_ = int function(asIScriptEngine*,); 83 84 85 alias da_asEngine_ = int function(asIScriptEngine*,); 86 87 88 89 alias da_as = void function();*/ 90 } 91 92 __gshared { 93 da_asEngine_AddRef asEngine_AddRef; 94 da_asEngine_Release asEngine_Release; 95 da_asEngine_ShutDownAndRelease asEngine_ShutDownAndRelease; 96 97 da_asEngine_SetEngineProperty asEngine_SetEngineProperty; 98 da_asEngine_GetEngineProperty asEngine_GetEngineProperty; 99 100 da_asEngine_SetMessageCallback asEngine_SetMessageCallback; 101 da_asEngine_ClearMessageCallback asEngine_ClearMessageCallback; 102 da_asEngine_WriteMessage asEngine_WriteMessage; 103 104 da_asEngine_SetJITCompiler asEngine_SetJITCompiler; 105 da_asEngine_GetJITCompiler asEngine_GetJITCompiler; 106 107 da_asEngine_RegisterGlobalFunction asEngine_RegisterGlobalFunction; 108 da_asEngine_GetGlobalFunctionCount asEngine_GetGlobalFunctionCount; 109 da_asEngine_GetGlobalFunctionByIndex asEngine_GetGlobalFunctionByIndex; 110 da_asEngine_GetGlobalFunctionByDecl asEngine_GetGlobalFunctionByDecl; 111 112 da_asEngine_CreateContext asEngine_CreateContext; 113 da_asEngine_GetModule asEngine_GetModule; 114 115 da_asContext_Release asContext_Release; 116 da_asContext_Prepare asContext_Prepare; 117 da_asContext_Execute asContext_Execute; 118 119 da_asModule_GetFunctionByDecl asModule_GetFunctionByDecl; 120 } 121 122 public class DerelictAngelscriptCLoader : SharedLibLoader { 123 public this() { 124 super(libNames); 125 } 126 127 public this(string names) { 128 super(names); 129 } 130 131 protected override void loadSymbols() { 132 bindFunc(cast(void**)&asEngine_AddRef, "asEngine_AddRef"); 133 bindFunc(cast(void**)&asEngine_Release, "asEngine_Release"); 134 bindFunc(cast(void**)&asEngine_ShutDownAndRelease, "asEngine_ShutDownAndRelease"); 135 bindFunc(cast(void**)&asEngine_SetEngineProperty, "asEngine_SetEngineProperty"); 136 bindFunc(cast(void**)&asEngine_GetEngineProperty, "asEngine_GetEngineProperty"); 137 bindFunc(cast(void**)&asEngine_SetMessageCallback, "asEngine_SetMessageCallback"); 138 bindFunc(cast(void**)&asEngine_ClearMessageCallback, "asEngine_ClearMessageCallback"); 139 bindFunc(cast(void**)&asEngine_WriteMessage, "asEngine_WriteMessage"); 140 bindFunc(cast(void**)&asEngine_SetJITCompiler, "asEngine_SetJITCompiler"); 141 bindFunc(cast(void**)&asEngine_GetJITCompiler, "asEngine_GetJITCompiler"); 142 bindFunc(cast(void**)&asEngine_RegisterGlobalFunction, "asEngine_RegisterGlobalFunction"); 143 bindFunc(cast(void**)&asEngine_GetGlobalFunctionCount, "asEngine_GetGlobalFunctionCount"); 144 bindFunc(cast(void**)&asEngine_GetGlobalFunctionByIndex, "asEngine_GetGlobalFunctionByIndex"); 145 bindFunc(cast(void**)&asEngine_GetGlobalFunctionByDecl, "asEngine_GetGlobalFunctionByDecl"); 146 147 bindFunc(cast(void**)&asEngine_CreateContext, "asEngine_CreateContext"); 148 bindFunc(cast(void**)&asEngine_GetModule, "asEngine_GetModule"); 149 150 bindFunc(cast(void**)&asContext_Release, "asContext_Release"); 151 bindFunc(cast(void**)&asContext_Prepare, "asContext_Prepare"); 152 bindFunc(cast(void**)&asContext_Execute, "asContext_Execute"); 153 154 bindFunc(cast(void**)&asModule_GetFunctionByDecl, "asModule_GetFunctionByDecl"); 155 } 156 } 157 158 __gshared DerelictAngelscriptCLoader DerelictAngelscriptC; 159 160 shared static this() { 161 DerelictAngelscriptC = new DerelictAngelscriptCLoader(); 162 }