LuaLib.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:15k
源码类别:

模拟服务器

开发平台:

C/C++

  1. /*
  2. ** $Id: lua.h,v 1.79 2000/10/31 12:44:07 roberto Exp $
  3. ** Lua - An Extensible Extension Language
  4. ** TeCGraf: Grupo de Tecnologia em Computacao Grafica, PUC-Rio, Brazil
  5. ** e-mail: lua@tecgraf.puc-rio.br
  6. ** www: http://www.tecgraf.puc-rio.br/lua/
  7. ** See Copyright Notice at the end of this file
  8. */
  9. #ifndef lua_h
  10. #define lua_h
  11. /* definition of `size_t' */
  12. #include <stddef.h>
  13. #ifdef __linux
  14. #define LUA_API
  15. #define LUALIB_API
  16. #else
  17. #ifdef _USELUALIB
  18. #ifndef LUA_API
  19. #define LUA_API extern
  20. #define LUALIB_API extern
  21. #endif
  22. #else
  23. #define LUA_API extern __declspec(dllimport)
  24. #define LUALIB_API extern __declspec(dllimport)
  25. #endif
  26. #endif
  27. #ifdef __cplusplus
  28. extern "C" {
  29. #endif 
  30. #define LUA_VERSION "Lua 4.0"
  31. #define LUA_COPYRIGHT "Copyright (C) 1994-2000 TeCGraf, PUC-Rio"
  32. #define LUA_AUTHORS  "W. Celes, R. Ierusalimschy & L. H. de Figueiredo"
  33. /* name of global variable with error handler */
  34. #define LUA_ERRORMESSAGE "_ERRORMESSAGE"
  35. /* pre-defined references */
  36. #define LUA_NOREF (-2)
  37. #define LUA_REFNIL (-1)
  38. #define LUA_REFREGISTRY 0
  39. /* pre-defined tags */
  40. #define LUA_ANYTAG (-1)
  41. #define LUA_NOTAG (-2)
  42. /* option for multiple returns in lua_call */
  43. #define LUA_MULTRET (-1)
  44. /* minimum stack available for a C function */
  45. #define LUA_MINSTACK 20
  46. /* error codes for lua_do* */
  47. #define LUA_ERRRUN 1
  48. #define LUA_ERRFILE 2
  49. #define LUA_ERRSYNTAX 3
  50. #define LUA_ERRMEM 4
  51. #define LUA_ERRERR 5
  52. //##ModelId=3BA83F3A02ED
  53. typedef struct lua_State lua_State;
  54. //##ModelId=3BA83F3A02FD
  55. typedef int (*lua_CFunction) (lua_State *L);
  56. /*
  57. ** types returned by `lua_type'
  58. */
  59. #define LUA_TNONE (-1)
  60. #define LUA_TUSERDATA 0
  61. #define LUA_TNIL 1
  62. #define LUA_TNUMBER 2
  63. #define LUA_TSTRING 3
  64. #define LUA_TTABLE 4
  65. #define LUA_TFUNCTION 5
  66. /*
  67. ** state manipulation
  68. */
  69. LUA_API lua_State *lua_open (int stacksize);
  70. LUA_API void       lua_close (lua_State *L);
  71. /*
  72. ** basic stack manipulation
  73. */
  74. LUA_API int   lua_gettop (lua_State *L);
  75. LUA_API void  lua_settop (lua_State *L, int index);
  76. LUA_API void  lua_pushvalue (lua_State *L, int index);
  77. LUA_API void  lua_remove (lua_State *L, int index);
  78. LUA_API void  lua_insert (lua_State *L, int index);
  79. LUA_API int   lua_stackspace (lua_State *L);
  80. /*
  81. ** debug out functions
  82. */
  83. LUA_API int   lua_setdebugout(const char * , const char *);
  84. LUA_API void lua_outoutmsg(const char * szoutmsg);
  85. LUA_API void lua_outerrmsg(const char * szerrmsg);
  86. /*
  87. ** access functions (stack -> C)
  88. */
  89. LUA_API int            lua_type (lua_State *L, int index);
  90. LUA_API const char    *lua_typename (lua_State *L, int t);
  91. LUA_API int            lua_isnumber (lua_State *L, int index);
  92. LUA_API int            lua_isstring (lua_State *L, int index);
  93. LUA_API int            lua_iscfunction (lua_State *L, int index);
  94. LUA_API int            lua_tag (lua_State *L, int index);
  95. LUA_API int            lua_equal (lua_State *L, int index1, int index2);
  96. LUA_API int            lua_lessthan (lua_State *L, int index1, int index2);
  97. LUA_API double         lua_tonumber (lua_State *L, int index);
  98. LUA_API const char    *lua_tostring (lua_State *L, int index);
  99. LUA_API size_t         lua_strlen (lua_State *L, int index);
  100. LUA_API lua_CFunction  lua_tocfunction (lua_State *L, int index);
  101. LUA_API void       *lua_touserdata (lua_State *L, int index);
  102. LUA_API const void    *lua_topointer (lua_State *L, int index);
  103. /*
  104. ** push functions (C -> stack)
  105. */
  106. LUA_API void  lua_pushnil (lua_State *L);
  107. LUA_API void  lua_pushnumber (lua_State *L, double n);
  108. LUA_API void  lua_pushlstring (lua_State *L, const char *s, size_t len);
  109. LUA_API void  lua_pushstring (lua_State *L, const char *s);
  110. LUA_API void  lua_pushcclosure (lua_State *L, lua_CFunction fn, int n);
  111. LUA_API void  lua_pushusertag (lua_State *L, void *u, int tag);
  112. /*
  113. ** get functions (Lua -> stack)
  114. */
  115. LUA_API void  lua_getglobal (lua_State *L, const char *name);
  116. LUA_API void  lua_gettable (lua_State *L, int index);
  117. LUA_API void  lua_rawget (lua_State *L, int index);
  118. LUA_API void  lua_rawgeti (lua_State *L, int index, int n);
  119. LUA_API void  lua_getglobals (lua_State *L);
  120. LUA_API void  lua_gettagmethod (lua_State *L, int tag, const char *event);
  121. LUA_API int   lua_getref (lua_State *L, int ref);
  122. LUA_API void  lua_newtable (lua_State *L);
  123. /*
  124. ** set functions (stack -> Lua)
  125. */
  126. LUA_API void  lua_setglobal (lua_State *L, const char *name);
  127. LUA_API void  lua_settable (lua_State *L, int index);
  128. LUA_API void  lua_rawset (lua_State *L, int index);
  129. LUA_API void  lua_rawseti (lua_State *L, int index, int n);
  130. LUA_API void  lua_setglobals (lua_State *L);
  131. LUA_API void  lua_settagmethod (lua_State *L, int tag, const char *event);
  132. LUA_API int   lua_ref (lua_State *L, int lock);
  133. /*
  134. ** "do" functions (run Lua code)
  135. */
  136. LUA_API int   lua_call (lua_State *L, int nargs, int nresults);
  137. LUA_API void  lua_rawcall (lua_State *L, int nargs, int nresults);
  138. LUA_API int   lua_dofile (lua_State *L, const char *filename);
  139. LUA_API int   lua_dostring (lua_State *L, const char *str);
  140. LUA_API int   lua_dobuffer (lua_State *L, const char *buff, size_t size, const char *name);
  141. /*
  142. ** Garbage-collection functions
  143. */
  144. LUA_API int   lua_getgcthreshold (lua_State *L);
  145. LUA_API int   lua_getgccount (lua_State *L);
  146. LUA_API void  lua_setgcthreshold (lua_State *L, int newthreshold);
  147. /*
  148. ** miscellaneous functions
  149. */
  150. LUA_API int   lua_newtag (lua_State *L);
  151. LUA_API int   lua_copytagmethods (lua_State *L, int tagto, int tagfrom);
  152. LUA_API void  lua_settag (lua_State *L, int tag);
  153. LUA_API void  lua_error (lua_State *L, const char *s);
  154. LUA_API void  lua_unref (lua_State *L, int ref);
  155. LUA_API int   lua_next (lua_State *L, int index);
  156. LUA_API int   lua_getn (lua_State *L, int index);
  157. LUA_API void  lua_concat (lua_State *L, int n);
  158. LUA_API void *lua_newuserdata (lua_State *L, size_t size);
  159. LUA_API int ldo (int (*f)(lua_State *l, const char *), const char *name) ;
  160. /* 
  161. ** ===============================================================
  162. ** some useful macros
  163. ** ===============================================================
  164. */
  165. #define lua_pop(L,n) lua_settop(L, -(n)-1)
  166. #define lua_register(L,n,f) (lua_pushcfunction(L, f), lua_setglobal(L, n))
  167. #define lua_pushuserdata(L,u) lua_pushusertag(L, u, 0)
  168. #define lua_pushcfunction(L,f) lua_pushcclosure(L, f, 0)
  169. #define lua_clonetag(L,t) lua_copytagmethods(L, lua_newtag(L), (t))
  170. #define lua_isfunction(L,n) (lua_type(L,n) == LUA_TFUNCTION)
  171. #define lua_istable(L,n) (lua_type(L,n) == LUA_TTABLE)
  172. #define lua_isuserdata(L,n) (lua_type(L,n) == LUA_TUSERDATA)
  173. #define lua_isnil(L,n) (lua_type(L,n) == LUA_TNIL)
  174. #define lua_isnull(L,n) (lua_type(L,n) == LUA_TNONE)
  175. #define lua_getregistry(L) lua_getref(L, LUA_REFREGISTRY)
  176. //新加的API
  177. LUA_API int lua_compilebuffer(lua_State *L, const char *buff, size_t size, const char *name);//只对buffer经编绎,并不执行任何函数
  178. LUA_API int lua_compilefile (lua_State *L, const char *filename);//编译从文件流传来的脚本
  179. LUA_API int lua_execute(lua_State *L);//执行经过编绎之后的脚本
  180. LUA_API void lua_gettopindex(lua_State *L , int * pindex);//获得当前的脚本堆栈顶的索引
  181. //BaseLib
  182. //脚本引擎
  183. #define Lua_CFunction lua_CFunction
  184. #define Lua_State lua_State
  185. #define Lua_Create(nSize) lua_open(nSize)
  186. #define Lua_Release(L) lua_close(L)
  187. #define Lua_GetTopIndex(L) lua_gettop(L)
  188. #define Lua_SetTopIndex(L,nIndex) lua_settop(L,nIndex)
  189. #define Lua_PushValue(L,nIndex) lua_pushvalue(L,nIndex)
  190. #define Lua_RemoveValue(L,nIndex) lua_remove(L,nIndex)
  191. #define Lua_InsertValue(L,nIndex) lua_insert(L,nIndex)
  192. #define Lua_GetStackSpace(L) lua_stackspace(L)
  193. #define Lua_GetValueType(L,nIndex) lua_type(L,nIndex)
  194. #define Lua_GetTypeName(L,Tag) lua_typename(L,Tag)
  195. #define Lua_IsNumber(L,nIndex) lua_isnumber(L,nIndex)
  196. #define Lua_IsString(L,nIndex) lua_isstring(L,nIndex)
  197. #define Lua_IsCFunction(L,nIndex) lua_iscfunction(L,nIndex)
  198. #define Lua_IsTable(L,nIndex) lua_istable(L,nIndex)
  199. #define Lua_GetValueTag(L,nIndex) lua_tag(L,nIndex)
  200. #define Lua_IsEqual(L,index1,index2) lua_equal(L,index1,index2)
  201. #define Lua_IsLessThan(L,index1,index2) lua_lessthan(L,index1,index2)
  202. #define Lua_ValueToNumber(L,nIndex) lua_tonumber(L,nIndex)
  203. #define Lua_ValueToString(L,nIndex) lua_tostring(L,nIndex)
  204. #define Lua_GetStrLen(L,nIndex) lua_strlen(L,nIndex)
  205. #define Lua_ValueToCFunction(L,nIndex) lua_tocfunction(L,nIndex)
  206. #define Lua_ValueToUserData(L,nIndex) lua_touserdata(L,nIndex)
  207. #define Lua_ValueToPoint(L,nIndex) lua_topointer(L,nIndex)
  208. /*
  209. ** push functions (C -> stack)
  210. */
  211. #define Lua_PushNil(L) lua_pushnil(L)
  212. #define Lua_PushNumber(L,Number) lua_pushnumber(L,Number)
  213. #define Lua_PushLString(L,LString,Len) lua_pushlstring(L,LString,Len)
  214. #define Lua_PushString(L,String) lua_pushstring(L,String)
  215. #define Lua_PushCClosure(L,Fun,N) lua_pushcclosure(L,Fun,N)
  216. #define Lua_PushUserTag(L,PVoid,Tag) lua_pushusertag(L,PVoid,Tag)
  217. #define Lua_GetGlobal(L,Valuename) lua_getglobal(L,Valuename)
  218. #define Lua_GetTable(L,nIndex) lua_gettable(L,nIndex)
  219. #define Lua_RawGet(L,nIndex) lua_rawget(L,nIndex)
  220. #define Lua_RawGetI(L,nIndex,n) lua_rawgeti(L,nIndex,n)
  221. #define Lua_GetGlobals(L) lua_getglobals(L)
  222. #define Lua_GetTagMethod(L,iTag,cEvent) lua_gettagmethod(L,iTag,cEvent)
  223. #define Lua_GetRef(L,iRef) lua_getref(L,iRef)
  224. #define Lua_NewTable(L) lua_newtable(L)
  225. #define Lua_SetGlobal(L,cName) lua_setglobal(L,cName)
  226. #define Lua_SetTable(L,nIndex) lua_settable(L,nIndex)
  227. #define Lua_RawSet(L,nIndex) lua_rawset(L,nIndex)
  228. #define Lua_RawSetI(L,nIndex,nNum) lua_rawseti(L,nIndex,nNum)
  229. #define Lua_SetGlobals(L) lua_setglobals(L)
  230. #define Lua_SetTagMethod(L,iTag,cEvent) lua_settagmethod(L,iTag,cEvent)
  231. #define Lua_SetRef(L,nLock) lua_ref(L,nLock)
  232. #define Lua_Call(L,nArgs,nResults) lua_call(L,nArgs,nResults)
  233. #define Lua_RawCall(L,nArgs,nResults) lua_rawcall(L,nArgs,nResults)
  234. #define Lua_ExecuteFile(L,cFilename) lua_dofile(L,cFilename)
  235. #define Lua_ExecuteString(L,cString) lua_dostring(L,cString)
  236. #define Lua_ExecuteBuffer(L,pBuff,iSize,cname) lua_dobuffer(L,pBuff,iSize,cname)
  237. #define Lua_GetGCThreshold(L) lua_getgcthreshold(L)
  238. #define Lua_GetGCCount(L) lua_getgccount(L)
  239. #define Lua_SetGCThreshold(L,nThreshold)lua_setgcthreshold(L,nThreshold)
  240. /*
  241. ** miscellaneous functions
  242. */
  243. #define Lua_NewTag(L) lua_newtag(L)
  244. #define Lua_CopyTagMethods(L,nTagTo,nTagFrom) lua_copytagmethods(L,nTagTo,nTagFrom)
  245. #define Lua_SetTag(L,nTag) lua_settag(L,nTag)
  246. #define Lua_Error(L,cError) lua_error(L,cError)u
  247. #define Lua_UnRef(L,nRef) lua_unref(L,nRef)
  248. #define Lua_Next(L,nIndex) lua_next(L,nIndex)
  249. #define Lua_GetN(L,nIndex) lua_getn(L,nIndex)
  250. #define Lua_Concat(L,nNum) lua_concat(L,nNum)
  251. #define Lua_NewUserData(L,nSize) lua_newuserdata(L,nSize)
  252. #define Lua_OpenBaseLib(L)  lua_baselibopen(L)
  253. #define Lua_OpenIOLib(L)  lua_iolibopen(L)
  254. #define Lua_OpenStrLib(L)  lua_strlibopen(L)
  255. #define Lua_OpenMathLib(L)  lua_mathlibopen(L)
  256. #define Lua_OpenDBLib(L)  lua_dblibopen(L)
  257. /* 
  258. ** ===============================================================
  259. ** some useful macros
  260. ** ===============================================================
  261. */
  262. #define Lua_Pop(L,nIndex) lua_pop(L,nIndex)
  263. #define Lua_Register(L,cfname,pFun) lua_register(L,cfname,pFun)
  264. #define Lua_PushUserData(L,UseData) lua_pushuserdata(L,UseData)
  265. #define Lua_PushCFunction(L,pFun) lua_pushcfunction(L,pFun)
  266. #define Lua_CloneTag(L,nTag) lua_clonetag(L,nTag)
  267. #define Lua_GetRegistry(L) lua_getregistry(L)
  268. #define Lua_CompileBuffer(L,pBUFF,nBuffSize,cBname) lua_compilebuffer(L,pBUFF,nBuffSize,cBname)
  269. #define Lua_CompileFile(L,cFilename) lua_compilefile(L,cFilename)
  270. #define Lua_Execute(L) lua_execute(L)
  271. #define Lua_SafeBegin(L,pIndex) lua_gettopindex(L,pIndex)
  272. #define Lua_SafeEnd(L,nIndex) Lua_SetTopIndex(L,nIndex)
  273. LUA_API int Lua_SetTable_StringFromId(Lua_State * L, int nIndex, int Id, const char * szString);
  274. LUA_API int Lua_SetTable_DoubleFromId(Lua_State * L, int nIndex, int Id, double nNumber);
  275. LUA_API int Lua_SetTable_IntFromId(Lua_State * L, int nIndex, int Id, int nNumber);
  276. LUA_API int Lua_SetTable_CFunFromName(Lua_State * L, int nIndex, const char * szMemberName, Lua_CFunction CFun);
  277. LUA_API int Lua_SetTable_CFunFromId(Lua_State * L, int nIndex, int nId, Lua_CFunction CFun);
  278. LUA_API int Lua_SetTable_StringFromName(Lua_State * L, int nIndex, const char * szMemberName, char * szString);
  279. LUA_API int Lua_SetTable_IntFromName(Lua_State * L, int nIndex, const char * szMemberName, int Number);
  280. LUA_API int Lua_SetTable_DoubleFromName(Lua_State * L, int nIndex, const char * szMemberName, double Number);
  281. LUA_API int Lua_GetValuesFromStack(Lua_State * L, char * cFormat , ...);
  282. LUALIB_API void lua_baselibopen (lua_State *L);
  283. LUALIB_API void lua_iolibopen (lua_State *L);
  284. LUALIB_API void lua_strlibopen (lua_State *L);
  285. LUALIB_API void lua_mathlibopen (lua_State *L);
  286. LUALIB_API void lua_dblibopen (lua_State *L);
  287. #ifdef __cplusplus
  288. }
  289. #endif 
  290. #endif
  291. /******************************************************************************
  292. * Copyright (C) 1994-2000 TeCGraf, PUC-Rio.  All rights reserved.
  293. * Permission is hereby granted, without written agreement and without license
  294. * or royalty fees, to use, copy, modify, and distribute this software and its
  295. * documentation for any purpose, including commercial applications, subject to
  296. * the following conditions:
  297. *  - The above copyright notice and this permission notice shall appear in all
  298. *    copies or substantial portions of this software.
  299. *  - The origin of this software must not be misrepresented; you must not
  300. *    claim that you wrote the original software. If you use this software in a
  301. *    product, an acknowledgment in the product documentation would be greatly
  302. *    appreciated (but it is not required).
  303. *  - Altered source versions must be plainly marked as such, and must not be
  304. *    misrepresented as being the original software.
  305. *    
  306. * The authors specifically disclaim any warranties, including, but not limited
  307. * to, the implied warranties of merchantability and fitness for a particular
  308. * purpose.  The software provided hereunder is on an "as is" basis, and the
  309. * authors have no obligation to provide maintenance, support, updates,
  310. * enhancements, or modifications.  In no event shall TeCGraf, PUC-Rio, or the
  311. * authors be held liable to any party for direct, indirect, special,
  312. * incidental, or consequential damages arising out of the use of this software
  313. * and its documentation.
  314. * The Lua language and this implementation have been entirely designed and
  315. * written by Waldemar Celes Filho, Roberto Ierusalimschy and
  316. * Luiz Henrique de Figueiredo at TeCGraf, PUC-Rio.
  317. *
  318. * This implementation contains no third-party code.
  319. ******************************************************************************/