?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

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