Mercurial > ~mikael > mcabber > hg
diff mcabber/mcabber/modules.h @ 1735:5093b5ca1572
New modules loading scheme
author | Myhailo Danylenko <isbear@ukrpost.net> |
---|---|
date | Thu, 04 Mar 2010 13:03:20 +0200 |
parents | |
children | 7ee390513463 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mcabber/mcabber/modules.h Thu Mar 04 13:03:20 2010 +0200 @@ -0,0 +1,39 @@ +#ifndef __MCABBER_MODULES_H__ +#define __MCABBER_MODULES_H__ 1 + +#include <glib.h> + +// Module loading process looks like this: +// check, if module is loaded +// load module (+ run g_module_check_init) +// check <modulename>_info variable +// check version +// load dependencies +// run initialization callback +// module loaded +// ... +// run uninitialization callback +// unload module (+ run g_module_unload) +// unload dependencies +// module unloaded + +typedef void (*module_init_t)(void); +typedef void (*module_uninit_t)(void); + +// public module-describing structure +typedef struct { + const gchar *mcabber_version; // Contains mcabber version string, that this module is written to work with + module_init_t init; // Initialization callback to be called after all dependencies will be loaded + module_uninit_t uninit; // Uninitialization callback to be called before module unloading + const gchar **requires; // NULL-terminated list of module names, that must be loaded before this module +} module_info_t; + +const gchar *module_load(const gchar *name, gboolean manual, gboolean force); +const gchar *module_unload(const gchar *name, gboolean manual, gboolean force); + +void module_list_print(void); + +void modules_init(void); +void modules_deinit(void); + +#endif