missing add
authorPierre Habouzit <madcoder@debian.org>
Sat, 10 Mar 2007 01:58:45 +0000 (02:58 +0100)
committerPierre Habouzit <madcoder@debian.org>
Sat, 10 Mar 2007 01:58:45 +0000 (02:58 +0100)
Signed-off-by: Pierre Habouzit <madcoder@debian.org>
lib-lua/runtime.c [new file with mode: 0644]

diff --git a/lib-lua/runtime.c b/lib-lua/runtime.c
new file mode 100644 (file)
index 0000000..f36af4d
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or (at
+ *  your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ *  MA 02110-1301, USA.
+ *
+ *  Copyright © 2007 Pierre Habouzit
+ */
+
+#include <lib-lib/lib-lib.h>
+
+#include <lua.h>
+#include <lualib.h>
+#include <lauxlib.h>
+
+#include "lib-lua.h"
+
+static lua_State *L;
+
+static const luaL_Reg lualibs[] = {
+    {"",              luaopen_base},
+    {LUA_LOADLIBNAME, luaopen_package},
+    {LUA_TABLIBNAME,  luaopen_table},
+    {LUA_IOLIBNAME,   luaopen_io},
+    {LUA_STRLIBNAME,  luaopen_string},
+    {LUA_MATHLIBNAME, luaopen_math},
+    {LUA_DBLIBNAME,   luaopen_debug},
+};
+
+static const struct luaL_Reg madmutt_module_funcs[] = {
+    {NULL, NULL}
+};
+
+static const struct {
+    const char *key;
+    const char *value;
+} madmutt_module_vars[] = {
+    { "version",    VERSION },
+    /*
+     ** .pp
+     ** \fIThis is a read-only system property and specifies madmutt's
+     ** version string.\fP
+     */
+    { "sysconfdir", SYSCONFDIR },
+    /*
+     ** .pp
+     ** \fIThis is a read-only system property and specifies madmutt's
+     ** subversion revision string.\fP
+     */
+    { "bindir",     BINDIR },
+    /*
+     ** .pp
+     ** \fIThis is a read-only system property and specifies the
+     ** directory containing the madmutt binary.\fP
+     */
+    { "docdir",     PKGDOCDIR },
+    /*
+     ** .pp
+     ** \fIThis is a read-only system property and specifies the
+     ** directory containing the madmutt documentation.\fP
+     */
+#ifdef USE_HCACHE
+#if defined(HAVE_QDBM)
+    {"hcache_backend", "qdbm" },
+#elif defined(HAVE_GDBM)
+    {"hcache_backend", "gdbm" },
+#elif defined(HAVE_DB4)
+    {"hcache_backend", "db4" },
+#else
+    {"hcache_backend", "unknown" },
+#endif
+    /*
+     ** .pp
+     ** \fIThis is a read-only system property and specifies the
+     ** header chaching's database backend.\fP
+     */
+#endif
+    { NULL,         NULL }
+};
+
+void mlua_initialize(void)
+{
+    int i;
+
+    L = lua_open();
+    for (i = 0; i < countof(lualibs); i++) {
+        lua_pushcfunction(L, lualibs[i].func);
+        lua_pushstring(L, lualibs[i].name);
+        lua_call(L, 1, 0);
+    }
+    luaL_register(L, "madmutt", madmutt_module_funcs);
+
+    for (i = 0; i < countof(madmutt_module_vars); i++) {
+        char buffer[STRING];
+
+        snprintf(buffer, sizeof(buffer), "madmutt.%s = \"%s\";",
+                 madmutt_module_vars[i].key,
+                 madmutt_module_vars[i].value);
+        (void)luaL_dostring(L, buffer);
+    }
+}
+
+void mlua_shutdown(void)
+{
+    lua_close(L);
+}
+
+
+int mlua_dofile(const char *filename)
+{
+    return luaL_dofile(L, filename);
+}
+
+int mlua_wrap(void (*errfun)(const char *fmt, ...), int status)
+{
+    if (status) {
+        (*errfun)("-[lua]-: %s\n", lua_tostring(L, -1));
+        lua_pop(L, 1);
+    }
+    return status;
+}
+