// ----------------------------------------------------------------------------
// Generated by InterfaceFactory [Fri Oct 01 02:49:40 1999]
// 
// File        : api_maki.h
// Class       : api_maki
// class layer : Dispatchable Interface
// ----------------------------------------------------------------------------

#ifndef __API_MAKI_H
#define __API_MAKI_H

#include <bfc/dispatch.h>

class ScriptObject;
class ScriptObjectController;

#include <api/script/scriptvar.h>
#include <api/script/vcputypes.h>

// ----------------------------------------------------------------------------

class NOVTABLE api_maki: public Dispatchable {
  protected:
    api_maki() {}
    ~api_maki() {}
  public:
    void maki_pushObject(void *o);
    void maki_pushInt(int i);
    void maki_pushBoolean(int b);
    void maki_pushFloat(float f);
    void maki_pushDouble(double d);
    void maki_pushString(const wchar_t *s);
    void maki_pushVoid();
    void maki_pushAny(scriptVar v);
    void *maki_popObject();
    int maki_popInt();
    bool maki_popBoolean();
    float maki_popFloat();
    double maki_popDouble();
    const wchar_t *maki_popString();
    scriptVar maki_popAny();
    void maki_popDiscard();
    const wchar_t *maki_getFunction(int dlfid, int *nparams, ScriptObjectController **p);
    int maki_addDlfRef(ScriptObjectController *o, const wchar_t *function_name, void *host);
    void maki_addDlfClassRef(ScriptObjectController *o, void *host);
    void maki_remDlfRef(void *host);
    scriptVar maki_callFunction(ScriptObject *o, int dlfid, scriptVar **params);
    scriptVar maki_triggerEvent(ScriptObject *o, int dlfid, int np, int scriptid = -1);
    int maki_getScriptInt(scriptVar v);
    bool maki_getScriptBoolean(scriptVar v);
    float maki_getScriptFloat(scriptVar v);
    double maki_getScriptDouble(scriptVar v);
    const wchar_t *maki_getScriptString(scriptVar v);
    ScriptObject *maki_getScriptObject(scriptVar v);
    scriptVar maki_updateDlf(maki_cmd *cmd, int *dlfid, int *linkcount);
    ScriptObject *maki_instantiate(GUID classguid);
    void maki_destroy(ScriptObject *o);
    void *maki_encapsulate(GUID classguid, ScriptObject *o);
    void maki_deencapsulate(GUID classguid, void *o);
    ScriptObjectController *maki_getController(GUID scriptclass);
    int maki_createOrphan(int type);
    void maki_killOrphan(int id);
    void maki_setObjectAtom(const wchar_t *atomname, ScriptObject *object);
    ScriptObject *maki_getObjectAtom(const wchar_t *atomname);
  #ifdef WASABI_COMPILE_WND
    ScriptObject *maki_findObject(const wchar_t *name);
  #endif
    void vcpu_addScriptObject(ScriptObject *o);
    void vcpu_removeScriptObject(ScriptObject *o);
    int vcpu_getCacheCount();
    int vcpu_isValidScriptId(int id);
    int vcpu_mapVarId(int varid, int scriptid);
    int vcpu_getUserAncestorId(int varid, int scriptid);
    int vcpu_getNumEvents();
    int vcpu_getEvent(int event, int *dlf, int *script, int *var);
    int vcpu_getComplete();
    void vcpu_setComplete();
    void vcpu_resetComplete();
    const wchar_t *vcpu_getClassName(int vcpuid, int localclassid);
  
  protected:
    enum {
      API_MAKI_MAKI_PUSHOBJECT = 10,
      API_MAKI_MAKI_PUSHINT = 20,
      API_MAKI_MAKI_PUSHBOOLEAN = 30,
      API_MAKI_MAKI_PUSHFLOAT = 40,
      API_MAKI_MAKI_PUSHDOUBLE = 50,
      API_MAKI_MAKI_PUSHSTRING = 60,
      API_MAKI_MAKI_PUSHVOID = 70,
      API_MAKI_MAKI_PUSHANY = 80,
      API_MAKI_MAKI_POPOBJECT = 90,
      API_MAKI_MAKI_POPINT = 100,
      API_MAKI_MAKI_POPBOOLEAN = 110,
      API_MAKI_MAKI_POPFLOAT = 120,
      API_MAKI_MAKI_POPDOUBLE = 130,
      API_MAKI_MAKI_POPSTRING = 140,
      API_MAKI_MAKI_POPANY = 150,
      API_MAKI_MAKI_POPDISCARD = 160,
      API_MAKI_MAKI_GETFUNCTION = 170,
      API_MAKI_MAKI_ADDDLFREF = 180,
      API_MAKI_MAKI_ADDDLFCLASSREF = 190,
      API_MAKI_MAKI_REMDLFREF = 200,
      API_MAKI_MAKI_CALLFUNCTION = 210,
      API_MAKI_MAKI_TRIGGEREVENT = 220,
      API_MAKI_MAKI_GETSCRIPTINT = 230,
      API_MAKI_MAKI_GETSCRIPTBOOLEAN = 240,
      API_MAKI_MAKI_GETSCRIPTFLOAT = 250,
      API_MAKI_MAKI_GETSCRIPTDOUBLE = 260,
      API_MAKI_MAKI_GETSCRIPTSTRING = 270,
      API_MAKI_MAKI_GETSCRIPTOBJECT = 280,
      API_MAKI_MAKI_UPDATEDLF = 290,
      API_MAKI_MAKI_INSTANTIATE = 300,
      API_MAKI_MAKI_DESTROY = 310,
      API_MAKI_MAKI_ENCAPSULATE = 320,
      API_MAKI_MAKI_DEENCAPSULATE = 330,
      API_MAKI_MAKI_GETCONTROLLER = 340,
      API_MAKI_MAKI_CREATEORPHAN = 350,
      API_MAKI_MAKI_KILLORPHAN = 360,
      API_MAKI_MAKI_SETOBJECTATOM = 370,
      API_MAKI_MAKI_GETOBJECTATOM = 380,
      #ifdef WASABI_COMPILE_WND
      API_MAKI_MAKI_FINDOBJECT = 390,
      #endif
      API_MAKI_VCPU_ADDSCRIPTOBJECT = 400,
      API_MAKI_VCPU_REMOVESCRIPTOBJECT = 410,
      API_MAKI_VCPU_GETCACHECOUNT = 420,
      API_MAKI_VCPU_ISVALIDSCRIPTID = 430,
      API_MAKI_VCPU_MAPVARID = 440,
      API_MAKI_VCPU_GETUSERANCESTORID = 450,
      API_MAKI_VCPU_GETNUMEVENTS = 460,
      API_MAKI_VCPU_GETEVENT = 470,
      API_MAKI_VCPU_GETCOMPLETE = 480,
      API_MAKI_VCPU_SETCOMPLETE = 481,
      API_MAKI_VCPU_RESETCOMPLETE = 482,
      API_MAKI_VCPU_GETCLASSNAME = 490,
    };
};

// ----------------------------------------------------------------------------

inline void api_maki::maki_pushObject(void *o) {
  _voidcall(API_MAKI_MAKI_PUSHOBJECT, o);
}

inline void api_maki::maki_pushInt(int i) {
  _voidcall(API_MAKI_MAKI_PUSHINT, i);
}

inline void api_maki::maki_pushBoolean(int b) {
  _voidcall(API_MAKI_MAKI_PUSHBOOLEAN, b);
}

inline void api_maki::maki_pushFloat(float f) {
  _voidcall(API_MAKI_MAKI_PUSHFLOAT, f);
}

inline void api_maki::maki_pushDouble(double d) {
  _voidcall(API_MAKI_MAKI_PUSHDOUBLE, d);
}

inline void api_maki::maki_pushString(const wchar_t *s) {
  _voidcall(API_MAKI_MAKI_PUSHSTRING, s);
}

inline void api_maki::maki_pushVoid() {
  _voidcall(API_MAKI_MAKI_PUSHVOID);
}

inline void api_maki::maki_pushAny(scriptVar v) {
  _voidcall(API_MAKI_MAKI_PUSHANY, v);
}

inline void *api_maki::maki_popObject() {
  void *__retval = _call(API_MAKI_MAKI_POPOBJECT, (void *)NULL);
  return __retval;
}

inline int api_maki::maki_popInt() {
  int __retval = _call(API_MAKI_MAKI_POPINT, (int)0);
  return __retval;
}

inline bool api_maki::maki_popBoolean() {
  bool __retval = _call(API_MAKI_MAKI_POPBOOLEAN, (bool)0);
  return __retval;
}

inline float api_maki::maki_popFloat() {
  float __retval = _call(API_MAKI_MAKI_POPFLOAT, (float)0);
  return __retval;
}

inline double api_maki::maki_popDouble() {
  double __retval = _call(API_MAKI_MAKI_POPDOUBLE, (double)0);
  return __retval;
}

inline const wchar_t *api_maki::maki_popString() {
  return _call(API_MAKI_MAKI_POPSTRING, (const wchar_t *)0);
  
}

inline scriptVar api_maki::maki_popAny() 
{
	scriptVar r; r.type = SCRIPT_VOID;  r.data.idata = 0; 
  scriptVar __retval = _call(API_MAKI_MAKI_POPANY, (scriptVar)r);
  return __retval;
}

inline void api_maki::maki_popDiscard() {
  _voidcall(API_MAKI_MAKI_POPDISCARD);
}

inline const wchar_t *api_maki::maki_getFunction(int dlfid, int *nparams, ScriptObjectController **p) {
  return _call(API_MAKI_MAKI_GETFUNCTION, (const wchar_t *)0, dlfid, nparams, p);
  
}

inline int api_maki::maki_addDlfRef(ScriptObjectController *o, const wchar_t *function_name, void *host) {
  int __retval = _call(API_MAKI_MAKI_ADDDLFREF, (int)0, o, function_name, host);
  return __retval;
}

inline void api_maki::maki_addDlfClassRef(ScriptObjectController *o, void *host) {
  _voidcall(API_MAKI_MAKI_ADDDLFCLASSREF, o, host);
}

inline void api_maki::maki_remDlfRef(void *host) {
  _voidcall(API_MAKI_MAKI_REMDLFREF, host);
}

inline scriptVar api_maki::maki_callFunction(ScriptObject *o, int dlfid, scriptVar **params) {
	scriptVar r; r.type = SCRIPT_VOID;  r.data.idata = 0; 
  scriptVar __retval = _call(API_MAKI_MAKI_CALLFUNCTION, (scriptVar)r, o, dlfid, params);
  return __retval;
}

inline scriptVar api_maki::maki_triggerEvent(ScriptObject *o, int dlfid, int np, int scriptid) {
	scriptVar r; r.type = SCRIPT_VOID;  r.data.idata = 0; 
  scriptVar __retval = _call(API_MAKI_MAKI_TRIGGEREVENT, (scriptVar)r, o, dlfid, np, scriptid);
  return __retval;
}

inline int api_maki::maki_getScriptInt(scriptVar v) {
  int __retval = _call(API_MAKI_MAKI_GETSCRIPTINT, (int)0, v);
  return __retval;
}

inline bool api_maki::maki_getScriptBoolean(scriptVar v) {
  bool __retval = _call(API_MAKI_MAKI_GETSCRIPTBOOLEAN, (bool)0, v);
  return __retval;
}

inline float api_maki::maki_getScriptFloat(scriptVar v) {
  float __retval = _call(API_MAKI_MAKI_GETSCRIPTFLOAT, (float)0, v);
  return __retval;
}

inline double api_maki::maki_getScriptDouble(scriptVar v) {
  double __retval = _call(API_MAKI_MAKI_GETSCRIPTDOUBLE, (double)0, v);
  return __retval;
}

inline const wchar_t *api_maki::maki_getScriptString(scriptVar v) {
  const wchar_t *__retval = _call(API_MAKI_MAKI_GETSCRIPTSTRING, (const wchar_t *)0, v);
  return __retval;
}

inline ScriptObject *api_maki::maki_getScriptObject(scriptVar v) {
  ScriptObject *__retval = _call(API_MAKI_MAKI_GETSCRIPTOBJECT, (ScriptObject *)NULL, v);
  return __retval;
}

inline scriptVar api_maki::maki_updateDlf(maki_cmd *cmd, int *dlfid, int *linkcount) {
	scriptVar r; r.type = SCRIPT_VOID;  r.data.idata = 0; 
  scriptVar __retval = _call(API_MAKI_MAKI_UPDATEDLF, (scriptVar)r, cmd, dlfid, linkcount);
  return __retval;
}

inline ScriptObject *api_maki::maki_instantiate(GUID classguid) {
  ScriptObject *__retval = _call(API_MAKI_MAKI_INSTANTIATE, (ScriptObject *)NULL, classguid);
  return __retval;
}

inline void api_maki::maki_destroy(ScriptObject *o) {
  _voidcall(API_MAKI_MAKI_DESTROY, o);
}

inline void *api_maki::maki_encapsulate(GUID classguid, ScriptObject *o) {
  void *__retval = _call(API_MAKI_MAKI_ENCAPSULATE, (void *)NULL, classguid, o);
  return __retval;
}

inline void api_maki::maki_deencapsulate(GUID classguid, void *o) {
  _voidcall(API_MAKI_MAKI_DEENCAPSULATE, classguid, o);
}

inline ScriptObjectController *api_maki::maki_getController(GUID scriptclass) {
  ScriptObjectController *__retval = _call(API_MAKI_MAKI_GETCONTROLLER, (ScriptObjectController *)NULL, scriptclass);
  return __retval;
}

inline int api_maki::maki_createOrphan(int type) {
  int __retval = _call(API_MAKI_MAKI_CREATEORPHAN, (int)0, type);
  return __retval;
}

inline void api_maki::maki_killOrphan(int id) {
  _voidcall(API_MAKI_MAKI_KILLORPHAN, id);
}

inline void api_maki::maki_setObjectAtom(const wchar_t *atomname, ScriptObject *object) {
  _voidcall(API_MAKI_MAKI_SETOBJECTATOM, atomname, object);
}

inline ScriptObject *api_maki::maki_getObjectAtom(const wchar_t *atomname) {
  ScriptObject *__retval = _call(API_MAKI_MAKI_GETOBJECTATOM, (ScriptObject *)NULL, atomname);
  return __retval;
}

#ifdef WASABI_COMPILE_WND
inline ScriptObject *api_maki::maki_findObject(const wchar_t *name) {
  ScriptObject *__retval = _call(API_MAKI_MAKI_FINDOBJECT, (ScriptObject *)NULL, name);
  return __retval;
}

#endif
inline void api_maki::vcpu_addScriptObject(ScriptObject *o) {
  _voidcall(API_MAKI_VCPU_ADDSCRIPTOBJECT, o);
}

inline void api_maki::vcpu_removeScriptObject(ScriptObject *o) {
  _voidcall(API_MAKI_VCPU_REMOVESCRIPTOBJECT, o);
}

inline int api_maki::vcpu_getCacheCount() {
  int __retval = _call(API_MAKI_VCPU_GETCACHECOUNT, (int)0);
  return __retval;
}

inline int api_maki::vcpu_isValidScriptId(int id) {
  int __retval = _call(API_MAKI_VCPU_ISVALIDSCRIPTID, (int)0, id);
  return __retval;
}

inline int api_maki::vcpu_mapVarId(int varid, int scriptid) {
  int __retval = _call(API_MAKI_VCPU_MAPVARID, (int)0, varid, scriptid);
  return __retval;
}

inline int api_maki::vcpu_getUserAncestorId(int varid, int scriptid) {
  int __retval = _call(API_MAKI_VCPU_GETUSERANCESTORID, (int)0, varid, scriptid);
  return __retval;
}

inline int api_maki::vcpu_getNumEvents() {
  int __retval = _call(API_MAKI_VCPU_GETNUMEVENTS, (int)0);
  return __retval;
}

inline int api_maki::vcpu_getEvent(int event, int *dlf, int *script, int *var) {
  int __retval = _call(API_MAKI_VCPU_GETEVENT, (int)0, event, dlf, script, var);
  return __retval;
}

inline int api_maki::vcpu_getComplete() {
  int __retval = _call(API_MAKI_VCPU_GETCOMPLETE, (int)0);
  return __retval;
}

inline void api_maki::vcpu_setComplete() {
  _voidcall(API_MAKI_VCPU_SETCOMPLETE);
}

inline void api_maki::vcpu_resetComplete() {
  _voidcall(API_MAKI_VCPU_RESETCOMPLETE);
}

inline const wchar_t *api_maki::vcpu_getClassName(int vcpuid, int localclassid) {
  return _call(API_MAKI_VCPU_GETCLASSNAME, (const wchar_t *)0, vcpuid, localclassid);

}

// ----------------------------------------------------------------------------

// {87D2391B-C928-4a49-8E0B-D47C049E0711}
static const GUID makiApiServiceGuid = 
{ 0x87d2391b, 0xc928, 0x4a49, { 0x8e, 0xb, 0xd4, 0x7c, 0x4, 0x9e, 0x7, 0x11 } };

extern api_maki *makiApi;

#endif // __API_MAKI_H