4 * Copyright (c) Tuomo Valkonen 1999-2005.
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
12 #ifndef LIBEXTL_LUAEXTL_H
13 #define LIBEXTL_LUAEXTL_H
19 #define EXTL_EXTENSION "lua"
20 #define EXTL_COMPILED_EXTENSION "lc"
21 #define EXTL_MAX_SERIALISE_DEPTH 128
29 * f: function (c or lua)
52 typedef bool ExtlL2CallHandler(void (*fn
)(), ExtlL2Param
*in
,
55 typedef void ExtlExportedFn(void);
62 ExtlL2CallHandler
*l2handler
;
68 typedef struct ExtlSafelist_struct
{
70 struct ExtlSafelist_struct
*next
, *prev
;
71 ExtlExportedFn
**list
;
74 #define EXTL_SAFELIST_INIT(L) {0, NULL, NULL, L}
76 extern ExtlFn
extl_unref_fn(ExtlFn ref
);
77 extern ExtlTab
extl_unref_table(ExtlTab ref
);
78 extern ExtlFn
extl_fn_none();
79 extern ExtlTab
extl_table_none();
81 extern bool extl_fn_eq(ExtlFn fn1
, ExtlFn fn2
);
82 extern bool extl_table_eq(ExtlTab fn1
, ExtlTab fn2
);
84 /* These should be called to store function and table references gotten
85 * as arguments to functions.
87 extern ExtlFn
extl_ref_fn(ExtlFn ref
);
88 extern ExtlTab
extl_ref_table(ExtlTab ref
);
90 extern ExtlTab
extl_create_table();
93 extern bool extl_table_get_vararg(ExtlTab ref
, char itype
, char type
,
95 extern bool extl_table_get(ExtlTab ref
, char itype
, char type
, ...);
97 extern bool extl_table_gets_a(ExtlTab ref
, const char *entry
, ExtlAny
*ret
);
98 extern bool extl_table_gets_o(ExtlTab ref
, const char *entry
, Obj
**ret
);
99 extern bool extl_table_gets_i(ExtlTab ref
, const char *entry
, int *ret
);
100 extern bool extl_table_gets_d(ExtlTab ref
, const char *entry
, double *ret
);
101 extern bool extl_table_gets_b(ExtlTab ref
, const char *entry
, bool *ret
);
102 extern bool extl_table_gets_s(ExtlTab ref
, const char *entry
, char **ret
);
103 extern bool extl_table_gets_f(ExtlTab ref
, const char *entry
, ExtlFn
*ret
);
104 extern bool extl_table_gets_t(ExtlTab ref
, const char *entry
, ExtlTab
*ret
);
106 extern int extl_table_get_n(ExtlTab ref
);
107 extern bool extl_table_geti_a(ExtlTab ref
, int entry
, ExtlAny
*ret
);
108 extern bool extl_table_geti_o(ExtlTab ref
, int entry
, Obj
**ret
);
109 extern bool extl_table_geti_i(ExtlTab ref
, int entry
, int *ret
);
110 extern bool extl_table_geti_d(ExtlTab ref
, int entry
, double *ret
);
111 extern bool extl_table_geti_b(ExtlTab ref
, int entry
, bool *ret
);
112 extern bool extl_table_geti_s(ExtlTab ref
, int entry
, char **ret
);
113 extern bool extl_table_geti_f(ExtlTab ref
, int entry
, ExtlFn
*ret
);
114 extern bool extl_table_geti_t(ExtlTab ref
, int entry
, ExtlTab
*ret
);
117 extern bool extl_table_set_vararg(ExtlTab ref
, char itype
, char type
,
119 extern bool extl_table_set(ExtlTab ref
, char itype
, char type
, ...);
121 extern bool extl_table_sets_a(ExtlTab ref
, const char *entry
, const ExtlAny
*ret
);
122 extern bool extl_table_sets_o(ExtlTab ref
, const char *entry
, Obj
*val
);
123 extern bool extl_table_sets_i(ExtlTab ref
, const char *entry
, int val
);
124 extern bool extl_table_sets_d(ExtlTab ref
, const char *entry
, double val
);
125 extern bool extl_table_sets_b(ExtlTab ref
, const char *entry
, bool val
);
126 extern bool extl_table_sets_s(ExtlTab ref
, const char *entry
, const char *val
);
127 extern bool extl_table_sets_f(ExtlTab ref
, const char *entry
, ExtlFn val
);
128 extern bool extl_table_sets_t(ExtlTab ref
, const char *entry
, ExtlTab val
);
130 extern bool extl_table_seti_a(ExtlTab ref
, int entry
, const ExtlAny
*ret
);
131 extern bool extl_table_seti_o(ExtlTab ref
, int entry
, Obj
*val
);
132 extern bool extl_table_seti_i(ExtlTab ref
, int entry
, int val
);
133 extern bool extl_table_seti_d(ExtlTab ref
, int entry
, double val
);
134 extern bool extl_table_seti_b(ExtlTab ref
, int entry
, bool val
);
135 extern bool extl_table_seti_s(ExtlTab ref
, int entry
, const char *val
);
136 extern bool extl_table_seti_f(ExtlTab ref
, int entry
, ExtlFn val
);
137 extern bool extl_table_seti_t(ExtlTab ref
, int entry
, ExtlTab val
);
141 extern bool extl_table_clear_vararg(ExtlTab ref
, char itype
, va_list *args
);
142 extern bool extl_table_clear(ExtlTab ref
, char itype
, ...);
144 extern bool extl_table_clears(ExtlTab ref
, const char *entry
);
145 extern bool extl_table_cleari(ExtlTab ref
, int entry
);
149 typedef bool ExtlIterFn(ExtlAny k
, ExtlAny v
, void *d
);
151 extern void extl_table_iter(ExtlTab ref
, ExtlIterFn
*fn
, void *d
);
155 extern void extl_protect(ExtlSafelist
*sl
);
156 extern void extl_unprotect(ExtlSafelist
*sl
);
158 extern bool extl_call_vararg(ExtlFn fnref
, const char *spec
,
159 const char *rspec
, va_list *args
);
160 extern bool extl_call(ExtlFn fnref
, const char *spec
,
161 const char *rspec
, ...);
165 extern bool extl_loadfile(const char *file
, ExtlFn
*ret
);
166 extern bool extl_loadstring(const char *str
, ExtlFn
*ret
);
167 extern bool extl_serialise(const char *file
, ExtlTab tab
);
171 extern bool extl_register_function(ExtlExportedFnSpec
*spec
);
172 extern void extl_unregister_function(ExtlExportedFnSpec
*spec
);
173 extern bool extl_register_functions(ExtlExportedFnSpec
*spec
);
174 extern void extl_unregister_functions(ExtlExportedFnSpec
*spec
);
176 bool extl_register_class(const char *cls
, ExtlExportedFnSpec
*fns
,
178 void extl_unregister_class(const char *cls
, ExtlExportedFnSpec
*fns
);
180 bool extl_register_module(const char *cls
, ExtlExportedFnSpec
*fns
);
181 void extl_unregister_module(const char *cls
, ExtlExportedFnSpec
*fns
);
191 typedef void (*ExtlHook
) (const enum ExtlHookEvent event
, const char *name
, const char *source
, int currentline
);
193 int extl_sethook(ExtlHook hook
);
194 int extl_resethook();
198 extern bool extl_init();
199 extern void extl_deinit();
201 #endif /* LIBEXTL_LUAEXTL_H */