[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