Mercurial > ~mikael > mcabber > hg
annotate 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 |
rev | line source |
---|---|
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
1 #ifndef __MCABBER_MODULES_H__ |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
2 #define __MCABBER_MODULES_H__ 1 |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
3 |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
4 #include <glib.h> |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
5 |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
6 // Module loading process looks like this: |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
7 // check, if module is loaded |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
8 // load module (+ run g_module_check_init) |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
9 // check <modulename>_info variable |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
10 // check version |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
11 // load dependencies |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
12 // run initialization callback |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
13 // module loaded |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
14 // ... |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
15 // run uninitialization callback |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
16 // unload module (+ run g_module_unload) |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
17 // unload dependencies |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
18 // module unloaded |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
19 |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
20 typedef void (*module_init_t)(void); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
21 typedef void (*module_uninit_t)(void); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
22 |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
23 // public module-describing structure |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
24 typedef struct { |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
25 const gchar *mcabber_version; // Contains mcabber version string, that this module is written to work with |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
26 module_init_t init; // Initialization callback to be called after all dependencies will be loaded |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
27 module_uninit_t uninit; // Uninitialization callback to be called before module unloading |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
28 const gchar **requires; // NULL-terminated list of module names, that must be loaded before this module |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
29 } module_info_t; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
30 |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
31 const gchar *module_load(const gchar *name, gboolean manual, gboolean force); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
32 const gchar *module_unload(const gchar *name, gboolean manual, gboolean force); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
33 |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
34 void module_list_print(void); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
35 |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
36 void modules_init(void); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
37 void modules_deinit(void); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
38 |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
39 #endif |