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