/******************************************************************
* PTlink Services is (C) CopyRight PTlink IRC Software 1999-2005 *
* http://software.pt-link.net *
* This program is distributed under GNU Public License *
* Please read the file COPYING for copyright information. *
******************************************************************
File: modules.h
Desc: modules header file
* $Id: modules.h,v 1.5 2005/10/16 18:32:18 jpinto Exp $
*/
#ifndef _MODULES_H
#define _MODULES_H
#define MODULES_VERSION 1
#define MAX_MODULES 128
struct SVS_Module_s
{
char *name; /* module name */
char *version; /* version */
char *desc; /* desription */
};
typedef struct SVS_Module_s SVS_Module;
struct SVS_Module_dep_s
{
char *name; /* symbol name */
void *ptr; /* data/function pointer */
};
typedef struct SVS_Module_dep_s SVS_Module_dep;
struct Module_Function_s
{
char *name; /* symbol name */
void *ptr; /* data/function pointer */
};
typedef struct Module_Function_s Module_Function;
struct FunctionList_s
{
char *name;
void *ptr;
SVS_Module *modinfo;
SVS_Module **modattach; /* modules attached to this function */
int attcount; /* counf of attached modules */
struct FunctionList_s *next;
};
typedef struct FunctionList_s FunctionList;
/* usefull macro */
#define GET_PARENT_MODULE \
if(mod_info.parent) /* we need a parent module, lets search it */ \
{ \
pmodule = module_find(mod_info.parent); \
} \
if(pmodule == NULL) \
{ \
slog(L_ERROR, "Could not find parent module: %s", mod_info.parent); \
return -1; \
}
#endif
extern SVS_Module* CurrentModule;
#define MOD_FUNC(x) { #x, &x },
#define MOD_REQUIRES Module_Function mod_requires[] =\
{
#define MOD_PROVIDES Module_Function mod_provides[] =\
{
#define MOD_OPTIONS Module_Function mod_options[] =\
{
#define MOD_END {NULL}\
};
/* functions */
int module_load(char *modfn, int silent);
int module_unload(SVS_Module* module);
SVS_Module* module_find(char *modname);
int load_modules_file(char* fn);
int get_installed_version(char *fname);
void register_provides(Module_Function funclist[], SVS_Module* modinfo);
int register_requires(Module_Function moddeps[], SVS_Module *modinfo, int stop);
void *attach_to_function(char *name, SVS_Module* modinfo);
int check_for_functions(SVS_Module *modinfo, char ** fname, char **modname);
int get_local_dconf(void);
void module_delall_attach(SVS_Module *module);
void modules_rehash(void);
/* extern structures */
extern int modules_count;
extern SVS_Module* svs_modules[MAX_MODULES];
#define COMMON_MODULES_HEADERS \
#include "stdinc.h" \
#include "ircservice.h" \
#include "suser.h" \
#include "s_log.h" \
#include "log.h" \
#include "lang.h" \
#include "modules.h" \
#include "strhand.h" \
#include "modevents.h" \
#include "ircsvs.h"
syntax highlighted by Code2HTML, v. 0.9.1