# PIKA - Photo and Image Kooker Application
# 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 3 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, see .
# "Perlized" from C source by Manish Singh
sub pdb_temp_name {
$blurb = 'Generates a unique temporary PDB name.';
$help = <<'HELP';
This procedure generates a temporary PDB entry name that is guaranteed to be
unique.
HELP
&andy_pdb_misc('1998');
$lib_private = 1;
@outargs = (
{ name => 'temp_name', type => 'string',
desc => 'A unique temporary name for a temporary PDB entry' }
);
%invoke = (
code => <<'CODE'
{
static gint proc_number = 0;
temp_name = g_strdup_printf ("temp-procedure-number-%d", proc_number++);
}
CODE
);
}
sub pdb_dump {
$blurb = 'Dumps the current contents of the procedural database';
$help = <<'HELP';
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.
HELP
&std_pdb_misc;
$author = 'Spencer Kimball & Josh MacDonald';
$copyright = $author . ' & Peter Mattis';
$lib_private = 1;
@inargs = (
{ name => 'file', type => 'file',
desc => 'The dump filename' }
);
%invoke = (
code => <<'CODE'
{
if (file)
success = pika_pdb_dump (pika->pdb, file, error);
else
success = FALSE;
}
CODE
);
}
sub pdb_query {
$blurb = <<'BLURB';
Queries the procedural database for its contents using regular expression
matching.
BLURB
$help = <<'HELP';
This procedure queries the contents of the procedural database. It is supplied
with seven arguments matching procedures on { name, blurb, help, authors,
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.
HELP
&std_pdb_misc;
$lib_private = 1;
@inargs = (
{ name => 'name', type => 'string', allow_non_utf8 => 1,
desc => 'The regex for procedure name' },
{ name => 'blurb', type => 'string', allow_non_utf8 => 1,
desc => 'The regex for procedure blurb' },
{ name => 'help', type => 'string', allow_non_utf8 => 1,
desc => 'The regex for procedure help' },
{ name => 'authors', type => 'string', allow_non_utf8 => 1,
desc => 'The regex for procedure authors' },
{ name => 'copyright', type => 'string', allow_non_utf8 => 1,
desc => 'The regex for procedure copyright' },
{ name => 'date', type => 'string', allow_non_utf8 => 1,
desc => 'The regex for procedure date' },
{ name => 'proc_type', type => 'string', allow_non_utf8 => 1,
desc => 'The regex for procedure type: { \'Internal PIKA procedure\',
\'PIKA Plug-in\', \'PIKA Extension\',
\'Temporary Procedure\' }' }
);
@outargs = (
{ name => 'procedure_names', type => 'strv', void_ret => 1,
desc => 'The list of procedure names' }
);
%invoke = (
code => <pdb,
name, blurb, help, authors,
copyright, date, proc_type,
&procedure_names,
error);
}
CODE
);
}
sub pdb_proc_exists {
$blurb = <<'BLURB';
Checks if the specified procedure exists in the procedural database
BLURB
$help = <<'HELP';
This procedure checks if the specified procedure is registered in the
procedural database.
HELP
&neo_pdb_misc('2008', '2.6');
$lib_private = 1;
@inargs = (
{ name => 'procedure_name', type => 'string', non_empty => 1,
desc => 'The procedure name' }
);
@outargs = (
{ name => 'exists', type => 'boolean',
desc => 'Whether a procedure of that name is registered' }
);
%invoke = (
code => <<'CODE'
{
if (pika_pdb_is_canonical_procedure (procedure_name, error))
{
PikaProcedure *proc = pika_pdb_lookup_procedure (pika->pdb,
procedure_name);
if (! proc)
{
procedure_name = pika_pdb_lookup_compat_proc_name (pika->pdb,
procedure_name);
if (procedure_name)
proc = pika_pdb_lookup_procedure (pika->pdb, procedure_name);
}
exists = (proc != NULL);
}
else
success = FALSE;
}
CODE
);
}
sub pdb_get_proc_info {
$blurb = <<'BLURB';
Queries the procedural database for information on the specified procedure.
BLURB
$help = <<'HELP';
This procedure returns information on the specified procedure. The
procedure type, number of input, and number of return values are
returned. For specific information on each input argument and return
value, use the pika_pdb_db_proc_argument() and
pika_pdb_db_proc_return_value() procedures.
HELP
&std_pdb_misc;
$date = '1997';
$lib_private = 1;
@inargs = (
{ name => 'procedure_name', type => 'string', non_empty => 1,
desc => 'The procedure name' }
);
@outargs = (
{ name => 'proc_type', type => 'enum PikaPDBProcType', void_ret => 1,
desc => 'The procedure type' },
{ name => 'num_args', type => 'int32',
desc => 'The number of input arguments' },
{ name => 'num_values', type => 'int32',
desc => 'The number of return values' }
);
%invoke = (
code => <<'CODE'
{
if (pika_pdb_is_canonical_procedure (procedure_name, error))
{
PikaProcedure *proc = lookup_procedure (pika->pdb, procedure_name,
error);
if (proc)
{
proc_type = proc->proc_type;
num_args = proc->num_args;
num_values = proc->num_values;
}
else
success = FALSE;
}
else
success = FALSE;
}
CODE
);
}
sub pdb_get_proc_argument {
$blurb = < 'procedure_name', type => 'string', non_empty => 1,
desc => 'The procedure name' },
{ name => 'arg_num', type => 'int32',
desc => 'The argument number' }
);
@outargs = (
{ name => 'param_spec', type => 'param',
desc => "The GParamSpec of the argument" }
);
%invoke = (
code => <pdb, procedure_name,
error);
if (proc && (arg_num >= 0 && arg_num < proc->num_args))
{
param_spec = g_param_spec_ref (proc->args[arg_num]);
}
else
success = FALSE;
}
else
success = FALSE;
}
CODE
);
}
sub pdb_get_proc_return_value {
$blurb = < 'procedure_name', type => 'string', non_empty => 1,
desc => 'The procedure name' },
{ name => 'val_num', type => 'int32',
desc => 'The return value number' }
);
@outargs = (
{ name => 'param_spec', type => 'param',
desc => "The GParamSpec of the return value" }
);
%invoke = (
code => <pdb, procedure_name,
error);
if (proc && (val_num >= 0 && val_num < proc->num_values))
{
param_spec = g_param_spec_ref (proc->values[val_num]);
}
else
success = FALSE;
}
else
success = FALSE;
}
CODE
);
}
sub pdb_set_proc_image_types {
$blurb = "Set the supported image types for a plug-in procedure.";
$help = < 'procedure_name', type => 'string', non_empty => 1,
desc => 'The procedure for which to install the menu path' },
{ name => 'image_types', type => 'string', null_ok => 1,
desc => "The procedure's supported image types" }
);
%invoke = (
code => <<'CODE'
{
PikaPlugIn *plug_in = pika->plug_in_manager->current_plug_in;
if (plug_in &&
pika_pdb_is_canonical_procedure (procedure_name, error))
{
success = pika_plug_in_set_proc_image_types (plug_in, procedure_name,
image_types, error);
}
else
success = FALSE;
}
CODE
);
}
sub pdb_get_proc_image_types {
$blurb = <<'BLURB';
Queries the procedural database for the image types supported by the
specified procedure.
BLURB
$help = <<'HELP';
This procedure returns the image types supported by the specified procedure.
HELP
&mitch_pdb_misc('2019', '3.0');
$lib_private = 1;
@inargs = (
{ name => 'procedure_name', type => 'string', non_empty => 1,
desc => 'The procedure name' }
);
@outargs = (
{ name => 'image_types', type => 'string',
desc => 'The image types' }
);
%invoke = (
code => <<'CODE'
{
if (pika_pdb_is_canonical_procedure (procedure_name, error))
{
PikaProcedure *proc = lookup_procedure (pika->pdb, procedure_name,
error);
if (PIKA_IS_PLUG_IN_PROCEDURE (proc))
{
image_types = g_strdup (PIKA_PLUG_IN_PROCEDURE (proc)->image_types);
}
else
success = FALSE;
}
else
success = FALSE;
}
CODE
);
}
sub pdb_set_proc_sensitivity_mask {
$blurb = "Set the sensitivity mask for a plug-in procedure.";
$help = < 'procedure_name', type => 'string', non_empty => 1,
desc => 'The procedure' },
{ name => 'mask', type => 'int32',,
desc => "The procedure's sensitivity mask" }
);
%invoke = (
code => <<'CODE'
{
PikaPlugIn *plug_in = pika->plug_in_manager->current_plug_in;
if (plug_in &&
pika_pdb_is_canonical_procedure (procedure_name, error))
{
success = pika_plug_in_set_proc_sensitivity_mask (plug_in, procedure_name,
mask, error);
}
else
success = FALSE;
}
CODE
);
}
sub pdb_set_proc_menu_label {
$blurb = "Set the menu label for a plug-in procedure.";
$help = < 'procedure_name', type => 'string', non_empty => 1,
desc => 'The procedure for which to install the menu path' },
{ name => 'menu_label', type => 'string', non_empty => 1,
desc => "The procedure's menu label" }
);
%invoke = (
code => <<'CODE'
{
PikaPlugIn *plug_in = pika->plug_in_manager->current_plug_in;
if (plug_in &&
pika_pdb_is_canonical_procedure (procedure_name, error))
{
success = pika_plug_in_set_proc_menu_label (plug_in, procedure_name,
menu_label, error);
}
else
success = FALSE;
}
CODE
);
}
sub pdb_get_proc_menu_label {
$blurb = <<'BLURB';
Queries the procedural database for the procedure's menu label.
BLURB
$help = <<'HELP';
This procedure returns the menu label of the specified procedure.
HELP
&mitch_pdb_misc('2019', '3.0');
$lib_private = 1;
@inargs = (
{ name => 'procedure_name', type => 'string', non_empty => 1,
desc => 'The procedure name' }
);
@outargs = (
{ name => 'menu_label', type => 'string',
desc => 'The menu_label' }
);
%invoke = (
code => <<'CODE'
{
if (pika_pdb_is_canonical_procedure (procedure_name, error))
{
PikaProcedure *proc = lookup_procedure (pika->pdb, procedure_name,
error);
if (PIKA_IS_PLUG_IN_PROCEDURE (proc))
{
menu_label = g_strdup (PIKA_PLUG_IN_PROCEDURE (proc)->menu_label);
}
else
success = FALSE;
}
else
success = FALSE;
}
CODE
);
}
sub pdb_add_proc_menu_path {
$blurb = "Register an additional menu path for a plug-in procedure.";
$help = < 'procedure_name', type => 'string', non_empty => 1,
desc => 'The procedure for which to install the menu path' },
{ name => 'menu_path', type => 'string',
desc => "The procedure's additional menu path" }
);
%invoke = (
code => <<'CODE'
{
PikaPlugIn *plug_in = pika->plug_in_manager->current_plug_in;
if (plug_in &&
pika_pdb_is_canonical_procedure (procedure_name, error))
{
success = pika_plug_in_add_proc_menu_path (plug_in, procedure_name,
menu_path, error);
}
else
success = FALSE;
}
CODE
);
}
sub pdb_get_proc_menu_paths {
$blurb = <<'BLURB';
Queries the procedural database for the procedure's menu paths.
BLURB
$help = <<'HELP';
This procedure returns the menu paths of the specified procedure.
HELP
&mitch_pdb_misc('2019', '3.0');
$lib_private = 1;
@inargs = (
{ name => 'procedure_name', type => 'string', non_empty => 1,
desc => 'The procedure name' }
);
@outargs = (
{ name => 'menu_paths', type => 'strv',
desc => 'The menu paths of the plug-in' },
);
%invoke = (
code => <<'CODE'
{
if (pika_pdb_is_canonical_procedure (procedure_name, error))
{
PikaProcedure *proc = lookup_procedure (pika->pdb, procedure_name,
error);
if (PIKA_IS_PLUG_IN_PROCEDURE (proc))
{
PikaPlugInProcedure *plug_in_proc = PIKA_PLUG_IN_PROCEDURE (proc);
guint num_menu_paths;
num_menu_paths = g_list_length (plug_in_proc->menu_paths);
if (num_menu_paths > 0)
{
GList *list;
gint i;
menu_paths = g_new0 (gchar *, num_menu_paths + 1);
for (list = plug_in_proc->menu_paths, i = 0;
list;
list = g_list_next (list), i++)
{
menu_paths[i] = g_strdup (list->data);
}
}
}
else
success = FALSE;
}
else
success = FALSE;
}
CODE
);
}
sub pdb_set_proc_icon {
$blurb = "Register an icon for a plug-in procedure.";
$help = < 'procedure_name', type => 'string', non_empty => 1,
desc => 'The procedure for which to install the icon' },
{ name => 'icon_type', type => 'enum PikaIconType',
desc => 'The type of the icon' },
{ name => 'icon_data', type => 'bytes',
desc => "The procedure's icon. The format depends on the
'icon_type' parameter", }
);
%invoke = (
code => <<'CODE'
{
PikaPlugIn *plug_in = pika->plug_in_manager->current_plug_in;
if (plug_in &&
pika_pdb_is_canonical_procedure (procedure_name, error))
{
success = pika_plug_in_set_proc_icon (plug_in, procedure_name,
icon_type,
g_bytes_get_data (icon_data, NULL),
g_bytes_get_size (icon_data),
error);
}
else
success = FALSE;
}
CODE
);
}
sub pdb_set_proc_documentation {
$blurb = "Set the documentation for a plug-in procedure.";
$help = < 'procedure_name', type => 'string', non_empty => 1,
desc => 'The procedure for which to install the menu path' },
{ name => 'blurb', type => 'string', null_ok => 1,
desc => 'A short blurb' },
{ name => 'help', type => 'string', null_ok => 1,
desc => 'Detailed procedure help' },
{ name => 'help_id', type => 'string', null_ok => 1,
desc => 'The procedure help_id' }
);
%invoke = (
code => <<'CODE'
{
PikaPlugIn *plug_in = pika->plug_in_manager->current_plug_in;
if (plug_in &&
pika_pdb_is_canonical_procedure (procedure_name, error))
{
success = pika_plug_in_set_proc_help (plug_in, procedure_name,
blurb, help, help_id, error);
}
else
success = FALSE;
}
CODE
);
}
sub pdb_get_proc_documentation {
$blurb = <<'BLURB';
Queries the procedural database for documentation on the specified procedure.
BLURB
$help = <<'HELP';
This procedure returns documentation on the specified procedure. A
short blurb, detailed help and help_id.
HELP
&mitch_pdb_misc('2019', '3.0');
$lib_private = 1;
@inargs = (
{ name => 'procedure_name', type => 'string', non_empty => 1,
desc => 'The procedure name' }
);
@outargs = (
{ name => 'blurb', type => 'string', void_ret => 1,
desc => 'A short blurb' },
{ name => 'help', type => 'string',
desc => 'Detailed procedure help' },
{ name => 'help_id', type => 'string',
desc => 'The procedure help_id' }
);
%invoke = (
code => <<'CODE'
{
if (pika_pdb_is_canonical_procedure (procedure_name, error))
{
PikaProcedure *proc = lookup_procedure (pika->pdb, procedure_name,
error);
if (proc)
{
blurb = g_strdup (pika_procedure_get_blurb (proc));
help = g_strdup (pika_procedure_get_help (proc));
help_id = g_strdup (pika_procedure_get_help_id (proc));
}
else
success = FALSE;
}
else
success = FALSE;
}
CODE
);
}
sub pdb_set_proc_attribution {
$blurb = "Set the attribution for a plug-in procedure.";
$help = < 'procedure_name', type => 'string', non_empty => 1,
desc => 'The procedure for which to install the menu path' },
{ name => 'authors', type => 'string', null_ok => 1,
desc => 'Authors of the procedure' },
{ name => 'copyright', type => 'string', null_ok => 1,
desc => 'The copyright' },
{ name => 'date', type => 'string', null_ok => 1,
desc => 'Copyright date' }
);
%invoke = (
code => <<'CODE'
{
PikaPlugIn *plug_in = pika->plug_in_manager->current_plug_in;
if (plug_in &&
pika_pdb_is_canonical_procedure (procedure_name, error))
{
success = pika_plug_in_set_proc_attribution (plug_in, procedure_name,
authors, copyright, date,
error);
}
else
success = FALSE;
}
CODE
);
}
sub pdb_get_proc_attribution {
$blurb = <<'BLURB';
Queries the procedural database for attribution information on the
specified procedure.
BLURB
$help = <<'HELP';
This procedure returns attribution information on the specified
procedure. The authors, copyright information and date are returned.
HELP
&mitch_pdb_misc('2019', '3.0');
$lib_private = 1;
@inargs = (
{ name => 'procedure_name', type => 'string', non_empty => 1,
desc => 'The procedure name' }
);
@outargs = (
{ name => 'authors', type => 'string', void_ret => 1,
desc => 'Authors of the procedure' },
{ name => 'copyright', type => 'string',
desc => 'The copyright' },
{ name => 'date', type => 'string',
desc => 'Copyright date' }
);
%invoke = (
code => <<'CODE'
{
if (pika_pdb_is_canonical_procedure (procedure_name, error))
{
PikaProcedure *proc = lookup_procedure (pika->pdb, procedure_name,
error);
if (proc)
{
authors = g_strdup (proc->authors);
copyright = g_strdup (proc->copyright);
date = g_strdup (proc->date);
}
else
success = FALSE;
}
else
success = FALSE;
}
CODE
);
}
sub pdb_set_file_proc_load_handler {
$blurb = 'Registers a file load handler procedure.';
$help = <<'HELP';
Registers a procedural database procedure to be called to load files of a
particular file format using magic file information.
HELP
&std_pdb_misc;
$lib_private = 1;
@inargs = (
{ name => 'procedure_name', type => 'string', non_empty => 1,
desc => 'The name of the procedure to be used for loading' },
{ name => 'extensions', type => 'string', no_validate => 1,
desc => 'comma separated list of extensions this handler
can load (i.e. "jpg,jpeg")' },
{ name => 'prefixes', type => 'string', no_validate => 1,
desc => 'comma separated list of prefixes this handler
can load (i.e. "http:,ftp:")' },
{ name => 'magics', type => 'string', no_validate => 1,
desc => 'comma separated list of magic file information
this handler can load (i.e. "0,string,GIF")' }
);
%invoke = (
code => <<'CODE'
{
PikaPlugIn *plug_in = pika->plug_in_manager->current_plug_in;
if (plug_in &&
pika_pdb_is_canonical_procedure (procedure_name, error))
{
success = pika_plug_in_set_file_proc_load_handler (plug_in,
procedure_name,
extensions, prefixes,
magics, error);
}
else
success = FALSE;
}
CODE
);
}
sub pdb_set_file_proc_save_handler {
$blurb = 'Registers a file save handler procedure.';
$help = <<'HELP';
Registers a procedural database procedure to be called to save files in a
particular file format.
HELP
&std_pdb_misc;
$lib_private = 1;
@inargs = (
{ name => 'procedure_name', type => 'string', non_empty => 1,
desc => 'The name of the procedure to be used for saving' },
{ name => 'extensions', type => 'string', no_validate => 1,
desc => 'comma separated list of extensions this handler
can save (i.e. "jpg,jpeg")' },
{ name => 'prefixes', type => 'string', no_validate => 1,
desc => 'comma separated list of prefixes this handler
can save (i.e. "http:,ftp:")' }
);
%invoke = (
code => <<'CODE'
{
PikaPlugIn *plug_in = pika->plug_in_manager->current_plug_in;
if (plug_in &&
pika_pdb_is_canonical_procedure (procedure_name, error))
{
success = pika_plug_in_set_file_proc_save_handler (plug_in,
procedure_name,
extensions, prefixes,
error);
}
else
success = FALSE;
}
CODE
);
}
sub pdb_set_file_proc_priority {
$blurb = 'Sets the priority of a file handler procedure.';
$help = <<'HELP';
Sets the priority of a file handler procedure. When more than one
procedure matches a given file, the procedure with the lowest priority
is used; if more than one procedure has the lowest priority, it is
unspecified which one of them is used. The default priority for file
handler procedures is 0.
HELP
&ell_pdb_misc('2018', '2.10.6');
$lib_private = 1;
@inargs = (
{ name => 'procedure_name', type => 'string', non_empty => 1,
desc => "The name of the procedure to set the priority of." },
{ name => 'priority', type => 'int32',
desc => "The procedure priority." }
);
%invoke = (
code => <<'CODE'
{
PikaPlugIn *plug_in = pika->plug_in_manager->current_plug_in;
if (plug_in &&
pika_pdb_is_canonical_procedure (procedure_name, error))
{
success = pika_plug_in_set_file_proc_priority (plug_in,
procedure_name,
priority, error);
}
else
success = FALSE;
}
CODE
);
}
sub pdb_set_file_proc_mime_types {
$blurb = 'Associates MIME types with a file handler procedure.';
$help = <<'HELP';
Registers MIME types for a file handler procedure. This allows PIKA to
determine the MIME type of the file opened or saved using this
procedure. It is recommended that only one MIME type is registered per
file procedure; when registering more than one MIME type, PIKA will
associate the first one with files opened or saved with this procedure.
HELP
&neo_pdb_misc('2004', '2.2');
$lib_private = 1;
@inargs = (
{ name => 'procedure_name', type => 'string', non_empty => 1,
desc => "The name of the procedure to associate a MIME type with." },
{ name => 'mime_types', type => 'string',
desc => 'A comma-separated list of MIME types, such as "image/jpeg".' }
);
%invoke = (
code => <<'CODE'
{
PikaPlugIn *plug_in = pika->plug_in_manager->current_plug_in;
if (plug_in &&
pika_pdb_is_canonical_procedure (procedure_name, error))
{
success = pika_plug_in_set_file_proc_mime_types (plug_in,
procedure_name,
mime_types, error);
}
else
success = FALSE;
}
CODE
);
}
sub pdb_set_file_proc_handles_remote {
$blurb = 'Registers a file handler procedure as capable of handling remote URIs.';
$help = <<'HELP';
Registers a file handler procedure as capable of handling remote
URIs. This allows PIKA to call the procedure directly for all kinds of
URIs, not only on local file:// URIs.
HELP
&mitch_pdb_misc('2012', '2.10');
$lib_private = 1;
@inargs = (
{ name => 'procedure_name', type => 'string', non_empty => 1,
desc => "The name of the procedure to enable remote URIs for." }
);
%invoke = (
code => <<'CODE'
{
PikaPlugIn *plug_in = pika->plug_in_manager->current_plug_in;
if (plug_in &&
pika_pdb_is_canonical_procedure (procedure_name, error))
{
success = pika_plug_in_set_file_proc_handles_remote (plug_in,
procedure_name,
error);
}
else
success = FALSE;
}
CODE
);
}
sub pdb_set_file_proc_handles_raw {
$blurb = 'Registers a file handler procedure as capable of handling raw camera files.';
$help = <<'HELP';
Registers a file handler procedure as capable of handling raw digital
camera files. Use this procedure only to register raw load handlers,
calling it on a save handler will generate an error.
HELP
&mitch_pdb_misc('2017', '2.10');
$lib_private = 1;
@inargs = (
{ name => 'procedure_name', type => 'string', non_empty => 1,
desc => "The name of the procedure to enable raw handling for." }
);
%invoke = (
code => <<'CODE'
{
PikaPlugIn *plug_in = pika->plug_in_manager->current_plug_in;
if (plug_in &&
pika_pdb_is_canonical_procedure (procedure_name, error))
{
success = pika_plug_in_set_file_proc_handles_raw (plug_in,
procedure_name,
error);
}
else
success = FALSE;
}
CODE
);
}
sub pdb_set_file_proc_thumbnail_loader {
$blurb = 'Associates a thumbnail loader with a file load procedure.';
$help = <<'HELP';
Some file formats allow for embedded thumbnails, other file formats
contain a scalable image or provide the image data in different
resolutions. A file plug-in for such a format may register a special
procedure that allows PIKA to load a thumbnail preview of the
image. This procedure is then associated with the standard load
procedure using this function.
HELP
&neo_pdb_misc('2004', '2.2');
$lib_private = 1;
@inargs = (
{ name => 'load_proc', type => 'string', non_empty => 1,
desc => "The name of the file load procedure." },
{ name => 'thumb_proc', type => 'string', non_empty => 1,
desc => "The name of the thumbnail load procedure." }
);
%invoke = (
code => <<'CODE'
{
PikaPlugIn *plug_in = pika->plug_in_manager->current_plug_in;
if (plug_in &&
pika_pdb_is_canonical_procedure (load_proc, error) &&
pika_pdb_is_canonical_procedure (thumb_proc, error))
{
success = pika_plug_in_set_file_proc_thumb_loader (plug_in,
load_proc, thumb_proc,
error);
}
else
success = FALSE;
}
CODE
);
}
sub pdb_set_batch_interpreter {
$blurb = 'Registers a batch interpreter procedure.';
$help = <<'HELP';
Registers a procedural database procedure to be called with the command
line interface options --batch-interpreter and --batch.
HELP
&jehan_pdb_misc('2022', '3.0');
$lib_private = 1;
@inargs = (
{ name => 'procedure_name', type => 'string', non_empty => 1,
desc => 'The name of the procedure to be used for running batch commands' },
{ name => 'interpreter_name', type => 'string',
desc => 'A public-facing name for the interpreter, such as "Python 3".' }
);
%invoke = (
code => <<'CODE'
{
PikaPlugIn *plug_in = pika->plug_in_manager->current_plug_in;
if (plug_in &&
pika_pdb_is_canonical_procedure (procedure_name, error))
{
success = pika_plug_in_set_batch_interpreter (plug_in,
procedure_name,
interpreter_name,
error);
}
else
success = FALSE;
}
CODE
);
}
sub pdb_get_data {
$blurb = 'Returns data associated with the specified identifier.';
$help = <<'HELP';
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.
HELP
&std_pdb_misc;
$date = '1997';
$lib_private = 1;
@inargs = (
{ name => 'identifier', type => 'string', non_empty => 1,
desc => 'The identifier associated with data' }
);
@outargs = (
{ name => 'data', type => 'bytes', void_ret => 1,
desc => 'A byte array containing data' }
);
%invoke = (
code => <<'CODE'
{
if (pika_is_canonical_identifier (identifier))
{
const guint8 *orig_data;
gint bytes;
orig_data = pika_plug_in_manager_get_data (pika->plug_in_manager,
identifier, &bytes);
if (orig_data)
data = g_bytes_new (orig_data, bytes);
else
success = FALSE;
}
else
{
g_set_error (error, PIKA_PDB_ERROR, PIKA_PDB_ERROR_INVALID_ARGUMENT,
_("Data label '%s' is not a canonical identifier"),
identifier);
success = FALSE;
}
}
CODE
);
}
sub pdb_set_data {
$blurb = 'Associates the specified identifier with the supplied data.';
$help = <<'HELP';
This procedure associates the supplied data with the provided identifier. The
data may be subsequently retrieved by a call to 'procedural-db-get-data'.
HELP
&std_pdb_misc;
$date = '1997';
$lib_private = 1;
@inargs = (
{ name => 'identifier', type => 'string', non_empty => 1,
desc => 'The identifier associated with data' },
{ name => 'data', type => 'bytes',
desc => 'A byte array containing data' }
);
%invoke = (
code => <<'CODE'
{
if (pika_is_canonical_identifier (identifier))
{
pika_plug_in_manager_set_data (pika->plug_in_manager,
identifier,
g_bytes_get_size (data),
g_bytes_get_data (data, NULL));
}
else
{
g_set_error (error, PIKA_PDB_ERROR, PIKA_PDB_ERROR_INVALID_ARGUMENT,
_("Data label '%s' is not a canonical identifier"),
identifier);
success = FALSE;
}
}
CODE
);
}
$extra{app}->{code} = <<'CODE';
static PikaProcedure *
lookup_procedure (PikaPDB *pdb,
const gchar *proc_name,
GError **error)
{
PikaProcedure *proc = pika_pdb_lookup_procedure (pdb, proc_name);
if (! proc)
{
const gchar *compat_name = pika_pdb_lookup_compat_proc_name (pdb,
proc_name);
if (compat_name)
proc = pika_pdb_lookup_procedure (pdb, compat_name);
}
if (! proc)
g_set_error (error, PIKA_PDB_ERROR, PIKA_PDB_ERROR_PROCEDURE_NOT_FOUND,
_("Procedure '%s' not found"), proc_name);
return proc;
}
CODE
@headers = qw("libpikabase/pikabase.h"
"core/pika.h"
"core/pikaparamspecs-desc.h"
"plug-in/pikaplugin-proc.h"
"plug-in/pikapluginmanager.h"
"plug-in/pikapluginmanager-data.h"
"plug-in/pikapluginprocedure.h"
"pikapdb-query.h"
"pikapdb-utils.h"
"pikapdberror.h"
"pika-pdb-compat.h"
"pika-intl.h");
@procs = qw(pdb_temp_name
pdb_dump
pdb_query
pdb_proc_exists
pdb_get_proc_info
pdb_get_proc_argument
pdb_get_proc_return_value
pdb_set_proc_image_types
pdb_get_proc_image_types
pdb_set_proc_sensitivity_mask
pdb_set_proc_menu_label
pdb_get_proc_menu_label
pdb_add_proc_menu_path
pdb_get_proc_menu_paths
pdb_set_proc_icon
pdb_set_proc_documentation
pdb_get_proc_documentation
pdb_set_proc_attribution
pdb_get_proc_attribution
pdb_set_file_proc_load_handler
pdb_set_file_proc_save_handler
pdb_set_file_proc_priority
pdb_set_file_proc_mime_types
pdb_set_file_proc_handles_remote
pdb_set_file_proc_handles_raw
pdb_set_file_proc_thumbnail_loader
pdb_set_batch_interpreter
pdb_get_data
pdb_set_data);
%exports = (app => [@procs], lib => [@procs]);
$desc = 'Procedural database';
$lib_private = 1;
1;