1
/* The GIMP -- an image manipulation program
2
* Copyright (C) 1995-2003 Spencer Kimball and Peter Mattis
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License as published by
6
* the Free Software Foundation; either version 2 of the License, or
7
* (at your option) any later version.
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19
/* NOTE: This file is autogenerated by pdbgen.pl. */
27
#include <glib-object.h>
29
#include "pdb-types.h"
30
#include "procedural_db.h"
32
#include "core/gimp.h"
33
#include "gimp-intl.h"
35
#ifdef HAVE_GLIBC_REGEX
38
#include "regexrepl/regex.h"
41
#define COMPAT_BLURB "This procedure is deprecated! Use '%s' instead."
45
typedef struct _PDBQuery PDBQuery;
55
regex_t copyright_regex;
57
regex_t proc_type_regex;
59
gchar **list_of_procs;
61
gboolean querying_compat;
65
typedef struct _PDBStrings PDBStrings;
78
static gchar *proc_type_str[] =
80
N_("Internal GIMP procedure"),
83
N_("Temporary Procedure")
86
static const gchar * const type_str[] =
93
"GIMP_PDB_INT32ARRAY",
94
"GIMP_PDB_INT16ARRAY",
96
"GIMP_PDB_FLOATARRAY",
97
"GIMP_PDB_STRINGARRAY",
105
"GIMP_PDB_SELECTION",
113
static ProcRecord procedural_db_temp_name_proc;
114
static ProcRecord procedural_db_dump_proc;
115
static ProcRecord procedural_db_query_proc;
116
static ProcRecord procedural_db_proc_info_proc;
117
static ProcRecord procedural_db_proc_arg_proc;
118
static ProcRecord procedural_db_proc_val_proc;
119
static ProcRecord procedural_db_get_data_proc;
120
static ProcRecord procedural_db_get_data_size_proc;
121
static ProcRecord procedural_db_set_data_proc;
124
register_procedural_db_procs (Gimp *gimp)
126
procedural_db_register (gimp, &procedural_db_temp_name_proc);
127
procedural_db_register (gimp, &procedural_db_dump_proc);
128
procedural_db_register (gimp, &procedural_db_query_proc);
129
procedural_db_register (gimp, &procedural_db_proc_info_proc);
130
procedural_db_register (gimp, &procedural_db_proc_arg_proc);
131
procedural_db_register (gimp, &procedural_db_proc_val_proc);
132
procedural_db_register (gimp, &procedural_db_get_data_proc);
133
procedural_db_register (gimp, &procedural_db_get_data_size_proc);
134
procedural_db_register (gimp, &procedural_db_set_data_proc);
138
match_strings (regex_t *preg,
144
return regexec (preg, a, 0, NULL, 0);
148
get_pdb_strings (PDBStrings *strings,
152
strings->compat = compat;
156
strings->blurb = g_strdup_printf (COMPAT_BLURB, proc->name);
157
strings->help = g_strdup (strings->blurb);
158
strings->author = NULL;
159
strings->copyright = NULL;
160
strings->date = NULL;
164
strings->blurb = proc->blurb;
165
strings->help = proc->help;
166
strings->author = proc->author;
167
strings->copyright = proc->copyright;
168
strings->date = proc->date;
173
procedural_db_query_entry (gpointer key,
177
PDBQuery *pdb_query = user_data;
180
const gchar *proc_name;
185
if (pdb_query->querying_compat)
186
list = g_hash_table_lookup (pdb_query->gimp->procedural_ht, value);
193
proc = (ProcRecord *) list->data;
195
get_pdb_strings (&strings, proc, pdb_query->querying_compat);
197
if (! match_strings (&pdb_query->name_regex, proc_name) &&
198
! match_strings (&pdb_query->blurb_regex, strings.blurb) &&
199
! match_strings (&pdb_query->help_regex, strings.help) &&
200
! match_strings (&pdb_query->author_regex, strings.author) &&
201
! match_strings (&pdb_query->copyright_regex, strings.copyright) &&
202
! match_strings (&pdb_query->date_regex, strings.date) &&
203
! match_strings (&pdb_query->proc_type_regex,
204
proc_type_str[(gint) proc->proc_type]))
206
pdb_query->num_procs++;
207
pdb_query->list_of_procs = g_renew (gchar *, pdb_query->list_of_procs,
208
pdb_query->num_procs);
209
pdb_query->list_of_procs[pdb_query->num_procs - 1] = g_strdup (proc_name);
214
g_free (strings.blurb);
215
g_free (strings.help);
220
output_string (FILE *file,
223
if (fprintf (file, "\"") < 0)
231
case '\\' : if (fprintf (file, "\\\\") < 0) return FALSE; break;
232
case '\"' : if (fprintf (file, "\\\"") < 0) return FALSE; break;
233
case '{' : if (fprintf (file, "@{") < 0) return FALSE; break;
234
case '@' : if (fprintf (file, "@@") < 0) return FALSE; break;
235
case '}' : if (fprintf (file, "@}") < 0) return FALSE; break;
238
if (fprintf (file, "%c", *string) < 0)
244
if (fprintf (file, "\"\n") < 0)
251
procedural_db_print_entry (gpointer key,
255
ProcRecord *procedure;
262
list = (GList *) value;
263
file = (FILE *) user_data;
265
buf = g_string_new ("");
270
procedure = (ProcRecord*) list->data;
273
fprintf (file, "\n(register-procedure ");
275
if (list || num != 1)
277
g_string_printf (buf, "%s <%d>", procedure->name, num);
278
output_string (file, buf->str);
281
output_string (file, procedure->name);
283
output_string (file, procedure->blurb);
284
output_string (file, procedure->help);
285
output_string (file, procedure->author);
286
output_string (file, procedure->copyright);
287
output_string (file, procedure->date);
288
output_string (file, proc_type_str[(int) procedure->proc_type]);
290
fprintf (file, "( ");
291
for (i = 0; i < procedure->num_args; i++)
293
fprintf (file, "( ");
295
output_string (file, procedure->args[i].name );
296
output_string (file, type_str[procedure->args[i].arg_type]);
297
output_string (file, procedure->args[i].description);
299
fprintf (file, " ) ");
301
fprintf (file, " ) ");
303
fprintf (file, "( ");
304
for (i = 0; i < procedure->num_values; i++)
306
fprintf (file, "( ");
307
output_string (file, procedure->values[i].name );
308
output_string (file, type_str[procedure->values[i].arg_type]);
309
output_string (file, procedure->values[i].description);
311
fprintf (file, " ) ");
313
fprintf (file, " ) ");
314
fprintf (file, " ) ");
317
g_string_free (buf, TRUE);
320
/* This really doesn't belong here, but it depends on our generated type_str
324
pdb_type_name (gint type)
326
if (type >= 0 && type <= GIMP_PDB_END)
327
return type_str[type];
329
return g_strdup_printf ("(PDB type %d unknown)", type);
330
/* Yeah, we leak the memory. But then you shouldn't try and
331
* get the name of a PDB type that doesn't exist, should you.
336
procedural_db_temp_name_invoker (Gimp *gimp,
337
GimpContext *context,
338
GimpProgress *progress,
341
Argument *return_args;
343
static gint proc_number = 0;
345
temp_name = g_strdup_printf ("temp_procedure_number_%d", proc_number++);
347
return_args = procedural_db_return_args (&procedural_db_temp_name_proc, TRUE);
348
return_args[1].value.pdb_pointer = temp_name;
353
static ProcArg procedural_db_temp_name_outargs[] =
358
"A unique temporary name for a temporary PDB entry"
362
static ProcRecord procedural_db_temp_name_proc =
364
"gimp_procedural_db_temp_name",
365
"Generates a unique temporary PDB name.",
366
"This procedure generates a temporary PDB entry name that is guaranteed to be unique. It is many used by the interactive popup dialogs to generate a PDB entry name.",
375
procedural_db_temp_name_outargs,
376
{ { procedural_db_temp_name_invoker } }
380
procedural_db_dump_invoker (Gimp *gimp,
381
GimpContext *context,
382
GimpProgress *progress,
385
gboolean success = TRUE;
389
filename = (gchar *) args[0].value.pdb_pointer;
390
if (filename == NULL)
395
if ((file = fopen (filename, "w")))
397
g_hash_table_foreach (gimp->procedural_ht,
398
procedural_db_print_entry, file);
405
return procedural_db_return_args (&procedural_db_dump_proc, success);
408
static ProcArg procedural_db_dump_inargs[] =
417
static ProcRecord procedural_db_dump_proc =
419
"gimp_procedural_db_dump",
420
"Dumps the current contents of the procedural database",
421
"This procedure dumps the contents of the procedural database to the specified file. The file will contain all of the information provided for each registered procedure. This file is in a format appropriate for use with the supplied \"pdb_self_doc.el\" Elisp script, which generates a texinfo document.",
422
"Spencer Kimball & Josh MacDonald",
423
"Spencer Kimball & Josh MacDonald & Peter Mattis",
428
procedural_db_dump_inargs,
431
{ { procedural_db_dump_invoker } }
435
procedural_db_query_invoker (Gimp *gimp,
436
GimpContext *context,
437
GimpProgress *progress,
440
gboolean success = TRUE;
441
Argument *return_args;
451
name = (gchar *) args[0].value.pdb_pointer;
455
blurb = (gchar *) args[1].value.pdb_pointer;
459
help = (gchar *) args[2].value.pdb_pointer;
463
author = (gchar *) args[3].value.pdb_pointer;
467
copyright = (gchar *) args[4].value.pdb_pointer;
468
if (copyright == NULL)
471
date = (gchar *) args[5].value.pdb_pointer;
475
proc_type = (gchar *) args[6].value.pdb_pointer;
476
if (proc_type == NULL)
483
if (regcomp (&pdb_query.name_regex, name, 0))
485
if (regcomp (&pdb_query.blurb_regex, blurb, 0))
487
if (regcomp (&pdb_query.help_regex, help, 0))
489
if (regcomp (&pdb_query.author_regex, author, 0))
491
if (regcomp (&pdb_query.copyright_regex, copyright, 0))
493
if (regcomp (&pdb_query.date_regex, date, 0))
495
if (regcomp (&pdb_query.proc_type_regex, proc_type, 0))
500
pdb_query.gimp = gimp;
501
pdb_query.list_of_procs = NULL;
502
pdb_query.num_procs = 0;
503
pdb_query.querying_compat = FALSE;
505
g_hash_table_foreach (gimp->procedural_ht,
506
procedural_db_query_entry, &pdb_query);
508
pdb_query.querying_compat = TRUE;
510
g_hash_table_foreach (gimp->procedural_compat_ht,
511
procedural_db_query_entry, &pdb_query);
514
regfree (&pdb_query.proc_type_regex);
516
regfree (&pdb_query.date_regex);
518
regfree (&pdb_query.copyright_regex);
520
regfree (&pdb_query.author_regex);
522
regfree (&pdb_query.help_regex);
524
regfree (&pdb_query.blurb_regex);
526
regfree (&pdb_query.name_regex);
529
return_args = procedural_db_return_args (&procedural_db_query_proc, success);
533
return_args[1].value.pdb_int = pdb_query.num_procs;
534
return_args[2].value.pdb_pointer = pdb_query.list_of_procs;
540
static ProcArg procedural_db_query_inargs[] =
545
"The regex for procedure name"
550
"The regex for procedure blurb"
555
"The regex for procedure help"
560
"The regex for procedure author"
565
"The regex for procedure copyright"
570
"The regex for procedure date"
575
"The regex for procedure type: { 'Internal GIMP procedure', 'GIMP Plug-in', 'GIMP Extension' }"
579
static ProcArg procedural_db_query_outargs[] =
584
"The number of matching procedures"
587
GIMP_PDB_STRINGARRAY,
589
"The list of procedure names"
593
static ProcRecord procedural_db_query_proc =
595
"gimp_procedural_db_query",
596
"Queries the procedural database for its contents using regular expression matching.",
597
"This procedure queries the contents of the procedural database. It is supplied with seven arguments matching procedures on { name, blurb, help, author, copyright, date, procedure type}. This is accomplished using regular expression matching. For instance, to find all procedures with \"jpeg\" listed in the blurb, all seven arguments can be supplied as \".*\", except for the second, which can be supplied as \".*jpeg.*\". There are two return arguments for this procedure. The first is the number of procedures matching the query. The second is a concatenated list of procedure names corresponding to those matching the query. If no matching entries are found, then the returned string is NULL and the number of entries is 0.",
598
"Spencer Kimball & Peter Mattis",
599
"Spencer Kimball & Peter Mattis",
604
procedural_db_query_inargs,
606
procedural_db_query_outargs,
607
{ { procedural_db_query_invoker } }
611
procedural_db_proc_info_invoker (Gimp *gimp,
612
GimpContext *context,
613
GimpProgress *progress,
616
gboolean success = TRUE;
617
Argument *return_args;
620
ProcRecord *proc = NULL;
622
proc_name = (gchar *) args[0].value.pdb_pointer;
623
if (proc_name == NULL || !g_utf8_validate (proc_name, -1, NULL))
628
proc = procedural_db_lookup (gimp, proc_name);
632
get_pdb_strings (&strings, proc, FALSE);
636
const gchar *compat_name;
638
compat_name = g_hash_table_lookup (gimp->procedural_compat_ht, proc_name);
642
proc = procedural_db_lookup (gimp, compat_name);
645
get_pdb_strings (&strings, proc, TRUE);
649
success = (proc != NULL);
652
return_args = procedural_db_return_args (&procedural_db_proc_info_proc, success);
656
return_args[1].value.pdb_pointer = strings.compat ? strings.blurb : g_strdup (strings.blurb);
657
return_args[2].value.pdb_pointer = strings.compat ? strings.help : g_strdup (strings.help);
658
return_args[3].value.pdb_pointer = strings.compat ? strings.author : g_strdup (strings.author);
659
return_args[4].value.pdb_pointer = strings.compat ? strings.copyright : g_strdup (strings.copyright);
660
return_args[5].value.pdb_pointer = strings.compat ? strings.date : g_strdup (strings.date);
661
return_args[6].value.pdb_int = proc->proc_type;
662
return_args[7].value.pdb_int = proc->num_args;
663
return_args[8].value.pdb_int = proc->num_values;
669
static ProcArg procedural_db_proc_info_inargs[] =
678
static ProcArg procedural_db_proc_info_outargs[] =
688
"Detailed procedure help"
693
"Author(s) of the procedure"
708
"The procedure type: { GIMP_INTERNAL (0), GIMP_PLUGIN (1), GIMP_EXTENSION (2), GIMP_TEMPORARY (3) }"
713
"The number of input arguments"
718
"The number of return values"
722
static ProcRecord procedural_db_proc_info_proc =
724
"gimp_procedural_db_proc_info",
725
"Queries the procedural database for information on the specified procedure.",
726
"This procedure returns information on the specified procedure. A short blurb, detailed help, author(s), copyright information, procedure type, number of input, and number of return values are returned. For specific information on each input argument and return value, use the 'gimp_procedural_db_proc_arg' and 'gimp_procedural_db_proc_val' procedures.",
727
"Spencer Kimball & Peter Mattis",
728
"Spencer Kimball & Peter Mattis",
733
procedural_db_proc_info_inargs,
735
procedural_db_proc_info_outargs,
736
{ { procedural_db_proc_info_invoker } }
740
procedural_db_proc_arg_invoker (Gimp *gimp,
741
GimpContext *context,
742
GimpProgress *progress,
745
gboolean success = TRUE;
746
Argument *return_args;
752
proc_name = (gchar *) args[0].value.pdb_pointer;
753
if (proc_name == NULL || !g_utf8_validate (proc_name, -1, NULL))
756
arg_num = args[1].value.pdb_int;
760
proc = procedural_db_lookup (gimp, proc_name);
764
const gchar *compat_name;
766
compat_name = g_hash_table_lookup (gimp->procedural_compat_ht, proc_name);
769
proc = procedural_db_lookup (gimp, compat_name);
772
if (proc && (arg_num >= 0 && arg_num < proc->num_args))
773
arg = &proc->args[arg_num];
778
return_args = procedural_db_return_args (&procedural_db_proc_arg_proc, success);
782
return_args[1].value.pdb_int = arg->arg_type;
783
return_args[2].value.pdb_pointer = g_strdup (arg->name);
784
return_args[3].value.pdb_pointer = g_strdup (arg->description);
790
static ProcArg procedural_db_proc_arg_inargs[] =
800
"The argument number"
804
static ProcArg procedural_db_proc_arg_outargs[] =
809
"The type of argument { GIMP_PDB_INT32 (0), GIMP_PDB_INT16 (1), GIMP_PDB_INT8 (2), GIMP_PDB_FLOAT (3), GIMP_PDB_STRING (4), GIMP_PDB_INT32ARRAY (5), GIMP_PDB_INT16ARRAY (6), GIMP_PDB_INT8ARRAY (7), GIMP_PDB_FLOATARRAY (8), GIMP_PDB_STRINGARRAY (9), GIMP_PDB_COLOR (10), GIMP_PDB_REGION (11), GIMP_PDB_DISPLAY (12), GIMP_PDB_IMAGE (13), GIMP_PDB_LAYER (14), GIMP_PDB_CHANNEL (15), GIMP_PDB_DRAWABLE (16), GIMP_PDB_SELECTION (17), GIMP_PDB_BOUNDARY (18), GIMP_PDB_PATH (19), GIMP_PDB_PARASITE (20), GIMP_PDB_STATUS (21) }"
814
"The name of the argument"
819
"A description of the argument"
823
static ProcRecord procedural_db_proc_arg_proc =
825
"gimp_procedural_db_proc_arg",
826
"Queries the procedural database for information on the specified procedure's argument.",
827
"This procedure returns information on the specified procedure's argument. The argument type, name, and a description are retrieved.",
828
"Spencer Kimball & Peter Mattis",
829
"Spencer Kimball & Peter Mattis",
834
procedural_db_proc_arg_inargs,
836
procedural_db_proc_arg_outargs,
837
{ { procedural_db_proc_arg_invoker } }
841
procedural_db_proc_val_invoker (Gimp *gimp,
842
GimpContext *context,
843
GimpProgress *progress,
846
gboolean success = TRUE;
847
Argument *return_args;
853
proc_name = (gchar *) args[0].value.pdb_pointer;
854
if (proc_name == NULL || !g_utf8_validate (proc_name, -1, NULL))
857
val_num = args[1].value.pdb_int;
861
proc = procedural_db_lookup (gimp, proc_name);
865
const gchar *compat_name;
867
compat_name = g_hash_table_lookup (gimp->procedural_compat_ht, proc_name);
870
proc = procedural_db_lookup (gimp, compat_name);
873
if (proc && (val_num >= 0 && val_num < proc->num_values))
874
val = &proc->values[val_num];
879
return_args = procedural_db_return_args (&procedural_db_proc_val_proc, success);
883
return_args[1].value.pdb_int = val->arg_type;
884
return_args[2].value.pdb_pointer = g_strdup (val->name);
885
return_args[3].value.pdb_pointer = g_strdup (val->description);
891
static ProcArg procedural_db_proc_val_inargs[] =
901
"The return value number"
905
static ProcArg procedural_db_proc_val_outargs[] =
910
"The type of return value { GIMP_PDB_INT32 (0), GIMP_PDB_INT16 (1), GIMP_PDB_INT8 (2), GIMP_PDB_FLOAT (3), GIMP_PDB_STRING (4), GIMP_PDB_INT32ARRAY (5), GIMP_PDB_INT16ARRAY (6), GIMP_PDB_INT8ARRAY (7), GIMP_PDB_FLOATARRAY (8), GIMP_PDB_STRINGARRAY (9), GIMP_PDB_COLOR (10), GIMP_PDB_REGION (11), GIMP_PDB_DISPLAY (12), GIMP_PDB_IMAGE (13), GIMP_PDB_LAYER (14), GIMP_PDB_CHANNEL (15), GIMP_PDB_DRAWABLE (16), GIMP_PDB_SELECTION (17), GIMP_PDB_BOUNDARY (18), GIMP_PDB_PATH (19), GIMP_PDB_PARASITE (20), GIMP_PDB_STATUS (21) }"
915
"The name of the return value"
920
"A description of the return value"
924
static ProcRecord procedural_db_proc_val_proc =
926
"gimp_procedural_db_proc_val",
927
"Queries the procedural database for information on the specified procedure's return value.",
928
"This procedure returns information on the specified procedure's return value. The return value type, name, and a description are retrieved.",
929
"Spencer Kimball & Peter Mattis",
930
"Spencer Kimball & Peter Mattis",
935
procedural_db_proc_val_inargs,
937
procedural_db_proc_val_outargs,
938
{ { procedural_db_proc_val_invoker } }
942
procedural_db_get_data_invoker (Gimp *gimp,
943
GimpContext *context,
944
GimpProgress *progress,
947
gboolean success = TRUE;
948
Argument *return_args;
951
guint8 *data_copy = NULL;
954
identifier = (gchar *) args[0].value.pdb_pointer;
955
if (identifier == NULL || !g_utf8_validate (identifier, -1, NULL))
960
data = procedural_db_get_data (gimp, identifier, &bytes);
961
success = (data != NULL);
964
data_copy = g_memdup (data, bytes);
967
return_args = procedural_db_return_args (&procedural_db_get_data_proc, success);
971
return_args[1].value.pdb_int = bytes;
972
return_args[2].value.pdb_pointer = data_copy;
978
static ProcArg procedural_db_get_data_inargs[] =
983
"The identifier associated with data"
987
static ProcArg procedural_db_get_data_outargs[] =
992
"The number of bytes in the data"
997
"A byte array containing data"
1001
static ProcRecord procedural_db_get_data_proc =
1003
"gimp_procedural_db_get_data",
1004
"Returns data associated with the specified identifier.",
1005
"This procedure returns any data which may have been associated with the specified identifier. The data is a variable length array of bytes. If no data has been associated with the identifier, an error is returned.",
1006
"Spencer Kimball & Peter Mattis",
1007
"Spencer Kimball & Peter Mattis",
1012
procedural_db_get_data_inargs,
1014
procedural_db_get_data_outargs,
1015
{ { procedural_db_get_data_invoker } }
1019
procedural_db_get_data_size_invoker (Gimp *gimp,
1020
GimpContext *context,
1021
GimpProgress *progress,
1024
gboolean success = TRUE;
1025
Argument *return_args;
1030
identifier = (gchar *) args[0].value.pdb_pointer;
1031
if (identifier == NULL || !g_utf8_validate (identifier, -1, NULL))
1036
data = procedural_db_get_data (gimp, identifier, &bytes);
1037
success = (data != NULL);
1040
return_args = procedural_db_return_args (&procedural_db_get_data_size_proc, success);
1043
return_args[1].value.pdb_int = bytes;
1048
static ProcArg procedural_db_get_data_size_inargs[] =
1053
"The identifier associated with data"
1057
static ProcArg procedural_db_get_data_size_outargs[] =
1062
"The number of bytes in the data"
1066
static ProcRecord procedural_db_get_data_size_proc =
1068
"gimp_procedural_db_get_data_size",
1069
"Returns size of data associated with the specified identifier.",
1070
"This procedure returns the size of any data which may have been associated with the specified identifier. If no data has been associated with the identifier, an error is returned.",
1077
procedural_db_get_data_size_inargs,
1079
procedural_db_get_data_size_outargs,
1080
{ { procedural_db_get_data_size_invoker } }
1084
procedural_db_set_data_invoker (Gimp *gimp,
1085
GimpContext *context,
1086
GimpProgress *progress,
1089
gboolean success = TRUE;
1094
identifier = (gchar *) args[0].value.pdb_pointer;
1095
if (identifier == NULL || !g_utf8_validate (identifier, -1, NULL))
1098
bytes = args[1].value.pdb_int;
1102
data = (guint8 *) args[2].value.pdb_pointer;
1105
procedural_db_set_data (gimp, identifier, bytes, data);
1107
return procedural_db_return_args (&procedural_db_set_data_proc, success);
1110
static ProcArg procedural_db_set_data_inargs[] =
1115
"The identifier associated with data"
1120
"The number of bytes in the data"
1125
"A byte array containing data"
1129
static ProcRecord procedural_db_set_data_proc =
1131
"gimp_procedural_db_set_data",
1132
"Associates the specified identifier with the supplied data.",
1133
"This procedure associates the supplied data with the provided identifier. The data may be subsequently retrieved by a call to 'procedural-db-get-data'.",
1134
"Spencer Kimball & Peter Mattis",
1135
"Spencer Kimball & Peter Mattis",
1140
procedural_db_set_data_inargs,
1143
{ { procedural_db_set_data_invoker } }