| 1 | /* | 
|---|
| 2 | ** $Id: lauxlib.h,v 1.88.1.1 2007/12/27 13:02:25 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 | /* extra error code for `luaL_load' */ | 
|---|
| 19 | #define LUA_ERRFILE     (LUA_ERRERR+1) | 
|---|
| 20 |  | 
|---|
| 21 | typedef struct luaL_Reg { | 
|---|
| 22 | const char *name; | 
|---|
| 23 | lua_CFunction func; | 
|---|
| 24 | } luaL_Reg; | 
|---|
| 25 |  | 
|---|
| 26 | LUALIB_API void (luaL_openlib) (lua_State *L, const char *libname, | 
|---|
| 27 | const luaL_Reg *l, int nup); | 
|---|
| 28 | LUALIB_API void (luaL_register) (lua_State *L, const char *libname, | 
|---|
| 29 | const luaL_Reg *l); | 
|---|
| 30 | LUALIB_API int (luaL_getmetafield) (lua_State *L, int obj, const char *e); | 
|---|
| 31 | LUALIB_API int (luaL_callmeta) (lua_State *L, int obj, const char *e); | 
|---|
| 32 | LUALIB_API int (luaL_typerror) (lua_State *L, int narg, const char *tname); | 
|---|
| 33 | LUALIB_API int (luaL_argerror) (lua_State *L, int numarg, const char *); | 
|---|
| 34 | LUALIB_API const char *(luaL_checklstring) (lua_State *L, int numArg, | 
|---|
| 35 | size_t *l); | 
|---|
| 36 | LUALIB_API const char *(luaL_optlstring) (lua_State *L, int numArg, | 
|---|
| 37 | const char *def, size_t *l); | 
|---|
| 38 | LUALIB_API lua_Number (luaL_checknumber) (lua_State *L, int numArg); | 
|---|
| 39 | LUALIB_API lua_Number (luaL_optnumber) (lua_State *L, int nArg, lua_Number def); | 
|---|
| 40 |  | 
|---|
| 41 | LUALIB_API lua_Integer (luaL_checkinteger) (lua_State *L, int numArg); | 
|---|
| 42 | LUALIB_API lua_Integer (luaL_optinteger) (lua_State *L, int nArg, | 
|---|
| 43 | lua_Integer def); | 
|---|
| 44 |  | 
|---|
| 45 | LUALIB_API void (luaL_checkstack) (lua_State *L, int sz, const char *msg); | 
|---|
| 46 | LUALIB_API void (luaL_checktype) (lua_State *L, int narg, int t); | 
|---|
| 47 | LUALIB_API void (luaL_checkany) (lua_State *L, int narg); | 
|---|
| 48 |  | 
|---|
| 49 | LUALIB_API int   (luaL_newmetatable) (lua_State *L, const char *tname); | 
|---|
| 50 | LUALIB_API void *(luaL_checkudata) (lua_State *L, int ud, const char *tname); | 
|---|
| 51 |  | 
|---|
| 52 | LUALIB_API void (luaL_where) (lua_State *L, int lvl); | 
|---|
| 53 | LUALIB_API int (luaL_error) (lua_State *L, const char *fmt, ...); | 
|---|
| 54 |  | 
|---|
| 55 | LUALIB_API int (luaL_checkoption) (lua_State *L, int narg, const char *def, | 
|---|
| 56 | const char *const lst[]); | 
|---|
| 57 |  | 
|---|
| 58 | /* pre-defined references */ | 
|---|
| 59 | #define LUA_NOREF       (-2) | 
|---|
| 60 | #define LUA_REFNIL      (-1) | 
|---|
| 61 |  | 
|---|
| 62 | LUALIB_API int (luaL_ref) (lua_State *L, int t); | 
|---|
| 63 | LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref); | 
|---|
| 64 |  | 
|---|
| 65 | LUALIB_API int (luaL_loadfile) (lua_State *L, const char *filename); | 
|---|
| 66 | LUALIB_API int (luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, | 
|---|
| 67 | const char *name); | 
|---|
| 68 | LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s); | 
|---|
| 69 |  | 
|---|
| 70 | LUALIB_API lua_State *(luaL_newstate) (void); | 
|---|
| 71 |  | 
|---|
| 72 |  | 
|---|
| 73 | LUALIB_API const char *(luaL_gsub) (lua_State *L, const char *s, const char *p, | 
|---|
| 74 | const char *r); | 
|---|
| 75 |  | 
|---|
| 76 | LUALIB_API const char *(luaL_findtable) (lua_State *L, int idx, | 
|---|
| 77 | const char *fname, int szhint); | 
|---|
| 78 |  | 
|---|
| 79 | /* From Lua 5.2. */ | 
|---|
| 80 | LUALIB_API int luaL_fileresult(lua_State *L, int stat, const char *fname); | 
|---|
| 81 | LUALIB_API int luaL_execresult(lua_State *L, int stat); | 
|---|
| 82 | LUALIB_API int (luaL_loadfilex) (lua_State *L, const char *filename, | 
|---|
| 83 | const char *mode); | 
|---|
| 84 | LUALIB_API int (luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz, | 
|---|
| 85 | const char *name, const char *mode); | 
|---|
| 86 | LUALIB_API void luaL_traceback (lua_State *L, lua_State *L1, const char *msg, | 
|---|
| 87 | int level); | 
|---|
| 88 | LUALIB_API void (luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup); | 
|---|
| 89 | LUALIB_API void (luaL_pushmodule) (lua_State *L, const char *modname, | 
|---|
| 90 | int sizehint); | 
|---|
| 91 | LUALIB_API void *(luaL_testudata) (lua_State *L, int ud, const char *tname); | 
|---|
| 92 | LUALIB_API void (luaL_setmetatable) (lua_State *L, const char *tname); | 
|---|
| 93 |  | 
|---|
| 94 |  | 
|---|
| 95 | /* | 
|---|
| 96 | ** =============================================================== | 
|---|
| 97 | ** some useful macros | 
|---|
| 98 | ** =============================================================== | 
|---|
| 99 | */ | 
|---|
| 100 |  | 
|---|
| 101 | #define luaL_argcheck(L, cond,numarg,extramsg)	\ | 
|---|
| 102 | ((void)((cond) || luaL_argerror(L, (numarg), (extramsg)))) | 
|---|
| 103 | #define luaL_checkstring(L,n)	(luaL_checklstring(L, (n), NULL)) | 
|---|
| 104 | #define luaL_optstring(L,n,d)	(luaL_optlstring(L, (n), (d), NULL)) | 
|---|
| 105 | #define luaL_checkint(L,n)	((int)luaL_checkinteger(L, (n))) | 
|---|
| 106 | #define luaL_optint(L,n,d)	((int)luaL_optinteger(L, (n), (d))) | 
|---|
| 107 | #define luaL_checklong(L,n)	((long)luaL_checkinteger(L, (n))) | 
|---|
| 108 | #define luaL_optlong(L,n,d)	((long)luaL_optinteger(L, (n), (d))) | 
|---|
| 109 |  | 
|---|
| 110 | #define luaL_typename(L,i)	lua_typename(L, lua_type(L,(i))) | 
|---|
| 111 |  | 
|---|
| 112 | #define luaL_dofile(L, fn) \ | 
|---|
| 113 | (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0)) | 
|---|
| 114 |  | 
|---|
| 115 | #define luaL_dostring(L, s) \ | 
|---|
| 116 | (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0)) | 
|---|
| 117 |  | 
|---|
| 118 | #define luaL_getmetatable(L,n)	(lua_getfield(L, LUA_REGISTRYINDEX, (n))) | 
|---|
| 119 |  | 
|---|
| 120 | #define luaL_opt(L,f,n,d)	(lua_isnoneornil(L,(n)) ? (d) : f(L,(n))) | 
|---|
| 121 |  | 
|---|
| 122 | /* From Lua 5.2. */ | 
|---|
| 123 | #define luaL_newlibtable(L, l) \ | 
|---|
| 124 | lua_createtable(L, 0, sizeof(l)/sizeof((l)[0]) - 1) | 
|---|
| 125 | #define luaL_newlib(L, l)	(luaL_newlibtable(L, l), luaL_setfuncs(L, l, 0)) | 
|---|
| 126 |  | 
|---|
| 127 | /* | 
|---|
| 128 | ** {====================================================== | 
|---|
| 129 | ** Generic Buffer manipulation | 
|---|
| 130 | ** ======================================================= | 
|---|
| 131 | */ | 
|---|
| 132 |  | 
|---|
| 133 |  | 
|---|
| 134 |  | 
|---|
| 135 | typedef struct luaL_Buffer { | 
|---|
| 136 | char *p;			/* current position in buffer */ | 
|---|
| 137 | int lvl;  /* number of strings in the stack (level) */ | 
|---|
| 138 | lua_State *L; | 
|---|
| 139 | char buffer[LUAL_BUFFERSIZE]; | 
|---|
| 140 | } luaL_Buffer; | 
|---|
| 141 |  | 
|---|
| 142 | #define luaL_addchar(B,c) \ | 
|---|
| 143 | ((void)((B)->p < ((B)->buffer+LUAL_BUFFERSIZE) || luaL_prepbuffer(B)), \ | 
|---|
| 144 | (*(B)->p++ = (char)(c))) | 
|---|
| 145 |  | 
|---|
| 146 | /* compatibility only */ | 
|---|
| 147 | #define luaL_putchar(B,c)	luaL_addchar(B,c) | 
|---|
| 148 |  | 
|---|
| 149 | #define luaL_addsize(B,n)	((B)->p += (n)) | 
|---|
| 150 |  | 
|---|
| 151 | LUALIB_API void (luaL_buffinit) (lua_State *L, luaL_Buffer *B); | 
|---|
| 152 | LUALIB_API char *(luaL_prepbuffer) (luaL_Buffer *B); | 
|---|
| 153 | LUALIB_API void (luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l); | 
|---|
| 154 | LUALIB_API void (luaL_addstring) (luaL_Buffer *B, const char *s); | 
|---|
| 155 | LUALIB_API void (luaL_addvalue) (luaL_Buffer *B); | 
|---|
| 156 | LUALIB_API void (luaL_pushresult) (luaL_Buffer *B); | 
|---|
| 157 |  | 
|---|
| 158 |  | 
|---|
| 159 | /* }====================================================== */ | 
|---|
| 160 |  | 
|---|
| 161 | #endif | 
|---|
| 162 |  | 
|---|