1*593dc095SDavid du Colombier /* Copyright (C) 1995, 1996, 1997, 1998, 1999, 2001 Aladdin Enterprises. All rights reserved. 2*593dc095SDavid du Colombier 3*593dc095SDavid du Colombier This software is provided AS-IS with no warranty, either express or 4*593dc095SDavid du Colombier implied. 5*593dc095SDavid du Colombier 6*593dc095SDavid du Colombier This software is distributed under license and may not be copied, 7*593dc095SDavid du Colombier modified or distributed except as expressly authorized under the terms 8*593dc095SDavid du Colombier of the license contained in the file LICENSE in this distribution. 9*593dc095SDavid du Colombier 10*593dc095SDavid du Colombier For more information about licensing, please refer to 11*593dc095SDavid du Colombier http://www.ghostscript.com/licensing/. For information on 12*593dc095SDavid du Colombier commercial licensing, go to http://www.artifex.com/licensing/ or 13*593dc095SDavid du Colombier contact Artifex Software, Inc., 101 Lucas Valley Road #110, 14*593dc095SDavid du Colombier San Rafael, CA 94903, U.S.A., +1(415)492-9861. 15*593dc095SDavid du Colombier */ 16*593dc095SDavid du Colombier 17*593dc095SDavid du Colombier /* $Id: iplugin.h,v 1.5 2004/08/04 19:36:13 stefan Exp $ */ 18*593dc095SDavid du Colombier /* Plugin manager */ 19*593dc095SDavid du Colombier 20*593dc095SDavid du Colombier #ifndef iplugin_INCLUDED 21*593dc095SDavid du Colombier #define iplugin_INCLUDED 22*593dc095SDavid du Colombier 23*593dc095SDavid du Colombier #ifndef i_ctx_t_DEFINED 24*593dc095SDavid du Colombier #define i_ctx_t_DEFINED 25*593dc095SDavid du Colombier typedef struct gs_context_state_s i_ctx_t; 26*593dc095SDavid du Colombier #endif 27*593dc095SDavid du Colombier 28*593dc095SDavid du Colombier #ifndef gs_memory_DEFINED 29*593dc095SDavid du Colombier #define gs_memory_DEFINED 30*593dc095SDavid du Colombier typedef struct gs_memory_s gs_memory_t; 31*593dc095SDavid du Colombier #endif 32*593dc095SDavid du Colombier 33*593dc095SDavid du Colombier typedef struct i_plugin_holder_s i_plugin_holder; 34*593dc095SDavid du Colombier typedef struct i_plugin_instance_s i_plugin_instance; 35*593dc095SDavid du Colombier typedef struct i_plugin_descriptor_s i_plugin_descriptor; 36*593dc095SDavid du Colombier typedef struct i_plugin_client_memory_s i_plugin_client_memory; 37*593dc095SDavid du Colombier 38*593dc095SDavid du Colombier struct i_plugin_descriptor_s { /* RTTI for plugins */ 39*593dc095SDavid du Colombier const char *type; /* Plugin type, such as "FAPI" */ 40*593dc095SDavid du Colombier const char *subtype; /* Plugin type, such as "UFST" */ 41*593dc095SDavid du Colombier void (*finit)(i_plugin_instance *instance, i_plugin_client_memory *mem); /* Destructor & deallocator for the instance. */ 42*593dc095SDavid du Colombier }; 43*593dc095SDavid du Colombier 44*593dc095SDavid du Colombier struct i_plugin_instance_s { /* Base class for various plugins */ 45*593dc095SDavid du Colombier const i_plugin_descriptor *d; 46*593dc095SDavid du Colombier }; 47*593dc095SDavid du Colombier 48*593dc095SDavid du Colombier struct i_plugin_holder_s { /* Forms list of plugins for plugin manager */ 49*593dc095SDavid du Colombier i_plugin_holder *next; 50*593dc095SDavid du Colombier i_plugin_instance *I; 51*593dc095SDavid du Colombier }; 52*593dc095SDavid du Colombier 53*593dc095SDavid du Colombier struct i_plugin_client_memory_s { /* must be copying */ 54*593dc095SDavid du Colombier void *client_data; 55*593dc095SDavid du Colombier void *(*alloc)(i_plugin_client_memory *mem, unsigned int size, const char *id); 56*593dc095SDavid du Colombier void (*free)(i_plugin_client_memory *mem, void *data, const char *cname); 57*593dc095SDavid du Colombier }; 58*593dc095SDavid du Colombier 59*593dc095SDavid du Colombier #define plugin_instantiation_proc(proc)\ 60*593dc095SDavid du Colombier int proc(i_ctx_t *, i_plugin_client_memory *client_mem, i_plugin_instance **instance) 61*593dc095SDavid du Colombier 62*593dc095SDavid du Colombier #define extern_i_plugin_table()\ 63*593dc095SDavid du Colombier typedef plugin_instantiation_proc((*i_plugin_instantiation_proc));\ 64*593dc095SDavid du Colombier extern const i_plugin_instantiation_proc i_plugin_table[] 65*593dc095SDavid du Colombier 66*593dc095SDavid du Colombier void i_plugin_make_memory(i_plugin_client_memory *mem, gs_memory_t *mem_raw); 67*593dc095SDavid du Colombier int i_plugin_init(i_ctx_t *); 68*593dc095SDavid du Colombier void i_plugin_finit(gs_memory_t *mem, i_plugin_holder *list); 69*593dc095SDavid du Colombier i_plugin_instance *i_plugin_find(i_ctx_t *i_ctx_p, const char *type, const char *subtype); 70*593dc095SDavid du Colombier i_plugin_holder * i_plugin_get_list(i_ctx_t *i_ctx_p); 71*593dc095SDavid du Colombier 72*593dc095SDavid du Colombier #endif /* iplugin_INCLUDED */ 73