nkeynes@1024 | 1 | /**
|
nkeynes@1024 | 2 | * $Id$
|
nkeynes@1024 | 3 | *
|
nkeynes@1024 | 4 | * Plugin declarations and support.
|
nkeynes@1024 | 5 | *
|
nkeynes@1024 | 6 | * Note plugins mainly exist to make binary packagers' lives easier,
|
nkeynes@1024 | 7 | *
|
nkeynes@1024 | 8 | * Copyright (c) 2009 Nathan Keynes.
|
nkeynes@1024 | 9 | *
|
nkeynes@1024 | 10 | * This program is free software; you can redistribute it and/or modify
|
nkeynes@1024 | 11 | * it under the terms of the GNU General Public License as published by
|
nkeynes@1024 | 12 | * the Free Software Foundation; either version 2 of the License, or
|
nkeynes@1024 | 13 | * (at your option) any later version.
|
nkeynes@1024 | 14 | *
|
nkeynes@1024 | 15 | * This program is distributed in the hope that it will be useful,
|
nkeynes@1024 | 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
nkeynes@1024 | 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
nkeynes@1024 | 18 | * GNU General Public License for more details.
|
nkeynes@1024 | 19 | */
|
nkeynes@1024 | 20 |
|
nkeynes@1024 | 21 | #ifndef lxdream_plugin_H
|
nkeynes@1024 | 22 | #define lxdream_plugin_H
|
nkeynes@1024 | 23 |
|
nkeynes@1024 | 24 | #include "lxdream.h"
|
nkeynes@1024 | 25 |
|
nkeynes@1024 | 26 | #ifdef __cplusplus
|
nkeynes@1024 | 27 | extern "C" {
|
nkeynes@1024 | 28 | #endif
|
nkeynes@1024 | 29 |
|
nkeynes@1024 | 30 | enum plugin_type {
|
nkeynes@1024 | 31 | PLUGIN_NONE = 0,
|
nkeynes@1024 | 32 | PLUGIN_AUDIO_DRIVER = 1,
|
nkeynes@1024 | 33 | PLUGIN_INPUT_DRIVER = 2,
|
nkeynes@1024 | 34 | };
|
nkeynes@1024 | 35 |
|
nkeynes@1024 | 36 | #define PLUGIN_MIN_TYPE 1
|
nkeynes@1024 | 37 | #define PLUGIN_MAX_TYPE PLUGIN_INPUT_DRIVER
|
nkeynes@1024 | 38 |
|
nkeynes@1024 | 39 | struct plugin_struct {
|
nkeynes@1024 | 40 | enum plugin_type type;
|
nkeynes@1024 | 41 | const char *name;
|
nkeynes@1024 | 42 | const char *version;
|
nkeynes@1024 | 43 |
|
nkeynes@1024 | 44 | /**
|
nkeynes@1024 | 45 | * Plugin registration function, called at load time (dynamic modules) or
|
nkeynes@1024 | 46 | * startup (static modules). This should register with the appropriate
|
nkeynes@1024 | 47 | * driver list.
|
nkeynes@1024 | 48 | * @return TRUE on success, FALSE on failure (although exactly how this
|
nkeynes@1024 | 49 | * can fail is unclear).
|
nkeynes@1024 | 50 | */
|
nkeynes@1024 | 51 | gboolean (*register_plugin)(void);
|
nkeynes@1024 | 52 | };
|
nkeynes@1024 | 53 |
|
nkeynes@1024 | 54 | #define CONSTRUCTOR __attribute__((constructor))
|
nkeynes@1024 | 55 |
|
nkeynes@1024 | 56 | #ifdef PLUGIN
|
nkeynes@1024 | 57 | #define DEFINE_PLUGIN(type,name,fn) struct plugin_struct lxdream_plugin_entry = { type, name, VERSION, fn }
|
nkeynes@1024 | 58 | #define AUDIO_DRIVER(name, driver) static gboolean __lxdream_plugin_init(void) { return audio_register_driver(&(driver)); } \
|
nkeynes@1024 | 59 | DEFINE_PLUGIN(PLUGIN_AUDIO_DRIVER, name, __lxdream_plugin_init)
|
nkeynes@1024 | 60 |
|
nkeynes@1024 | 61 | #else /* !ENABLE_SHARED */
|
nkeynes@1024 | 62 | #define AUDIO_DRIVER(name,driver) static void CONSTRUCTOR __lxdream_static_constructor(void) { audio_register_driver(&(driver)); }
|
nkeynes@1024 | 63 | #define DEFINE_PLUGIN(type,name,fn) static void CONSTRUCTOR __lxdream_static_constructor(void) { fn(); }
|
nkeynes@1024 | 64 |
|
nkeynes@1024 | 65 | #endif /* ENABLE_SHARED */
|
nkeynes@1024 | 66 |
|
nkeynes@1024 | 67 | gboolean plugin_init(const gchar *path);
|
nkeynes@1024 | 68 |
|
nkeynes@1024 | 69 | #ifdef __cplusplus
|
nkeynes@1024 | 70 | }
|
nkeynes@1024 | 71 | #endif
|
nkeynes@1024 | 72 |
|
nkeynes@1024 | 73 | #endif /* !lxdream_plugin_H */ |