gateway: simplify stopping the cleanup timer
[olsrd.git] / lib / tas / src / lua / lua.h
1
2 /*
3 ** $Id: lua.h,v 1.175b 2003/03/18 12:31:39 roberto Exp $
4 ** Lua - An Extensible Extension Language
5 ** Tecgraf: Computer Graphics Technology Group, PUC-Rio, Brazil
6 ** http://www.lua.org   mailto:info@lua.org
7 ** See Copyright Notice at the end of this file
8 */
9
10
11 #ifndef lua_h
12 #define lua_h
13
14 #include <stdarg.h>
15 #include <stddef.h>
16
17
18 #define LUA_VERSION     "Lua 5.0.2"
19 #define LUA_COPYRIGHT   "Copyright (C) 1994-2004 Tecgraf, PUC-Rio"
20 #define LUA_AUTHORS     "R. Ierusalimschy, L. H. de Figueiredo & W. Celes"
21
22
23
24 /* option for multiple returns in `lua_pcall' and `lua_call' */
25 #define LUA_MULTRET     (-1)
26
27
28 /*
29 ** pseudo-indices
30 */
31 #define LUA_REGISTRYINDEX       (-10000)
32 #define LUA_GLOBALSINDEX        (-10001)
33 #define lua_upvalueindex(i)     (LUA_GLOBALSINDEX-(i))
34
35
36 /* error codes for `lua_load' and `lua_pcall' */
37 #define LUA_ERRRUN      1
38 #define LUA_ERRFILE     2
39 #define LUA_ERRSYNTAX   3
40 #define LUA_ERRMEM      4
41 #define LUA_ERRERR      5
42
43
44 typedef struct lua_State lua_State;
45
46 typedef int (*lua_CFunction) (lua_State * L);
47
48
49 /*
50 ** functions that read/write blocks when loading/dumping Lua chunks
51 */
52 typedef const char *(*lua_Chunkreader) (lua_State * L, void *ud, size_t * sz);
53
54 typedef int (*lua_Chunkwriter) (lua_State * L, const void *p, size_t sz, void *ud);
55
56
57 /*
58 ** basic types
59 */
60 #define LUA_TNONE       (-1)
61
62 #define LUA_TNIL        0
63 #define LUA_TBOOLEAN    1
64 #define LUA_TLIGHTUSERDATA      2
65 #define LUA_TNUMBER     3
66 #define LUA_TSTRING     4
67 #define LUA_TTABLE      5
68 #define LUA_TFUNCTION   6
69 #define LUA_TUSERDATA   7
70 #define LUA_TTHREAD     8
71
72
73 /* minimum Lua stack available to a C function */
74 #define LUA_MINSTACK    20
75
76
77 /*
78 ** generic extra include file
79 */
80 #ifdef LUA_USER_H
81 #include LUA_USER_H
82 #endif
83
84
85 /* type of numbers in Lua */
86 #ifndef LUA_NUMBER
87 typedef double lua_Number;
88 #else
89 typedef LUA_NUMBER lua_Number;
90 #endif
91
92
93 /* mark for all API functions */
94 #ifndef LUA_API
95 #define LUA_API         extern
96 #endif
97
98
99 /*
100 ** state manipulation
101 */
102 LUA_API lua_State *lua_open(void);
103 LUA_API void lua_close(lua_State * L);
104 LUA_API lua_State *lua_newthread(lua_State * L);
105
106 LUA_API lua_CFunction lua_atpanic(lua_State * L, lua_CFunction panicf);
107
108
109 /*
110 ** basic stack manipulation
111 */
112 LUA_API int lua_gettop(lua_State * L);
113 LUA_API void lua_settop(lua_State * L, int idx);
114 LUA_API void lua_pushvalue(lua_State * L, int idx);
115 LUA_API void lua_remove(lua_State * L, int idx);
116 LUA_API void lua_insert(lua_State * L, int idx);
117 LUA_API void lua_replace(lua_State * L, int idx);
118 LUA_API int lua_checkstack(lua_State * L, int sz);
119
120 LUA_API void lua_xmove(lua_State * from, lua_State * to, int n);
121
122
123 /*
124 ** access functions (stack -> C)
125 */
126
127 LUA_API int lua_isnumber(lua_State * L, int idx);
128 LUA_API int lua_isstring(lua_State * L, int idx);
129 LUA_API int lua_iscfunction(lua_State * L, int idx);
130 LUA_API int lua_isuserdata(lua_State * L, int idx);
131 LUA_API int lua_type(lua_State * L, int idx);
132 LUA_API const char *lua_typename(lua_State * L, int tp);
133
134 LUA_API int lua_equal(lua_State * L, int idx1, int idx2);
135 LUA_API int lua_rawequal(lua_State * L, int idx1, int idx2);
136 LUA_API int lua_lessthan(lua_State * L, int idx1, int idx2);
137
138 LUA_API lua_Number lua_tonumber(lua_State * L, int idx);
139 LUA_API int lua_toboolean(lua_State * L, int idx);
140 LUA_API const char *lua_tostring(lua_State * L, int idx);
141 LUA_API size_t lua_strlen(lua_State * L, int idx);
142 LUA_API lua_CFunction lua_tocfunction(lua_State * L, int idx);
143 LUA_API void *lua_touserdata(lua_State * L, int idx);
144 LUA_API lua_State *lua_tothread(lua_State * L, int idx);
145 LUA_API const void *lua_topointer(lua_State * L, int idx);
146
147
148 /*
149 ** push functions (C -> stack)
150 */
151 LUA_API void lua_pushnil(lua_State * L);
152 LUA_API void lua_pushnumber(lua_State * L, lua_Number n);
153 LUA_API void lua_pushlstring(lua_State * L, const char *s, size_t l);
154 LUA_API void lua_pushstring(lua_State * L, const char *s);
155 LUA_API const char *lua_pushvfstring(lua_State * L, const char *fmt, va_list argp);
156 LUA_API const char *lua_pushfstring(lua_State * L, const char *fmt, ...);
157 LUA_API void lua_pushcclosure(lua_State * L, lua_CFunction fn, int n);
158 LUA_API void lua_pushboolean(lua_State * L, int b);
159 LUA_API void lua_pushlightuserdata(lua_State * L, const void *p);
160
161
162 /*
163 ** get functions (Lua -> stack)
164 */
165 LUA_API void lua_gettable(lua_State * L, int idx);
166 LUA_API void lua_rawget(lua_State * L, int idx);
167 LUA_API void lua_rawgeti(lua_State * L, int idx, int n);
168 LUA_API void lua_newtable(lua_State * L);
169 LUA_API void *lua_newuserdata(lua_State * L, size_t sz);
170 LUA_API int lua_getmetatable(lua_State * L, int objindex);
171 LUA_API void lua_getfenv(lua_State * L, int idx);
172
173
174 /*
175 ** set functions (stack -> Lua)
176 */
177 LUA_API void lua_settable(lua_State * L, int idx);
178 LUA_API void lua_rawset(lua_State * L, int idx);
179 LUA_API void lua_rawseti(lua_State * L, int idx, int n);
180 LUA_API int lua_setmetatable(lua_State * L, int objindex);
181 LUA_API int lua_setfenv(lua_State * L, int idx);
182
183
184 /*
185 ** `load' and `call' functions (load and run Lua code)
186 */
187 LUA_API void lua_call(lua_State * L, int nargs, int nresults);
188 LUA_API int lua_pcall(lua_State * L, int nargs, int nresults, int errfunc);
189 LUA_API int lua_cpcall(lua_State * L, lua_CFunction func, void *ud);
190 LUA_API int lua_load(lua_State * L, lua_Chunkreader reader, void *dt, const char *chunkname);
191
192 LUA_API int lua_dump(lua_State * L, lua_Chunkwriter writer, void *data);
193
194
195 /*
196 ** coroutine functions
197 */
198 LUA_API int lua_yield(lua_State * L, int nresults);
199 LUA_API int lua_resume(lua_State * L, int narg);
200
201 /*
202 ** garbage-collection functions
203 */
204 LUA_API int lua_getgcthreshold(lua_State * L);
205 LUA_API int lua_getgccount(lua_State * L);
206 LUA_API void lua_setgcthreshold(lua_State * L, int newthreshold);
207
208 /*
209 ** miscellaneous functions
210 */
211
212 LUA_API const char *lua_version(void);
213
214 LUA_API int lua_error(lua_State * L) __attribute__ ((noreturn));
215
216 LUA_API int lua_next(lua_State * L, int idx);
217
218 LUA_API void lua_concat(lua_State * L, int n);
219
220
221
222 /*
223 ** ===============================================================
224 ** some useful macros
225 ** ===============================================================
226 */
227
228 #define lua_boxpointer(L,u) \
229         (*(void **)(lua_newuserdata(L, sizeof(void *))) = (u))
230
231 #define lua_unboxpointer(L,i)   (*(void **)(lua_touserdata(L, i)))
232
233 #define lua_pop(L,n)            lua_settop(L, -(n)-1)
234
235 #define lua_register(L,n,f) \
236         (lua_pushstring(L, n), \
237          lua_pushcfunction(L, f), \
238          lua_settable(L, LUA_GLOBALSINDEX))
239
240 #define lua_pushcfunction(L,f)  lua_pushcclosure(L, f, 0)
241
242 #define lua_isfunction(L,n)     (lua_type(L,n) == LUA_TFUNCTION)
243 #define lua_istable(L,n)        (lua_type(L,n) == LUA_TTABLE)
244 #define lua_islightuserdata(L,n)        (lua_type(L,n) == LUA_TLIGHTUSERDATA)
245 #define lua_isnil(L,n)          (lua_type(L,n) == LUA_TNIL)
246 #define lua_isboolean(L,n)      (lua_type(L,n) == LUA_TBOOLEAN)
247 #define lua_isnone(L,n)         (lua_type(L,n) == LUA_TNONE)
248 #define lua_isnoneornil(L, n)   (lua_type(L,n) <= 0)
249
250 #define lua_pushliteral(L, s)   \
251         lua_pushlstring(L, "" s, (sizeof(s)/sizeof(char))-1)
252
253
254
255 /*
256 ** compatibility macros and functions
257 */
258
259
260 LUA_API int lua_pushupvalues(lua_State * L);
261
262 #define lua_getregistry(L)      lua_pushvalue(L, LUA_REGISTRYINDEX)
263 #define lua_setglobal(L,s)      \
264    (lua_pushstring(L, s), lua_insert(L, -2), lua_settable(L, LUA_GLOBALSINDEX))
265
266 #define lua_getglobal(L,s)      \
267                 (lua_pushstring(L, s), lua_gettable(L, LUA_GLOBALSINDEX))
268
269
270 /* compatibility with ref system */
271
272 /* pre-defined references */
273 #define LUA_NOREF       (-2)
274 #define LUA_REFNIL      (-1)
275
276 #define lua_ref(L,lock) ((lock) ? luaL_ref(L, LUA_REGISTRYINDEX) : \
277       (lua_pushstring(L, "unlocked references are obsolete"), lua_error(L), 0))
278
279 #define lua_unref(L,ref)        luaL_unref(L, LUA_REGISTRYINDEX, (ref))
280
281 #define lua_getref(L,ref)       lua_rawgeti(L, LUA_REGISTRYINDEX, ref)
282
283
284
285 /*
286 ** {======================================================================
287 ** useful definitions for Lua kernel and libraries
288 ** =======================================================================
289 */
290
291 /* formats for Lua numbers */
292 #ifndef LUA_NUMBER_SCAN
293 #define LUA_NUMBER_SCAN         "%lf"
294 #endif
295
296 #ifndef LUA_NUMBER_FMT
297 #define LUA_NUMBER_FMT          "%.14g"
298 #endif
299
300 /* }====================================================================== */
301
302
303 /*
304 ** {======================================================================
305 ** Debug API
306 ** =======================================================================
307 */
308
309
310 /*
311 ** Event codes
312 */
313 #define LUA_HOOKCALL    0
314 #define LUA_HOOKRET     1
315 #define LUA_HOOKLINE    2
316 #define LUA_HOOKCOUNT   3
317 #define LUA_HOOKTAILRET 4
318
319
320 /*
321 ** Event masks
322 */
323 #define LUA_MASKCALL    (1 << LUA_HOOKCALL)
324 #define LUA_MASKRET     (1 << LUA_HOOKRET)
325 #define LUA_MASKLINE    (1 << LUA_HOOKLINE)
326 #define LUA_MASKCOUNT   (1 << LUA_HOOKCOUNT)
327
328 typedef struct lua_Debug lua_Debug;    /* activation record */
329
330 typedef void (*lua_Hook) (lua_State * L, lua_Debug * ar);
331
332
333 LUA_API int lua_getstack(lua_State * L, int level, lua_Debug * ar);
334 LUA_API int lua_getinfo(lua_State * L, const char *what, lua_Debug * ar);
335 LUA_API const char *lua_getlocal(lua_State * L, const lua_Debug * ar, int n);
336 LUA_API const char *lua_setlocal(lua_State * L, const lua_Debug * ar, int n);
337 LUA_API const char *lua_getupvalue(lua_State * L, int funcindex, int n);
338 LUA_API const char *lua_setupvalue(lua_State * L, int funcindex, int n);
339
340 LUA_API int lua_sethook(lua_State * L, lua_Hook func, int mask, int count);
341 LUA_API lua_Hook lua_gethook(lua_State * L);
342 LUA_API int lua_gethookmask(lua_State * L);
343 LUA_API int lua_gethookcount(lua_State * L);
344
345
346 #define LUA_IDSIZE      60
347
348 struct lua_Debug {
349   int event;
350   const char *name;                    /* (n) */
351   const char *namewhat;                /* (n) `global', `local', `field', `method' */
352   const char *what;                    /* (S) `Lua', `C', `main', `tail' */
353   const char *source;                  /* (S) */
354   int currentline;                     /* (l) */
355   int nups;                            /* (u) number of upvalues */
356   int linedefined;                     /* (S) */
357   char short_src[LUA_IDSIZE];          /* (S) */
358   /* private part */
359   int i_ci;                            /* active function */
360 };
361
362 /* }====================================================================== */
363
364
365 /******************************************************************************
366 * Copyright (C) 1994-2004 Tecgraf, PUC-Rio.  All rights reserved.
367 *
368 * Permission is hereby granted, free of charge, to any person obtaining
369 * a copy of this software and associated documentation files (the
370 * "Software"), to deal in the Software without restriction, including
371 * without limitation the rights to use, copy, modify, merge, publish,
372 * distribute, sublicense, and/or sell copies of the Software, and to
373 * permit persons to whom the Software is furnished to do so, subject to
374 * the following conditions:
375 *
376 * The above copyright notice and this permission notice shall be
377 * included in all copies or substantial portions of the Software.
378 *
379 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
380 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
381 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
382 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
383 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
384 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
385 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
386 ******************************************************************************/
387
388
389 #endif