xref: /plan9-contrib/sys/src/cmd/gs/src/iplugin.h (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
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