[SCM] Development fot GoFind! branch, master, updated. fc8f3a35e2fbc7a5cff25d30edb33ae60d71f143

Miriam Ruiz miriam at debian.org
Tue Nov 25 02:08:02 UTC 2008


The following commit has been merged in the master branch:
commit fc8f3a35e2fbc7a5cff25d30edb33ae60d71f143
Author: Miriam Ruiz <miriam at debian.org>
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!



More information about the Pkg-games-commits mailing list