diff options
Diffstat (limited to 'libs/honeysuckle/examples')
3 files changed, 111 insertions, 0 deletions
diff --git a/libs/honeysuckle/examples/argument_parsing/argument_parsing.c b/libs/honeysuckle/examples/argument_parsing/argument_parsing.c new file mode 100644 index 0000000..11a48f4 --- /dev/null +++ b/libs/honeysuckle/examples/argument_parsing/argument_parsing.c @@ -0,0 +1,23 @@ +#include <honeysuckle.h> + +int demo(lua_State *L) +{ + lua_Integer i; + lua_Number n; + char *string; + hs_parse_args(L, hs_int(i), hs_num(n), hs_str(string)); + printf("received %ld, %f, and %s\n", i, n, string); + return 0; +} + +int main() +{ + lua_State *L = luaL_newstate(); + luaL_openlibs(L); + + lua_pushcfunction(L, demo); + lua_setglobal(L, "demo"); + + luaL_dostring(L, "demo(12, 34.4, 'hi there!')"); + return 0; +} diff --git a/libs/honeysuckle/examples/table_creation/table_creation.c b/libs/honeysuckle/examples/table_creation/table_creation.c new file mode 100644 index 0000000..42088c6 --- /dev/null +++ b/libs/honeysuckle/examples/table_creation/table_creation.c @@ -0,0 +1,28 @@ +#include <honeysuckle.h> + +int main() +{ + lua_State *L = luaL_newstate(); + luaL_openlibs(L); + + /* create the table + * { "one"=1, "two"=2, "half"=0.5, "runme"=[some function] } + */ + luaL_dostring(L, + "return function(self) \n" \ + "print(self.one)\n" \ + "print(self.two)\n" \ + "print(self.half)\n" \ + "end"); + int func_index = lua_gettop(L); + + hs_create_table(L, + hs_str_int("one", 1), + hs_str_int("two", 2), + hs_str_num("half", 0.5f), + hs_str_func("runme", func_index)); + lua_setglobal(L, "runnable"); + + luaL_dostring(L, "runnable:runme()"); + return 0; +} diff --git a/libs/honeysuckle/examples/table_processing/table_processing.c b/libs/honeysuckle/examples/table_processing/table_processing.c new file mode 100644 index 0000000..64c1f01 --- /dev/null +++ b/libs/honeysuckle/examples/table_processing/table_processing.c @@ -0,0 +1,60 @@ +#include <string.h> +#include <stdlib.h> +#include <honeysuckle.h> + +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; +} |