Taiwins is currently configed through lua language. refer to config as an example.
here are some knowledge about lua c API.¶
You work with a stack when dealing with lua C code, it is annoying sometimes, as it kinda like writing assembly, but it is what it is.
For c programmer, you have registry
LUA_REGISTRYINDEX to store your data, call
lua_setfile(L, LUA_REGISTRYINDEX, pos) to set the data.
metatables, __index and __newindex¶
metatableserves the purpose of operator overrides.
__indexis for element access.
__newindexis for elements assignment.
using metatables provides much more syntax sugar for configurations. If you decide to override the
__newindex for metatable, you can’t assign elements into tables after setting metatables anymore. So register methods BEFORE assigning metatables.
If you have a global table, placing methods inside the table directly instead of inside the metatable would be a good idea.
To call a lua fuction¶
lua_getglobal: at 0
lua_pushstring: at -1. first argument
lua_newtable: at -2. second argument
lua_pushtablestringoperate on table
lua_call: clear the stack, call the function then push results onto stack for you to retrieve.
to create a lua global variable¶
lua_push*: you have some thing on the stack.
lua_setglobal: pop that value and sets it as global variable in the lua context
to get something in the table¶
For example, you can create a new table then set it as global, then to get the field.
lua_pushstring: push the name of that field.
lua_gettable(L, index): use what we pushed onto stack to get the field.
indexis usually just -2.
access the value by the index of -1
lua_pop, pop that value.
to set something in the table¶
lua_newtable: create the table
lua_pushstring: the name of the field.
lua_push*: push a actual value for that field.
lua_settable: the index should be -3, points to the table.
lua_setglobal: set our table name and pop it from the stack.