User:Thieving6/X-FI 2 Lua
Creative Zen X-FI2 Lua Function List
[edit]Non XFi2 function information found here: http://www.lua.org/manual/5.1/
What's needed
[edit]These functions need more information:
- image.setbg()
String table
[edit]string.byte(string, [i], [j]): byte, byte, ...;
Returns the byte code of the character from the i-th to j-th character of the string. -string.byte("ABCDE",2,3) = 66, 67
string.char(i, [j], [k], [...]): string;
Returns the string representation of a list of numerical byte codes. -string.char(65,66,67) = "ABC"
string.dump(function): string;
Returns a binary representation of the given function. The opposite of loadstring().
string.find(string, pattern, [i], [plain]): string;
Returns the index in the string of the first location of the pattern. Optionally start search at i. Turn on and off regular expression parsing with the plain bool. -string.find("Hello world!","llo") = 3 -string.find("Hello world!","l",7) = 10
string.format(formatstring, var1, [var2], [...]): string;
Fills formatstring with var1, var2, etc. c, d, e, f, g, o, u, X, x %c: character %d: signed integer %e: scientific notation %f: float %g: use shorter of %e or %f %o: signed octal %u: unsigned integer %x: unsigned hexadecimal integer -string.format("It has been %d days.",5) = "It has been 5 days."
string.gfind(string, pattern): function;
Returns an iterator function for "for in" loops.
string.gmatch(string, pattern): function;
Returns a iterator function for "for in" loops. -for word in string.gmatch("Hello World", "%a+") = "Hello", "World"
string.gsub(string, pattern, replace, [n]): string;
Returns a function that replaces all instances of the pattern with the replace limited to n substitutions. -string.gsub("Hello World","l","L",2) = "HeLLo World"
string.len(string): integer;
Returns the length of the string. Returns 0 if the string is empty or null. -string.len("Hello") = 5
string.lower(string): string;
Returns the string with all uppercase characters transformed to lowercase ones. -string.lower("Hello World") = "hello world"
string.match(string, pattern, [init]): string;
Returns extracted substring matching patter from string starting optionally at init. -string.match("Hello 2 the World","%d+ %a+") = "2 the"
string.rep(string, n): string;
Returns a string that has n repetitions of string. -string.rep("Hello World ",2) = "Hello World Hello World "
string.reverse(string): string;
Returns the string in reverse order. -string.reverse("Hello World") = "dlroW olleH"
string.sub(string, i, [j]): string;
Returns a substring of the string passed starting at i and ending at j. If j is not given it will end at the end of the string. -string.sub("Hello World",4) = "lo World" -string.sub("Hello World",4,6) = "lo "
string.upper(string): string;
Returns string with all lowercase characters transformed into uppercase ones. -string.upper("Hello World") = "HELLO WORLD"
Package table
[edit]package.cpath(): string;
The path used by require to search for a C loader.
package.loaded(): table;
A table used by require to control which modules are already loaded. -package.loaded["module.lua"] = nil;
package.loaders(): table;
A table used by require to search for module loaders.
package.loadlib(libname, funcname): function;
Links the library libname and locates the function funcname. It returns the function as a C function.
package.path(): string;
The path used by require to search for a Lua loader.
package.preload(): table;
A table to store loaders for specific modules.
package.seeall(module);
Sets a metatable for module with it's __index field referring to the global environment.
Image table
[edit]image.close();
Closes the image object you created with either load() or create().
image.draw(x, y, [x2], [y2]);
Draws the image on the screen at coordinates (x,y) by (x2,y2). Can stretch image in this fashion. -myimage = image.load("test.bmp"); -myimage:draw(0,0);
image.draw(x,y,[imx],[imy],[imw],[imh]);
x, y = offset of image on screen (where would be left upper corner of full image positioned on screen) imx, imy = screen coordinates of upper left corner of scissor rectangle imw, imh = width and height of scissor rectangle -myimage = image.load("test.bmp"); -myimage:draw(0,0,0,0,32,32);
image.create(width,height,[...]): image;
Creates image object. Its size depends on parameters. -myimage = image.create(100,100); -myimage:draw(10,10);
image.setbg(?): ?;
? -?
image.width(): integer;
Returns the width of the image obj it referrs to. -myimage = image.load("test.bmp"); -myimage:draw(0,0,myimage:width(),myimage:height());
image.height(): integer;
Returns the height of the image obj it refers to. -myimage = image.load("test.bmp"); -myimage:draw(0,0,myimage:width(),myimage:height());
image.setresource(filename);
Sets the resource file for the image library to use in subsequent calls to image.load(). -image.setresource("myres.bin"); -myimage1 = image.load("myres/myimage.png");
image.load(imagename): image;
Opens the image at path imagename and returns the image obj. -myimage = image.load("test.bmp");
image.fill(color);
Fills an image with a color. -myimage = image.create(100,100); -myimage.fill(color.new(255,0,0));
OS table
[edit]os.clock(): integer;
Returns an approximation of the amount in secons of CPU time used by the program.
os.date([format], [time]): string/table;
Returns a string or a table containing date an time formatted to the given string format. -os.date() = "12/21/2012 12:12PM";
os.difftime(time1, time2): integer;
Returns the number of sectons from time1 and time2.
os.exit([exitcode]);
Exits the lua interpreter and returns to the main application. Optionally you can return an exit code for the interpreter.
os.getenv(varname): variant;
Returns the vale of the process enviornment variable varname. Nil if undefined.
os.remove(filename): integer, string;
Deletes the file or directory with the name filename. Directories must be empty to be removed. If the function fails, it returns 0, plus a string describing the error. -os.remove("file.jpg");
os.rename(oldname, newname): integer, string;
Renames file or directory from oldname to newname. If the function fails, it returns 0, plus a string describing the error. -os.rename("myfile2.jpg","myfile1.jpg");
os.setlocale(locale, [category]): string;
Sets the current locale of the program. Category is an optional string describing which category to change: "all", "collate", "ctype", "monetary", "numeric", or "time"; the default category is "all".
os.time([table]): integer;
See os.date().
os.ostime(): number;
Returns seconds that have passed since 01/01/1970 on the Simulator; Returns milliseconds that have passed since os boot on the Zen. -local oldtime = os.ostime(); -os.sleep(100); -local newtime = os.ostime(); -print("Zen running for " .. tostring((newtime - oldtime) / 1000) .. " seconds.");
os.sleep(time);
Halts processing of the interpreter for (time * 10)ms. -os.sleep(100); --Sleeps for 1 second
os.wait(ms);
Same as os.sleep() only in intervals of ms.
Button table
[edit]button.home(): bytebool;
Checks the message queue for the press of the home button. -if (control.read() == 1) and (control.isButton() == 1) and (button.home() == 1) then
button.power(): bytebool;
Checks the message queue for the press of the power button. -if (control.read() == 1) and (control.isButton() == 1) and (button.power() == 1) then
button.up(): bytebool;
Checks to see if the pressed button has been released, removes the message from the queue. -if (control.read() == 1) and (control.isButton() == 1) and (button.power() == 1) and (button.up() == 1) then
button.hold(): bytebool;
Checks to see if the pressed button has been held, removes the message from the queue. -if (control.read() == 1) and (control.isButton() == 1) and (button.power() == 1) and (button.hold() == 1) then
button.event(): integer;
Returns integer representing type of button event. Probably bitwise coded, because returned numbers are power of two. Results: button pressed down = 4 button clicked = 8 button released = 1 button hold = 16 button released after holdig = 8 (tested only on home button on simulator) removes the message from the queue. - if(control.read()==1) then if(control.isButton()==1) then inputType = button.event() end end
button.click(): bytebool;
Checks to see if the pressed button has been clicked, removes the message from the queue. -if (control.read() == 1) and (control.isButton() == 1) and (button.power() == 1) and (button.click() == 1) then
Touch table
[edit]touch.click(): bytebool;
Checks to see if the screen has been tapped, removes the message from the queue. -if (control.read() == 1) and (control.isTouch() == 1) and (touch.click() == 1) then
touch.hold(): bytebool;
Checks to see if the screen has been pressed for a period of time, removes the message from the queue. -if (control.read() == 1) and (control.isTouch() == 1) and (touch.hold() == 1) then
touch.up(): bytebool;
Checks to see if the screen has been released from a tap, removes the message from the queue. -if (control.read() == 1) and (control.isTouch() == 1) and (touch.up() == 1) then
touch.move(): bytebool;
Checks to see if their is movement of touch on the screen, removes the message from the queue. -if (control.read() == 1) and (control.isTouch() == 1) and (touch.move() == 1) then
touch.down(): bytebool;
Checks to see if the screen has been pressed and not released, removes the message from the queue. -if (control.read() == 1) and (control.isTouch() == 1) and (touch.down() == 1) then
touch.event(): integer;
Returns integer representing type of touch screen event. Probably bitwise coded, because returned numbers are power of two. Results: touch down = 2 touch click = 4 touch hold = 16 touch move = 32 (tested only on simulator) removes the message from the queue. - if(control.read()==1) then if(control.isTouch()==1) then inputType = touch.event() end end
touch.pos(): integer, integer;
If there has been a touch screen event, return the X, Y coords of the event. -x, y = touch.pos();
Wav table
[edit]wav.load(wavefile): wavobj;
Loads an acceptable wave audio file and creates a wav object. -mysound = wav.load("mywave.wav");
wav.play(wavobj, [time]);
Starts playing the audio file. For time amound of ms. Call with a time of -1 to stop playing. -mysound = wav.load("mywave.wav"); -mysound:play();
wav.close(wavobj);
Stops and closes the wavobj. Do not call if the file is still playing, you will crash your player. -mysound = wav.load("mywave.wav"); -mysound.close();
wav.time(wavobj): integer
Returns the length of the wav file in ms.
Control table
[edit]control.read([wait]): bytebool;
Determines if there is a message in the queue and reads it. If wait = 1 then control.read() won't return until an event has been activated. -if (control.read() == 1) then
control.isSensor(): bytebool;
Determines if the read message is a accelerometer message. -if (control.read() == 1) and (control.isSensor() == 1) then
control.isTouch(): bytebool;
Determines if the read message is a touch message. -if (control.read() == 1) and (control.isTouch() == 1) then
control.isButton(): bytebool;
Determines if the read message is a button message. -if (control.read() == 1) and (control.isButton() == 1) then
Screen table
[edit]screen.clear();
Clears the memory to screen buffer, initializes for drawing. -screen.clear();
screen.update();
Moves the screen memory buffer onto the screen and refreshes the screen. X-Fi2's LCD has a refresh rate of 30fps. -screen.update();
screen.width(): integer;
Returns the current screen width. Changes with the orientation.
screen.drawline(x, y, x2, y2, c);
Draws a line on the screen memory buffer from (x,y) to (x2,y2) in the color c. -screen.drawline(0,0,400,240,clBlack);
screen.backlight(percent, [fade]);
Changes the screens backlight to percent of maximum brightness. If fade is 1 then the backlight will change progressively to the new percent. -screen.backlight(100);
screen.orientation([orientation]): byte;
When passed with no parameters it returns the current orientation. 0 = 0 degrees 1 = 90 degrees 2 = 180 degrees 3 = 270 degrees
screen.height(): integer;
Returns the current screen height. Changes with the orientation.
screen.drawpixel(x, y, c);
Turns a pixel at (x,y) on the memory buffer to color c. -screen.drawpixel(100,100,clRed);
screen.fillrect(x, y, w, h, c);
Fills a rectangle starting at (x,y) to (x + w,y + h) on the memory buffer to color c. -screen.fillrect(0,0,400,240,clBlack);
screen.drawrect(x, y, x2, y2, c);
Draws an outline of a rectangle on the memory buffer in the color c. -screen.drawrect(0,0,400,240,clWhite);
Color table
[edit]color.a(colorobj): number;
Returns the alpha (transparency) value of a color object. -MyColorAlpha = color.a(MyColor);
color.r(colorobj): number;
Returns the red value of a color object. -MyColorRed = color.r(MyColor);
color.b(colorobj): number;
Returns the blue value of a color object. -MyColorBlue = color.b(MyColor);
color.g(colorobj): number;
Returns the green value of a color object. -MyColorGreen = color.g(MyColor);
color.new(r, g, b, [a]): colorobj;
Creates a new color object to use with many other functions. Uses standard (r,g,b) format. You can provide an alpha(transparency) value as well. -clWhite = color.new(255,255,255); -clGreen = color.new(0,255,0);
Text table
[edit]text.color(colorobj);
Changes the current text color brush to colorobj. -text.color(clWhite);
text.size(h): integer;
Changes the current text size height to h. Returns old size. -text.size(25); -osize = text.size(20) --returns 25
text.draw(x, y, text, [alignment], [alignmentwidth]);
Draws text to the memory buffer at the position (x,y) with optional alignment("right","center","left") with an optional alignmentwidth. -text.draw(0,0,"hello"); -text.draw(0,0,"Hello","center",400);
Audio table
[edit]audio.mute(b);
If called with the parameter 1 then it mutes the volume. When called with 0 it unmutes it.
audio.channel([channel]): integer;
Get or set the channel. If no parameter then return current channel. 1 is speaker. 0 is headphone.
audio.beep(freq,dur);
Generates and plays a tone with a frequency of freq and a duration of dur(in ms). Play is asynchronous but is unstoppable, even with a second call. -audio.beep(1000,60000);
audio.volume(n): integer;
Sets the audio volume from 0 to 25. Returns the current audio volume.
Accelerometer table
[edit]accelerometer.get_samplerate(): integer;
Returns the current number of ms between two accelerometer readings.
accelerometer.get_senddatatype(): string;
Returns a string that describes the data collected during accelerometer readings. Results: "xyz" = the acceleration in the x, y, and z directions "orientation" = the current orientation of the device "all" = both "xyz" and "orientation"
accelerometer.getdata(type): [integer], [integer], [integer], [integer];
Returns based on the parameter type string. All acceleration results are
between -15.0 and 15.0(approx).
"x" = acceleration in the x direction
"y" = acceleration in the y direction
"z" = acceleration in the z direction
"xyz" = acceleration in the x, y, and z direction
"orientation" = the current orientation of the device
"all" = both "xyz" and "orientation"
The type string must match or be included in the call to get_senddatatype()
The orientation of the device can return:
"1" = 0 degrees(landscape/normal)
"2" = 180 degrees
"3" = 90 degrees
"4" = 270 degrees
"5" = screen is facing up
"6" = screen is facing down
File:Xyz zfi2 accelerometer.png
accelerometer.close(): integer;
Closes the accelerometer and stops taking readings. Must be called before application exits or player enters idle shutdown. Your player will crash otherwise!
accelerometer.set_samplerate(ms): integer;
Sets the number of ms between two accelerometer readings. Must be between 100-1000. Returns 0 if successful.
accelerometer.set_senddatatype(type): integer;
Sets what data is collected during accelerometer readings. type: "xyz" = the acceleration in the x, y, and z directions "orientation" = the current orientation of the device "all" = both "xyz" and "orientation"
accelerometer.open(): integer;
Must be called to use the accelerometer. Returns 0 if successful. Shove it in a loop for safe keeping. -while (accelerometer.open() ~= 0) do os.sleep(5); end;
IO table
[edit]io.close([fileobj]);
Closes the file specified in the fileobj. Without a parameter it closes the default file.
io.flush();
Flushes the default file output buffer.
io.input([filename] [fileobj]): fileobj;
When filename is given it opens the filename and sets it as the default file. When a fileobj is given it sets fileobj as the default file. When no parameters it returns the current default file.
io.lines([filename]): function;
Opens the given filename in read mode and returns an iterator function that returns a new line from the file. If no filename is given it uses the default file. -for line in io.lines(filename) do
io.open(filename, [mode]): fileobj, string;
Opens a file in mode(read only default). Returns fileobj or nil plus error message. Mode can be: "r": read mode "w": write mode "a": append mode "r+": update mode, data is preserved "w+": update mode, data is erased "a+": update mode, data is preseved, writing at end of file only "b": binary mode, used in conjunction with other modes
io.output([filename] [fileobj]): fileobj;
Sets default output file. See io.input().
io.popen(prog, [mode]): fileobj;
Seems to be unsupported on the X-Fi 2 Starts program prog and returns fileobj that you use to read data from the program. "r"/"w" only. See io.open().
io.read(format): variant;
Reads the input file according to a given format. "*n": reads a number "*a": reads the whole file "*l": reads the next line integer: reads a string with up to number of characters
io.tmpfile(): fileobj;
Returns a fileobj for a temporary file.
io.type(obj): string;
Checks whether obj is a valid file handle. Returns one of the following: "file": open file obj "closed file": closed file obj nil: not a file obj
io.write(a, [b], [c], [...]);
Writes the value of each of the arguments to the output file. Arguments must be strings or numbers.
io.stderr(): fileobj;
File object that allows you to write directly to the error stream. -io.stderr:write(message);
io.stdin(): fileobj;
Same as io.stderror() only for the input file.
io.stdout(): fileobj;
Same as io.stderror() only for the output file.
Coroutine table
[edit]coroutine.create(func): threadobj;
Creates a new coroutine with the main function func.
coroutine.resume(threadobj, [val1], [val2], [...]): boolean, threadobj;
Starts/Continues a coroutine from the threadobj. On start, valX are sent as arguments to the function. On return, valX are results from coroutine.yield().
coroutine.running(): threadobj;
Returns the running coroutine, or nil when called by main thread.
coroutine.status(threadobj): string;
Returns the status of coroutine from the threadobj. Results can be: "running": coroutine is running(that is, it called status) "suspended": coroutine is suspended or hasn't been started "normal": active but not running(it called another coroutine) "dead" if the coroutine has finished or stopped with an error
coroutine.wrap(func): function;
Creates a new coroutine with the main function func. Returns a function that acts as coroutine.resume() for the created coroutine.
coroutine.yield([val1], [val2], [...]);
Suspends execution of the coroutine. All valX are passed as extra results to coroutine.resume().
Math table
[edit]math.abs(n): integer;
Returns the absolute value of n.
math.acos(n): float;
Returns the inverse cosine of n.
math.asin(n): float;
Returns the inverse sine of n.
math.atan(n): float;
Returns the inverse tangent of n.
math.atan2(n1, n2): float;
Returns the inverse tangent of n1 divided by n2.
math.ceil(f): integer;
Returns the number rounded up.
math.floor(f): integer;
Returns the number rounded down.
math.cos(integer): float;
Returns the cosine of n.
math.sin(integer): float;
Returns the sine of n.
math.tan(integer): float;
Returns the tangent of n.
math.cosh(integer): float;
Returns the hyperbolic cosine of n.
math.sinh(integer): float;
Returns the hyperbolic sine of n.
math.tanh(integer): float;
Returns the hyperbolic tangent of n.
math.deg(f): float;
Converts f from radians to degrees.
math.rad(f): float;
Converts f from degrees to radians.
math.exp(n): float;
Returns the e^n.
math.log(n): float;
Inverse of math.exp().
math.log10(n): float;
Returns the base 10 logarithm of a given number.
math.pow(x, y): float;
Returns x raised to the yth power. The operator ^ does the same thing. -math.pow(2,5) = 2^5
math.min(n1, [n2], [n3], [...]): float;
Returns the smallest number from the list of arguments.
math.min(n1, [n2], [n3], [...]): float;
Returns the largest number from the list of arguments.
math.modf(f): integer, float;
Returns the integral and fractional parts of f.
math.sqrt(n): float;
Returns the square root of a given positive number.
math.randomseed(n);
Sets the seed for the random number generator.
math.random([lower],[upper]): float;
Based on the arguments it does three things: Given none: Generates a number between 0 and 1 Given upper: Generates a number between 1 and upper Given both: Generates a number between loer and upper
math.frexp(f): float, integer;
Splits and returns the number value into a normalized fraction and an exponent. Two values are returned: the first is a value always in the range 1/2 (inclusive) to 1 (exclusive) and the second is an exponent.
math.ldexp(f, n): float;
Reverse of math.frexp().
math.huge(): integer;
Constant and not a function. Returns infinity.
math.pi(): float;
Constant and not a function. Returns PI.
Debug table
[edit]debug.debug();
Enters an interactive mode with the user, running each string that the user enters. Using simple commands and other debug facilities, the user can inspect global and local variables, change their values, evaluate expressions, and so on. A line containing only the word cont finishes this function, so that the caller continues its execution.
debug.getfenv(o): envirornmentobj;
Returns the environment of object o.
debug.gethook([thread]): function, object, integer;
Returns the current hook function, current hook mask, current hook count.
debug.getinfo([thread], function, [what]): table;
Returns a table with information about a function.
debug.getlocal([thread], level, local): string, variant;
Returns the name and the value of the local variable with index local of the function at level "level" of the stack.
debug.getmetatable(o): metatable;
Returns the metatable of the given object o.
debug.getregistry(): table;
Returns the registry table.
debug.getupvalue(func, up): string, variant;
Returns the name and the value of the upvalue with index up of the function func.
debug.setenv(o, t): object;
Sets the enviornment of the given object o to the given table t. Returns o.
debug.sethook([thread], hook, mask, count);
Sets the given function as a hook. The string mask and the number count describe when the hook will be called. Mask can have the following: "c": the hook is called every time Lua calls a function "r": the hook is called every time Lua returns from a function "l": the hook is called every time Lua enters a new line of code With a count other than zero, the hook is called after every count intstructions. With no arguments it turns off the hook.
debug.setlocal([thread], level, local, value): string;
Assigns the value "value" to the local variable with the index local of the function at level "level" of the stack. Returns the name of the local variable.
debug.setmetatable(o, t);
Sets the metatable for the given object o to the given table t.
debug.setupvalue(func, up, value): string;
Assigns the value "value" to the upvalue with index up of the function func. Returns the name of the upvalue.
debug.traceback([thread], [message], [level]): string;
Returns a string with a traceback of the vall stack. The optional message string is appended at the beginning of the traceback. An optional level number tells at which level to start the traceback.
Table table
[edit]table.concat(t, [sep], [i], [j]): string;
Given table t, in which all elements are strings or numbers, will concat them to a string with a seperator of sep starting, optionally, from i to j.
table.insert(t, [pos], [value]);
Inserte element value at position pos in table t. Default value for pos is the last element of the table.
table.maxn(t): integer;
Returns the largest positive numerical index of the given table, or zero if the table has no positive numerical indices.
table.remove(t, [pos]): variant;
Removes from tablt t the element at position pos. Returns the value of the removed element. The default for pos is the last element.
table.sort(table, [comp]);
Sorts the table in a given order, in-place, from table[1] to table[n]. If comp is given it must be a function that recieves two table elements, and returns true when the first is less than the second.
table.setn(t, n): variant;
Updates the size of the table t with n. Returns n
table.getn(t): variant;
Returns the size of a table, when seen as a list. If the table has an n field with a numeric value, this value is the size of the table. Otherwise, the size is the largest numerical index with a non-nil value in the table.
table.foreachi(t, f): variant, variant;
Depricated, use ipairs()
table.foreach(t, f): variant, variant;
Depricated, use pairs()
Misc functions
[edit]assert(v, [message]);
Issues an error when the value of its arguement v is false. Message is the error message.
collectgarbage(opt, [arg]);
A generic interface to the garbage collector. Performs according to the opt given: "stop": Stops the garbage collector "restart": Restarts the garbage collector "collect": Performs a full garbage collectiong cycle "count": Returns the total memory in use by Lua(in kb) "step": Performs a garbage collection step. The set size is controlled by arg. "setpause": Sets arg as the new value for the pause for the collector "setstepmul": Sets arg as the new value for the step multiplier.
dofile(filename): [variant1], [variant2], [...];
Opens the file named filename and executs its contents as a lua chunk. Returns all values returned by the chunk.
error(message);
Terminates the last protected function called and returns message as the error message.
getfenv([f]): environmentobj;
Returns the current enviroment in use by the function.
getmetatable(obj): metatable;
Returns the metatable for the given object obj.
ipairs(t): function, table, integer;
Returns three values: an iterator function, the table t, and 0. -for i,v in ipairs(t) do body end;
load(func): function;
Loads a chunk using function func to get its pieces.
loadfile(filename): function;
Same as load but gets the chunk from the filename.
loadstring(s): function;
Same as load but gets the chunk from the string s.
next(t, [index]): integer, variant);
Returns the next index and value of the given table t.
pairs(t): function, table, nil;
See ipairs. Uses next() as the iterator function.
pcall(f, [arg1], [arg2], [...]): boolean, [var1], [var2], [...];
Calls function f with given arguments in a protected mode. Returns a status boolean and the results of the call if successful.
print([...]);
Recieves any number of arguments and prints their values to stdout using tostring() to convert them to strings.
rawequal(v1, v2): boolean;
Checks whether v1 is equal to v2.
rawget(t, i): variant;
Returns the value of table t at index i.
rawset(t, i, v): table;
Sets the table t index i to value v. Returns t.
select(index, [...]): [...];
If index is a number, returns all arguments after argument number index. Otherwise, index must be the string "#", and select returns the total number of extra arguments it received.
setfenv(f, t);
Sets the enviroment to be used by the given function f.
setmetatable(t, mt): table;
Sets the metatable mt to the given table t. Returns t.
tonumber(e, [base]): integer;
Trys to convert e to a number. Optional base can be any integer from 2 and 36.
tostring(e): string;
Takes e of any type and converts it to a string in a reasonable format.
type(v): string;
Returns the type of its only argument, coded as a string. The possible results of this function are "nil" (a string, not the value nil), "number", "string", "boolean", "table", "function", "thread", and "userdata".
unpack(l, [i], [j]): [...];
Returns the elements from the given table l. Optionally starting at index i to index j.
xpcall(f, err);
Similar to pcall() but you can set a new error handler.
require procedure(loadfilepath);
Roughly, require does the same job as dofile, but with two important differences. First, require searches for the file in a path; second, require controls whether a file has already been run to avoid duplicating the work. Because of these features, require is the preferred function in Lua for loading libraries.
module procedure(v, [opt]);
Creates a module. If there is a table in package.loaded[name], this table is the module. Otherwise, if there is a global table t with the given name, this table is the module. Otherwise creates a new table t and sets it as the value of the global name and the value of package.loaded[name]. This function also initializes t._NAME with the given name, t._M with the module (t itself), and t._PACKAGE with the package name (the full module name minus last component; see below). Finally, module sets t as the new environment of the current function and the new value of package.loaded[name], so that require returns t. If name is a compound name (that is, one with components separated by dots), module creates (or reuses, if they already exist) tables for each component. For instance, if name is a.b.c, then module stores the module table in field c of field b of global a. This function can receive optional options after the module name, where each option is a function to be applied over the module.
gcinfo(): integer;
Deprecated, use collectgarbage("count").
newproxy([boolean], [userdata]): userdata;
Creates a zero-length userdata with an optional metatable. Experimental, undocumented and unsupported function in the Lua base library. It can be used to create a zero-length userdata, with a optional proxy.