]> jfr.im git - irc/quakenet/newserv.git/blame - lua/luacontrol.c
Merge.
[irc/quakenet/newserv.git] / lua / luacontrol.c
CommitLineData
2da56f0d
CP
1/* Copyright (C) Chris Porter 2005 */
2/* ALL RIGHTS RESERVED. */
3/* Don't put this into the SVN repo. */
4/* Copyright (C) Chris Porter 2005 */
5
6#include "../control/control.h"
7#include "../nick/nick.h"
8
9#include "lua.h"
10
11int lua_inslua(void *sender, int cargc, char **cargv);
12int lua_rmlua(void *sender, int cargc, char **cargv);
13int lua_reloadlua(void *sender, int cargc, char **cargv);
14int lua_lslua(void *sender, int cargc, char **cargv);
15
16void lua_startcontrol(void) {
17 registercontrolhelpcmd("inslua", NO_DEVELOPER, 1, &lua_inslua, "Usage: inslua <script>\nLoads the supplied Lua script..");
18 registercontrolhelpcmd("rmlua", NO_DEVELOPER, 1, &lua_rmlua, "Usage: rmlua <script>\nUnloads the supplied Lua script.");
19 registercontrolhelpcmd("reloadlua", NO_DEVELOPER, 1, &lua_reloadlua, "Usage: reloadlua <script>\nReloads the supplied Lua script.");
d0d1e2a3 20 registercontrolhelpcmd("lslua", NO_DEVELOPER, 0, &lua_lslua, "Usage: lslua\nLists all currently loaded Lua scripts and shows their memory usage.");
2da56f0d
CP
21}
22
23void lua_destroycontrol(void) {
24 deregistercontrolcmd("inslua", &lua_inslua);
25 deregistercontrolcmd("rmlua", &lua_rmlua);
26 deregistercontrolcmd("reloadlua", &lua_reloadlua);
27 deregistercontrolcmd("lslua", &lua_lslua);
28}
29
30
31int lua_inslua(void *sender, int cargc, char **cargv) {
32 nick *np = (nick *)sender;
33 char *script = cargv[0];
34
35 if(cargc < 1) {
36 controlreply(np, "Usage: inslua <script>");
37 return CMD_ERROR;
38 }
39
40 if(lua_scriptloaded(script)) {
41 controlreply(np, "Script %s already loaded, or name not valid.", script);
42 return CMD_ERROR;
43 }
44
45 if(lua_loadscript(script)) {
46 controlreply(np, "Script %s loaded.", script);
47 return CMD_OK;
48 } else {
49 controlreply(np, "Unable to load script %s.", script);
50 return CMD_ERROR;
51 }
52}
53
54int lua_rmlua(void *sender, int cargc, char **cargv) {
55 nick *np = (nick *)sender;
56 char *script = cargv[0];
57 lua_list *l;
58
59 if(cargc < 1) {
60 controlreply(np, "Usage: rmmod <script>");
61 return CMD_ERROR;
62 }
63
64 l = lua_scriptloaded(script);
65 if(!l) {
66 controlreply(np, "Script %s is not loaded.", script);
67 return CMD_ERROR;
68 }
69
70 lua_unloadscript(l);
71 controlreply(np, "Script %s unloaded.", script);
72
73 return CMD_OK;
74}
75
76int lua_reloadlua(void *sender, int cargc, char **cargv) {
77 if(cargc < 1) {
78 controlreply((nick *)sender, "Usage: reloadlua <script>");
79 return CMD_ERROR;
80 }
81
82 lua_rmlua(sender, cargc, cargv);
83
84 return lua_inslua(sender, cargc, cargv);
85}
86
87int lua_lslua(void *sender, int cargc, char **cargv) {
88 nick *np = (nick *)sender;
89 lua_list *l = lua_head;
90
91 controlreply(np, "Loaded scripts:");
92
93 for(l=lua_head;l;l=l->next)
fe0f6b25 94 controlreply(np, "%s (mem: %dKb calls: %lu user: %0.2fs sys: %0.2fs)", l->name->content, lua_gc(l->l, LUA_GCCOUNT, 0), l->calls, (double)((double)l->ru_utime.tv_sec + (double)l->ru_utime.tv_usec / USEC_DIFFERENTIAL), (double)((double)l->ru_stime.tv_sec + (double)l->ru_stime.tv_usec / USEC_DIFFERENTIAL));
2da56f0d
CP
95
96 controlreply(np, "Done.");
97
98 return CMD_OK;
99}
100