?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2. ** $Id: lauxlib.h $
  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 "luaconf.h"
  16. #include "lua.h"
  17.  
  18.  
  19. /* global table */
  20. #define LUA_GNAME       "_G"
  21.  
  22.  
  23. typedef struct luaL_Buffer luaL_Buffer;
  24.  
  25.  
  26. /* extra error code for 'luaL_loadfilex' */
  27. #define LUA_ERRFILE     (LUA_ERRERR+1)
  28.  
  29.  
  30. /* key, in the registry, for table of loaded modules */
  31. #define LUA_LOADED_TABLE        "_LOADED"
  32.  
  33.  
  34. /* key, in the registry, for table of preloaded loaders */
  35. #define LUA_PRELOAD_TABLE       "_PRELOAD"
  36.  
  37.  
  38. typedef struct luaL_Reg {
  39.   const char *name;
  40.   lua_CFunction func;
  41. } luaL_Reg;
  42.  
  43.  
  44. #define LUAL_NUMSIZES   (sizeof(lua_Integer)*16 + sizeof(lua_Number))
  45.  
  46. LUALIB_API void (luaL_checkversion_) (lua_State *L, lua_Number ver, size_t sz);
  47. #define luaL_checkversion(L)  \
  48.           luaL_checkversion_(L, LUA_VERSION_NUM, LUAL_NUMSIZES)
  49.  
  50. LUALIB_API int (luaL_getmetafield) (lua_State *L, int obj, const char *e);
  51. LUALIB_API int (luaL_callmeta) (lua_State *L, int obj, const char *e);
  52. LUALIB_API const char *(luaL_tolstring) (lua_State *L, int idx, size_t *len);
  53. LUALIB_API int (luaL_argerror) (lua_State *L, int arg, const char *extramsg);
  54. LUALIB_API int (luaL_typeerror) (lua_State *L, int arg, const char *tname);
  55. LUALIB_API const char *(luaL_checklstring) (lua_State *L, int arg,
  56.                                                           size_t *l);
  57. LUALIB_API const char *(luaL_optlstring) (lua_State *L, int arg,
  58.                                           const char *def, size_t *l);
  59. LUALIB_API lua_Number (luaL_checknumber) (lua_State *L, int arg);
  60. LUALIB_API lua_Number (luaL_optnumber) (lua_State *L, int arg, lua_Number def);
  61.  
  62. LUALIB_API lua_Integer (luaL_checkinteger) (lua_State *L, int arg);
  63. LUALIB_API lua_Integer (luaL_optinteger) (lua_State *L, int arg,
  64.                                           lua_Integer def);
  65.  
  66. LUALIB_API void (luaL_checkstack) (lua_State *L, int sz, const char *msg);
  67. LUALIB_API void (luaL_checktype) (lua_State *L, int arg, int t);
  68. LUALIB_API void (luaL_checkany) (lua_State *L, int arg);
  69.  
  70. LUALIB_API int   (luaL_newmetatable) (lua_State *L, const char *tname);
  71. LUALIB_API void  (luaL_setmetatable) (lua_State *L, const char *tname);
  72. LUALIB_API void *(luaL_testudata) (lua_State *L, int ud, const char *tname);
  73. LUALIB_API void *(luaL_checkudata) (lua_State *L, int ud, const char *tname);
  74.  
  75. LUALIB_API void (luaL_where) (lua_State *L, int lvl);
  76. LUALIB_API int (luaL_error) (lua_State *L, const char *fmt, ...);
  77.  
  78. LUALIB_API int (luaL_checkoption) (lua_State *L, int arg, const char *def,
  79.                                    const char *const lst[]);
  80.  
  81. LUALIB_API int (luaL_fileresult) (lua_State *L, int stat, const char *fname);
  82. LUALIB_API int (luaL_execresult) (lua_State *L, int stat);
  83.  
  84.  
  85. /* predefined references */
  86. #define LUA_NOREF       (-2)
  87. #define LUA_REFNIL      (-1)
  88.  
  89. LUALIB_API int (luaL_ref) (lua_State *L, int t);
  90. LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref);
  91.  
  92. LUALIB_API int (luaL_loadfilex) (lua_State *L, const char *filename,
  93.                                                const char *mode);
  94.  
  95. #define luaL_loadfile(L,f)      luaL_loadfilex(L,f,NULL)
  96.  
  97. LUALIB_API int (luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz,
  98.                                    const char *name, const char *mode);
  99. LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s);
  100.  
  101. LUALIB_API lua_State *(luaL_newstate) (void);
  102.  
  103. LUALIB_API lua_Integer (luaL_len) (lua_State *L, int idx);
  104.  
  105. LUALIB_API void (luaL_addgsub) (luaL_Buffer *b, const char *s,
  106.                                      const char *p, const char *r);
  107. LUALIB_API const char *(luaL_gsub) (lua_State *L, const char *s,
  108.                                     const char *p, const char *r);
  109.  
  110. LUALIB_API void (luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup);
  111.  
  112. LUALIB_API int (luaL_getsubtable) (lua_State *L, int idx, const char *fname);
  113.  
  114. LUALIB_API void (luaL_traceback) (lua_State *L, lua_State *L1,
  115.                                   const char *msg, int level);
  116.  
  117. LUALIB_API void (luaL_requiref) (lua_State *L, const char *modname,
  118.                                  lua_CFunction openf, int glb);
  119.  
  120. /*
  121. ** ===============================================================
  122. ** some useful macros
  123. ** ===============================================================
  124. */
  125.  
  126.  
  127. #define luaL_newlibtable(L,l)   \
  128.   lua_createtable(L, 0, sizeof(l)/sizeof((l)[0]) - 1)
  129.  
  130. #define luaL_newlib(L,l)  \
  131.   (luaL_checkversion(L), luaL_newlibtable(L,l), luaL_setfuncs(L,l,0))
  132.  
  133. #define luaL_argcheck(L, cond,arg,extramsg)     \
  134.         ((void)(luai_likely(cond) || luaL_argerror(L, (arg), (extramsg))))
  135.  
  136. #define luaL_argexpected(L,cond,arg,tname)      \
  137.         ((void)(luai_likely(cond) || luaL_typeerror(L, (arg), (tname))))
  138.  
  139. #define luaL_checkstring(L,n)   (luaL_checklstring(L, (n), NULL))
  140. #define luaL_optstring(L,n,d)   (luaL_optlstring(L, (n), (d), NULL))
  141.  
  142. #define luaL_typename(L,i)      lua_typename(L, lua_type(L,(i)))
  143.  
  144. #define luaL_dofile(L, fn) \
  145.         (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0))
  146.  
  147. #define luaL_dostring(L, s) \
  148.         (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0))
  149.  
  150. #define luaL_getmetatable(L,n)  (lua_getfield(L, LUA_REGISTRYINDEX, (n)))
  151.  
  152. #define luaL_opt(L,f,n,d)       (lua_isnoneornil(L,(n)) ? (d) : f(L,(n)))
  153.  
  154. #define luaL_loadbuffer(L,s,sz,n)       luaL_loadbufferx(L,s,sz,n,NULL)
  155.  
  156.  
  157. /*
  158. ** Perform arithmetic operations on lua_Integer values with wrap-around
  159. ** semantics, as the Lua core does.
  160. */
  161. #define luaL_intop(op,v1,v2)  \
  162.         ((lua_Integer)((lua_Unsigned)(v1) op (lua_Unsigned)(v2)))
  163.  
  164.  
  165. /* push the value used to represent failure/error */
  166. #define luaL_pushfail(L)        lua_pushnil(L)
  167.  
  168.  
  169. /*
  170. ** Internal assertions for in-house debugging
  171. */
  172. #if !defined(lua_assert)
  173.  
  174. #if defined LUAI_ASSERT
  175.   #include <assert.h>
  176.   #define lua_assert(c)         assert(c)
  177. #else
  178.   #define lua_assert(c)         ((void)0)
  179. #endif
  180.  
  181. #endif
  182.  
  183.  
  184.  
  185. /*
  186. ** {======================================================
  187. ** Generic Buffer manipulation
  188. ** =======================================================
  189. */
  190.  
  191. struct luaL_Buffer {
  192.   char *b;  /* buffer address */
  193.   size_t size;  /* buffer size */
  194.   size_t n;  /* number of characters in buffer */
  195.   lua_State *L;
  196.   union {
  197.     LUAI_MAXALIGN;  /* ensure maximum alignment for buffer */
  198.     char b[LUAL_BUFFERSIZE];  /* initial buffer */
  199.   } init;
  200. };
  201.  
  202.  
  203. #define luaL_bufflen(bf)        ((bf)->n)
  204. #define luaL_buffaddr(bf)       ((bf)->b)
  205.  
  206.  
  207. #define luaL_addchar(B,c) \
  208.   ((void)((B)->n < (B)->size || luaL_prepbuffsize((B), 1)), \
  209.    ((B)->b[(B)->n++] = (c)))
  210.  
  211. #define luaL_addsize(B,s)       ((B)->n += (s))
  212.  
  213. #define luaL_buffsub(B,s)       ((B)->n -= (s))
  214.  
  215. LUALIB_API void (luaL_buffinit) (lua_State *L, luaL_Buffer *B);
  216. LUALIB_API char *(luaL_prepbuffsize) (luaL_Buffer *B, size_t sz);
  217. LUALIB_API void (luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l);
  218. LUALIB_API void (luaL_addstring) (luaL_Buffer *B, const char *s);
  219. LUALIB_API void (luaL_addvalue) (luaL_Buffer *B);
  220. LUALIB_API void (luaL_pushresult) (luaL_Buffer *B);
  221. LUALIB_API void (luaL_pushresultsize) (luaL_Buffer *B, size_t sz);
  222. LUALIB_API char *(luaL_buffinitsize) (lua_State *L, luaL_Buffer *B, size_t sz);
  223.  
  224. #define luaL_prepbuffer(B)      luaL_prepbuffsize(B, LUAL_BUFFERSIZE)
  225.  
  226. /* }====================================================== */
  227.  
  228.  
  229.  
  230. /*
  231. ** {======================================================
  232. ** File handles for IO library
  233. ** =======================================================
  234. */
  235.  
  236. /*
  237. ** A file handle is a userdata with metatable 'LUA_FILEHANDLE' and
  238. ** initial structure 'luaL_Stream' (it may contain other fields
  239. ** after that initial structure).
  240. */
  241.  
  242. #define LUA_FILEHANDLE          "FILE*"
  243.  
  244.  
  245. typedef struct luaL_Stream {
  246.   FILE *f;  /* stream (NULL for incompletely created streams) */
  247.   lua_CFunction closef;  /* to close stream (NULL for closed streams) */
  248. } luaL_Stream;
  249.  
  250. /* }====================================================== */
  251.  
  252. /*
  253. ** {==================================================================
  254. ** "Abstraction Layer" for basic report of messages and errors
  255. ** ===================================================================
  256. */
  257.  
  258. /* print a string */
  259. #if !defined(lua_writestring)
  260. #define lua_writestring(s,l)   fwrite((s), sizeof(char), (l), stdout)
  261. #endif
  262.  
  263. /* print a newline and flush the output */
  264. #if !defined(lua_writeline)
  265. #define lua_writeline()        (lua_writestring("\n", 1), fflush(stdout))
  266. #endif
  267.  
  268. /* print an error message */
  269. #if !defined(lua_writestringerror)
  270. #define lua_writestringerror(s,p) \
  271.         (fprintf(stderr, (s), (p)), fflush(stderr))
  272. #endif
  273.  
  274. /* }================================================================== */
  275.  
  276.  
  277. /*
  278. ** {============================================================
  279. ** Compatibility with deprecated conversions
  280. ** =============================================================
  281. */
  282. #if defined(LUA_COMPAT_APIINTCASTS)
  283.  
  284. #define luaL_checkunsigned(L,a) ((lua_Unsigned)luaL_checkinteger(L,a))
  285. #define luaL_optunsigned(L,a,d) \
  286.         ((lua_Unsigned)luaL_optinteger(L,a,(lua_Integer)(d)))
  287.  
  288. #define luaL_checkint(L,n)      ((int)luaL_checkinteger(L, (n)))
  289. #define luaL_optint(L,n,d)      ((int)luaL_optinteger(L, (n), (d)))
  290.  
  291. #define luaL_checklong(L,n)     ((long)luaL_checkinteger(L, (n)))
  292. #define luaL_optlong(L,n,d)     ((long)luaL_optinteger(L, (n), (d)))
  293.  
  294. #endif
  295. /* }============================================================ */
  296.  
  297.  
  298.  
  299. #endif
  300.  
  301.  
  302.