Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2. ** $Id: lauxlib.h,v 1.120 2011/11/29 15:55:08 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. LUALIB_API int (luaL_fileresult) (lua_State *L, int stat, const char *fname);
  66. LUALIB_API int (luaL_execresult) (lua_State *L, int stat);
  67.  
  68. /* pre-defined references */
  69. #define LUA_NOREF       (-2)
  70. #define LUA_REFNIL      (-1)
  71.  
  72. LUALIB_API int (luaL_ref) (lua_State *L, int t);
  73. LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref);
  74.  
  75. LUALIB_API int (luaL_loadfilex) (lua_State *L, const char *filename,
  76.                                                const char *mode);
  77.  
  78. #define luaL_loadfile(L,f)      luaL_loadfilex(L,f,NULL)
  79.  
  80. LUALIB_API int (luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz,
  81.                                    const char *name, const char *mode);
  82. LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s);
  83.  
  84. LUALIB_API lua_State *(luaL_newstate) (void);
  85.  
  86. LUALIB_API int (luaL_len) (lua_State *L, int idx);
  87.  
  88. LUALIB_API const char *(luaL_gsub) (lua_State *L, const char *s, const char *p,
  89.                                                   const char *r);
  90.  
  91. LUALIB_API void (luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup);
  92.  
  93. LUALIB_API int (luaL_getsubtable) (lua_State *L, int idx, const char *fname);
  94.  
  95. LUALIB_API void (luaL_traceback) (lua_State *L, lua_State *L1,
  96.                                   const char *msg, int level);
  97.  
  98. LUALIB_API void (luaL_requiref) (lua_State *L, const char *modname,
  99.                                  lua_CFunction openf, int glb);
  100.  
  101. /*
  102. ** ===============================================================
  103. ** some useful macros
  104. ** ===============================================================
  105. */
  106.  
  107.  
  108. #define luaL_newlibtable(L,l)   \
  109.   lua_createtable(L, 0, sizeof(l)/sizeof((l)[0]) - 1)
  110.  
  111. #define luaL_newlib(L,l)        (luaL_newlibtable(L,l), luaL_setfuncs(L,l,0))
  112.  
  113. #define luaL_argcheck(L, cond,numarg,extramsg)  \
  114.                 ((void)((cond) || luaL_argerror(L, (numarg), (extramsg))))
  115. #define luaL_checkstring(L,n)   (luaL_checklstring(L, (n), NULL))
  116. #define luaL_optstring(L,n,d)   (luaL_optlstring(L, (n), (d), NULL))
  117. #define luaL_checkint(L,n)      ((int)luaL_checkinteger(L, (n)))
  118. #define luaL_optint(L,n,d)      ((int)luaL_optinteger(L, (n), (d)))
  119. #define luaL_checklong(L,n)     ((long)luaL_checkinteger(L, (n)))
  120. #define luaL_optlong(L,n,d)     ((long)luaL_optinteger(L, (n), (d)))
  121.  
  122. #define luaL_typename(L,i)      lua_typename(L, lua_type(L,(i)))
  123.  
  124. #define luaL_dofile(L, fn) \
  125.         (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0))
  126.  
  127. #define luaL_dostring(L, s) \
  128.         (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0))
  129.  
  130. #define luaL_getmetatable(L,n)  (lua_getfield(L, LUA_REGISTRYINDEX, (n)))
  131.  
  132. #define luaL_opt(L,f,n,d)       (lua_isnoneornil(L,(n)) ? (d) : f(L,(n)))
  133.  
  134. #define luaL_loadbuffer(L,s,sz,n)       luaL_loadbufferx(L,s,sz,n,NULL)
  135.  
  136.  
  137. /*
  138. ** {======================================================
  139. ** Generic Buffer manipulation
  140. ** =======================================================
  141. */
  142.  
  143. typedef struct luaL_Buffer {
  144.   char *b;  /* buffer address */
  145.   size_t size;  /* buffer size */
  146.   size_t n;  /* number of characters in buffer */
  147.   lua_State *L;
  148.   char initb[LUAL_BUFFERSIZE];  /* initial buffer */
  149. } luaL_Buffer;
  150.  
  151.  
  152. #define luaL_addchar(B,c) \
  153.   ((void)((B)->n < (B)->size || luaL_prepbuffsize((B), 1)), \
  154.    ((B)->b[(B)->n++] = (c)))
  155.  
  156. #define luaL_addsize(B,s)       ((B)->n += (s))
  157.  
  158. LUALIB_API void (luaL_buffinit) (lua_State *L, luaL_Buffer *B);
  159. LUALIB_API char *(luaL_prepbuffsize) (luaL_Buffer *B, size_t sz);
  160. LUALIB_API void (luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l);
  161. LUALIB_API void (luaL_addstring) (luaL_Buffer *B, const char *s);
  162. LUALIB_API void (luaL_addvalue) (luaL_Buffer *B);
  163. LUALIB_API void (luaL_pushresult) (luaL_Buffer *B);
  164. LUALIB_API void (luaL_pushresultsize) (luaL_Buffer *B, size_t sz);
  165. LUALIB_API char *(luaL_buffinitsize) (lua_State *L, luaL_Buffer *B, size_t sz);
  166.  
  167. #define luaL_prepbuffer(B)      luaL_prepbuffsize(B, LUAL_BUFFERSIZE)
  168.  
  169. /* }====================================================== */
  170.  
  171.  
  172.  
  173. /*
  174. ** {======================================================
  175. ** File handles for IO library
  176. ** =======================================================
  177. */
  178.  
  179. /*
  180. ** A file handle is a userdata with metatable 'LUA_FILEHANDLE' and
  181. ** initial structure 'luaL_Stream' (it may contain other fields
  182. ** after that initial structure).
  183. */
  184.  
  185. #define LUA_FILEHANDLE          "FILE*"
  186.  
  187.  
  188. typedef struct luaL_Stream {
  189.   FILE *f;  /* stream (NULL for incompletely created streams) */
  190.   lua_CFunction closef;  /* to close stream (NULL for closed streams) */
  191. } luaL_Stream;
  192.  
  193. /* }====================================================== */
  194.  
  195.  
  196.  
  197. /* compatibility with old module system */
  198. #if defined(LUA_COMPAT_MODULE)
  199.  
  200. LUALIB_API void (luaL_pushmodule) (lua_State *L, const char *modname,
  201.                                    int sizehint);
  202. LUALIB_API void (luaL_openlib) (lua_State *L, const char *libname,
  203.                                 const luaL_Reg *l, int nup);
  204.  
  205. #define luaL_register(L,n,l)    (luaL_openlib(L,(n),(l),0))
  206.  
  207. #endif
  208.  
  209.  
  210. #endif
  211.  
  212.  
  213.