1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
|
/* The GIMP -- an image manipulation program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __PROCEDURAL_DB_H__
#define __PROCEDURAL_DB_H__
/* Procedural database types */
typedef enum
{
PDB_INT32,
PDB_INT16,
PDB_INT8,
PDB_FLOAT,
PDB_STRING,
PDB_INT32ARRAY,
PDB_INT16ARRAY,
PDB_INT8ARRAY,
PDB_FLOATARRAY,
PDB_STRINGARRAY,
PDB_COLOR,
PDB_REGION,
PDB_DISPLAY,
PDB_IMAGE,
PDB_LAYER,
PDB_CHANNEL,
PDB_DRAWABLE,
PDB_SELECTION,
PDB_BOUNDARY,
PDB_PATH,
PDB_STATUS,
PDB_END
} PDBArgType;
/* Error types */
typedef enum
{
PDB_EXECUTION_ERROR,
PDB_CALLING_ERROR,
PDB_PASS_THROUGH,
PDB_SUCCESS
} PDBStatusType;
/* Procedure types */
typedef enum
{
PDB_INTERNAL,
PDB_PLUGIN,
PDB_EXTENSION,
PDB_TEMPORARY
} PDBProcType;
/* Argument type */
typedef struct _Argument Argument;
struct _Argument
{
PDBArgType arg_type; /* argument type */
union _ArgValue
{
gint32 pdb_int; /* Integer type */
gdouble pdb_float; /* Floating point type */
gpointer pdb_pointer; /* Pointer type */
} value;
};
/* Argument marshalling procedures */
typedef Argument * (* ArgMarshal) (Argument *);
/* Execution types */
typedef struct _IntExec IntExec;
typedef struct _PlugInExec PlugInExec;
typedef struct _ExtExec ExtExec;
typedef struct _TempExec TempExec;
typedef struct _NetExec NetExec;
struct _IntExec
{
ArgMarshal marshal_func; /* Function called to marshal arguments */
};
struct _PlugInExec
{
gchar * filename; /* Where is the executable on disk? */
};
struct _ExtExec
{
gchar * filename; /* Where is the executable on disk? */
};
struct _TempExec
{
void * plug_in; /* Plug-in that registered this temp proc */
};
struct _NetExec
{
gchar * host; /* Host responsible for procedure execution */
gint32 port; /* Port on host to send data to */
};
/* Structure for a procedure argument */
typedef struct _ProcArg ProcArg;
struct _ProcArg
{
PDBArgType arg_type; /* Argument type (int, char, char *, etc) */
char * name; /* Argument name */
char * description; /* Argument description */
};
/* Structure for a procedure */
typedef struct _ProcRecord ProcRecord;
struct _ProcRecord
{
/* Procedure information */
gchar * name; /* Procedure name */
gchar * blurb; /* Short procedure description */
gchar * help; /* Detailed help instructions */
gchar * author; /* Author field */
gchar * copyright; /* Copyright field */
gchar * date; /* Date field */
/* Procedure type */
PDBProcType proc_type; /* Type of procedure--Internal, Plug-In, Extension */
/* Input arguments */
gint32 num_args; /* Number of procedure arguments */
ProcArg * args; /* Array of procedure arguments */
/* Output values */
gint32 num_values; /* Number of return values */
ProcArg * values; /* Array of return values */
/* Method of procedure execution */
union _ExecMethod
{
IntExec internal; /* Execution information for internal procs */
PlugInExec plug_in; /* ..................... for plug-ins */
ExtExec extension; /* ..................... for extensions */
TempExec temporary; /* ..................... for temp procs */
} exec_method;
};
/* External data */
extern ProcRecord procedural_db_dump_proc;
extern ProcRecord procedural_db_query_proc;
extern ProcRecord procedural_db_proc_info_proc;
extern ProcRecord procedural_db_proc_arg_proc;
extern ProcRecord procedural_db_proc_val_proc;
extern ProcRecord procedural_db_get_data_proc;
extern ProcRecord procedural_db_set_data_proc;
/* Functions */
void procedural_db_init (void);
void procedural_db_free (void);
void procedural_db_register (ProcRecord *);
void procedural_db_unregister (gchar *);
ProcRecord * procedural_db_lookup (gchar *);
Argument * procedural_db_execute (gchar *,
Argument *);
Argument * procedural_db_run_proc (gchar *,
gint *,
...);
Argument * procedural_db_return_args (ProcRecord *,
int);
void procedural_db_destroy_args (Argument *,
int);
#endif /* __PROCEDURAL_DB_H__ */
|