lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Hi,

some context before my questions..

I started learning Lua 2 years with Pil 5.2 book, and made a plugin for a third party (Gui toolbox).
Did code more or less only one month at this time then have to stop :(

Re-started this old project 2 days ago trying to make it alive and re-learned Lua.

Re-discovering what I've done at this time was quite interesting and almost all my 3000 lines of C
was even readable, except few lines (my bad, forgot to put some comments).

So, that said, here is my question:

I have a function:

static int LCvar( lua_State *L )
{
    const char *e ;
    const char *s ;
    int iRevVal,i ;
   
   // drop some code; no interest here..
    s = val.buffer ; // <--  a string:  "1,2,3,4,.."
    i = 0;
    while ((e = strchr(s, (int)',')) != NULL ) {
        lua_pushlstring( L, s, e-s );
        s = e+1; // skip separator
        i++;
    }
    lua_pushstring( L, s );
    return ++i ;
}    

in Lua script, I call it this way:

local m,n,o,p =   LCvar("test")  and it works!

Now, i would like to do:

local m,n,o,p =  LCvar[ "test" ]

So, during the init phase of the plugin, I did:

....
        lua_newtable(L);
        lua_setfield(L, 1, "LCvar");
        lua_newtable(L);
        lua_pushliteral(L, "__index");
        // lua_pushcclosure(L, LCvar, 0);
        lua_pushcfunction( L,  LCvar );
        lua_pushliteral(L, "__newindex");
        lua_pushcclosure(L, LCErr, 0);
        lua_settable(L,-5);
        lua_settable(L,-3);
        lua_getglobal(L, "setmetatable");
        lua_getfield(L, 1, "LCvar");
        lua_pushvalue(L, 2);
        lua_call(L,2,0);
....

This works if LCvar returns only 1 value, otherwise the local m is nil.

And now, I'm lost; don't know what to do to return a list of values with  LCvar[ "test" ]

Any pointer or a bit of teaching will be much appreciated.

Regards,

Thierry