<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Lua</title><link>http://blog.vckbase.com/jzhang/category/1044.html</link><description>刚开始学习，将要应用在项目中。一个很小的可以嵌入脚本语言。</description><managingEditor>jzhang</managingEditor><dc:language>zh-CHS</dc:language><generator>.Text Version 0.958.2004.214</generator><item><dc:creator>jzhang</dc:creator><title>开始阅读Lua的源代码</title><link>http://blog.vckbase.com/jzhang/archive/2007/05/23/26586.html</link><pubDate>Wed, 23 May 2007 05:55:00 GMT</pubDate><guid>http://blog.vckbase.com/jzhang/archive/2007/05/23/26586.html</guid><wfw:comment>http://blog.vckbase.com/jzhang/comments/26586.html</wfw:comment><comments>http://blog.vckbase.com/jzhang/archive/2007/05/23/26586.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blog.vckbase.com/jzhang/comments/commentRss/26586.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/jzhang/services/trackbacks/26586.html</trackback:ping><description>很久以前就想做的事情了，因为各种原因没有开始。从今天开始，每天花1个小时，阅读Lua的代码。&lt;BR&gt;如果有心得，再贴出来。&lt;img src ="http://blog.vckbase.com/jzhang/aggbug/26586.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>jzhang</dc:creator><title>shttpd和Lua组合-提供嵌入式web服务</title><link>http://blog.vckbase.com/jzhang/archive/2006/11/11/23070.html</link><pubDate>Sat, 11 Nov 2006 03:24:00 GMT</pubDate><guid>http://blog.vckbase.com/jzhang/archive/2006/11/11/23070.html</guid><wfw:comment>http://blog.vckbase.com/jzhang/comments/23070.html</wfw:comment><comments>http://blog.vckbase.com/jzhang/archive/2006/11/11/23070.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blog.vckbase.com/jzhang/comments/commentRss/23070.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/jzhang/services/trackbacks/23070.html</trackback:ping><description>&lt;html&gt;
&lt;header&gt;
&lt;title&gt;shttpd和Lua的组合-提供嵌入式web服务&lt;/title&gt;
&lt;/header&gt;
&lt;body&gt;
&lt;center&gt;&lt;h3&gt;shttpd和Lua的组合-提供嵌入式web服务&lt;/h3&gt;&lt;/center&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;b&gt;简单介绍：&lt;/b&gt;&lt;br&gt;
  &amp;nbsp;&amp;nbsp;lua是一个小巧的脚本语言，专用于嵌入和扩展。它和C/C++代码有着良好
的交互能力。由于体积小，很适合嵌入到其他程序中为程序提供脚本功能。
lua在大多数平台上都可以顺利编译、运行。网址 &lt;image src="http://jason.rocklv.net/techdoc/logo.gif"&gt;&lt;/image&gt;&lt;a href="http://www.lua.org" target="blank"&gt;http://www.lua.org&lt;/a&gt;&lt;p&gt;
  &amp;nbsp;&amp;nbsp;shttpd是一个小巧的web服务器，小巧到只有一个.c文件，4000余行代码。
虽然体积很小，却具备了最基本的功能，比如CGI。它既可以独立运行，
也可以嵌入到其他的应用程序当中。shttpd在大多数平台上都可以顺利
编译、运行。网址 &lt;a href="http://shttpd.sourceforge.net" target="blank"&gt;http://shttpd.sourceforge.net&lt;/a&gt;&lt;p&gt;
&lt;td&gt;
&lt;/tr&gt;  
&lt;tr&gt;
&lt;td&gt;
&lt;b&gt;应用方式：&lt;/b&gt;&lt;br&gt;
  &amp;nbsp;&amp;nbsp;很多设备都提供Web服务用于配置，比如路由器，ADSL猫等等。这种设备所
提供的web服务的典型用例是用户填写一些参数，提交给Web服务器，Web服务器
将这些参数写入硬件，并将操作结果或者其他信息生成页面返回给浏览器。
如果使用Apache,PHP,MySQL这种组合，一方面资源未必能承受，另一方面这些
硬&amp;nbsp;&amp;nbsp;件所使用的操作系统也未必能支持这些软件(如pSOS,VxWorks,WinCE)。&lt;p&gt;
  &amp;nbsp;&amp;nbsp;如果shttpd和lua结合起来，一个用来提供基本的web服务，另一个用来编写
CGI脚本，应该是一个很不错的选择。他们都具备体积小，占用资源少的特点，
又都宣称源码级可移植。如果有更高的需要，也可以把sqlite加入，提供数据
库服务(sqlite是一个嵌入式的数据库，同样体积小巧，并且可以在很多平台
上工作)。不带sqlite，体积仅仅300k，加上sqlite大约500k，对于嵌入式应
用非常合适。&lt;p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;b&gt;向WinCE移植：&lt;/b&gt;&lt;br&gt;
  &amp;nbsp;&amp;nbsp;虽然lua使用的是比ANSI还要小的clean C，并且号称在所有平台上不用修改
任何东西就可以直接make成功，但是WinCE却是一个例外。事实上，对大多数
源码级可移植的C/C++程序，WinCE都是一个例外：因为它对标准C库的支持是
不完整的。&lt;p&gt;
  &amp;nbsp;&amp;nbsp;Lua 5.0版本的时候，有人提供了一个for WinCE的移植，工作的很好。基于
这个移植，我把Lua 5.1也移植了过去。因为Lua使用的是clean C，所以需要
做的改动不算很多，具体参看代码中的lua.c,lua.h,error.h和luacerun.c就
明白了。&lt;p&gt;
  &amp;nbsp;&amp;nbsp;shttpd就麻烦得多了，一方面它使用的是ANSI C，需要自己实现的函数更多，
比如文件读写，线程操作等。这些部分虽然麻烦，但是我还是一个个的把这些
缺失的函数自己实现了。更严重的是，WinCE 缺失了两个必不可少的特性：
管道和环境变量。&lt;p&gt;
  &amp;nbsp;&amp;nbsp;传统的CGI执行原理是web server通过管道将CGI程序的标准输入输出重定向，
从而向CGI程序发送数据并接收其输出的结果，同时通过设置CGI进程的环境变量，
将HTTP请求的各种信息传递给CGI程序，其中包括GET命令的查询串。这两个功能
WinCE都没有。 重定向的问题，可以通过编写特殊的WinCE驱动模拟解决，但是
也很受限制，使用不便；环境变量的问题则一点办法也没有了。&lt;p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;b&gt;解决方案：&lt;/b&gt;&lt;br&gt;
  &amp;nbsp;&amp;nbsp;不过Lua为我们提供了可能的解决方案: 将Lua引擎直接嵌入shttpd。&lt;p&gt;
  &amp;nbsp;&amp;nbsp;如果将Lua直接嵌入shttpd,那在处理CGI请求的时候，我们不再需要创建新的
进程，而只需要创建一个新的Lua解释器，并交给一个线程去执行就可以了，这样
不仅在效率上有了提高，也可以适应某些古老的不支持多进程的操作系统了（在
这样的系统上，需要把shttpd也嵌入到主程序当中去）。为了传递原来用环境变
量方式传递的数据，我们在执行脚本之前，在新创建的Lua的解释器里创建一个叫
REQUEST的mapping类型的变量，将所有的数据设置在这个变量中。这样在脚本中
就可以直接使用这个变量了。&lt;p&gt;
  &amp;nbsp;&amp;nbsp;CGI程序还必须能够从标准输入接收POST请求，以及从标准输出发送HTML页面。
这一点可以通过修改shttpd,为Lua引擎扩展两个函数来实现，分别是HTTPRead和
HTTPWrite。在脚本中调用这两个函数来实现输入和输出。为了使用方便和习惯，
再把标准的print和io.read函数指向HTTPWrite和HTTPRead(函数在Lua中是第一
类型)。&lt;p&gt;
  &amp;nbsp;&amp;nbsp;这两个问题解决之后，剩下的就是用Lua脚本写一个简单的CGI开发框架了，
LuaCGI就是一个很好的框架，只需要把它所使用的SAPI替换成shttpd提供的
接口就可以了。&lt;p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;b&gt;总结：&lt;/b&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;用shttp+lua的组合，可以在各种不同的平台，尤其是嵌入式平台上提供web服务
，满足在资源有限的环境中工作的需要。由于Lua是直接嵌入到shttpd中的，它
有着比一般的CGI更高的效率。&lt;p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;table&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;img src ="http://blog.vckbase.com/jzhang/aggbug/23070.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>jzhang</dc:creator><title>Lua 语言的简单介绍</title><link>http://blog.vckbase.com/jzhang/archive/2006/08/18/21972.html</link><pubDate>Fri, 18 Aug 2006 09:42:00 GMT</pubDate><guid>http://blog.vckbase.com/jzhang/archive/2006/08/18/21972.html</guid><wfw:comment>http://blog.vckbase.com/jzhang/comments/21972.html</wfw:comment><comments>http://blog.vckbase.com/jzhang/archive/2006/08/18/21972.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.vckbase.com/jzhang/comments/commentRss/21972.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/jzhang/services/trackbacks/21972.html</trackback:ping><description>&lt;DIV class=article lang=en&gt;
&lt;DIV class=titlepage&gt;
&lt;DIV&gt;
&lt;DIV&gt;
&lt;H2 class=title&gt;&lt;A name=d0e1&gt;&lt;/A&gt;&amp;nbsp;&lt;/H2&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;HR&gt;
&lt;/DIV&gt;
&lt;DIV class=toc&gt;
&lt;DL&gt;
&lt;DT&gt;&lt;SPAN class=section&gt;&lt;A href="#d0e4"&gt;1. Lua的特点&lt;/A&gt;&lt;/SPAN&gt; 
&lt;DT&gt;&lt;SPAN class=section&gt;&lt;A href="#d0e34"&gt;2. 数据交换介绍&lt;/A&gt;&lt;/SPAN&gt; 
&lt;DT&gt;&lt;SPAN class=section&gt;&lt;A href="#d0e125"&gt;3. C和Lua脚本互相调用举例&lt;/A&gt;&lt;/SPAN&gt; 
&lt;DT&gt;&lt;SPAN class=section&gt;&lt;A href="#d0e136"&gt;4. 参考资料&lt;/A&gt;&lt;/SPAN&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;/DIV&gt;
&lt;DIV class=section lang=en&gt;
&lt;DIV class=titlepage&gt;
&lt;DIV&gt;
&lt;DIV&gt;
&lt;H2 class=title style="CLEAR: both"&gt;&lt;A name=d0e4&gt;&lt;/A&gt;1.&amp;nbsp;Lua的特点&lt;/H2&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;Lua 是一个小巧的脚本语言。作者是巴西人。该语言的设计目的是为了嵌入应用程序中，从而为应用程序提供灵活的扩展和定制功能。它的主页是 &lt;A href="http://www.lua.org/" target=_top&gt;www.lua.org&lt;/A&gt;。&lt;/P&gt;
&lt;P&gt;Lua最著名的应用是在暴雪公司的网络游戏WOW中。&lt;/P&gt;
&lt;P&gt;Lua脚本可以很容易的被C/C++代码调用，也可以反过来调用C/C++的函数，这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本，也可以作为普通的配置文件，代替XML,Ini等文件格式，并且更容易理解和维护。&lt;/P&gt;
&lt;P&gt;Lua由标准C编写而成，代码简洁优美，几乎在所有操作系统和平台上都可以编译，运行。一个完整的Lua解释器不过200k，在目前所有脚本引擎中，Lua的速度是最快的。这一切 都决定了Lua是作为嵌入式脚本的最佳选择。&lt;/P&gt;
&lt;P&gt;Lua 有一个同时进行的JIT项目，提供在特定平台上的即时编译功能，这将给Lua带来更加优秀的性能。请访问 &lt;A href="http://luajit.luaforge.net/" target=_top&gt;http://luajit.luaforge.net/&lt;/A&gt; 来了解这个项目。&lt;/P&gt;
&lt;P&gt;和Python等脚本不同，Lua并没有提供强大的库，这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。不过Lua还是具备了比如数学运算和字符串处理等基本的功能。&lt;/P&gt;
&lt;P&gt;Lua 目前的最新版本是 5.1.&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Lua只有一种数据类型，table. 实际上就是hash表。它用这个来模拟数组，链表等等。 在语法上，Lua支持如下形式：&lt;/P&gt;&lt;PRE class=programlisting&gt;   data = {} --定义一个table
   data.i = 1
   data.name = "&lt;A title=我的主页 href="http://jason.rocklv.net" target=_blank&gt;&lt;a title="我的主页" href="http://jason.rocklv.net" target="_blank"&gt;jason&lt;/a&gt;&lt;/A&gt;"
   data.package = {1,2,2,3,56,7}
   data.others = {}
   data.others.a = 1
   data.others.b = 1.1&lt;/PRE&gt;
&lt;P&gt;这使得Lua具有了跟C的struct类似的形式，非常便于设计C函数的参数，用一个table就可以传入很复杂的参数。&lt;/P&gt;&lt;/DIV&gt;
&lt;DIV class=section lang=en&gt;
&lt;DIV class=titlepage&gt;
&lt;DIV&gt;
&lt;DIV&gt;
&lt;H2 class=title style="CLEAR: both"&gt;&lt;A name=d0e34&gt;&lt;/A&gt;2.&amp;nbsp;数据交换介绍&lt;/H2&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV class=orderedlist&gt;
&lt;OL type=1&gt;
&lt;LI&gt;
&lt;P&gt;Lua和C程序通过一个堆栈交换数据: struct lua_State&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;堆栈的序号可以从栈顶和栈底计数，从栈底计数，则栈底是1,向栈顶方向递增。从栈顶计数，则栈顶是-1,向栈底方向递减。一般都用从栈顶计数的方式。堆栈的默认大小是20，可以用lua_checkstack修改.用lua_gettop则可以获得栈里的元素数目。并不是说在栈顶有一个整形元素。而是计算了一下栈顶元素在栈里的正index,相当于元素数目。&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;Lua 调用C函数用的堆栈是临时的，调用结束之后就被销毁了。&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;如何从堆栈中获取从Lua脚本中的参数&lt;/P&gt;
&lt;DIV class=orderedlist&gt;
&lt;OL type=a&gt;
&lt;LI&gt;
&lt;P&gt;如果知道Lua脚本中某个全局变量的名字，可以用void lua_getglobal (lua_State *L, const char *name) 。这个函数会将name所指Lua变量的值放在栈顶.&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;如果是在C 函数中要获取Lua调用函数使用的参数：&lt;/P&gt;
&lt;DIV class=orderedlist&gt;
&lt;OL type=i&gt;
&lt;LI&gt;
&lt;P&gt;首先用lua_gettop检查参数数量&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;用lua_is...类函数检测参数的类型，做好错误处理&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;用lua_to...类函数将参数转换为number或者string.(对Lua来说，只有这两种简单类型)&lt;/P&gt;
&lt;P&gt;lua_tonumber返回的是double&lt;/P&gt;
&lt;P&gt;lua_tostring返回的是char*&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;用lua_remove从栈中删除掉元素&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;继续获取下一个元素. 因为每次都调用lua_remove,所以每次调用lua_tonumber,使用的index都将固定是-1，即栈顶。&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;如果lua_istable成立，那么说明栈顶是一个table.注意table是不能取出来的，只能把table里的元素一个个取出来。&lt;/P&gt;
&lt;P&gt;首先把元素的名字压入栈顶： lua_pushstring(L,"i"); 然后就可以用lua_gettable调用，值会放在栈顶。同时刚才压入的元素名字被弹出。 用上面的办法，可以把这个值取出来。记得也应该lua_remove。 如果table的某一个元素也是table，重复即可。 当table的所有元素都取完了，记住这个table本身还在堆栈里，要用lua_remove把它删除。&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;如果要获取的是一个数组(所谓数组，其实就是key是从1开始的数字序列的table,并且值类型相同),用lua_next可以遍历这个数组：&lt;/P&gt;
&lt;P&gt;首先lua_pushnil，压入一个空值，然后&lt;/P&gt;&lt;PRE class=programlisting&gt; while (lua_next(L, -2) != 0)
{
    if(lua_isnumber(L,-1)) //判断元素类型，也可能是string
    {
         arrf.add((float)lua_tonumber(L, -1));//获取元素的值

         lua_remove(L,-1);
     }
}
lua_remove(L,-1);//删除NIL&lt;/PRE&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;
&lt;LI&gt;
&lt;P&gt;如何从C返回数据给Lua脚本&lt;/P&gt;
&lt;P&gt;用lua_push...类函数压入数据到堆栈中，并用return n;来告诉Lua返回了几个返回值。 Lua是天生支持多个返回值的，如 x,y = Test()。 Lua会根据n从栈里取相应的数据。&lt;/P&gt;
&lt;P&gt;如果要返回一个table:&lt;/P&gt;&lt;PRE class=programlisting&gt;     lua_newtable(L);//创建一个表格，放在栈顶

     lua_pushstring(L, "mydata");//压入key
     lua_pushnumber(L,66);//压入value
     lua_settable(L,-3);//弹出key,value，并设置到table里面去

     lua_pushstring(L, "subdata");//压入key
     lua_newtable(L);//压入value,也是一个table
     lua_pushstring(L, "mydata");//压入subtable的key
     lua_pushnumber(L,53);//value
     lua_settable(L,-3);//弹出key,value,并设置到subtable
     lua_settable(L,-3);//这时候父table的位置还是-3,弹出key,value(subtable),并设置到table里去

    
     lua_pushstring(L, "mydata2");//同上
     lua_pushnumber(L,77);
     lua_settable(L,-3);

     return 1;//堆栈里现在就一个table.其他都被弹掉了。&lt;/PRE&gt;
&lt;P&gt;如果要返回一个数组，用如下代码：(注意那个关于trick的注释，我在等官方的解释。经过验证，这个问题只在windows版本调用dll中方法的时候出现。WinCE正常)&lt;/P&gt;&lt;PRE class=programlisting&gt;     lua_pushstring(L,"arri");
     lua_newtable(L);
     {
        //a trick:otherwise the lua engine will crash. This element is invisible in Lua script
        lua_pushnumber(L,-1);
        lua_rawseti(L,-2,0);
        for(int i = 0; i &amp;lt; arri.size();i++)
        {
            lua_pushnumber(L,arri[i]);
            lua_rawseti(L,-2,i+1);
        }
     }
     lua_settable(L,-3);&lt;/PRE&gt;
&lt;P&gt;这样产生的数组可以在Lua中如下遍历：&lt;/P&gt;&lt;PRE class=programlisting&gt;     for i,v in ipairs(data.arri) do
        print(v)
     end&lt;/PRE&gt;
&lt;P&gt;或者是&lt;/P&gt;&lt;PRE class=programlisting&gt;     for i=1,table.getn(data.arri) do
        print(data.arri[i])
     end&lt;/PRE&gt;
&lt;P&gt;只有数组才能这样，name,value构成的Record不行，table.getn也只对数组有效。&lt;/P&gt;
&lt;LI&gt;
&lt;P&gt;由于上述代码的高度相似性，所以很容易实现自动生成这些代码。比如，根据C的一个struct定义：&lt;/P&gt;&lt;PRE class=programlisting&gt;typedef enum 
{
    BR_9600,
    BR_4800,
} BaudRate;

typedef struct flag
{
    int onoff;
    int j;
    long l;
    double d;
    char* name;
    BaudRate rate;
}flag;

&lt;/PRE&gt;
&lt;P&gt;可以自动产生如下代码：&lt;/P&gt;&lt;PRE class=programlisting&gt;bool DataToLua(flag data,lua_State *L)
{
    lua_newtable(L);
    lua_pushstring(L,"onoff");
    lua_pushnumber(L,(double)data.onoff);
    lua_settable(L,-3);
    lua_pushstring(L,"j");
    lua_pushnumber(L,(double)data.j);
    lua_settable(L,-3);
    lua_pushstring(L,"l");
    lua_pushnumber(L,(double)data.l);
    lua_settable(L,-3);
    lua_pushstring(L,"d");
    lua_pushnumber(L,(double)data.d);
    lua_settable(L,-3);
    lua_pushstring(L,"name");
    lua_pushstring(L,data.name.c_str());
    lua_settable(L,-3);
    lua_pushstring(L,"rate");
    lua_pushnumber(L,(double)(int)data.rate);
    lua_settable(L,-3);
    return true;
}&lt;/PRE&gt;
&lt;P&gt;LuaToData也是类似的。&lt;/P&gt;
&lt;P&gt;如果使用面向对象的方式封装起flag来，把DataToLua变成flag类的一个方法，就更加方便了。&lt;/P&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV class=section lang=en&gt;
&lt;DIV class=titlepage&gt;
&lt;DIV&gt;
&lt;DIV&gt;
&lt;H2 class=title style="CLEAR: both"&gt;&lt;A name=d0e125&gt;&lt;/A&gt;3.&amp;nbsp;C和Lua脚本互相调用举例&lt;/H2&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;首先是C的主程序初始化Lua脚本引擎，并注册一些函数供脚本中调用：&lt;/P&gt;&lt;PRE class=programlisting&gt;//function for Lua to call
//return a integer array to the script
static int l_getarr (lua_State *L) 
{
    lua_newtable(L);//create table
    lua_pushnumber(L,1);//push the value
    lua_rawseti(L,-2,1);//set t[1]=v
    lua_pushnumber(L,2);    
    lua_rawseti(L,-2,2);
    lua_pushnumber(L,3);    
    lua_rawseti(L,-2,3);
    lua_pushnumber(L,4);    
    lua_rawseti(L,-2,4);   
    return 1;
}

int main()
{
    lua_State *L = lua_open();   /* opens Lua */
    luaopen_base(L);             /* opens the basic library */
    luaopen_table(L);            /* opens the table library */
    
    luaopen_string(L);           /* opens the string lib. */
    luaopen_math(L);             /* opens the math lib. */
    
    lua_pushcfunction(L, l_getarr); // Register a function
    lua_setglobal(L, "getarr");

    if (lua_dofile(L, "testlua.lua"))//Load the script file and Run it
    {
        printf("run script failed\n");
    }
    else
    {
        lua_getglobal(L, "result"); //Get the global variant in Lua script
        if(lua_isnumber(L,-1))
        {
            printf("The result of the Lua script is %d\n",lua_tonumber(L,-1));
        }
    }
       
    lua_close(L);
     
    return 0;

}&lt;/PRE&gt;
&lt;P&gt;脚本的代码如下：&lt;/P&gt;&lt;PRE class=programlisting&gt;array = getarr()
if array ~= nil then
    result = 1
    for i=1,table.getn(array),1 do
        print(array[i])
    end
else
    result = 0
end
&lt;/PRE&gt;&lt;/DIV&gt;
&lt;DIV class=section lang=en&gt;
&lt;DIV class=titlepage&gt;
&lt;DIV&gt;
&lt;DIV&gt;
&lt;H2 class=title style="CLEAR: both"&gt;&lt;A name=d0e136&gt;&lt;/A&gt;4.&amp;nbsp;参考资料&lt;/H2&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV class=orderedlist&gt;
&lt;OL type=1&gt;
&lt;LI&gt;
&lt;P&gt;&lt;A href="http://www.lua.org/" target=_top&gt;http://www.lua.org&lt;/A&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;img src ="http://blog.vckbase.com/jzhang/aggbug/21972.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>jzhang</dc:creator><title>Lua脚本调用C函数小结</title><link>http://blog.vckbase.com/jzhang/archive/2006/08/14/21869.html</link><pubDate>Mon, 14 Aug 2006 08:20:00 GMT</pubDate><guid>http://blog.vckbase.com/jzhang/archive/2006/08/14/21869.html</guid><wfw:comment>http://blog.vckbase.com/jzhang/comments/21869.html</wfw:comment><comments>http://blog.vckbase.com/jzhang/archive/2006/08/14/21869.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blog.vckbase.com/jzhang/comments/commentRss/21869.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/jzhang/services/trackbacks/21869.html</trackback:ping><description>仔细的学习了一下，发现功能的确非常强大。用脚本调用C的函数，都希望有如下特性：&lt;BR&gt;1. 多输出&lt;BR&gt;Lua 本身就支持函数返回多个值，语法如下：&lt;BR&gt;x,y = testext.Test()&lt;BR&gt;&lt;BR&gt;2. 可以使用类似C的结构的形式输入输出&lt;BR&gt;Lua 的Table可以在形式上很好的模仿C的结构，&lt;BR&gt;a = {}&lt;BR&gt;a.i = 101&lt;BR&gt;a.name = "&lt;a title="我的主页" href="http://jason.rocklv.net" target="_blank"&gt;jason&lt;/a&gt;"&lt;BR&gt;a.subtable = {}&lt;BR&gt;a.subtable.i = 99&lt;BR&gt;相当于&lt;BR&gt;struct A&lt;BR&gt;{&lt;BR&gt;&amp;nbsp; int i;&lt;BR&gt;&amp;nbsp; string name;&lt;BR&gt;&amp;nbsp; struct subtable&lt;BR&gt;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int i;&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;}&lt;BR&gt;这个能力一般的脚本是不具备的。我们的应用中，很多参数都是用结构组织的，&lt;BR&gt;以前使用TCL，就只能让用户平铺的输入。现在好多了.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;输出也可以，在C的函数中可以返回一个table给Lua脚本。TCL也可以返回一个Array.&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;不过给Lua写C函数太痛苦了，全部是基于堆栈的，而且非常的不直观，看来还需要&lt;BR&gt;研究一下如何封装。网上有不少基于模版的封装，得好好看看。&lt;BR&gt;&lt;BR&gt;测试代码如下：&lt;BR&gt;Lua&lt;BR&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"&gt;
&lt;DIV&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;SPAN style="COLOR: #000000"&gt;local&amp;nbsp;testlib&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;package.loadlib(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;testext.dll&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;luaopen_testext&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;)&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(testlib)then&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;testlib()&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;else&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;--&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Error&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;end&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG id=Codehighlighter1_116_117_Open_Image onclick="this.style.display='none'; Codehighlighter1_116_117_Open_Text.style.display='none'; Codehighlighter1_116_117_Closed_Image.style.display='inline'; Codehighlighter1_116_117_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_116_117_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_116_117_Closed_Text.style.display='none'; Codehighlighter1_116_117_Open_Image.style.display='inline'; Codehighlighter1_116_117_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;a&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_116_117_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_116_117_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;a.i&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;101&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;a.name&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;a title="我的主页" href="http://jason.rocklv.net" target="_blank"&gt;jason&lt;/a&gt;&amp;nbsp;hah&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG id=Codehighlighter1_163_164_Open_Image onclick="this.style.display='none'; Codehighlighter1_163_164_Open_Text.style.display='none'; Codehighlighter1_163_164_Closed_Image.style.display='inline'; Codehighlighter1_163_164_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_163_164_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_163_164_Closed_Text.style.display='none'; Codehighlighter1_163_164_Open_Image.style.display='inline'; Codehighlighter1_163_164_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;a.subtable&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_163_164_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_163_164_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;a.subtable.i&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;99&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;r&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;testext.Complex(a)&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;print(r.mydata)&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR&gt;C&lt;BR&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"&gt;
&lt;DIV&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;SPAN style="COLOR: #0000ff"&gt;static&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Complex(lua_State&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;L)&lt;BR&gt;&lt;IMG id=Codehighlighter1_33_1055_Open_Image onclick="this.style.display='none'; Codehighlighter1_33_1055_Open_Text.style.display='none'; Codehighlighter1_33_1055_Closed_Image.style.display='inline'; Codehighlighter1_33_1055_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_33_1055_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_33_1055_Closed_Text.style.display='none'; Codehighlighter1_33_1055_Open_Image.style.display='inline'; Codehighlighter1_33_1055_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_33_1055_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_33_1055_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;1.&amp;nbsp;get&amp;nbsp;the&amp;nbsp;table&amp;nbsp;from&amp;nbsp;Lua&amp;nbsp;Script&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;i&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;lua_gettop(L);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(&amp;nbsp;i&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;!=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;)&lt;BR&gt;&lt;IMG id=Codehighlighter1_109_167_Open_Image onclick="this.style.display='none'; Codehighlighter1_109_167_Open_Text.style.display='none'; Codehighlighter1_109_167_Closed_Image.style.display='inline'; Codehighlighter1_109_167_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_109_167_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_109_167_Closed_Text.style.display='none'; Codehighlighter1_109_167_Open_Image.style.display='inline'; Codehighlighter1_109_167_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_109_167_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_109_167_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lua_pushstring(L,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;Complex(table)&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;)&amp;nbsp;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;(lua_istable(L,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;))&lt;BR&gt;&lt;IMG id=Codehighlighter1_195_827_Open_Image onclick="this.style.display='none'; Codehighlighter1_195_827_Open_Text.style.display='none'; Codehighlighter1_195_827_Closed_Image.style.display='inline'; Codehighlighter1_195_827_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_195_827_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_195_827_Closed_Text.style.display='none'; Codehighlighter1_195_827_Open_Image.style.display='inline'; Codehighlighter1_195_827_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_195_827_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_195_827_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lua_pushstring(L,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;i&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lua_gettable(L,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;2&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(lua_isnumber(L,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;))&lt;BR&gt;&lt;IMG id=Codehighlighter1_271_342_Open_Image onclick="this.style.display='none'; Codehighlighter1_271_342_Open_Text.style.display='none'; Codehighlighter1_271_342_Closed_Image.style.display='inline'; Codehighlighter1_271_342_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_271_342_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_271_342_Closed_Text.style.display='none'; Codehighlighter1_271_342_Open_Image.style.display='inline'; Codehighlighter1_271_342_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_271_342_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_271_342_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;j&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;lua_tonumber(L,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;The&amp;nbsp;table.j&amp;nbsp;=&amp;nbsp;%d &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,j);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lua_remove(L,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lua_pushstring(L,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;name&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lua_gettable(L,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;2&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(lua_isstring(L,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;))&lt;BR&gt;&lt;IMG id=Codehighlighter1_454_536_Open_Image onclick="this.style.display='none'; Codehighlighter1_454_536_Open_Text.style.display='none'; Codehighlighter1_454_536_Closed_Image.style.display='inline'; Codehighlighter1_454_536_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_454_536_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_454_536_Closed_Text.style.display='none'; Codehighlighter1_454_536_Open_Image.style.display='inline'; Codehighlighter1_454_536_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_454_536_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_454_536_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;char&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;name&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;lua_tostring(L,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;The&amp;nbsp;table.name&amp;nbsp;=&amp;nbsp;%s &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,name);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lua_remove(L,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lua_pushstring(L,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;subtable&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lua_gettable(L,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;2&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(lua_istable(L,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;))&lt;BR&gt;&lt;IMG id=Codehighlighter1_645_824_Open_Image onclick="this.style.display='none'; Codehighlighter1_645_824_Open_Text.style.display='none'; Codehighlighter1_645_824_Closed_Image.style.display='inline'; Codehighlighter1_645_824_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_645_824_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_645_824_Closed_Text.style.display='none'; Codehighlighter1_645_824_Open_Image.style.display='inline'; Codehighlighter1_645_824_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_645_824_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_645_824_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lua_pushstring(L,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;i&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lua_gettable(L,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;2&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(lua_isnumber(L,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;))&lt;BR&gt;&lt;IMG id=Codehighlighter1_737_820_Open_Image onclick="this.style.display='none'; Codehighlighter1_737_820_Open_Text.style.display='none'; Codehighlighter1_737_820_Closed_Image.style.display='inline'; Codehighlighter1_737_820_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_737_820_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_737_820_Closed_Text.style.display='none'; Codehighlighter1_737_820_Open_Image.style.display='inline'; Codehighlighter1_737_820_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_737_820_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_737_820_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;j&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;lua_tonumber(L,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;The&amp;nbsp;table.j&amp;nbsp;=&amp;nbsp;%d &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,j);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;else&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG id=Codehighlighter1_836_892_Open_Image onclick="this.style.display='none'; Codehighlighter1_836_892_Open_Text.style.display='none'; Codehighlighter1_836_892_Closed_Image.style.display='inline'; Codehighlighter1_836_892_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_836_892_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_836_892_Closed_Text.style.display='none'; Codehighlighter1_836_892_Open_Image.style.display='inline'; Codehighlighter1_836_892_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_836_892_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_836_892_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lua_pushstring(L,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;Complex(table)&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;)&amp;nbsp;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;2.&amp;nbsp;Return&amp;nbsp;Another&amp;nbsp;table&amp;nbsp;to&amp;nbsp;Lua&amp;nbsp;Script&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lua_newtable(L);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lua_pushstring(L,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;mydata&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lua_pushnumber(L,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;66&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lua_settable(L,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;3&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;C 代码真是超级恐怖。&lt;BR&gt;&lt;img src ="http://blog.vckbase.com/jzhang/aggbug/21869.html" width = "1" height = "1" /&gt;</description></item></channel></rss>