From ddc38c3e6524b27224b97faeb3abfc8663943d88 Mon Sep 17 00:00:00 2001 From: sanine Date: Sat, 4 Sep 2021 12:39:29 -0500 Subject: add table processing demo --- examples/table_processing/table_processing.c | 60 ++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 examples/table_processing/table_processing.c (limited to 'examples') diff --git a/examples/table_processing/table_processing.c b/examples/table_processing/table_processing.c new file mode 100644 index 0000000..64c1f01 --- /dev/null +++ b/examples/table_processing/table_processing.c @@ -0,0 +1,60 @@ +#include +#include +#include + +struct settings +{ + bool debug; + int debug_level; + char *logfile; +} global_settings; + +void set_logfile(const char* filename, void *s) +{ + struct settings *settings = (struct settings *) s; + settings->logfile = malloc(sizeof(char) * strlen(filename)); + strcpy(settings->logfile, filename); +} + +int process(lua_State *L) +{ + int table_index; + hs_parse_args(L, hs_tbl(table_index)); + hs_process_table(L, table_index, + hs_process_bool("debug", + hs_pt_set_boolean, + &(global_settings.debug)), + hs_process_int("level", + hs_pt_set_integer, + &(global_settings.debug_level)), + hs_process_str("logfile", + set_logfile, + &global_settings)); + return 0; +} + +int main() +{ + lua_State *L = luaL_newstate(); + luaL_openlibs(L); + + lua_pushcfunction(L, process); + lua_setglobal(L, "configure"); + + global_settings.debug = false; + global_settings.debug_level = 0; + global_settings.logfile = "nil"; + + printf("settings: [ %d, %d, '%s' ]\n", + global_settings.debug, + global_settings.debug_level, + global_settings.logfile); + + luaL_dostring(L, "configure{debug=true, level=6, logfile='output.log'}"); + + printf("settings: [ %d, %d, '%s' ]\n", + global_settings.debug, + global_settings.debug_level, + global_settings.logfile); + return 0; +} -- cgit v1.2.1