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 --- CMakeLists.txt | 13 +++++- examples/table_processing/table_processing.c | 60 ++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 examples/table_processing/table_processing.c diff --git a/CMakeLists.txt b/CMakeLists.txt index d9776cd..85f3024 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,8 +66,19 @@ set_target_properties(example_argument_parsing PROPERTIES CMAKE_C_FLAGS "-Wall -Wextra -Werror -Wfatal-errors -Wpedantic") target_link_libraries(example_argument_parsing ${LUA_LIBRARIES} honeysuckle) +add_executable(example_table_processing EXCLUDE_FROM_ALL + ${EX_ROOT}/table_processing/table_processing.c) +set_target_properties(example_table_processing PROPERTIES + C_STANDARD 99 + CMAKE_C_FLAGS "-Wall -Wextra -Werror -Wfatal-errors -Wpedantic") +target_link_libraries(example_table_processing ${LUA_LIBRARIES} honeysuckle) + + add_custom_target(examples) -add_dependencies(examples example_table_creation example_argument_parsing) +add_dependencies(examples + example_table_creation + example_argument_parsing + example_table_processing) include(GNUInstallDirs) 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