Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2. ** $Id: lauxlib.h,v 1.113 2010/11/16 19:20:01 roberto Exp $
  3. ** Auxiliary functions for building Lua libraries
  4. ** See Copyright Notice in lua.h
  5. */
  6.  
  7.  
  8. #ifndef lauxlib_h
  9. #define lauxlib_h
  10.  
  11.  
  12. #include <stddef.h>
  13. #include <stdio.h>
  14.  
  15. #include "lua.h"
  16.  
  17.  
  18.  
  19. /* extra error code for `luaL_load' */
  20. #define LUA_ERRFILE     (LUA_ERRERR+1)
  21.  
  22.  
  23. typedef struct luaL_Reg {
  24.   const char *name;
  25.   lua_CFunction func;
  26. } luaL_Reg;
  27.  
  28.  
  29. LUALIB_API void (luaL_checkversion_) (lua_State *L, lua_Number ver);
  30. #define luaL_checkversion(L)    luaL_checkversion_(L, LUA_VERSION_NUM)
  31.  
  32. LUALIB_API int (luaL_getmetafield) (lua_State *L, int obj, const char *e);
  33. LUALIB_API int (luaL_callmeta) (lua_State *L, int obj, const char *e);
  34. LUALIB_API const char *(luaL_tolstring) (lua_State *L, int idx, size_t *len);
  35. LUALIB_API int (luaL_argerror) (lua_State *L, int numarg, const char *extramsg);
  36. LUALIB_API const char *(luaL_checklstring) (lua_State *L, int numArg,
  37.                                                           size_t *l);
  38. LUALIB_API const char *(luaL_optlstring) (lua_State *L, int numArg,
  39.                                           const char *def, size_t *l);
  40. LUALIB_API lua_Number (luaL_checknumber) (lua_State *L, int numArg);
  41. LUALIB_API lua_Number (luaL_optnumber) (lua_State *L, int nArg, lua_Number def);
  42.  
  43. LUALIB_API lua_Integer (luaL_checkinteger) (lua_State *L, int numArg);
  44. LUALIB_API lua_Integer (luaL_optinteger) (lua_State *L, int nArg,
  45.                                           lua_Integer def);
  46. LUALIB_API lua_Unsigned (luaL_checkunsigned) (lua_State *L, int numArg);
  47. LUALIB_API lua_Unsigned (luaL_optunsigned) (lua_State *L, int numArg,
  48.                                             lua_Unsigned def);
  49.  
  50. LUALIB_API void (luaL_checkstack) (lua_State *L, int sz, const char *msg);
  51. LUALIB_API void (luaL_checktype) (lua_State *L, int narg, int t);
  52. LUALIB_API void (luaL_checkany) (lua_State *L, int narg);
  53.  
  54. LUALIB_API int   (luaL_newmetatable) (lua_State *L, const char *tname);
  55. LUALIB_API void  (luaL_setmetatable) (lua_State *L, const char *tname);
  56. LUALIB_API void *(luaL_testudata) (lua_State *L, int ud, const char *tname);
  57. LUALIB_API void *(luaL_checkudata) (lua_State *L, int ud, const char *tname);
  58.  
  59. LUALIB_API void (luaL_where) (lua_State *L, int lvl);
  60. LUALIB_API int (luaL_error) (lua_State *L, const char *fmt, ...);
  61.  
  62. LUALIB_API int (luaL_checkoption) (lua_State *L, int narg, const char *def,
  63.                                    const char *const lst[]);
  64.  
  65. /* pre-defined references */
  66. #define LUA_NOREF       (-2)
  67. #define LUA_REFNIL      (-1)
  68.  
  69. LUALIB_API int (luaL_ref) (lua_State *L, int t);
  70. LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref);
  71.  
  72. LUALIB_API int (luaL_loadfile) (lua_State *L, const char *filename);
  73. LUALIB_API int (luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz,
  74.                                   const char *name);
  75. LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s);
  76.  
  77. LUALIB_API lua_State *(luaL_newstate) (void);
  78.  
  79. LUALIB_API int (luaL_len) (lua_State *L, int idx);
  80.  
  81. LUALIB_API const char *(luaL_gsub) (lua_State *L, const char *s, const char *p,
  82.                                                   const char *r);
  83.  
  84. LUALIB_API void (luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup);
  85.  
  86. LUALIB_API void (luaL_findtable) (lua_State *L, int idx, const char *fname);
  87.  
  88. LUALIB_API void (luaL_traceback) (lua_State *L, lua_State *L1,
  89.                                   const char *msg, int level);
  90.  
  91. LUALIB_API void (luaL_requiref) (lua_State *L, const char *modname,
  92.                                  lua_CFunction openf, int glb);
  93.  
  94. /*
  95. ** ===============================================================
  96. ** some useful macros
  97. ** ===============================================================
  98. */
  99.  
  100.  
  101. #define luaL_newlibtable(L,l)   \
  102.   lua_createtable(L, 0, sizeof(l)/sizeof((l)[0]) - 1)
  103.  
  104. #define luaL_newlib(L,l)        (luaL_newlibtable(L,l), luaL_setfuncs(L,l,0))
  105.  
  106. #define luaL_argcheck(L, cond,numarg,extramsg)  \
  107.                 ((void)((cond) || luaL_argerror(L, (numarg), (extramsg))))
  108. #define luaL_checkstring(L,n)   (luaL_checklstring(L, (n), NULL))
  109. #define luaL_optstring(L,n,d)   (luaL_optlstring(L, (n), (d), NULL))
  110. #define luaL_checkint(L,n)      ((int)luaL_checkinteger(L, (n)))
  111. #define luaL_optint(L,n,d)      ((int)luaL_optinteger(L, (n), (d)))
  112. #define luaL_checklong(L,n)     ((long)luaL_checkinteger(L, (n)))
  113. #define luaL_optlong(L,n,d)     ((long)luaL_optinteger(L, (n), (d)))
  114.  
  115. #define luaL_typename(L,i)      lua_typename(L, lua_type(L,(i)))
  116.  
  117. #define luaL_dofile(L, fn) \
  118.         (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0))
  119.  
  120. #define luaL_dostring(L, s) \
  121.         (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0))
  122.  
  123. #define luaL_getmetatable(L,n)  (lua_getfield(L, LUA_REGISTRYINDEX, (n)))
  124.  
  125. #define luaL_opt(L,f,n,d)       (lua_isnoneornil(L,(n)) ? (d) : f(L,(n)))
  126.  
  127.  
  128. /*
  129. ** {======================================================
  130. ** Generic Buffer manipulation
  131. ** =======================================================
  132. */
  133.  
  134. typedef struct luaL_Buffer {
  135.   char *b;  /* buffer address */
  136.   size_t size;  /* buffer size */
  137.   size_t n;  /* number of characters in buffer */
  138.   lua_State *L;
  139.   char initb[LUAL_BUFFERSIZE];  /* initial buffer */
  140. } luaL_Buffer;
  141.  
  142.  
  143. #define luaL_addchar(B,c) \
  144.   ((void)((B)->n < (B)->size || luaL_prepbuffsize((B), 1)), \
  145.    ((B)->b[(B)->n++] = (c)))
  146.  
  147. #define luaL_addsize(B,s)       ((B)->n += (s))
  148.  
  149. LUALIB_API void (luaL_buffinit) (lua_State *L, luaL_Buffer *B);
  150. LUALIB_API char *(luaL_prepbuffsize) (luaL_Buffer *B, size_t sz);
  151. LUALIB_API void (luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l);
  152. LUALIB_API void (luaL_addstring) (luaL_Buffer *B, const char *s);
  153. LUALIB_API void (luaL_addvalue) (luaL_Buffer *B);
  154. LUALIB_API void (luaL_pushresult) (luaL_Buffer *B);
  155. LUALIB_API void (luaL_pushresultsize) (luaL_Buffer *B, size_t sz);
  156. LUALIB_API char *(luaL_buffinitsize) (lua_State *L, luaL_Buffer *B, size_t sz);
  157.  
  158. #define luaL_prepbuffer(B)      luaL_prepbuffsize(B, LUAL_BUFFERSIZE)
  159.  
  160. /* }====================================================== */
  161.  
  162.  
  163. /* compatibility with old module system */
  164.  
  165. LUALIB_API void (luaL_pushmodule) (lua_State *L, const char *modname,
  166.                                    int sizehint);
  167. LUALIB_API void (luaL_openlib) (lua_State *L, const char *libname,
  168.                                 const luaL_Reg *l, int nup);
  169.  
  170. #define luaL_register(L,n,l)    (luaL_openlib(L,(n),(l),0))
  171.  
  172.  
  173. #endif
  174.  
  175.  
  176.