xref: /freebsd/contrib/lua/doc/readme.html (revision 8e3e3a7ae841ccf6f6ac30a2eeab85df5d7f04bc)
1*8e3e3a7aSWarner Losh<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2*8e3e3a7aSWarner Losh<HTML>
3*8e3e3a7aSWarner Losh<HEAD>
4*8e3e3a7aSWarner Losh<TITLE>Lua 5.3 readme</TITLE>
5*8e3e3a7aSWarner Losh<LINK REL="stylesheet" TYPE="text/css" HREF="lua.css">
6*8e3e3a7aSWarner Losh<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=iso-8859-1">
7*8e3e3a7aSWarner Losh<STYLE TYPE="text/css">
8*8e3e3a7aSWarner Loshblockquote, .display {
9*8e3e3a7aSWarner Losh	border: solid #a0a0a0 2px ;
10*8e3e3a7aSWarner Losh	border-radius: 8px ;
11*8e3e3a7aSWarner Losh	padding: 1em ;
12*8e3e3a7aSWarner Losh	margin: 0px ;
13*8e3e3a7aSWarner Losh}
14*8e3e3a7aSWarner Losh
15*8e3e3a7aSWarner Losh.display {
16*8e3e3a7aSWarner Losh	word-spacing: 0.25em ;
17*8e3e3a7aSWarner Losh}
18*8e3e3a7aSWarner Losh
19*8e3e3a7aSWarner Loshdl.display dd {
20*8e3e3a7aSWarner Losh	padding-bottom: 0.2em ;
21*8e3e3a7aSWarner Losh}
22*8e3e3a7aSWarner Losh
23*8e3e3a7aSWarner Loshtt, kbd, code {
24*8e3e3a7aSWarner Losh	font-size: 12pt ;
25*8e3e3a7aSWarner Losh}
26*8e3e3a7aSWarner Losh</STYLE>
27*8e3e3a7aSWarner Losh</HEAD>
28*8e3e3a7aSWarner Losh
29*8e3e3a7aSWarner Losh<BODY>
30*8e3e3a7aSWarner Losh
31*8e3e3a7aSWarner Losh<H1>
32*8e3e3a7aSWarner Losh<A HREF="http://www.lua.org/"><IMG SRC="logo.gif" ALT="Lua"></A>
33*8e3e3a7aSWarner LoshWelcome to Lua 5.3
34*8e3e3a7aSWarner Losh</H1>
35*8e3e3a7aSWarner Losh
36*8e3e3a7aSWarner Losh<DIV CLASS="menubar">
37*8e3e3a7aSWarner Losh<A HREF="#about">about</A>
38*8e3e3a7aSWarner Losh&middot;
39*8e3e3a7aSWarner Losh<A HREF="#install">installation</A>
40*8e3e3a7aSWarner Losh&middot;
41*8e3e3a7aSWarner Losh<A HREF="#changes">changes</A>
42*8e3e3a7aSWarner Losh&middot;
43*8e3e3a7aSWarner Losh<A HREF="#license">license</A>
44*8e3e3a7aSWarner Losh&middot;
45*8e3e3a7aSWarner Losh<A HREF="contents.html">reference manual</A>
46*8e3e3a7aSWarner Losh</DIV>
47*8e3e3a7aSWarner Losh
48*8e3e3a7aSWarner Losh<H2><A NAME="about">About Lua</A></H2>
49*8e3e3a7aSWarner Losh<P>
50*8e3e3a7aSWarner LoshLua is a powerful, fast, lightweight, embeddable scripting language
51*8e3e3a7aSWarner Loshdeveloped by a
52*8e3e3a7aSWarner Losh<A HREF="http://www.lua.org/authors.html">team</A>
53*8e3e3a7aSWarner Loshat
54*8e3e3a7aSWarner Losh<A HREF="http://www.puc-rio.br/">PUC-Rio</A>,
55*8e3e3a7aSWarner Loshthe Pontifical Catholic University of Rio de Janeiro in Brazil.
56*8e3e3a7aSWarner LoshLua is
57*8e3e3a7aSWarner Losh<A HREF="#license">free software</A>
58*8e3e3a7aSWarner Loshused in many products and projects around the world.
59*8e3e3a7aSWarner Losh
60*8e3e3a7aSWarner Losh<P>
61*8e3e3a7aSWarner LoshLua's
62*8e3e3a7aSWarner Losh<A HREF="http://www.lua.org/">official web site</A>
63*8e3e3a7aSWarner Loshprovides complete information
64*8e3e3a7aSWarner Loshabout Lua,
65*8e3e3a7aSWarner Loshincluding
66*8e3e3a7aSWarner Loshan
67*8e3e3a7aSWarner Losh<A HREF="http://www.lua.org/about.html">executive summary</A>
68*8e3e3a7aSWarner Loshand
69*8e3e3a7aSWarner Loshupdated
70*8e3e3a7aSWarner Losh<A HREF="http://www.lua.org/docs.html">documentation</A>,
71*8e3e3a7aSWarner Loshespecially the
72*8e3e3a7aSWarner Losh<A HREF="http://www.lua.org/manual/5.3/">reference manual</A>,
73*8e3e3a7aSWarner Loshwhich may differ slightly from the
74*8e3e3a7aSWarner Losh<A HREF="contents.html">local copy</A>
75*8e3e3a7aSWarner Loshdistributed in this package.
76*8e3e3a7aSWarner Losh
77*8e3e3a7aSWarner Losh<H2><A NAME="install">Installing Lua</A></H2>
78*8e3e3a7aSWarner Losh<P>
79*8e3e3a7aSWarner LoshLua is distributed in
80*8e3e3a7aSWarner Losh<A HREF="http://www.lua.org/ftp/">source</A>
81*8e3e3a7aSWarner Loshform.
82*8e3e3a7aSWarner LoshYou need to build it before using it.
83*8e3e3a7aSWarner LoshBuilding Lua should be straightforward
84*8e3e3a7aSWarner Loshbecause
85*8e3e3a7aSWarner LoshLua is implemented in pure ANSI C and compiles unmodified in all known
86*8e3e3a7aSWarner Loshplatforms that have an ANSI C compiler.
87*8e3e3a7aSWarner LoshLua also compiles unmodified as C++.
88*8e3e3a7aSWarner LoshThe instructions given below for building Lua are for Unix-like platforms.
89*8e3e3a7aSWarner LoshSee also
90*8e3e3a7aSWarner Losh<A HREF="#other">instructions for other systems</A>
91*8e3e3a7aSWarner Loshand
92*8e3e3a7aSWarner Losh<A HREF="#customization">customization options</A>.
93*8e3e3a7aSWarner Losh
94*8e3e3a7aSWarner Losh<P>
95*8e3e3a7aSWarner LoshIf you don't have the time or the inclination to compile Lua yourself,
96*8e3e3a7aSWarner Loshget a binary from
97*8e3e3a7aSWarner Losh<A HREF="http://lua-users.org/wiki/LuaBinaries">LuaBinaries</A>.
98*8e3e3a7aSWarner LoshTry also
99*8e3e3a7aSWarner Losh<A HREF="http://luadist.org/">LuaDist</A>,
100*8e3e3a7aSWarner Losha multi-platform distribution of Lua that includes batteries.
101*8e3e3a7aSWarner Losh
102*8e3e3a7aSWarner Losh<H3>Building Lua</H3>
103*8e3e3a7aSWarner Losh<P>
104*8e3e3a7aSWarner LoshIn most Unix-like platforms, simply do "<KBD>make</KBD>" with a suitable target.
105*8e3e3a7aSWarner LoshHere are the details.
106*8e3e3a7aSWarner Losh
107*8e3e3a7aSWarner Losh<OL>
108*8e3e3a7aSWarner Losh<LI>
109*8e3e3a7aSWarner LoshOpen a terminal window and move to
110*8e3e3a7aSWarner Loshthe top-level directory, which is named <TT>lua-5.3.x</TT>.
111*8e3e3a7aSWarner LoshThe <TT>Makefile</TT> there controls both the build process and the installation process.
112*8e3e3a7aSWarner Losh<P>
113*8e3e3a7aSWarner Losh<LI>
114*8e3e3a7aSWarner Losh  Do "<KBD>make</KBD>" and see if your platform is listed.
115*8e3e3a7aSWarner Losh  The platforms currently supported are:
116*8e3e3a7aSWarner Losh<P>
117*8e3e3a7aSWarner Losh<P CLASS="display">
118*8e3e3a7aSWarner Losh   aix bsd c89 freebsd generic linux macosx mingw posix solaris
119*8e3e3a7aSWarner Losh</P>
120*8e3e3a7aSWarner Losh<P>
121*8e3e3a7aSWarner Losh  If your platform is listed, just do "<KBD>make xxx</KBD>", where xxx
122*8e3e3a7aSWarner Losh  is your platform name.
123*8e3e3a7aSWarner Losh<P>
124*8e3e3a7aSWarner Losh  If your platform is not listed, try the closest one or posix, generic,
125*8e3e3a7aSWarner Losh  c89, in this order.
126*8e3e3a7aSWarner Losh<P>
127*8e3e3a7aSWarner Losh<LI>
128*8e3e3a7aSWarner LoshThe compilation takes only a few moments
129*8e3e3a7aSWarner Loshand produces three files in the <TT>src</TT> directory:
130*8e3e3a7aSWarner Loshlua (the interpreter),
131*8e3e3a7aSWarner Loshluac (the compiler),
132*8e3e3a7aSWarner Loshand liblua.a (the library).
133*8e3e3a7aSWarner Losh<P>
134*8e3e3a7aSWarner Losh<LI>
135*8e3e3a7aSWarner Losh  To check that Lua has been built correctly, do "<KBD>make test</KBD>"
136*8e3e3a7aSWarner Losh  after building Lua. This will run the interpreter and print its version.
137*8e3e3a7aSWarner Losh</OL>
138*8e3e3a7aSWarner Losh<P>
139*8e3e3a7aSWarner LoshIf you're running Linux and get compilation errors,
140*8e3e3a7aSWarner Loshmake sure you have installed the <TT>readline</TT> development package
141*8e3e3a7aSWarner Losh(which is probably named <TT>libreadline-dev</TT> or <TT>readline-devel</TT>).
142*8e3e3a7aSWarner LoshIf you get link errors after that,
143*8e3e3a7aSWarner Loshthen try "<KBD>make linux MYLIBS=-ltermcap</KBD>".
144*8e3e3a7aSWarner Losh
145*8e3e3a7aSWarner Losh<H3>Installing Lua</H3>
146*8e3e3a7aSWarner Losh<P>
147*8e3e3a7aSWarner Losh  Once you have built Lua, you may want to install it in an official
148*8e3e3a7aSWarner Losh  place in your system. In this case, do "<KBD>make install</KBD>". The official
149*8e3e3a7aSWarner Losh  place and the way to install files are defined in the <TT>Makefile</TT>. You'll
150*8e3e3a7aSWarner Losh  probably need the right permissions to install files.
151*8e3e3a7aSWarner Losh
152*8e3e3a7aSWarner Losh<P>
153*8e3e3a7aSWarner Losh  To build and install Lua in one step, do "<KBD>make xxx install</KBD>",
154*8e3e3a7aSWarner Losh  where xxx is your platform name.
155*8e3e3a7aSWarner Losh
156*8e3e3a7aSWarner Losh<P>
157*8e3e3a7aSWarner Losh  To install Lua locally, do "<KBD>make local</KBD>".
158*8e3e3a7aSWarner Losh  This will create a directory <TT>install</TT> with subdirectories
159*8e3e3a7aSWarner Losh  <TT>bin</TT>, <TT>include</TT>, <TT>lib</TT>, <TT>man</TT>, <TT>share</TT>,
160*8e3e3a7aSWarner Losh  and install Lua as listed below.
161*8e3e3a7aSWarner Losh
162*8e3e3a7aSWarner Losh  To install Lua locally, but in some other directory, do
163*8e3e3a7aSWarner Losh  "<KBD>make install INSTALL_TOP=xxx</KBD>", where xxx is your chosen directory.
164*8e3e3a7aSWarner Losh  The installation starts in the <TT>src</TT> and <TT>doc</TT> directories,
165*8e3e3a7aSWarner Losh  so take care if <TT>INSTALL_TOP</TT> is not an absolute path.
166*8e3e3a7aSWarner Losh
167*8e3e3a7aSWarner Losh<DL CLASS="display">
168*8e3e3a7aSWarner Losh<DT>
169*8e3e3a7aSWarner Losh    bin:
170*8e3e3a7aSWarner Losh<DD>
171*8e3e3a7aSWarner Losh    lua luac
172*8e3e3a7aSWarner Losh<DT>
173*8e3e3a7aSWarner Losh    include:
174*8e3e3a7aSWarner Losh<DD>
175*8e3e3a7aSWarner Losh    lua.h luaconf.h lualib.h lauxlib.h lua.hpp
176*8e3e3a7aSWarner Losh<DT>
177*8e3e3a7aSWarner Losh    lib:
178*8e3e3a7aSWarner Losh<DD>
179*8e3e3a7aSWarner Losh    liblua.a
180*8e3e3a7aSWarner Losh<DT>
181*8e3e3a7aSWarner Losh    man/man1:
182*8e3e3a7aSWarner Losh<DD>
183*8e3e3a7aSWarner Losh    lua.1 luac.1
184*8e3e3a7aSWarner Losh</DL>
185*8e3e3a7aSWarner Losh
186*8e3e3a7aSWarner Losh<P>
187*8e3e3a7aSWarner Losh  These are the only directories you need for development.
188*8e3e3a7aSWarner Losh  If you only want to run Lua programs,
189*8e3e3a7aSWarner Losh  you only need the files in <TT>bin</TT> and <TT>man</TT>.
190*8e3e3a7aSWarner Losh  The files in <TT>include</TT> and <TT>lib</TT> are needed for
191*8e3e3a7aSWarner Losh  embedding Lua in C or C++ programs.
192*8e3e3a7aSWarner Losh
193*8e3e3a7aSWarner Losh<H3><A NAME="customization">Customization</A></H3>
194*8e3e3a7aSWarner Losh<P>
195*8e3e3a7aSWarner Losh  Three kinds of things can be customized by editing a file:
196*8e3e3a7aSWarner Losh<UL>
197*8e3e3a7aSWarner Losh    <LI> Where and how to install Lua &mdash; edit <TT>Makefile</TT>.
198*8e3e3a7aSWarner Losh    <LI> How to build Lua &mdash; edit <TT>src/Makefile</TT>.
199*8e3e3a7aSWarner Losh    <LI> Lua features &mdash; edit <TT>src/luaconf.h</TT>.
200*8e3e3a7aSWarner Losh</UL>
201*8e3e3a7aSWarner Losh
202*8e3e3a7aSWarner Losh<P>
203*8e3e3a7aSWarner Losh  You don't actually need to edit the Makefiles because you may set the
204*8e3e3a7aSWarner Losh  relevant variables in the command line when invoking make.
205*8e3e3a7aSWarner Losh  Nevertheless, it's probably best to edit and save the Makefiles to
206*8e3e3a7aSWarner Losh  record the changes you've made.
207*8e3e3a7aSWarner Losh
208*8e3e3a7aSWarner Losh<P>
209*8e3e3a7aSWarner Losh  On the other hand, if you need to customize some Lua features, you'll need
210*8e3e3a7aSWarner Losh  to edit <TT>src/luaconf.h</TT> before building and installing Lua.
211*8e3e3a7aSWarner Losh  The edited file will be the one installed, and
212*8e3e3a7aSWarner Losh  it will be used by any Lua clients that you build, to ensure consistency.
213*8e3e3a7aSWarner Losh  Further customization is available to experts by editing the Lua sources.
214*8e3e3a7aSWarner Losh
215*8e3e3a7aSWarner Losh<H3><A NAME="other">Building Lua on other systems</A></H3>
216*8e3e3a7aSWarner Losh<P>
217*8e3e3a7aSWarner Losh  If you're not using the usual Unix tools, then the instructions for
218*8e3e3a7aSWarner Losh  building Lua depend on the compiler you use. You'll need to create
219*8e3e3a7aSWarner Losh  projects (or whatever your compiler uses) for building the library,
220*8e3e3a7aSWarner Losh  the interpreter, and the compiler, as follows:
221*8e3e3a7aSWarner Losh
222*8e3e3a7aSWarner Losh<DL CLASS="display">
223*8e3e3a7aSWarner Losh<DT>
224*8e3e3a7aSWarner Loshlibrary:
225*8e3e3a7aSWarner Losh<DD>
226*8e3e3a7aSWarner Loshlapi.c lcode.c lctype.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c
227*8e3e3a7aSWarner Loshlmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c
228*8e3e3a7aSWarner Loshltm.c lundump.c lvm.c lzio.c
229*8e3e3a7aSWarner Loshlauxlib.c lbaselib.c lbitlib.c lcorolib.c ldblib.c liolib.c
230*8e3e3a7aSWarner Loshlmathlib.c loslib.c lstrlib.c ltablib.c lutf8lib.c loadlib.c linit.c
231*8e3e3a7aSWarner Losh<DT>
232*8e3e3a7aSWarner Loshinterpreter:
233*8e3e3a7aSWarner Losh<DD>
234*8e3e3a7aSWarner Losh  library, lua.c
235*8e3e3a7aSWarner Losh<DT>
236*8e3e3a7aSWarner Loshcompiler:
237*8e3e3a7aSWarner Losh<DD>
238*8e3e3a7aSWarner Losh  library, luac.c
239*8e3e3a7aSWarner Losh</DL>
240*8e3e3a7aSWarner Losh
241*8e3e3a7aSWarner Losh<P>
242*8e3e3a7aSWarner Losh  To use Lua as a library in your own programs you'll need to know how to
243*8e3e3a7aSWarner Losh  create and use libraries with your compiler. Moreover, to dynamically load
244*8e3e3a7aSWarner Losh  C libraries for Lua you'll need to know how to create dynamic libraries
245*8e3e3a7aSWarner Losh  and you'll need to make sure that the Lua API functions are accessible to
246*8e3e3a7aSWarner Losh  those dynamic libraries &mdash; but <EM>don't</EM> link the Lua library
247*8e3e3a7aSWarner Losh  into each dynamic library. For Unix, we recommend that the Lua library
248*8e3e3a7aSWarner Losh  be linked statically into the host program and its symbols exported for
249*8e3e3a7aSWarner Losh  dynamic linking; <TT>src/Makefile</TT> does this for the Lua interpreter.
250*8e3e3a7aSWarner Losh  For Windows, we recommend that the Lua library be a DLL.
251*8e3e3a7aSWarner Losh  In all cases, the compiler luac should be linked statically.
252*8e3e3a7aSWarner Losh
253*8e3e3a7aSWarner Losh<P>
254*8e3e3a7aSWarner Losh  As mentioned above, you may edit <TT>src/luaconf.h</TT> to customize
255*8e3e3a7aSWarner Losh  some features before building Lua.
256*8e3e3a7aSWarner Losh
257*8e3e3a7aSWarner Losh<H2><A NAME="changes">Changes since Lua 5.2</A></H2>
258*8e3e3a7aSWarner Losh<P>
259*8e3e3a7aSWarner LoshHere are the main changes introduced in Lua 5.3.
260*8e3e3a7aSWarner LoshThe
261*8e3e3a7aSWarner Losh<A HREF="contents.html">reference manual</A>
262*8e3e3a7aSWarner Loshlists the
263*8e3e3a7aSWarner Losh<A HREF="manual.html#8">incompatibilities</A> that had to be introduced.
264*8e3e3a7aSWarner Losh
265*8e3e3a7aSWarner Losh<H3>Main changes</H3>
266*8e3e3a7aSWarner Losh<UL>
267*8e3e3a7aSWarner Losh<LI> integers (64-bit by default)
268*8e3e3a7aSWarner Losh<LI> official support for 32-bit numbers
269*8e3e3a7aSWarner Losh<LI> bitwise operators
270*8e3e3a7aSWarner Losh<LI> basic utf-8 support
271*8e3e3a7aSWarner Losh<LI> functions for packing and unpacking values
272*8e3e3a7aSWarner Losh
273*8e3e3a7aSWarner Losh</UL>
274*8e3e3a7aSWarner Losh
275*8e3e3a7aSWarner LoshHere are the other changes introduced in Lua 5.3:
276*8e3e3a7aSWarner Losh<H3>Language</H3>
277*8e3e3a7aSWarner Losh<UL>
278*8e3e3a7aSWarner Losh<LI> userdata can have any Lua value as uservalue
279*8e3e3a7aSWarner Losh<LI> floor division
280*8e3e3a7aSWarner Losh<LI> more flexible rules for some metamethods
281*8e3e3a7aSWarner Losh</UL>
282*8e3e3a7aSWarner Losh
283*8e3e3a7aSWarner Losh<H3>Libraries</H3>
284*8e3e3a7aSWarner Losh<UL>
285*8e3e3a7aSWarner Losh<LI> <CODE>ipairs</CODE> and the table library respect metamethods
286*8e3e3a7aSWarner Losh<LI> strip option in <CODE>string.dump</CODE>
287*8e3e3a7aSWarner Losh<LI> table library respects metamethods
288*8e3e3a7aSWarner Losh<LI> new function <CODE>table.move</CODE>
289*8e3e3a7aSWarner Losh<LI> new function <CODE>string.pack</CODE>
290*8e3e3a7aSWarner Losh<LI> new function <CODE>string.unpack</CODE>
291*8e3e3a7aSWarner Losh<LI> new function <CODE>string.packsize</CODE>
292*8e3e3a7aSWarner Losh</UL>
293*8e3e3a7aSWarner Losh
294*8e3e3a7aSWarner Losh<H3>C API</H3>
295*8e3e3a7aSWarner Losh<UL>
296*8e3e3a7aSWarner Losh<LI> simpler API for continuation functions in C
297*8e3e3a7aSWarner Losh<LI> <CODE>lua_gettable</CODE> and similar functions return type of resulted value
298*8e3e3a7aSWarner Losh<LI> strip option in <CODE>lua_dump</CODE>
299*8e3e3a7aSWarner Losh<LI> new function: <CODE>lua_geti</CODE>
300*8e3e3a7aSWarner Losh<LI> new function: <CODE>lua_seti</CODE>
301*8e3e3a7aSWarner Losh<LI> new function: <CODE>lua_isyieldable</CODE>
302*8e3e3a7aSWarner Losh<LI> new function: <CODE>lua_numbertointeger</CODE>
303*8e3e3a7aSWarner Losh<LI> new function: <CODE>lua_rotate</CODE>
304*8e3e3a7aSWarner Losh<LI> new function: <CODE>lua_stringtonumber</CODE>
305*8e3e3a7aSWarner Losh</UL>
306*8e3e3a7aSWarner Losh
307*8e3e3a7aSWarner Losh<H3>Lua standalone interpreter</H3>
308*8e3e3a7aSWarner Losh<UL>
309*8e3e3a7aSWarner Losh<LI> can be used as calculator; no need to prefix with '='
310*8e3e3a7aSWarner Losh<LI> <CODE>arg</CODE> table available to all code
311*8e3e3a7aSWarner Losh</UL>
312*8e3e3a7aSWarner Losh
313*8e3e3a7aSWarner Losh<H2><A NAME="license">License</A></H2>
314*8e3e3a7aSWarner Losh<P>
315*8e3e3a7aSWarner Losh<A HREF="http://www.opensource.org/docs/definition.php">
316*8e3e3a7aSWarner Losh<IMG SRC="osi-certified-72x60.png" ALIGN="right" ALT="[osi certified]" STYLE="padding-left: 30px ;">
317*8e3e3a7aSWarner Losh</A>
318*8e3e3a7aSWarner LoshLua is free software distributed under the terms of the
319*8e3e3a7aSWarner Losh<A HREF="http://www.opensource.org/licenses/mit-license.html">MIT license</A>
320*8e3e3a7aSWarner Loshreproduced below;
321*8e3e3a7aSWarner Loshit may be used for any purpose, including commercial purposes,
322*8e3e3a7aSWarner Loshat absolutely no cost without having to ask us.
323*8e3e3a7aSWarner Losh
324*8e3e3a7aSWarner LoshThe only requirement is that if you do use Lua,
325*8e3e3a7aSWarner Loshthen you should give us credit by including the appropriate copyright notice somewhere in your product or its documentation.
326*8e3e3a7aSWarner Losh
327*8e3e3a7aSWarner LoshFor details, see
328*8e3e3a7aSWarner Losh<A HREF="http://www.lua.org/license.html">this</A>.
329*8e3e3a7aSWarner Losh
330*8e3e3a7aSWarner Losh<BLOCKQUOTE STYLE="padding-bottom: 0em">
331*8e3e3a7aSWarner LoshCopyright &copy; 1994&ndash;2017 Lua.org, PUC-Rio.
332*8e3e3a7aSWarner Losh
333*8e3e3a7aSWarner Losh<P>
334*8e3e3a7aSWarner LoshPermission is hereby granted, free of charge, to any person obtaining a copy
335*8e3e3a7aSWarner Loshof this software and associated documentation files (the "Software"), to deal
336*8e3e3a7aSWarner Loshin the Software without restriction, including without limitation the rights
337*8e3e3a7aSWarner Loshto use, copy, modify, merge, publish, distribute, sublicense, and/or sell
338*8e3e3a7aSWarner Loshcopies of the Software, and to permit persons to whom the Software is
339*8e3e3a7aSWarner Loshfurnished to do so, subject to the following conditions:
340*8e3e3a7aSWarner Losh
341*8e3e3a7aSWarner Losh<P>
342*8e3e3a7aSWarner LoshThe above copyright notice and this permission notice shall be included in
343*8e3e3a7aSWarner Loshall copies or substantial portions of the Software.
344*8e3e3a7aSWarner Losh
345*8e3e3a7aSWarner Losh<P>
346*8e3e3a7aSWarner LoshTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
347*8e3e3a7aSWarner LoshIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
348*8e3e3a7aSWarner LoshFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
349*8e3e3a7aSWarner LoshAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
350*8e3e3a7aSWarner LoshLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
351*8e3e3a7aSWarner LoshOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
352*8e3e3a7aSWarner LoshTHE SOFTWARE.
353*8e3e3a7aSWarner Losh</BLOCKQUOTE>
354*8e3e3a7aSWarner Losh<P>
355*8e3e3a7aSWarner Losh
356*8e3e3a7aSWarner Losh<P CLASS="footer">
357*8e3e3a7aSWarner LoshLast update:
358*8e3e3a7aSWarner LoshThu Dec 22 18:22:57 BRST 2016
359*8e3e3a7aSWarner Losh</P>
360*8e3e3a7aSWarner Losh<!--
361*8e3e3a7aSWarner LoshLast change: revised for Lua 5.3.4
362*8e3e3a7aSWarner Losh-->
363*8e3e3a7aSWarner Losh
364*8e3e3a7aSWarner Losh</BODY>
365*8e3e3a7aSWarner Losh</HTML>
366