api_makii.cpp 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. #include <precomp.h>
  2. #include "api_makii.h"
  3. #include <api/script/vcpu.h>
  4. #include <api/script/objecttable.h>
  5. #include <api/script/scriptmgr.h>
  6. #include <api/script/script.h>
  7. #include <api/script/scriptobj.h>
  8. api_maki *makiApi = NULL;
  9. api_makiI::api_makiI() {
  10. VCPU::scriptManager = new ScriptObjectManager();
  11. }
  12. api_makiI::~api_makiI() {
  13. delete VCPU::scriptManager;
  14. VCPU::scriptManager = NULL;
  15. VCPU::shutdown();
  16. ObjectTable::unloadExternalClasses();
  17. }
  18. void api_makiI::init() {
  19. ObjectTable::loadExternalClasses();
  20. }
  21. void api_makiI::maki_pushObject(void *o) {
  22. VCPU::pushObject(o);
  23. }
  24. void api_makiI::maki_pushInt(int i) {
  25. VCPU::pushInt(i);
  26. }
  27. void api_makiI::maki_pushBoolean(int b) {
  28. VCPU::pushBoolean(b);
  29. }
  30. void api_makiI::maki_pushFloat(float f) {
  31. VCPU::pushFloat(f);
  32. }
  33. void api_makiI::maki_pushDouble(double d) {
  34. VCPU::pushDouble(d);
  35. }
  36. void api_makiI::maki_pushString(const wchar_t *s) {
  37. VCPU::pushString(s);
  38. }
  39. void api_makiI::maki_pushVoid() {
  40. VCPU::pushVoid();
  41. }
  42. void api_makiI::maki_pushAny(scriptVar v) {
  43. VCPU::push(v);
  44. }
  45. void *api_makiI::maki_popObject() {
  46. return VCPU::popObject();
  47. }
  48. int api_makiI::maki_popInt() {
  49. return VCPU::popInt();
  50. }
  51. bool api_makiI::maki_popBoolean() {
  52. return VCPU::popBoolean();
  53. }
  54. float api_makiI::maki_popFloat() {
  55. return VCPU::popFloat();
  56. }
  57. double api_makiI::maki_popDouble() {
  58. return VCPU::popDouble();
  59. }
  60. const wchar_t *api_makiI::maki_popString() {
  61. return VCPU::popString();
  62. }
  63. scriptVar api_makiI::maki_popAny() {
  64. return VCPU::pop().v;
  65. }
  66. void api_makiI::maki_popDiscard() {
  67. VCPU::popDiscard();
  68. }
  69. const wchar_t *api_makiI::maki_getFunction(int dlfid, int *nparams, ScriptObjectController **p) {
  70. return ObjectTable::getFunction(dlfid, nparams, p);
  71. }
  72. int api_makiI::maki_addDlfRef(ScriptObjectController *o, const wchar_t *function_name, void *host) {
  73. return ObjectTable::dlfAddRef(o, function_name, host);
  74. }
  75. void api_makiI::maki_addDlfClassRef(ScriptObjectController *o, void *host) {
  76. ObjectTable::dlfAddClassRef(o, host);
  77. }
  78. void api_makiI::maki_remDlfRef(void *host) {
  79. ObjectTable::dlfRemRef(host);
  80. }
  81. scriptVar api_makiI::maki_callFunction(ScriptObject *o, int dlfid, scriptVar **params) {
  82. return ObjectTable::callFunction(o, dlfid, params);
  83. }
  84. scriptVar api_makiI::maki_triggerEvent(ScriptObject *o, int dlfid, int np, int scriptid) {
  85. scriptVar v = MAKE_SCRIPT_OBJECT(o);
  86. return VCPU::executeEvent(v, dlfid, np, scriptid);
  87. }
  88. int api_makiI::maki_getScriptInt(scriptVar v) {
  89. return SOM::makeInt(&v);
  90. }
  91. bool api_makiI::maki_getScriptBoolean(scriptVar v) {
  92. return SOM::makeBoolean(&v);
  93. }
  94. float api_makiI::maki_getScriptFloat(scriptVar v) {
  95. return SOM::makeFloat(&v);
  96. }
  97. double api_makiI::maki_getScriptDouble(scriptVar v) {
  98. return SOM::makeDouble(&v);
  99. }
  100. const wchar_t *api_makiI::maki_getScriptString(scriptVar v)
  101. {
  102. ASSERT(v.type == SCRIPT_STRING);
  103. return v.data.sdata;
  104. }
  105. ScriptObject *api_makiI::maki_getScriptObject(scriptVar v) {
  106. ASSERT(!SOM::isNumeric(&v) && v.type != SCRIPT_STRING);
  107. return v.data.odata;
  108. }
  109. scriptVar api_makiI::maki_updateDlf(maki_cmd *cmd, int *dlfid, int *linkcount) {
  110. switch (cmd->cmd) {
  111. case MAKI_CMD_ADDREF:
  112. (*linkcount)++;
  113. break;
  114. case MAKI_CMD_REMREF:
  115. (*linkcount)--;
  116. ASSERT(*linkcount >= 0);
  117. if (*linkcount == 0)
  118. *dlfid = -1;
  119. break;
  120. case MAKI_CMD_SETDLF:
  121. ASSERT(*dlfid == -1);
  122. *dlfid = cmd->id;
  123. break;
  124. case MAKI_CMD_GETDLF:
  125. cmd->id = *dlfid;
  126. break;
  127. case MAKI_CMD_RESETDLF:
  128. *dlfid = -1;
  129. break;
  130. }
  131. RETURN_SCRIPT_VOID
  132. }
  133. ScriptObject *api_makiI::maki_instantiate(GUID classguid) {
  134. int classid = ObjectTable::getClassFromGuid(classguid);
  135. if (classid == -1) return NULL;
  136. return ObjectTable::instantiate(classid);
  137. }
  138. void api_makiI::maki_destroy(ScriptObject *o) {
  139. ObjectTable::destroy(o);
  140. }
  141. void *api_makiI::maki_encapsulate(GUID classguid, ScriptObject *o) {
  142. int classid = ObjectTable::getClassFromGuid(classguid);
  143. if (classid == -1) return NULL;
  144. return ObjectTable::encapsulate(classid, o);
  145. }
  146. void api_makiI::maki_deencapsulate(GUID classguid, void *o) {
  147. int classid = ObjectTable::getClassFromGuid(classguid);
  148. if (classid == -1) return;
  149. ObjectTable::deencapsulate(classid, o);
  150. }
  151. ScriptObjectController *api_makiI::maki_getController(GUID scriptclass) {
  152. return ObjectTable::getController(scriptclass);
  153. }
  154. int api_makiI::maki_createOrphan(int type) {
  155. return VCPU::createOrphan(type);
  156. }
  157. void api_makiI::maki_killOrphan(int id) {
  158. VCPU::killOrphan(id);
  159. }
  160. void api_makiI::maki_setObjectAtom(const wchar_t *atomname, ScriptObject *object) {
  161. VCPU::setAtom(atomname, object);
  162. }
  163. ScriptObject *api_makiI::maki_getObjectAtom(const wchar_t *atomname) {
  164. return VCPU::getAtom(atomname);
  165. }
  166. #ifdef WASABI_COMPILE_WND
  167. ScriptObject *api_makiI::maki_findObject(const wchar_t *name)
  168. {
  169. return ScriptObjectManager::findObject(name);
  170. }
  171. #endif
  172. void api_makiI::vcpu_addScriptObject(ScriptObject *o) {
  173. SystemObject::addScriptObject(o);
  174. }
  175. void api_makiI::vcpu_removeScriptObject(ScriptObject *o) {
  176. SystemObject::removeScriptObject(o);
  177. }
  178. int api_makiI::vcpu_getCacheCount() {
  179. return Script::getCacheCount();
  180. }
  181. int api_makiI::vcpu_isValidScriptId(int id) {
  182. return Script::isValidScriptId(id);
  183. }
  184. int api_makiI::vcpu_mapVarId(int varid, int scriptid) {
  185. return Script::varIdToGlobal(varid, scriptid);
  186. }
  187. int api_makiI::vcpu_getUserAncestorId(int varid, int scriptid) {
  188. return Script::getUserAncestor(varid, scriptid);
  189. }
  190. int api_makiI::vcpu_getNumEvents() {
  191. return Script::getNumEventsLinked();
  192. }
  193. int api_makiI::vcpu_getEvent(int event, int *dlf, int *script, int *var) {
  194. return Script::getLinkedEventParams(event, dlf, script, var);
  195. }
  196. int api_makiI::vcpu_getComplete() {
  197. return VCPU::getComplete();
  198. }
  199. void api_makiI::vcpu_setComplete() {
  200. VCPU::setComplete();
  201. }
  202. void api_makiI::vcpu_resetComplete() {
  203. VCPU::resetComplete();
  204. }
  205. const wchar_t *api_makiI::vcpu_getClassName(int vcpuid, int localclassid) {
  206. return VCPU::getClassName(vcpuid, localclassid);
  207. }