// Copyright 2011-2021 David Robillard // Copyright 2017 Stefan Westerfeld // SPDX-License-Identifier: ISC #include "dylib.h" #include "suil_config.h" #include "suil_internal.h" #include "suil/suil.h" #include int suil_argc = 0; char** suil_argv = NULL; SUIL_API SuilHost* suil_host_new(SuilPortWriteFunc write_func, SuilPortIndexFunc index_func, SuilPortSubscribeFunc subscribe_func, SuilPortUnsubscribeFunc unsubscribe_func) { SuilHost* host = (SuilHost*)calloc(1, sizeof(struct SuilHostImpl)); host->write_func = write_func; host->index_func = index_func; host->subscribe_func = subscribe_func; host->unsubscribe_func = unsubscribe_func; host->argc = suil_argc; host->argv = suil_argv; return host; } SUIL_API void suil_host_set_touch_func(SuilHost* host, SuilTouchFunc touch_func) { host->touch_func = touch_func; } SUIL_API void suil_host_free(SuilHost* host) { if (host) { if (host->gtk_lib) { dylib_close(host->gtk_lib); } free(host); } } #if USE_X11 static void suil_load_init_module(const char* module_name) { void* const lib = suil_open_module(module_name); if (!lib) { return; } SuilVoidFunc init_func = suil_dlfunc(lib, "suil_host_init"); if (init_func) { (*init_func)(); } else { SUIL_ERRORF("Corrupt init module %s\n", module_name); } dylib_close(lib); } #endif SUIL_API void suil_init(int* argc, char*** argv, SuilArg key, ...) { (void)key; suil_argc = argc ? *argc : 0; suil_argv = argv ? *argv : NULL; #if USE_X11 suil_load_init_module("suil_x11"); #endif }