author | Tero Marttila <terom@fixme.fi> |
Sun, 19 Apr 2009 04:35:29 +0300 | |
changeset 141 | 0b850238c588 |
parent 134 | 978041c1c04d |
child 142 | dc2bb09d412c |
permissions | -rw-r--r-- |
93
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
#include "lua_objs.h" |
116
92e71129074d
split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
114
diff
changeset
|
2 |
#include "lua_irc.h" |
104
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
3 |
#include "log.h" |
93
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
4 |
|
108
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
5 |
#include <stdlib.h> |
98
f357f835f0d5
add irc_client_defaults to apply default values for irc_client_add_net irc_net_info, implement --defaults cmd opt and lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
97
diff
changeset
|
6 |
#include <string.h> |
f357f835f0d5
add irc_client_defaults to apply default values for irc_client_add_net irc_net_info, implement --defaults cmd opt and lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
97
diff
changeset
|
7 |
|
116
92e71129074d
split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
114
diff
changeset
|
8 |
void lua_obj_create_type (lua_State *L, const char *name, const struct luaL_Reg methods[]) |
96
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
9 |
{ |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
10 |
luaL_newmetatable(L, name); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
11 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
12 |
// set the metatable __index to itself |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
13 |
lua_pushvalue(L, -1); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
14 |
lua_setfield(L, -1, "__index"); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
15 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
16 |
// register the methods to the metatable |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
17 |
luaL_register(L, NULL, methods); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
18 |
} |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
19 |
|
116
92e71129074d
split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
114
diff
changeset
|
20 |
void* lua_obj_create_obj (lua_State *L, const char *name, size_t size) |
96
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
21 |
{ |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
22 |
// create the new userdata on the stack |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
23 |
void *ud = lua_newuserdata(L, size); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
24 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
25 |
// get the type and set it |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
26 |
luaL_getmetatable(L, name); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
27 |
lua_setmetatable(L, -2); |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
28 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
29 |
// ok |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
30 |
return ud; |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
31 |
} |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
32 |
|
116
92e71129074d
split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
114
diff
changeset
|
33 |
void* lua_obj_create_global_type (lua_State *L, const char *type_name, const struct luaL_Reg methods[], const char *global_name, size_t size) |
103
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
34 |
{ |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
35 |
// allocate the global object |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
36 |
void *obj = lua_newuserdata(L, size); |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
37 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
38 |
// create the type metatable |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
39 |
lua_obj_create_type(L, type_name, methods); |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
40 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
41 |
// set the userdata's metatable |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
42 |
lua_setmetatable(L, -2); |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
43 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
44 |
// store it as a global |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
45 |
lua_setglobal(L, global_name); |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
46 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
47 |
// ok |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
48 |
return obj; |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
49 |
} |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
50 |
|
116
92e71129074d
split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
114
diff
changeset
|
51 |
void* lua_obj_get_obj (lua_State *L, const char *func, const char *name) |
96
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
52 |
{ |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
53 |
void *ud; |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
54 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
55 |
// validate the userdata arg |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
56 |
if ((ud = luaL_checkudata(L, 1, name)) == NULL) { |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
57 |
luaL_error(L, "bad type argument to %s: `%s` expected", func, name); |
103
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
58 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
59 |
// XXX: needs a __noreturn__ attribute |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
60 |
return NULL; |
96
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
61 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
62 |
} else { |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
63 |
// ok |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
64 |
return ud; |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
65 |
|
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
66 |
} |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
67 |
} |
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
68 |
|
141
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
69 |
const char *lua_arg_string (lua_State *L, int index, const char *name, const char *def) |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
70 |
{ |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
71 |
const char *value; |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
72 |
|
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
73 |
// use default? |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
74 |
if (lua_isnoneornil(L, index) && def != (const char *) LUA_ARG_REQUIRED) |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
75 |
return def; |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
76 |
|
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
77 |
// value given? |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
78 |
if ((value = lua_tostring(L, index))) |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
79 |
return value; |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
80 |
|
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
81 |
// error |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
82 |
luaL_error(L, "missing value for required string argument <%d:%s>", index, name); |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
83 |
} |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
84 |
|
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
85 |
bool lua_arg_bool (lua_State *L, int index, const char *name, int def) |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
86 |
{ |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
87 |
bool value; |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
88 |
|
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
89 |
// use default? |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
90 |
if (lua_isnoneornil(L, index) && def != LUA_ARG_REQUIRED) |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
91 |
return def; |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
92 |
|
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
93 |
// value given? |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
94 |
value = lua_toboolean(L, index); |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
95 |
|
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
96 |
return value; |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
97 |
|
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
98 |
// error |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
99 |
// luaL_error(L, "missing value of required boolean argument <%d:%s>", index, name); |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
100 |
} |
0b850238c588
implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
134
diff
changeset
|
101 |
|
96
a07d917adec1
add irc_chan and unify type/obj creation
Tero Marttila <terom@fixme.fi>
parents:
94
diff
changeset
|
102 |
/** |
103
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
103 |
* Wrapper for module |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
104 |
*/ |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
105 |
struct lua_module { |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
106 |
struct module *module; |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
107 |
}; |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
108 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
109 |
/** |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
110 |
* Create a lua_module userdata from the given module and push it onto the stack, returning 1. |
113
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
111 |
* |
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
112 |
* The given module should be a reference of its own right. |
103
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
113 |
*/ |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
114 |
static int lua_module_create (lua_State *L, struct module *module) |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
115 |
{ |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
116 |
// create the new obj |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
117 |
struct lua_module *lua_module = lua_obj_create_obj(L, "spbot.module", sizeof(*lua_module)); |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
118 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
119 |
// initialize |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
120 |
lua_module->module = module; |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
121 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
122 |
// ok |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
123 |
return 1; |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
124 |
} |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
125 |
|
107
5c1eeb45c7f2
support irc_chan type for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
106
diff
changeset
|
126 |
/** |
113
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
127 |
* module_put() our module reference |
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
128 |
*/ |
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
129 |
static int lua_module__gc (lua_State *L) |
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
130 |
{ |
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
131 |
struct lua_module *lua_module = lua_obj_get_obj(L, __func__, "spbot.module"); |
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
132 |
|
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
133 |
// put it |
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
134 |
module_put(lua_module->module); |
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
135 |
|
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
136 |
return 0; |
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
137 |
} |
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
138 |
|
103
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
139 |
static int lua_module_conf (lua_State *L) |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
140 |
{ |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
141 |
struct lua_module *lua_module = lua_obj_get_obj(L, __func__, "spbot.module"); |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
142 |
const struct config_option *option; |
124
f18d69425c4f
fix up lua_module_conf/config_* enough so that logwatch_conf_filter works
Tero Marttila <terom@fixme.fi>
parents:
122
diff
changeset
|
143 |
struct error_info err; |
f18d69425c4f
fix up lua_module_conf/config_* enough so that logwatch_conf_filter works
Tero Marttila <terom@fixme.fi>
parents:
122
diff
changeset
|
144 |
bool is_err = true; |
f18d69425c4f
fix up lua_module_conf/config_* enough so that logwatch_conf_filter works
Tero Marttila <terom@fixme.fi>
parents:
122
diff
changeset
|
145 |
|
f18d69425c4f
fix up lua_module_conf/config_* enough so that logwatch_conf_filter works
Tero Marttila <terom@fixme.fi>
parents:
122
diff
changeset
|
146 |
// the list of given config values, and temporary storage for string values |
122
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
147 |
struct config_value values[CONFIG_VALUES_MAX], *value = values; |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
148 |
char *value_bufs[CONFIG_VALUES_MAX], **value_buf = value_bufs; |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
149 |
|
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
150 |
// number of arguments given |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
151 |
int nargs = lua_gettop(L), argidx = 2; |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
152 |
|
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
153 |
// init to zero |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
154 |
memset(values, 0, sizeof(values)); |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
155 |
memset(value_bufs, 0, sizeof(value_bufs)); |
103
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
156 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
157 |
// XXX: come up with some better way... |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
158 |
struct nexus *nexus = lua_module->module->modules->nexus; |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
159 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
160 |
// the config name |
122
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
161 |
const char *conf_name = luaL_checkstring(L, argidx++); |
103
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
162 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
163 |
// look it up |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
164 |
if ((option = module_conf_lookup(lua_module->module, conf_name, &err)) == NULL) |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
165 |
return luaL_error(L, "module_conf_lookup: %s/%s: %s", module_name(lua_module->module), conf_name, error_msg(&err)); |
107
5c1eeb45c7f2
support irc_chan type for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
106
diff
changeset
|
166 |
|
122
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
167 |
// maximum number of arguments accepted |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
168 |
int maxargs = config_params_count(option); |
107
5c1eeb45c7f2
support irc_chan type for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
106
diff
changeset
|
169 |
|
122
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
170 |
// too many arguments? |
124
f18d69425c4f
fix up lua_module_conf/config_* enough so that logwatch_conf_filter works
Tero Marttila <terom@fixme.fi>
parents:
122
diff
changeset
|
171 |
if (nargs - argidx > maxargs) |
f18d69425c4f
fix up lua_module_conf/config_* enough so that logwatch_conf_filter works
Tero Marttila <terom@fixme.fi>
parents:
122
diff
changeset
|
172 |
return luaL_error(L, "lua_module_conf: too many arguments (>%d) given (%d)", maxargs, nargs - argidx); |
122
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
173 |
|
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
174 |
// the current param |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
175 |
const struct config_param *param = option->params; |
107
5c1eeb45c7f2
support irc_chan type for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
106
diff
changeset
|
176 |
|
124
f18d69425c4f
fix up lua_module_conf/config_* enough so that logwatch_conf_filter works
Tero Marttila <terom@fixme.fi>
parents:
122
diff
changeset
|
177 |
// apply each given argument to the correct param, storing it in value |
122
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
178 |
for (; argidx <= nargs; argidx++, value++, param++) { |
124
f18d69425c4f
fix up lua_module_conf/config_* enough so that logwatch_conf_filter works
Tero Marttila <terom@fixme.fi>
parents:
122
diff
changeset
|
179 |
// the given config value |
122
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
180 |
switch (lua_type(L, argidx)) { |
124
f18d69425c4f
fix up lua_module_conf/config_* enough so that logwatch_conf_filter works
Tero Marttila <terom@fixme.fi>
parents:
122
diff
changeset
|
181 |
case LUA_TNONE: |
f18d69425c4f
fix up lua_module_conf/config_* enough so that logwatch_conf_filter works
Tero Marttila <terom@fixme.fi>
parents:
122
diff
changeset
|
182 |
case LUA_TNIL: |
f18d69425c4f
fix up lua_module_conf/config_* enough so that logwatch_conf_filter works
Tero Marttila <terom@fixme.fi>
parents:
122
diff
changeset
|
183 |
// no value |
f18d69425c4f
fix up lua_module_conf/config_* enough so that logwatch_conf_filter works
Tero Marttila <terom@fixme.fi>
parents:
122
diff
changeset
|
184 |
value->type = CONFIG_NULL; |
f18d69425c4f
fix up lua_module_conf/config_* enough so that logwatch_conf_filter works
Tero Marttila <terom@fixme.fi>
parents:
122
diff
changeset
|
185 |
|
f18d69425c4f
fix up lua_module_conf/config_* enough so that logwatch_conf_filter works
Tero Marttila <terom@fixme.fi>
parents:
122
diff
changeset
|
186 |
break; |
f18d69425c4f
fix up lua_module_conf/config_* enough so that logwatch_conf_filter works
Tero Marttila <terom@fixme.fi>
parents:
122
diff
changeset
|
187 |
|
122
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
188 |
case LUA_TSTRING: { |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
189 |
// string arg |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
190 |
const char *arg_str = lua_tostring(L, argidx); |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
191 |
|
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
192 |
// copy it as a mutable string buffer |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
193 |
if ((*value_buf = strdup(arg_str)) == NULL) { |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
194 |
lua_pushfstring(L, "strdup"); |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
195 |
goto error; |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
196 |
} |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
197 |
|
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
198 |
// parse it as a raw value |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
199 |
if (config_parse_param(param, nexus, value, *value_buf, &err)) { |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
200 |
lua_pushfstring(L, "config_parse: %s/%s: %s", option->name, *value_buf, error_msg(&err)); |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
201 |
goto error; |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
202 |
} |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
203 |
|
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
204 |
// seek to next value_buf |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
205 |
value_buf++; |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
206 |
|
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
207 |
} break; |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
208 |
|
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
209 |
case LUA_TUSERDATA: |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
210 |
// some kind of userdata, use its metatable to figure out what type it is |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
211 |
if (!lua_getmetatable(L, argidx)) { |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
212 |
lua_pushfstring(L, "config value is userdata without metatable"); |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
213 |
goto error; |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
214 |
} |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
215 |
|
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
216 |
// get the target metatable |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
217 |
lua_getfield(L, LUA_REGISTRYINDEX, "evirc.chan"); |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
218 |
|
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
219 |
// is it a chan? |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
220 |
if (!lua_rawequal(L, -1, -2)) { |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
221 |
lua_pushfstring(L, "config value is userdata of unknown type"); |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
222 |
goto error; |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
223 |
} |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
224 |
|
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
225 |
// pop the metatables |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
226 |
lua_pop(L, 2); |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
227 |
|
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
228 |
// get the irc_chan |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
229 |
struct lua_chan *lua_chan = lua_touserdata(L, argidx); |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
230 |
|
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
231 |
// build the value |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
232 |
value->type = CONFIG_IRC_CHAN; |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
233 |
value->irc_chan = lua_chan->chan; |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
234 |
|
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
235 |
break; |
107
5c1eeb45c7f2
support irc_chan type for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
106
diff
changeset
|
236 |
|
122
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
237 |
default: |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
238 |
lua_pushfstring(L, "config value is of unknown lua type '%s'", lua_typename(L, argidx)); |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
239 |
goto error; |
107
5c1eeb45c7f2
support irc_chan type for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
106
diff
changeset
|
240 |
|
122
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
241 |
} |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
242 |
} |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
243 |
|
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
244 |
// apply it |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
245 |
if (module_conf(lua_module->module, option, values, &err)) { |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
246 |
lua_pushfstring(L, "module_conf: %s/%s: %s", module_name(lua_module->module), option->name, error_msg(&err)); |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
247 |
goto error; |
107
5c1eeb45c7f2
support irc_chan type for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
106
diff
changeset
|
248 |
} |
103
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
249 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
250 |
// ok |
122
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
251 |
is_err = false; |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
252 |
|
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
253 |
error: |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
254 |
// release any allocated strings |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
255 |
for (value_buf = value_bufs; value_buf <= value_bufs + CONFIG_VALUES_MAX && *value_buf; value_buf++) |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
256 |
free(*value_buf); |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
257 |
|
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
258 |
// either error or successful return |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
259 |
if (is_err) |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
260 |
return lua_error(L); |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
261 |
else |
52ffbdb6bba1
start implementing multiple args for lua_module_conf
Tero Marttila <terom@fixme.fi>
parents:
120
diff
changeset
|
262 |
return 0; |
103
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
263 |
} |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
264 |
|
113
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
265 |
static int lua_module_unload (lua_State *L) |
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
266 |
{ |
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
267 |
struct lua_module *lua_module = lua_obj_get_obj(L, __func__, "spbot.module"); |
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
268 |
struct error_info err; |
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
269 |
|
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
270 |
// just unload it |
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
271 |
if ((ERROR_CODE(&err) = module_unload(lua_module->module))) |
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
272 |
return luaL_error(L, "module_unload: %s: %s", module_name(lua_module->module), error_msg(&err)); |
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
273 |
|
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
274 |
// ok |
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
275 |
return 0; |
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
276 |
} |
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
277 |
|
103
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
278 |
static const struct luaL_Reg lua_module_methods[] = { |
113
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
279 |
{ "__gc", &lua_module__gc }, |
103
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
280 |
{ "conf", &lua_module_conf }, |
113
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
281 |
{ "unload", &lua_module_unload }, |
103
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
282 |
{ NULL, NULL } |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
283 |
}; |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
284 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
285 |
/** |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
286 |
* Initialize the lua_module object type |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
287 |
*/ |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
288 |
static void lua_module_init (lua_State *L) |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
289 |
{ |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
290 |
lua_obj_create_type(L, "spbot.module", lua_module_methods); |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
291 |
} |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
292 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
293 |
/** |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
294 |
* Wrapper for modules |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
295 |
*/ |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
296 |
struct lua_modules { |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
297 |
struct modules *modules; |
108
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
298 |
|
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
299 |
// strdup'd path for module_path |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
300 |
// XXX: remove when gc'd |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
301 |
char *path; |
103
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
302 |
}; |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
303 |
|
114
6de0490408f4
implement lua_modules__gc in case the modules global gets lost
Tero Marttila <terom@fixme.fi>
parents:
113
diff
changeset
|
304 |
static int lua_modules__gc (lua_State *L) |
6de0490408f4
implement lua_modules__gc in case the modules global gets lost
Tero Marttila <terom@fixme.fi>
parents:
113
diff
changeset
|
305 |
{ |
6de0490408f4
implement lua_modules__gc in case the modules global gets lost
Tero Marttila <terom@fixme.fi>
parents:
113
diff
changeset
|
306 |
struct lua_modules *lua_modules = lua_obj_get_obj(L, __func__, "spbot.modules"); |
6de0490408f4
implement lua_modules__gc in case the modules global gets lost
Tero Marttila <terom@fixme.fi>
parents:
113
diff
changeset
|
307 |
|
6de0490408f4
implement lua_modules__gc in case the modules global gets lost
Tero Marttila <terom@fixme.fi>
parents:
113
diff
changeset
|
308 |
// remove the modules path if it was set by us |
6de0490408f4
implement lua_modules__gc in case the modules global gets lost
Tero Marttila <terom@fixme.fi>
parents:
113
diff
changeset
|
309 |
if (lua_modules->path && modules_path(lua_modules->modules, NULL) == lua_modules->path) |
6de0490408f4
implement lua_modules__gc in case the modules global gets lost
Tero Marttila <terom@fixme.fi>
parents:
113
diff
changeset
|
310 |
modules_path(lua_modules->modules, ""); |
6de0490408f4
implement lua_modules__gc in case the modules global gets lost
Tero Marttila <terom@fixme.fi>
parents:
113
diff
changeset
|
311 |
|
6de0490408f4
implement lua_modules__gc in case the modules global gets lost
Tero Marttila <terom@fixme.fi>
parents:
113
diff
changeset
|
312 |
// release any strdup'd path |
6de0490408f4
implement lua_modules__gc in case the modules global gets lost
Tero Marttila <terom@fixme.fi>
parents:
113
diff
changeset
|
313 |
free(lua_modules->path); |
6de0490408f4
implement lua_modules__gc in case the modules global gets lost
Tero Marttila <terom@fixme.fi>
parents:
113
diff
changeset
|
314 |
|
6de0490408f4
implement lua_modules__gc in case the modules global gets lost
Tero Marttila <terom@fixme.fi>
parents:
113
diff
changeset
|
315 |
// ok |
6de0490408f4
implement lua_modules__gc in case the modules global gets lost
Tero Marttila <terom@fixme.fi>
parents:
113
diff
changeset
|
316 |
return 0; |
6de0490408f4
implement lua_modules__gc in case the modules global gets lost
Tero Marttila <terom@fixme.fi>
parents:
113
diff
changeset
|
317 |
} |
6de0490408f4
implement lua_modules__gc in case the modules global gets lost
Tero Marttila <terom@fixme.fi>
parents:
113
diff
changeset
|
318 |
|
108
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
319 |
static int lua_modules_path (lua_State *L) |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
320 |
{ |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
321 |
struct lua_modules *lua_modules = lua_obj_get_obj(L, __func__, "spbot.modules"); |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
322 |
char *path = NULL; |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
323 |
const char *old_path; |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
324 |
|
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
325 |
if (!lua_isnoneornil(L, 2)) { |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
326 |
// the new path |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
327 |
if ((path = strdup(luaL_checkstring(L, 2))) == NULL) |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
328 |
return luaL_error(L, "strdup"); |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
329 |
} |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
330 |
|
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
331 |
// set or get |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
332 |
old_path = modules_path(lua_modules->modules, path); |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
333 |
|
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
334 |
// return the old path |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
335 |
if (old_path) |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
336 |
lua_pushstring(L, old_path); |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
337 |
else |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
338 |
lua_pushnil(L); |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
339 |
|
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
340 |
if (path) { |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
341 |
// replace the old path |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
342 |
free(lua_modules->path); |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
343 |
lua_modules->path = path; |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
344 |
} |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
345 |
|
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
346 |
// ok |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
347 |
return 1; |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
348 |
} |
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
349 |
|
103
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
350 |
static int lua_modules_load (lua_State *L) |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
351 |
{ |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
352 |
struct lua_modules *lua_modules = lua_obj_get_obj(L, __func__, "spbot.modules"); |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
353 |
struct module *module; |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
354 |
struct module_info info; |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
355 |
struct error_info err; |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
356 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
357 |
// the module name/path |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
358 |
info.name = luaL_checkstring(L, 2); |
108
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
359 |
info.path = lua_isnoneornil(L, 3) ? NULL : luaL_checkstring(L, 3); |
103
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
360 |
|
113
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
361 |
// load and get a new reference |
103
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
362 |
if (module_load(lua_modules->modules, &module, &info, &err)) |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
363 |
return luaL_error(L, "module_load: %s/%s: %s", info.name, info.path, error_msg(&err)); |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
364 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
365 |
// wrap |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
366 |
return lua_module_create(L, module); |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
367 |
} |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
368 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
369 |
static int lua_modules_module (lua_State *L) |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
370 |
{ |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
371 |
struct lua_modules *lua_modules = lua_obj_get_obj(L, __func__, "spbot.modules"); |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
372 |
struct module *module; |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
373 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
374 |
// the module name |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
375 |
const char *name = luaL_checkstring(L, 2); |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
376 |
|
113
477d1cb3d87c
implement lua_module_unload and lua_module_gc to release references
Tero Marttila <terom@fixme.fi>
parents:
109
diff
changeset
|
377 |
// look it up, as a new reference |
134
978041c1c04d
update TODO, partially update error.c, rename module_get to modules_get, update config.lua
Tero Marttila <terom@fixme.fi>
parents:
124
diff
changeset
|
378 |
if ((module = modules_get(lua_modules->modules, name)) == NULL) |
103
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
379 |
return luaL_error(L, "module_get: %s: no such module", name); |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
380 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
381 |
// wrap |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
382 |
return lua_module_create(L, module); |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
383 |
} |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
384 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
385 |
static const struct luaL_Reg lua_modules_methods[] = { |
114
6de0490408f4
implement lua_modules__gc in case the modules global gets lost
Tero Marttila <terom@fixme.fi>
parents:
113
diff
changeset
|
386 |
{ "__gc", &lua_modules__gc }, |
108
50ff7ac8a725
implement modules_path + module_load with NULL path
Tero Marttila <terom@fixme.fi>
parents:
107
diff
changeset
|
387 |
{ "path", &lua_modules_path }, |
103
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
388 |
{ "load", &lua_modules_load }, |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
389 |
{ "module", &lua_modules_module }, |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
390 |
{ NULL, NULL } |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
391 |
}; |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
392 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
393 |
/** |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
394 |
* Initialize the spbot.modules type for lua_modules, and registers an instance bound to the given modules list at |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
395 |
* 'modules'. |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
396 |
*/ |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
397 |
static void lua_modules_init (lua_State *L, struct modules *modules) |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
398 |
{ |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
399 |
// allocate the global "modules" object |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
400 |
struct lua_modules *lua_modules = lua_obj_create_global_type(L, "spbot.modules", lua_modules_methods, "modules", sizeof(*lua_modules)); |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
401 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
402 |
// initialize it |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
403 |
lua_modules->modules = modules; |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
404 |
} |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
405 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
406 |
/** |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
407 |
* Wrapper for nexus |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
408 |
*/ |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
409 |
struct lua_nexus { |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
410 |
struct nexus *nexus; |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
411 |
}; |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
412 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
413 |
static int lua_nexus_shutdown (lua_State *L) |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
414 |
{ |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
415 |
struct lua_nexus *lua_nexus = lua_obj_get_obj(L, __func__, "spbot.nexus"); |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
416 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
417 |
// just shut it down |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
418 |
nexus_shutdown(lua_nexus->nexus); |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
419 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
420 |
return 0; |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
421 |
} |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
422 |
|
109
bfe9b9a8fe5b
fix some more valgrind errors
Tero Marttila <terom@fixme.fi>
parents:
108
diff
changeset
|
423 |
static int lua_nexus_load_config (lua_State *L) |
bfe9b9a8fe5b
fix some more valgrind errors
Tero Marttila <terom@fixme.fi>
parents:
108
diff
changeset
|
424 |
{ |
bfe9b9a8fe5b
fix some more valgrind errors
Tero Marttila <terom@fixme.fi>
parents:
108
diff
changeset
|
425 |
struct lua_nexus *lua_nexus = lua_obj_get_obj(L, __func__, "spbot.nexus"); |
bfe9b9a8fe5b
fix some more valgrind errors
Tero Marttila <terom@fixme.fi>
parents:
108
diff
changeset
|
426 |
struct error_info err; |
bfe9b9a8fe5b
fix some more valgrind errors
Tero Marttila <terom@fixme.fi>
parents:
108
diff
changeset
|
427 |
|
bfe9b9a8fe5b
fix some more valgrind errors
Tero Marttila <terom@fixme.fi>
parents:
108
diff
changeset
|
428 |
const char *path = luaL_checkstring(L, 2); |
bfe9b9a8fe5b
fix some more valgrind errors
Tero Marttila <terom@fixme.fi>
parents:
108
diff
changeset
|
429 |
|
bfe9b9a8fe5b
fix some more valgrind errors
Tero Marttila <terom@fixme.fi>
parents:
108
diff
changeset
|
430 |
// just load it |
bfe9b9a8fe5b
fix some more valgrind errors
Tero Marttila <terom@fixme.fi>
parents:
108
diff
changeset
|
431 |
if (nexus_load_config(lua_nexus->nexus, path, &err)) |
bfe9b9a8fe5b
fix some more valgrind errors
Tero Marttila <terom@fixme.fi>
parents:
108
diff
changeset
|
432 |
return luaL_error(L, "nexus_load_config(%s): %s", path, error_msg(&err)); |
bfe9b9a8fe5b
fix some more valgrind errors
Tero Marttila <terom@fixme.fi>
parents:
108
diff
changeset
|
433 |
|
bfe9b9a8fe5b
fix some more valgrind errors
Tero Marttila <terom@fixme.fi>
parents:
108
diff
changeset
|
434 |
return 0; |
bfe9b9a8fe5b
fix some more valgrind errors
Tero Marttila <terom@fixme.fi>
parents:
108
diff
changeset
|
435 |
} |
bfe9b9a8fe5b
fix some more valgrind errors
Tero Marttila <terom@fixme.fi>
parents:
108
diff
changeset
|
436 |
|
103
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
437 |
static const struct luaL_Reg lua_nexus_methods[] = { |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
438 |
{ "shutdown", &lua_nexus_shutdown }, |
109
bfe9b9a8fe5b
fix some more valgrind errors
Tero Marttila <terom@fixme.fi>
parents:
108
diff
changeset
|
439 |
{ "load_config", &lua_nexus_load_config }, |
103
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
440 |
{ NULL, NULL } |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
441 |
}; |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
442 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
443 |
/** |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
444 |
* Initialize the spbot.nexus type for lua_nexus, and registers an instance bound to the given nexus list at |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
445 |
* 'nexus'. |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
446 |
*/ |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
447 |
static void lua_nexus_init (lua_State *L, struct nexus *nexus) |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
448 |
{ |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
449 |
// allocate the global "nexus" object |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
450 |
struct lua_nexus *lua_nexus = lua_obj_create_global_type(L, "spbot.nexus", lua_nexus_methods, "nexus", sizeof(*lua_nexus)); |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
451 |
|
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
452 |
// initialize it |
454aea1e4f11
implement nexus_shutdown, lua_modules/lua_module, and lua_nexus
Tero Marttila <terom@fixme.fi>
parents:
99
diff
changeset
|
453 |
lua_nexus->nexus = nexus; |
93
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
454 |
} |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
455 |
|
98
f357f835f0d5
add irc_client_defaults to apply default values for irc_client_add_net irc_net_info, implement --defaults cmd opt and lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
97
diff
changeset
|
456 |
/** |
104
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
457 |
* Global functions |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
458 |
*/ |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
459 |
static int lua_log_level (lua_State *L) |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
460 |
{ |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
461 |
// log level as a string |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
462 |
enum log_level new_level = luaL_checkoption(L, 1, NULL, log_level_names); |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
463 |
|
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
464 |
// set it |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
465 |
set_log_level(new_level); |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
466 |
|
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
467 |
// ok |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
468 |
return 0; |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
469 |
} |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
470 |
|
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
471 |
static int lua_log (lua_State *L) |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
472 |
{ |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
473 |
// log level as a string |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
474 |
enum log_level level = luaL_checkoption(L, 1, NULL, log_level_names); |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
475 |
|
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
476 |
// log message |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
477 |
const char *msg = luaL_checkstring(L, 2); |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
478 |
|
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
479 |
// log it |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
480 |
log_msg(level, "lua", "%s", msg); |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
481 |
|
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
482 |
// ok |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
483 |
return 0; |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
484 |
} |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
485 |
|
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
486 |
static const struct luaL_Reg lua_global_functions[] = { |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
487 |
{ "log_level", &lua_log_level }, |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
488 |
{ "log", &lua_log }, |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
489 |
{ NULL, NULL } |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
490 |
}; |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
491 |
|
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
492 |
static void lua_global_init (lua_State *L) |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
493 |
{ |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
494 |
const struct luaL_Reg *reg; |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
495 |
|
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
496 |
for (reg = lua_global_functions; reg->name && reg->func; reg++) { |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
497 |
// put the function on the stack |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
498 |
lua_pushcfunction(L, reg->func); |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
499 |
|
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
500 |
// set the global |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
501 |
lua_setglobal(L, reg->name); |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
502 |
} |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
503 |
} |
fc196bb4bcc2
implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents:
103
diff
changeset
|
504 |
|
116
92e71129074d
split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
114
diff
changeset
|
505 |
void lua_objs_init (struct nexus_lua *lua) |
93
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
506 |
{ |
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
507 |
// init the various bits |
116
92e71129074d
split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
114
diff
changeset
|
508 |
lua_global_init(lua->st); |
92e71129074d
split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
114
diff
changeset
|
509 |
lua_nexus_init(lua->st, lua->nexus); |
92e71129074d
split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
114
diff
changeset
|
510 |
lua_modules_init(lua->st, lua->nexus->modules); |
92e71129074d
split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
114
diff
changeset
|
511 |
lua_module_init(lua->st); |
93
42ade8285570
add some rudimentary lua support, by having a simple interactive console, and providing access to irc_client_quit
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
512 |
} |
98
f357f835f0d5
add irc_client_defaults to apply default values for irc_client_add_net irc_net_info, implement --defaults cmd opt and lua_client_connect
Tero Marttila <terom@fixme.fi>
parents:
97
diff
changeset
|
513 |