00001 /***************************************************************************** 00002 * $Id: adsolua.h,v 1.3 2003/07/16 11:38:33 schou Exp $ 00003 * Author: Jakob Schou Jensen <schou@sourceforge.net> 00004 * Licence: GPL 00005 * 00006 * Description: Lua interface 00007 * 00008 ****************************************************************************/ 00009 00015 #ifndef ADSOLUA_H 00016 #define ADSOLUA_H 00017 00018 #define LUA_API extern "C" 00019 #define LUALIB_API extern "C" 00020 00021 #include <set> 00022 #include <lua.h> 00023 #include <lualib.h> 00024 00025 using namespace std; 00026 00027 #define ADSOLUA_MAXINTERFACES 16 00028 00032 int globalCallback(lua_State *L); 00033 00034 struct AdsoLuaUserData { 00035 char *type; 00036 class AdsoLua *lua; 00037 }; 00038 00039 struct AdsoLuaFunction : public AdsoLuaUserData { 00040 char *name; 00041 AdsoLuaFunction(){ 00042 type = "function"; 00043 } 00044 }; 00045 00046 struct AdsoLuaTable : public AdsoLuaUserData { 00047 char *name; 00048 AdsoLuaTable(){ 00049 type = "table"; 00050 } 00051 }; 00052 00056 class AdsoLuaInterface { 00062 virtual int luaCallback(lua_State *L, AdsoLuaUserData *ud) = 0; 00067 virtual void luaSetupInterface(AdsoLua*) = 0; 00068 public: 00069 virtual ~AdsoLuaInterface(){} 00070 friend class AdsoLua; 00071 }; 00072 00073 class AdsoLua { 00074 lua_State *L; 00075 int callback(AdsoLuaUserData *ud); 00076 AdsoLuaInterface *iflist[ADSOLUA_MAXINTERFACES]; 00077 int interfaceCount; 00078 00079 public: 00082 void declareFunction(char *name); 00087 void declareTable(char *name); 00089 void setVariable(char *name, int val); 00091 void setVariable(char *name, char *str); 00093 int callFunction(char *name, int val); 00094 00096 void addInterface(AdsoLuaInterface *intf); 00098 int doFile(char *filename); 00099 AdsoLua(); 00100 ~AdsoLua(); 00101 00102 friend int globalCallback(lua_State *L); 00103 }; 00104 00106 // Extensions 00108 00109 /*class AdsoLuaState { 00110 char *onEvent; 00111 }; 00112 00113 class AdsoLuaStateMachine { 00114 Set<AdsoLuaState> states; 00115 AdsoLuaState *currentState; 00116 char *onEvent; 00117 public: 00118 AdsoLuaStateMachine(){ 00119 currentState = 0; 00120 onEvent = 0; 00121 } 00122 }; 00123 */ 00124 00125 #endif 00126
1.3.2