The following commit has been merged in the master branch:
commit fc8f3a35e2fbc7a5cff25d30edb33ae60d71f143
Author: Miriam Ruiz <[EMAIL PROTECTED]>
Date:   Tue Nov 25 03:10:46 2008 +0100

    Send properly the arg table to lua script

diff --git a/gui_lua.cpp b/gui_lua.cpp
index 9250f62..8793e8a 100644
--- a/gui_lua.cpp
+++ b/gui_lua.cpp
@@ -171,16 +171,23 @@ static void print_version (void)
 
 static int getargs (lua_State *L, const char **argv)
 {
+       int n = 0;
        int argc = 0;
-       while (argv[argc]) argc++; /* count total number of arguments */
 
-       luaL_checkstack(L, argc + 3, "too many arguments to script");
+       while (argv[argc]) argc++;  /* count total number of arguments */
+       int narg = argc - (n + 1);  /* number of arguments to the script */
+       luaL_checkstack(L, narg + 3, "too many arguments to script");
 
        int i;
+       for (i=n+1; i < argc; i++)
+               lua_pushstring(L, argv[i]);
+       lua_createtable(L, narg, n + 1);
        for (i=0; i < argc; i++)
+       {
                lua_pushstring(L, argv[i]);
-
-       return argc;
+               lua_rawseti(L, -2, i - n);
+       }
+       return narg;
 }
 
 
@@ -211,6 +218,7 @@ static int handle_script (lua_State *L, const char *fname, 
const char **argv)
        int status;
        /* collect arguments */
        int narg = getargs(L, argv);
+       lua_setglobal(L, "arg");
        status = luaL_loadfile(L, fname);
        lua_insert(L, -(narg+1));
        if (status == 0)
@@ -243,8 +251,7 @@ static int handle_luainit (lua_State *L)
 
 struct Smain
 {
-       Smain(int _argc, const char **_argv) : script("lua/script.lua"), 
argc(_argc), argv(_argv), status(0) { }
-       const char *script;
+       Smain(int _argc, const char **_argv) : argc(_argc), argv(_argv), 
status(0) { }
        const int argc;
        const char **argv;
        int status;
@@ -263,8 +270,8 @@ static int pmain (lua_State *L)
        if (s->status != 0) return 0;
 
        printf("Starting LUA Script\n");
-       if (s->script)
-               s->status = handle_script(L, s->script, s->argv);
+       if (s->argv[0])
+               s->status = handle_script(L, s->argv[0], s->argv);
        printf("Finished LUA Script\n");
 
        if (s->status != 0) return 0;
@@ -296,11 +303,22 @@ extern "C" int go(PackageData &pkgdata)
 extern "C" int init(int _argc, const char *_argv[])
 {
        std::cout << _("Lua Plugin successfully loaded") << std::endl;
-       argc = _argc;
-       argv = _argv;
+       argv = new const char *[_argc+2];
+       argc = 1;
+       argv[0] = "lua/script.lua";
+       for (int i=0; i<_argc && (argv[i+1]=_argv[i]) ; i++, argc++)
+       {
+       }
+       argv[argc] = NULL;
        return 1; // true
 }
 
+extern "C" void end()
+{
+       if (argv) delete[] argv;
+       std::cout << _("Lua Plugin stopped") << std::endl;
+}
+
 extern "C" void comment(const char *text)
 {
        std::cout << "# " << text << std::endl;
diff --git a/lua/script.lua b/lua/script.lua
index a896b0c..d5e107a 100644
--- a/lua/script.lua
+++ b/lua/script.lua
@@ -4,6 +4,8 @@
 
 require "gtk"
 
+local i=0; while arg[i] do print(i, arg[i]); i=i+1 end
+
 win = gtk.window_new(gtk.GTK_WINDOW_TOPLEVEL)
 win:connect('destroy', function() gtk.main_quit() end)
 win:set_title("Demo Program")

-- 
Development fot GoFind!

_______________________________________________
Pkg-games-commits mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/pkg-games-commits

Reply via email to