2006-12-09 21:33:38 +00:00
|
|
|
/* GIMP - The GNU Image Manipulation Program
|
2003-07-02 11:07:41 +00:00
|
|
|
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
|
|
|
*
|
2009-01-17 22:28:01 +00:00
|
|
|
* This program is free software: you can redistribute it and/or modify
|
2003-07-02 11:07:41 +00:00
|
|
|
* it under the terms of the GNU General Public License as published by
|
2009-01-17 22:28:01 +00:00
|
|
|
* the Free Software Foundation; either version 3 of the License, or
|
2003-07-02 11:07:41 +00:00
|
|
|
* (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
|
2018-07-11 23:27:07 +02:00
|
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
2003-07-02 11:07:41 +00:00
|
|
|
*/
|
|
|
|
|
2008-09-09 14:40:52 +00:00
|
|
|
#define DEBUG_SCRIPTS 0
|
2021-01-28 08:31:11 -05:00
|
|
|
|
2006-10-16 01:08:54 +00:00
|
|
|
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
#include "config.h"
|
|
|
|
|
2008-09-11 18:00:18 +00:00
|
|
|
#include <string.h>
|
2001-07-22 22:18:01 +00:00
|
|
|
|
2006-10-19 13:08:47 +00:00
|
|
|
#include <glib/gstdio.h>
|
|
|
|
|
2021-11-30 11:38:10 +01:00
|
|
|
#include <girepository.h>
|
|
|
|
|
2004-08-31 17:54:46 +00:00
|
|
|
#include <gtk/gtk.h>
|
2003-07-02 11:07:41 +00:00
|
|
|
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
#include "libgimp/gimp.h"
|
2003-07-02 11:07:41 +00:00
|
|
|
|
2006-10-16 01:08:54 +00:00
|
|
|
#include "tinyscheme/scheme-private.h"
|
|
|
|
#if USE_DL
|
|
|
|
#include "tinyscheme/dynload.h"
|
|
|
|
#endif
|
|
|
|
#include "ftx/ftx.h"
|
2003-11-26 17:14:58 +00:00
|
|
|
|
2004-08-31 17:54:46 +00:00
|
|
|
#include "script-fu-types.h"
|
|
|
|
|
|
|
|
#include "script-fu-interface.h"
|
2008-09-10 23:10:15 +00:00
|
|
|
#include "script-fu-regex.h"
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
#include "script-fu-scripts.h"
|
2021-01-28 08:31:11 -05:00
|
|
|
#include "script-fu-errors.h"
|
2021-01-28 09:08:39 -05:00
|
|
|
#include "script-fu-compat.h"
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
2006-10-16 01:08:54 +00:00
|
|
|
#include "scheme-wrapper.h"
|
2021-04-30 13:51:04 -04:00
|
|
|
#include "scheme-marshal.h"
|
2003-07-02 11:07:41 +00:00
|
|
|
|
2008-09-11 18:00:18 +00:00
|
|
|
|
2006-10-16 01:08:54 +00:00
|
|
|
#undef cons
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
2021-11-30 11:38:10 +01:00
|
|
|
static void ts_init_constants (scheme *sc,
|
|
|
|
GIRepository *repo);
|
|
|
|
static void ts_init_enums (scheme *sc,
|
|
|
|
GIRepository *repo,
|
|
|
|
const char *namespace);
|
2022-07-15 13:50:36 -04:00
|
|
|
static void ts_define_procedure (scheme *sc,
|
|
|
|
const gchar *symbol_name,
|
|
|
|
TsWrapperFunc func);
|
plug-ins: in script-fu, don't query PDB procedures' info on startup
script-fu used to query the information of every PDB procedure on
startup, in order to get the number of parameters for each
procedure. This was done so that nullary procedures were defined
in such a way as to accept (and ignore) any number of arguments
(and at least one of the scripts we ship relies on this behavior).
However, this requires expensive back-and-forth communication with
the main GIMP process, which notable slowed down script-fu's
startup, and had a non-negligible impact on GIMP's startup time.
Instead, avoid querying procedure information, and implement the
special behavior for nullary procedures at call time. We do this
by defining, in addition to the "strict" gimp-proc-db-call
procedure, a "permissive" -gimp-proc-db-call internal procedure,
and using the latter to call the predefined PDB procedures.
2018-09-26 14:28:34 -04:00
|
|
|
static void ts_init_procedures (scheme *sc,
|
|
|
|
gboolean register_scipts);
|
|
|
|
static pointer script_fu_marshal_procedure_call (scheme *sc,
|
|
|
|
pointer a,
|
2021-01-28 09:08:39 -05:00
|
|
|
gboolean permissive,
|
|
|
|
gboolean deprecated);
|
plug-ins: in script-fu, don't query PDB procedures' info on startup
script-fu used to query the information of every PDB procedure on
startup, in order to get the number of parameters for each
procedure. This was done so that nullary procedures were defined
in such a way as to accept (and ignore) any number of arguments
(and at least one of the scripts we ship relies on this behavior).
However, this requires expensive back-and-forth communication with
the main GIMP process, which notable slowed down script-fu's
startup, and had a non-negligible impact on GIMP's startup time.
Instead, avoid querying procedure information, and implement the
special behavior for nullary procedures at call time. We do this
by defining, in addition to the "strict" gimp-proc-db-call
procedure, a "permissive" -gimp-proc-db-call internal procedure,
and using the latter to call the predefined PDB procedures.
2018-09-26 14:28:34 -04:00
|
|
|
static pointer script_fu_marshal_procedure_call_strict (scheme *sc,
|
|
|
|
pointer a);
|
|
|
|
static pointer script_fu_marshal_procedure_call_permissive (scheme *sc,
|
|
|
|
pointer a);
|
2021-01-28 09:08:39 -05:00
|
|
|
static pointer script_fu_marshal_procedure_call_deprecated (scheme *sc,
|
|
|
|
pointer a);
|
plug-ins: in script-fu, don't query PDB procedures' info on startup
script-fu used to query the information of every PDB procedure on
startup, in order to get the number of parameters for each
procedure. This was done so that nullary procedures were defined
in such a way as to accept (and ignore) any number of arguments
(and at least one of the scripts we ship relies on this behavior).
However, this requires expensive back-and-forth communication with
the main GIMP process, which notable slowed down script-fu's
startup, and had a non-negligible impact on GIMP's startup time.
Instead, avoid querying procedure information, and implement the
special behavior for nullary procedures at call time. We do this
by defining, in addition to the "strict" gimp-proc-db-call
procedure, a "permissive" -gimp-proc-db-call internal procedure,
and using the latter to call the predefined PDB procedures.
2018-09-26 14:28:34 -04:00
|
|
|
|
|
|
|
static pointer script_fu_register_call (scheme *sc,
|
|
|
|
pointer a);
|
2022-07-15 13:50:36 -04:00
|
|
|
static pointer script_fu_register_call_filter (scheme *sc,
|
|
|
|
pointer a);
|
plug-ins: in script-fu, don't query PDB procedures' info on startup
script-fu used to query the information of every PDB procedure on
startup, in order to get the number of parameters for each
procedure. This was done so that nullary procedures were defined
in such a way as to accept (and ignore) any number of arguments
(and at least one of the scripts we ship relies on this behavior).
However, this requires expensive back-and-forth communication with
the main GIMP process, which notable slowed down script-fu's
startup, and had a non-negligible impact on GIMP's startup time.
Instead, avoid querying procedure information, and implement the
special behavior for nullary procedures at call time. We do this
by defining, in addition to the "strict" gimp-proc-db-call
procedure, a "permissive" -gimp-proc-db-call internal procedure,
and using the latter to call the predefined PDB procedures.
2018-09-26 14:28:34 -04:00
|
|
|
static pointer script_fu_menu_register_call (scheme *sc,
|
|
|
|
pointer a);
|
|
|
|
static pointer script_fu_quit_call (scheme *sc,
|
|
|
|
pointer a);
|
|
|
|
static pointer script_fu_nil_call (scheme *sc,
|
|
|
|
pointer a);
|
|
|
|
|
|
|
|
static gboolean ts_load_file (const gchar *dirname,
|
|
|
|
const gchar *basename);
|
2008-09-11 18:00:18 +00:00
|
|
|
|
|
|
|
typedef struct
|
2007-06-20 10:54:28 +00:00
|
|
|
{
|
|
|
|
const gchar *name;
|
|
|
|
gint value;
|
2008-09-11 18:00:18 +00:00
|
|
|
} NamedConstant;
|
2006-10-16 01:08:54 +00:00
|
|
|
|
2022-07-15 13:50:36 -04:00
|
|
|
/* LHS is text in a script, RHS is constant defined in C. */
|
2017-07-14 13:10:46 +02:00
|
|
|
static const NamedConstant script_constants[] =
|
2006-10-19 13:51:42 +00:00
|
|
|
{
|
2006-10-20 17:55:14 +00:00
|
|
|
/* Useful values from libgimpbase/gimplimits.h */
|
|
|
|
{ "MIN-IMAGE-SIZE", GIMP_MIN_IMAGE_SIZE },
|
|
|
|
{ "MAX-IMAGE-SIZE", GIMP_MAX_IMAGE_SIZE },
|
|
|
|
{ "MIN-RESOLUTION", GIMP_MIN_RESOLUTION },
|
|
|
|
{ "MAX-RESOLUTION", GIMP_MAX_RESOLUTION },
|
|
|
|
|
2006-10-16 01:08:54 +00:00
|
|
|
/* Useful misc stuff */
|
|
|
|
{ "TRUE", TRUE },
|
|
|
|
{ "FALSE", FALSE },
|
|
|
|
|
2007-06-20 10:54:28 +00:00
|
|
|
/* Builtin units */
|
|
|
|
{ "UNIT-PIXEL", GIMP_UNIT_PIXEL },
|
|
|
|
{ "UNIT-INCH", GIMP_UNIT_INCH },
|
|
|
|
{ "UNIT-MM", GIMP_UNIT_MM },
|
|
|
|
{ "UNIT-POINT", GIMP_UNIT_POINT },
|
|
|
|
{ "UNIT-PICA", GIMP_UNIT_PICA },
|
|
|
|
|
2006-11-01 17:14:17 +00:00
|
|
|
/* Script-Fu types */
|
2022-07-15 13:50:36 -04:00
|
|
|
|
|
|
|
/* Arg types. */
|
2006-10-16 01:08:54 +00:00
|
|
|
{ "SF-IMAGE", SF_IMAGE },
|
|
|
|
{ "SF-DRAWABLE", SF_DRAWABLE },
|
|
|
|
{ "SF-LAYER", SF_LAYER },
|
|
|
|
{ "SF-CHANNEL", SF_CHANNEL },
|
2006-11-16 01:29:49 +00:00
|
|
|
{ "SF-VECTORS", SF_VECTORS },
|
2006-10-16 01:08:54 +00:00
|
|
|
{ "SF-COLOR", SF_COLOR },
|
|
|
|
{ "SF-TOGGLE", SF_TOGGLE },
|
|
|
|
{ "SF-VALUE", SF_VALUE },
|
|
|
|
{ "SF-STRING", SF_STRING },
|
|
|
|
{ "SF-FILENAME", SF_FILENAME },
|
|
|
|
{ "SF-DIRNAME", SF_DIRNAME },
|
|
|
|
{ "SF-ADJUSTMENT", SF_ADJUSTMENT },
|
|
|
|
{ "SF-FONT", SF_FONT },
|
|
|
|
{ "SF-PATTERN", SF_PATTERN },
|
|
|
|
{ "SF-BRUSH", SF_BRUSH },
|
|
|
|
{ "SF-GRADIENT", SF_GRADIENT },
|
|
|
|
{ "SF-OPTION", SF_OPTION },
|
|
|
|
{ "SF-PALETTE", SF_PALETTE },
|
|
|
|
{ "SF-TEXT", SF_TEXT },
|
|
|
|
{ "SF-ENUM", SF_ENUM },
|
2007-04-12 15:56:57 +00:00
|
|
|
{ "SF-DISPLAY", SF_DISPLAY },
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
2022-07-15 13:50:36 -04:00
|
|
|
/* PDB procedure drawable_arity, i.e. sensitivity.
|
|
|
|
* Used with script-fu-register-filter.
|
|
|
|
*
|
|
|
|
* This declares the arity of the algorithm,
|
|
|
|
* and not the signature of the PDB procedure.
|
|
|
|
* Since v3, PDB procedures that are image procedures,
|
|
|
|
* take a container of drawables.
|
|
|
|
* This only describes how many drawables the container *should* hold.
|
|
|
|
*
|
|
|
|
* For calls invoked by a user, this describes
|
|
|
|
* how many drawables the user is expected to select,
|
|
|
|
* which disables/enables the menu item for the procedure.
|
|
|
|
*
|
|
|
|
* Procedures are also called from other procedures.
|
|
|
|
* A call from another procedure may in fact
|
|
|
|
* pass more drawables than declared for drawable_arity.
|
|
|
|
* That is a programming error on behalf of the caller.
|
|
|
|
* A well-written callee that is passed more drawables than declared
|
|
|
|
* should return an error instead of processing any of the drawables.
|
|
|
|
*
|
|
|
|
* Similarly for fewer than declared.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* Requires two drawables. Often an operation between them, yielding a new drawable */
|
|
|
|
{ "SF-TWO-OR-MORE-DRAWABLE", SF_TWO_OR_MORE_DRAWABLE },
|
|
|
|
/* Often processed independently, sequentially, with side effects on the drawables. */
|
|
|
|
{ "SF-ONE-OR-MORE-DRAWABLE", SF_ONE_OR_MORE_DRAWABLE },
|
|
|
|
/* Requires exactly one drawable. */
|
|
|
|
{ "SF-ONE-DRAWABLE", SF_ONE_DRAWABLE },
|
|
|
|
|
2006-11-01 17:14:17 +00:00
|
|
|
/* For SF-ADJUSTMENT */
|
2006-10-16 01:08:54 +00:00
|
|
|
{ "SF-SLIDER", SF_SLIDER },
|
|
|
|
{ "SF-SPINNER", SF_SPINNER },
|
|
|
|
|
|
|
|
{ NULL, 0 }
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
static scheme sc;
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
2022-05-28 10:02:10 -04:00
|
|
|
/*
|
|
|
|
* These callbacks break the backwards compile-time dependence
|
|
|
|
* of inner scheme-wrapper on the outer script-fu-server.
|
|
|
|
* Only script-fu-server registers, when it runs.
|
|
|
|
*/
|
|
|
|
static TsCallbackFunc post_command_callback = NULL;
|
|
|
|
static TsCallbackFunc quit_callback = NULL;
|
|
|
|
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
2003-08-26 18:12:42 +00:00
|
|
|
void
|
2014-08-03 21:49:20 +02:00
|
|
|
tinyscheme_init (GList *path,
|
|
|
|
gboolean register_scripts)
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
{
|
2021-11-30 11:38:10 +01:00
|
|
|
GIRepository *repo;
|
|
|
|
GITypelib *typelib;
|
|
|
|
GError *error = NULL;
|
|
|
|
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
/* init the interpreter */
|
2008-09-11 18:00:18 +00:00
|
|
|
if (! scheme_init (&sc))
|
2006-11-09 23:03:55 +00:00
|
|
|
{
|
2021-01-28 08:31:11 -05:00
|
|
|
g_warning ("Could not initialize TinyScheme!");
|
2006-11-09 23:03:55 +00:00
|
|
|
return;
|
|
|
|
}
|
2006-06-12 10:25:29 +00:00
|
|
|
|
2006-10-16 01:08:54 +00:00
|
|
|
scheme_set_input_port_file (&sc, stdin);
|
2007-08-30 00:21:20 +00:00
|
|
|
scheme_set_output_port_file (&sc, stdout);
|
|
|
|
ts_register_output_func (ts_stdout_output_func, NULL);
|
2006-10-16 01:08:54 +00:00
|
|
|
|
|
|
|
/* Initialize the TinyScheme extensions */
|
2007-08-30 00:21:20 +00:00
|
|
|
init_ftx (&sc);
|
2008-09-11 13:33:58 +00:00
|
|
|
script_fu_regex_init (&sc);
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
2021-11-30 11:38:10 +01:00
|
|
|
/* Fetch the typelib */
|
|
|
|
repo = g_irepository_get_default ();
|
|
|
|
typelib = g_irepository_require (repo, "Gimp", NULL, 0, &error);
|
|
|
|
if (!typelib)
|
|
|
|
{
|
|
|
|
g_warning ("%s", error->message);
|
|
|
|
g_clear_error (&error);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
/* register in the interpreter the gimp functions and types. */
|
2021-11-30 11:38:10 +01:00
|
|
|
ts_init_constants (&sc, repo);
|
2008-09-11 18:00:18 +00:00
|
|
|
ts_init_procedures (&sc, register_scripts);
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
2006-10-19 13:51:42 +00:00
|
|
|
if (path)
|
|
|
|
{
|
|
|
|
GList *list;
|
|
|
|
|
2022-06-13 16:13:36 -04:00
|
|
|
g_debug ("Loading init and compat scripts.");
|
|
|
|
|
2014-08-03 21:49:20 +02:00
|
|
|
for (list = path; list; list = g_list_next (list))
|
2006-10-19 13:51:42 +00:00
|
|
|
{
|
2014-08-03 21:49:20 +02:00
|
|
|
gchar *dir = g_file_get_path (list->data);
|
|
|
|
|
|
|
|
if (ts_load_file (dir, "script-fu.init"))
|
2006-10-19 13:51:42 +00:00
|
|
|
{
|
2006-10-19 15:25:02 +00:00
|
|
|
/* To improve compatibility with older Script-Fu scripts,
|
|
|
|
* load script-fu-compat.init from the same directory.
|
|
|
|
*/
|
2014-08-03 21:49:20 +02:00
|
|
|
ts_load_file (dir, "script-fu-compat.init");
|
2006-10-19 15:25:02 +00:00
|
|
|
|
2008-11-19 08:17:28 +00:00
|
|
|
/* To improve compatibility with older GIMP version,
|
|
|
|
* load plug-in-compat.init from the same directory.
|
|
|
|
*/
|
2014-08-03 21:49:20 +02:00
|
|
|
ts_load_file (dir, "plug-in-compat.init");
|
|
|
|
|
|
|
|
g_free (dir);
|
2006-10-19 15:25:02 +00:00
|
|
|
|
2006-10-19 13:51:42 +00:00
|
|
|
break;
|
|
|
|
}
|
2014-08-03 21:49:20 +02:00
|
|
|
|
|
|
|
g_free (dir);
|
2006-10-19 13:51:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (list == NULL)
|
2021-01-28 08:31:11 -05:00
|
|
|
g_warning ("Unable to read initialization file script-fu.init\n");
|
2006-10-19 13:51:42 +00:00
|
|
|
}
|
2022-06-13 16:13:36 -04:00
|
|
|
else
|
|
|
|
g_warning ("Not loading initialization or compatibility scripts.");
|
2006-10-16 01:08:54 +00:00
|
|
|
}
|
|
|
|
|
2008-09-11 18:00:18 +00:00
|
|
|
/* Create an SF-RUN-MODE constant for use in scripts.
|
|
|
|
* It is set to the run mode state determined by GIMP.
|
|
|
|
*/
|
2006-10-16 01:08:54 +00:00
|
|
|
void
|
2008-09-11 18:00:18 +00:00
|
|
|
ts_set_run_mode (GimpRunMode run_mode)
|
2007-09-27 19:54:28 +00:00
|
|
|
{
|
|
|
|
pointer symbol;
|
|
|
|
|
|
|
|
symbol = sc.vptr->mk_symbol (&sc, "SF-RUN-MODE");
|
|
|
|
sc.vptr->scheme_define (&sc, sc.global_env, symbol,
|
|
|
|
sc.vptr->mk_integer (&sc, run_mode));
|
2008-09-11 13:33:58 +00:00
|
|
|
sc.vptr->setimmutable (symbol);
|
2007-09-27 19:54:28 +00:00
|
|
|
}
|
|
|
|
|
2008-09-11 18:00:18 +00:00
|
|
|
void
|
|
|
|
ts_set_print_flag (gint print_flag)
|
|
|
|
{
|
|
|
|
sc.print_output = print_flag;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
ts_print_welcome (void)
|
|
|
|
{
|
|
|
|
ts_output_string (TS_OUTPUT_NORMAL,
|
2011-12-05 17:04:07 -05:00
|
|
|
"Welcome to TinyScheme, Version 1.40\n", -1);
|
2008-09-11 18:00:18 +00:00
|
|
|
ts_output_string (TS_OUTPUT_NORMAL,
|
|
|
|
"Copyright (c) Dimitrios Souflis\n", -1);
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
ts_interpret_stdin (void)
|
|
|
|
{
|
|
|
|
scheme_load_file (&sc, stdin);
|
|
|
|
}
|
|
|
|
|
|
|
|
gint
|
|
|
|
ts_interpret_string (const gchar *expr)
|
|
|
|
{
|
2022-07-15 13:50:36 -04:00
|
|
|
gint result;
|
|
|
|
|
2008-09-11 18:00:18 +00:00
|
|
|
#if DEBUG_SCRIPTS
|
|
|
|
sc.print_output = 1;
|
|
|
|
sc.tracing = 1;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
sc.vptr->load_string (&sc, (char *) expr);
|
|
|
|
|
2022-07-15 13:50:36 -04:00
|
|
|
result = sc.retcode;
|
|
|
|
|
|
|
|
g_debug ("ts_interpret_string returns: %i", result);
|
|
|
|
return result;
|
2008-09-11 18:00:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
const gchar *
|
|
|
|
ts_get_success_msg (void)
|
|
|
|
{
|
|
|
|
if (sc.vptr->is_string (sc.value))
|
|
|
|
return sc.vptr->string_value (sc.value);
|
|
|
|
|
|
|
|
return "Success";
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
ts_stdout_output_func (TsOutputType type,
|
|
|
|
const char *string,
|
|
|
|
int len,
|
|
|
|
gpointer user_data)
|
|
|
|
{
|
|
|
|
if (len < 0)
|
|
|
|
len = strlen (string);
|
|
|
|
fprintf (stdout, "%.*s", len, string);
|
2009-05-28 21:06:53 +02:00
|
|
|
fflush (stdout);
|
2008-09-11 18:00:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
ts_gstring_output_func (TsOutputType type,
|
|
|
|
const char *string,
|
|
|
|
int len,
|
|
|
|
gpointer user_data)
|
|
|
|
{
|
|
|
|
GString *gstr = (GString *) user_data;
|
|
|
|
|
|
|
|
g_string_append_len (gstr, string, len);
|
|
|
|
}
|
2007-09-28 14:20:35 +00:00
|
|
|
|
2022-05-28 10:02:10 -04:00
|
|
|
void
|
|
|
|
ts_register_quit_callback (TsCallbackFunc callback)
|
|
|
|
{
|
|
|
|
quit_callback = callback;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
ts_register_post_command_callback (TsCallbackFunc callback)
|
|
|
|
{
|
|
|
|
post_command_callback = callback;
|
|
|
|
}
|
|
|
|
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
2008-09-11 18:00:18 +00:00
|
|
|
/* private functions */
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
2003-10-16 12:47:33 +00:00
|
|
|
/*
|
|
|
|
* Below can be found the functions responsible for registering the
|
|
|
|
* gimp functions and types against the scheme interpreter.
|
|
|
|
*/
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
static void
|
2021-11-30 11:38:10 +01:00
|
|
|
ts_init_constants (scheme *sc,
|
|
|
|
GIRepository *repo)
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
{
|
2021-11-30 11:38:10 +01:00
|
|
|
int i;
|
|
|
|
pointer symbol;
|
2004-10-25 19:29:00 +00:00
|
|
|
|
2008-09-11 18:00:18 +00:00
|
|
|
symbol = sc->vptr->mk_symbol (sc, "gimp-directory");
|
|
|
|
sc->vptr->scheme_define (sc, sc->global_env, symbol,
|
|
|
|
sc->vptr->mk_string (sc, gimp_directory ()));
|
|
|
|
sc->vptr->setimmutable (symbol);
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
2008-09-11 18:00:18 +00:00
|
|
|
symbol = sc->vptr->mk_symbol (sc, "gimp-data-directory");
|
|
|
|
sc->vptr->scheme_define (sc, sc->global_env, symbol,
|
|
|
|
sc->vptr->mk_string (sc, gimp_data_directory ()));
|
|
|
|
sc->vptr->setimmutable (symbol);
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
2008-09-11 18:00:18 +00:00
|
|
|
symbol = sc->vptr->mk_symbol (sc, "gimp-plug-in-directory");
|
|
|
|
sc->vptr->scheme_define (sc, sc->global_env, symbol,
|
|
|
|
sc->vptr->mk_string (sc, gimp_plug_in_directory ()));
|
|
|
|
sc->vptr->setimmutable (symbol);
|
2004-09-22 17:31:44 +00:00
|
|
|
|
2008-09-11 18:00:18 +00:00
|
|
|
symbol = sc->vptr->mk_symbol (sc, "gimp-locale-directory");
|
|
|
|
sc->vptr->scheme_define (sc, sc->global_env, symbol,
|
|
|
|
sc->vptr->mk_string (sc, gimp_locale_directory ()));
|
|
|
|
sc->vptr->setimmutable (symbol);
|
2004-09-22 17:31:44 +00:00
|
|
|
|
2008-09-11 18:00:18 +00:00
|
|
|
symbol = sc->vptr->mk_symbol (sc, "gimp-sysconf-directory");
|
|
|
|
sc->vptr->scheme_define (sc, sc->global_env, symbol,
|
|
|
|
sc->vptr->mk_string (sc, gimp_sysconf_directory ()));
|
|
|
|
sc->vptr->setimmutable (symbol);
|
2003-08-26 18:12:42 +00:00
|
|
|
|
2021-11-30 11:38:10 +01:00
|
|
|
ts_init_enums (sc, repo, "Gimp");
|
|
|
|
ts_init_enums (sc, repo, "Gegl");
|
2004-10-25 19:29:00 +00:00
|
|
|
|
2006-10-16 01:08:54 +00:00
|
|
|
/* Constants used in the register block of scripts */
|
|
|
|
for (i = 0; script_constants[i].name != NULL; ++i)
|
2006-10-20 09:54:05 +00:00
|
|
|
{
|
2008-09-11 18:00:18 +00:00
|
|
|
symbol = sc->vptr->mk_symbol (sc, script_constants[i].name);
|
|
|
|
sc->vptr->scheme_define (sc, sc->global_env, symbol,
|
|
|
|
sc->vptr->mk_integer (sc,
|
|
|
|
script_constants[i].value));
|
|
|
|
sc->vptr->setimmutable (symbol);
|
2006-10-20 09:54:05 +00:00
|
|
|
}
|
2006-10-16 01:08:54 +00:00
|
|
|
|
|
|
|
/* Define string constant for use in building paths to files/directories */
|
2008-09-11 18:00:18 +00:00
|
|
|
symbol = sc->vptr->mk_symbol (sc, "DIR-SEPARATOR");
|
|
|
|
sc->vptr->scheme_define (sc, sc->global_env, symbol,
|
|
|
|
sc->vptr->mk_string (sc, G_DIR_SEPARATOR_S));
|
|
|
|
sc->vptr->setimmutable (symbol);
|
2006-10-16 01:08:54 +00:00
|
|
|
|
2011-11-18 09:39:03 +01:00
|
|
|
/* Define string constant for use in building search paths */
|
|
|
|
symbol = sc->vptr->mk_symbol (sc, "SEARCHPATH-SEPARATOR");
|
|
|
|
sc->vptr->scheme_define (sc, sc->global_env, symbol,
|
|
|
|
sc->vptr->mk_string (sc, G_SEARCHPATH_SEPARATOR_S));
|
|
|
|
sc->vptr->setimmutable (symbol);
|
|
|
|
|
2006-10-16 01:08:54 +00:00
|
|
|
/* These constants are deprecated and will be removed at a later date. */
|
2008-09-11 18:00:18 +00:00
|
|
|
symbol = sc->vptr->mk_symbol (sc, "gimp-dir");
|
|
|
|
sc->vptr->scheme_define (sc, sc->global_env, symbol,
|
2008-09-19 12:15:26 +00:00
|
|
|
sc->vptr->mk_string (sc, gimp_directory ()));
|
2008-09-11 18:00:18 +00:00
|
|
|
sc->vptr->setimmutable (symbol);
|
2006-10-16 01:08:54 +00:00
|
|
|
|
2008-09-11 18:00:18 +00:00
|
|
|
symbol = sc->vptr->mk_symbol (sc, "gimp-data-dir");
|
|
|
|
sc->vptr->scheme_define (sc, sc->global_env, symbol,
|
2008-09-19 12:15:26 +00:00
|
|
|
sc->vptr->mk_string (sc, gimp_data_directory ()));
|
2008-09-11 18:00:18 +00:00
|
|
|
sc->vptr->setimmutable (symbol);
|
2006-10-16 01:08:54 +00:00
|
|
|
|
2008-09-11 18:00:18 +00:00
|
|
|
symbol = sc->vptr->mk_symbol (sc, "gimp-plugin-dir");
|
|
|
|
sc->vptr->scheme_define (sc, sc->global_env, symbol,
|
2008-09-19 12:15:26 +00:00
|
|
|
sc->vptr->mk_string (sc, gimp_plug_in_directory ()));
|
2008-09-11 18:00:18 +00:00
|
|
|
sc->vptr->setimmutable (symbol);
|
2017-01-09 16:00:10 +01:00
|
|
|
}
|
2006-10-16 01:08:54 +00:00
|
|
|
|
2017-01-09 16:00:10 +01:00
|
|
|
static void
|
2021-11-30 11:38:10 +01:00
|
|
|
ts_init_enum (scheme *sc,
|
|
|
|
GIEnumInfo *info,
|
|
|
|
const char *namespace)
|
2017-01-09 16:00:10 +01:00
|
|
|
{
|
2021-11-30 11:38:10 +01:00
|
|
|
int n_values;
|
2017-01-09 16:00:10 +01:00
|
|
|
|
2021-11-30 11:38:10 +01:00
|
|
|
n_values = g_enum_info_get_n_values ((GIEnumInfo *) info);
|
|
|
|
for (int j = 0; j < n_values; j++)
|
2006-10-20 09:54:05 +00:00
|
|
|
{
|
2021-11-30 11:38:10 +01:00
|
|
|
GIValueInfo *value_info;
|
|
|
|
const char *c_identifier;
|
|
|
|
char *scheme_name;
|
|
|
|
int int_value;
|
|
|
|
pointer symbol;
|
|
|
|
|
|
|
|
value_info = g_enum_info_get_value (info, j);
|
|
|
|
|
|
|
|
/* Get name & value. Normally, we would use the actual name of the
|
|
|
|
* GIBaseInfo here, but that would break bw-compatibility */
|
|
|
|
c_identifier = g_base_info_get_attribute ((GIBaseInfo *) value_info, "c:identifier");
|
|
|
|
if (c_identifier == NULL)
|
|
|
|
{
|
|
|
|
g_warning ("Problem in the GIR file: enum value without \"c:identifier\"!");
|
|
|
|
g_base_info_unref ((GIBaseInfo *) value_info);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Scheme-ify the name */
|
|
|
|
if (g_strcmp0 (namespace, "Gimp") == 0)
|
2017-01-09 16:00:10 +01:00
|
|
|
{
|
2021-11-30 11:38:10 +01:00
|
|
|
/* Skip the GIMP prefix for GIMP enums */
|
|
|
|
if (g_str_has_prefix (c_identifier, "GIMP_"))
|
|
|
|
c_identifier += strlen ("GIMP_");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* Other namespaces: skip non-prefixed symbols, to prevent clashes */
|
|
|
|
if (g_ascii_strncasecmp (c_identifier, namespace, strlen (namespace)) != 0)
|
|
|
|
{
|
|
|
|
g_base_info_unref ((GIBaseInfo *) value_info);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
scheme_name = g_strdelimit (g_strdup (c_identifier), "_", '-');
|
|
|
|
int_value = g_value_info_get_value (value_info);
|
|
|
|
|
|
|
|
/* Register the symbol */
|
|
|
|
symbol = sc->vptr->mk_symbol (sc, scheme_name);
|
|
|
|
sc->vptr->scheme_define (sc, sc->global_env, symbol,
|
|
|
|
sc->vptr->mk_integer (sc, int_value));
|
|
|
|
sc->vptr->setimmutable (symbol);
|
2017-01-09 16:00:10 +01:00
|
|
|
|
2021-11-30 11:38:10 +01:00
|
|
|
g_free (scheme_name);
|
|
|
|
g_base_info_unref ((GIBaseInfo *) value_info);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
ts_init_enums (scheme *sc,
|
|
|
|
GIRepository *repo,
|
|
|
|
const char *namespace)
|
|
|
|
{
|
|
|
|
int i, n_infos;
|
2017-01-09 16:00:10 +01:00
|
|
|
|
2021-11-30 11:38:10 +01:00
|
|
|
n_infos = g_irepository_get_n_infos (repo, namespace);
|
|
|
|
for (i = 0; i < n_infos; i++)
|
|
|
|
{
|
|
|
|
GIBaseInfo *info;
|
2017-01-09 16:00:10 +01:00
|
|
|
|
2021-11-30 11:38:10 +01:00
|
|
|
info = g_irepository_get_info (repo, namespace, i);
|
|
|
|
if (GI_IS_ENUM_INFO (info))
|
|
|
|
{
|
|
|
|
ts_init_enum (sc, (GIEnumInfo *) info, namespace);
|
2017-01-09 16:00:10 +01:00
|
|
|
}
|
|
|
|
|
2021-11-30 11:38:10 +01:00
|
|
|
g_base_info_unref (info);
|
|
|
|
}
|
2006-10-16 01:08:54 +00:00
|
|
|
}
|
2005-02-17 00:24:31 +00:00
|
|
|
|
2022-07-15 13:50:36 -04:00
|
|
|
/* Define a symbol into interpreter state,
|
|
|
|
* bound to a foreign function, language C, defined here in ScriptFu source.
|
|
|
|
*/
|
|
|
|
static void
|
|
|
|
ts_define_procedure (scheme *sc,
|
|
|
|
const gchar *symbol_name,
|
|
|
|
TsWrapperFunc func)
|
|
|
|
{
|
|
|
|
pointer symbol;
|
|
|
|
|
|
|
|
symbol = sc->vptr->mk_symbol (sc, symbol_name);
|
|
|
|
sc->vptr->scheme_define (sc, sc->global_env, symbol,
|
|
|
|
sc->vptr->mk_foreign_func (sc, func));
|
|
|
|
sc->vptr->setimmutable (symbol);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* Define, into interpreter state,
|
|
|
|
* 1) Scheme functions that call wrapper functions in C here in ScriptFu.
|
|
|
|
* 2) Scheme functions wrapping every procedure in the PDB.
|
|
|
|
*/
|
2006-10-16 01:08:54 +00:00
|
|
|
static void
|
2008-09-11 18:00:18 +00:00
|
|
|
ts_init_procedures (scheme *sc,
|
|
|
|
gboolean register_scripts)
|
2006-10-16 01:08:54 +00:00
|
|
|
{
|
2008-09-19 12:15:26 +00:00
|
|
|
gchar **proc_list;
|
|
|
|
gint num_procs;
|
|
|
|
gint i;
|
2006-10-16 01:08:54 +00:00
|
|
|
|
|
|
|
#if USE_DL
|
2022-07-15 13:50:36 -04:00
|
|
|
/* scm_load_ext not same as other wrappers, defined in tinyscheme/dynload */
|
|
|
|
ts_define_procedure (sc, "load-extension", scm_load_ext);
|
2006-10-16 01:08:54 +00:00
|
|
|
#endif
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
2022-07-15 13:50:36 -04:00
|
|
|
if (register_scripts)
|
|
|
|
{
|
|
|
|
ts_define_procedure (sc, "script-fu-register", script_fu_register_call);
|
|
|
|
ts_define_procedure (sc, "script-fu-register-filter", script_fu_register_call_filter);
|
|
|
|
ts_define_procedure (sc, "script-fu-menu-register", script_fu_menu_register_call);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
ts_define_procedure (sc, "script-fu-register", script_fu_nil_call);
|
|
|
|
ts_define_procedure (sc, "script-fu-register-filter", script_fu_nil_call);
|
|
|
|
ts_define_procedure (sc, "script-fu-menu-register", script_fu_nil_call);
|
|
|
|
}
|
plug-ins: in script-fu, don't query PDB procedures' info on startup
script-fu used to query the information of every PDB procedure on
startup, in order to get the number of parameters for each
procedure. This was done so that nullary procedures were defined
in such a way as to accept (and ignore) any number of arguments
(and at least one of the scripts we ship relies on this behavior).
However, this requires expensive back-and-forth communication with
the main GIMP process, which notable slowed down script-fu's
startup, and had a non-negligible impact on GIMP's startup time.
Instead, avoid querying procedure information, and implement the
special behavior for nullary procedures at call time. We do this
by defining, in addition to the "strict" gimp-proc-db-call
procedure, a "permissive" -gimp-proc-db-call internal procedure,
and using the latter to call the predefined PDB procedures.
2018-09-26 14:28:34 -04:00
|
|
|
|
2022-07-15 13:50:36 -04:00
|
|
|
ts_define_procedure (sc, "script-fu-quit", script_fu_quit_call);
|
2006-10-16 01:08:54 +00:00
|
|
|
|
2022-07-15 13:50:36 -04:00
|
|
|
ts_define_procedure (sc, "gimp-proc-db-call", script_fu_marshal_procedure_call_strict);
|
|
|
|
ts_define_procedure (sc, "-gimp-proc-db-call", script_fu_marshal_procedure_call_permissive);
|
|
|
|
ts_define_procedure (sc, "--gimp-proc-db-call", script_fu_marshal_procedure_call_deprecated);
|
2021-01-28 09:08:39 -05:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
proc_list = gimp_pdb_query_procedures (gimp_get_pdb (),
|
|
|
|
".*", ".*", ".*", ".*",
|
2020-12-23 21:15:43 +01:00
|
|
|
".*", ".*", ".*", ".*");
|
|
|
|
num_procs = proc_list ? g_strv_length (proc_list) : 0;
|
2006-10-16 01:08:54 +00:00
|
|
|
|
|
|
|
/* Register each procedure as a scheme func */
|
|
|
|
for (i = 0; i < num_procs; i++)
|
2006-11-09 23:03:55 +00:00
|
|
|
{
|
plug-ins: in script-fu, don't query PDB procedures' info on startup
script-fu used to query the information of every PDB procedure on
startup, in order to get the number of parameters for each
procedure. This was done so that nullary procedures were defined
in such a way as to accept (and ignore) any number of arguments
(and at least one of the scripts we ship relies on this behavior).
However, this requires expensive back-and-forth communication with
the main GIMP process, which notable slowed down script-fu's
startup, and had a non-negligible impact on GIMP's startup time.
Instead, avoid querying procedure information, and implement the
special behavior for nullary procedures at call time. We do this
by defining, in addition to the "strict" gimp-proc-db-call
procedure, a "permissive" -gimp-proc-db-call internal procedure,
and using the latter to call the predefined PDB procedures.
2018-09-26 14:28:34 -04:00
|
|
|
gchar *buff;
|
|
|
|
|
|
|
|
/* Build a define that will call the foreign function.
|
|
|
|
* The Scheme statement was suggested by Simon Budig.
|
|
|
|
*
|
2021-01-28 08:31:11 -05:00
|
|
|
* Call the procedure through -gimp-proc-db-call, which is a more
|
plug-ins: in script-fu, don't query PDB procedures' info on startup
script-fu used to query the information of every PDB procedure on
startup, in order to get the number of parameters for each
procedure. This was done so that nullary procedures were defined
in such a way as to accept (and ignore) any number of arguments
(and at least one of the scripts we ship relies on this behavior).
However, this requires expensive back-and-forth communication with
the main GIMP process, which notable slowed down script-fu's
startup, and had a non-negligible impact on GIMP's startup time.
Instead, avoid querying procedure information, and implement the
special behavior for nullary procedures at call time. We do this
by defining, in addition to the "strict" gimp-proc-db-call
procedure, a "permissive" -gimp-proc-db-call internal procedure,
and using the latter to call the predefined PDB procedures.
2018-09-26 14:28:34 -04:00
|
|
|
* permissive version of gimp-proc-db-call, that accepts (and ignores)
|
|
|
|
* any number of arguments for nullary procedures, for backward
|
|
|
|
* compatibility.
|
|
|
|
*/
|
|
|
|
buff = g_strdup_printf (" (define (%s . args)"
|
|
|
|
" (apply -gimp-proc-db-call \"%s\" args))",
|
|
|
|
proc_list[i], proc_list[i]);
|
2008-09-11 18:00:18 +00:00
|
|
|
|
plug-ins: in script-fu, don't query PDB procedures' info on startup
script-fu used to query the information of every PDB procedure on
startup, in order to get the number of parameters for each
procedure. This was done so that nullary procedures were defined
in such a way as to accept (and ignore) any number of arguments
(and at least one of the scripts we ship relies on this behavior).
However, this requires expensive back-and-forth communication with
the main GIMP process, which notable slowed down script-fu's
startup, and had a non-negligible impact on GIMP's startup time.
Instead, avoid querying procedure information, and implement the
special behavior for nullary procedures at call time. We do this
by defining, in addition to the "strict" gimp-proc-db-call
procedure, a "permissive" -gimp-proc-db-call internal procedure,
and using the latter to call the predefined PDB procedures.
2018-09-26 14:28:34 -04:00
|
|
|
/* Execute the 'define' */
|
|
|
|
sc->vptr->load_string (sc, buff);
|
2008-09-11 18:00:18 +00:00
|
|
|
|
plug-ins: in script-fu, don't query PDB procedures' info on startup
script-fu used to query the information of every PDB procedure on
startup, in order to get the number of parameters for each
procedure. This was done so that nullary procedures were defined
in such a way as to accept (and ignore) any number of arguments
(and at least one of the scripts we ship relies on this behavior).
However, this requires expensive back-and-forth communication with
the main GIMP process, which notable slowed down script-fu's
startup, and had a non-negligible impact on GIMP's startup time.
Instead, avoid querying procedure information, and implement the
special behavior for nullary procedures at call time. We do this
by defining, in addition to the "strict" gimp-proc-db-call
procedure, a "permissive" -gimp-proc-db-call internal procedure,
and using the latter to call the predefined PDB procedures.
2018-09-26 14:28:34 -04:00
|
|
|
g_free (buff);
|
2006-11-09 23:03:55 +00:00
|
|
|
}
|
2006-10-16 01:08:54 +00:00
|
|
|
|
2012-11-27 21:16:26 +01:00
|
|
|
g_strfreev (proc_list);
|
2021-01-28 09:08:39 -05:00
|
|
|
|
|
|
|
/* Register more scheme funcs that call PDB procedures, for compatibility
|
|
|
|
* This can overwrite earlier scheme func definitions.
|
|
|
|
*/
|
|
|
|
define_compat_procs (sc);
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
}
|
|
|
|
|
2008-11-19 08:17:28 +00:00
|
|
|
static gboolean
|
|
|
|
ts_load_file (const gchar *dirname,
|
|
|
|
const gchar *basename)
|
|
|
|
{
|
|
|
|
gchar *filename;
|
|
|
|
FILE *fin;
|
|
|
|
|
|
|
|
filename = g_build_filename (dirname, basename, NULL);
|
|
|
|
|
|
|
|
fin = g_fopen (filename, "rb");
|
|
|
|
|
|
|
|
g_free (filename);
|
|
|
|
|
|
|
|
if (fin)
|
|
|
|
{
|
|
|
|
scheme_load_file (&sc, fin);
|
|
|
|
fclose (fin);
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2021-01-28 08:31:11 -05:00
|
|
|
/* Called by the Scheme interpreter on calls to GIMP PDB procedures */
|
2006-10-16 01:08:54 +00:00
|
|
|
static pointer
|
plug-ins: in script-fu, don't query PDB procedures' info on startup
script-fu used to query the information of every PDB procedure on
startup, in order to get the number of parameters for each
procedure. This was done so that nullary procedures were defined
in such a way as to accept (and ignore) any number of arguments
(and at least one of the scripts we ship relies on this behavior).
However, this requires expensive back-and-forth communication with
the main GIMP process, which notable slowed down script-fu's
startup, and had a non-negligible impact on GIMP's startup time.
Instead, avoid querying procedure information, and implement the
special behavior for nullary procedures at call time. We do this
by defining, in addition to the "strict" gimp-proc-db-call
procedure, a "permissive" -gimp-proc-db-call internal procedure,
and using the latter to call the predefined PDB procedures.
2018-09-26 14:28:34 -04:00
|
|
|
script_fu_marshal_procedure_call (scheme *sc,
|
|
|
|
pointer a,
|
2021-01-28 09:08:39 -05:00
|
|
|
gboolean permissive,
|
|
|
|
gboolean deprecated)
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
{
|
2019-08-12 20:11:45 +02:00
|
|
|
GimpProcedure *procedure;
|
|
|
|
GimpValueArray *args;
|
|
|
|
GimpValueArray *values = NULL;
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
gchar *proc_name;
|
2019-08-12 20:11:45 +02:00
|
|
|
GParamSpec **arg_specs;
|
|
|
|
gint n_arg_specs;
|
2021-04-30 13:51:04 -04:00
|
|
|
gint actual_arg_count;
|
|
|
|
gint consumed_arg_count = 0;
|
2008-09-19 09:47:10 +00:00
|
|
|
gchar error_str[1024];
|
2003-02-14 22:33:22 +00:00
|
|
|
gint i;
|
2006-10-16 01:08:54 +00:00
|
|
|
pointer return_val = sc->NIL;
|
2007-10-21 20:39:01 +00:00
|
|
|
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
2021-01-28 08:31:11 -05:00
|
|
|
g_debug ("In %s()", G_STRFUNC);
|
|
|
|
|
2006-10-16 01:08:54 +00:00
|
|
|
if (a == sc->NIL)
|
2021-01-28 08:31:11 -05:00
|
|
|
/* Some ScriptFu function is calling this incorrectly. */
|
|
|
|
return implementation_error (sc,
|
2021-01-28 09:08:39 -05:00
|
|
|
"Procedure argument marshaller was called with no arguments. "
|
|
|
|
"The procedure to be executed and the arguments it requires "
|
|
|
|
"(possibly none) must be specified.",
|
|
|
|
0);
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
2006-10-16 01:08:54 +00:00
|
|
|
/* The PDB procedure name is the argument or first argument of the list */
|
|
|
|
if (sc->vptr->is_pair (a))
|
|
|
|
proc_name = g_strdup (sc->vptr->string_value (sc->vptr->pair_car (a)));
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
else
|
2006-10-16 01:08:54 +00:00
|
|
|
proc_name = g_strdup (sc->vptr->string_value (a));
|
|
|
|
|
2021-01-28 08:31:11 -05:00
|
|
|
g_debug ("proc name: %s", proc_name);
|
|
|
|
g_debug ("parms rcvd: %d", sc->vptr->list_length (sc, a)-1);
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
2021-01-28 09:08:39 -05:00
|
|
|
if (deprecated )
|
|
|
|
g_warning ("PDB procedure name %s is deprecated, please use %s.",
|
|
|
|
deprecated_name_for (proc_name),
|
|
|
|
proc_name);
|
|
|
|
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
/* report the current command */
|
2004-08-31 17:54:46 +00:00
|
|
|
script_fu_interface_report_cc (proc_name);
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
|
|
|
/* Attempt to fetch the procedure from the database */
|
2019-08-12 20:11:45 +02:00
|
|
|
procedure = gimp_pdb_lookup_procedure (gimp_get_pdb (), proc_name);
|
|
|
|
|
|
|
|
if (! procedure)
|
2004-10-04 22:00:16 +00:00
|
|
|
{
|
|
|
|
g_snprintf (error_str, sizeof (error_str),
|
2021-01-28 08:31:11 -05:00
|
|
|
"Invalid procedure name: %s", proc_name);
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_error (sc, error_str, 0);
|
2004-10-04 22:00:16 +00:00
|
|
|
}
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
arg_specs = gimp_procedure_get_arguments (procedure, &n_arg_specs);
|
2021-04-30 13:51:04 -04:00
|
|
|
actual_arg_count = sc->vptr->list_length (sc, a) - 1;
|
|
|
|
|
|
|
|
/* Check the supplied number of arguments.
|
|
|
|
* This only gives warnings to the console.
|
|
|
|
* It does not ensure that the count of supplied args equals the count of formal args.
|
|
|
|
* Subsequent code must not assume that.
|
|
|
|
*
|
|
|
|
* When too few supplied args, when permissive, scriptfu or downstream machinery
|
|
|
|
* can try to provide missing args e.g. defaults.
|
|
|
|
*
|
|
|
|
* Extra supplied args can be discarded.
|
|
|
|
* Formerly, this was a deprecated behavior depending on "permissive".
|
|
|
|
*/
|
2021-01-28 09:08:39 -05:00
|
|
|
{
|
2021-04-30 13:51:04 -04:00
|
|
|
if (actual_arg_count > n_arg_specs)
|
2021-01-28 09:08:39 -05:00
|
|
|
{
|
2021-04-30 13:51:04 -04:00
|
|
|
/* Warn, but permit extra args. Will discard args from script.*/
|
|
|
|
g_warning ("in script, permitting too many args to %s", proc_name);
|
2021-01-28 09:08:39 -05:00
|
|
|
}
|
2021-04-30 13:51:04 -04:00
|
|
|
else if (actual_arg_count < n_arg_specs)
|
2021-01-28 09:08:39 -05:00
|
|
|
{
|
2021-04-30 13:51:04 -04:00
|
|
|
/* Warn, but permit too few args.
|
|
|
|
* Scriptfu or downstream might provide missing args.
|
|
|
|
* It is author friendly to continue to parse the script for type errors.
|
|
|
|
*/
|
|
|
|
g_warning ("in script, permitting too few args to %s", proc_name);
|
2021-01-28 09:08:39 -05:00
|
|
|
}
|
2021-04-30 13:51:04 -04:00
|
|
|
/* else equal counts of args. */
|
2021-01-28 09:08:39 -05:00
|
|
|
}
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
|
|
|
/* Marshall the supplied arguments */
|
2019-08-12 20:11:45 +02:00
|
|
|
args = gimp_value_array_new (n_arg_specs);
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
for (i = 0; i < n_arg_specs; i++)
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
{
|
2019-08-12 20:11:45 +02:00
|
|
|
GParamSpec *arg_spec = arg_specs[i];
|
|
|
|
GValue value = G_VALUE_INIT;
|
2021-01-28 08:31:11 -05:00
|
|
|
guint n_elements; /* !!! unsigned length */
|
|
|
|
pointer vector; /* !!! list or vector */
|
2019-08-12 20:11:45 +02:00
|
|
|
gint j;
|
2008-09-09 14:22:44 +00:00
|
|
|
|
2021-04-30 13:51:04 -04:00
|
|
|
consumed_arg_count++;
|
|
|
|
|
|
|
|
if (consumed_arg_count > actual_arg_count)
|
|
|
|
{
|
|
|
|
/* Exhausted supplied arguments before formal specs. */
|
|
|
|
|
|
|
|
/* Say formal type of first missing arg. */
|
|
|
|
g_warning ("Missing arg type: %s", g_type_name (G_PARAM_SPEC_VALUE_TYPE (arg_spec)));
|
|
|
|
|
|
|
|
/* Break loop over formal specs. Continuation is to call PDB with partial args. */
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
a = sc->vptr->pair_cdr (a); /* advance pointer to next arg in list. */
|
2006-10-16 01:08:54 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
g_value_init (&value, G_PARAM_SPEC_VALUE_TYPE (arg_spec));
|
2006-06-08 15:14:16 +00:00
|
|
|
|
2021-01-28 09:08:39 -05:00
|
|
|
debug_in_arg (sc, a, i, g_type_name (G_VALUE_TYPE (&value)));
|
2021-01-28 08:31:11 -05:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
if (G_VALUE_HOLDS_INT (&value))
|
2004-04-08 16:05:27 +00:00
|
|
|
{
|
2019-08-12 20:11:45 +02:00
|
|
|
if (! sc->vptr->is_number (sc->vptr->pair_car (a)))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error (sc, "numeric", i, proc_name);
|
2021-01-28 08:31:11 -05:00
|
|
|
else
|
|
|
|
g_value_set_int (&value,
|
2021-01-28 09:08:39 -05:00
|
|
|
sc->vptr->ivalue (sc->vptr->pair_car (a)));
|
2019-08-12 20:11:45 +02:00
|
|
|
}
|
|
|
|
else if (G_VALUE_HOLDS_UINT (&value))
|
|
|
|
{
|
|
|
|
if (! sc->vptr->is_number (sc->vptr->pair_car (a)))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error (sc, "numeric", i, proc_name);
|
2021-01-28 08:31:11 -05:00
|
|
|
else
|
|
|
|
g_value_set_uint (&value,
|
2021-01-28 09:08:39 -05:00
|
|
|
sc->vptr->ivalue (sc->vptr->pair_car (a)));
|
2019-09-17 21:42:10 +02:00
|
|
|
}
|
|
|
|
else if (G_VALUE_HOLDS_UCHAR (&value))
|
|
|
|
{
|
|
|
|
if (! sc->vptr->is_number (sc->vptr->pair_car (a)))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error (sc, "numeric", i, proc_name);
|
2021-01-28 08:31:11 -05:00
|
|
|
else
|
|
|
|
g_value_set_uchar (&value,
|
2021-01-28 09:08:39 -05:00
|
|
|
sc->vptr->ivalue (sc->vptr->pair_car (a)));
|
2019-08-12 20:11:45 +02:00
|
|
|
}
|
|
|
|
else if (G_VALUE_HOLDS_DOUBLE (&value))
|
|
|
|
{
|
|
|
|
if (! sc->vptr->is_number (sc->vptr->pair_car (a)))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error (sc, "numeric", i, proc_name);
|
2021-01-28 08:31:11 -05:00
|
|
|
else
|
|
|
|
g_value_set_double (&value,
|
2021-01-28 09:08:39 -05:00
|
|
|
sc->vptr->rvalue (sc->vptr->pair_car (a)));
|
2019-08-12 20:11:45 +02:00
|
|
|
}
|
|
|
|
else if (G_VALUE_HOLDS_ENUM (&value))
|
|
|
|
{
|
|
|
|
if (! sc->vptr->is_number (sc->vptr->pair_car (a)))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error (sc, "numeric", i, proc_name);
|
2021-01-28 08:31:11 -05:00
|
|
|
else
|
|
|
|
g_value_set_enum (&value,
|
2021-01-28 09:08:39 -05:00
|
|
|
sc->vptr->ivalue (sc->vptr->pair_car (a)));
|
2019-08-12 20:11:45 +02:00
|
|
|
}
|
|
|
|
else if (G_VALUE_HOLDS_BOOLEAN (&value))
|
|
|
|
{
|
|
|
|
if (! sc->vptr->is_number (sc->vptr->pair_car (a)))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error (sc, "numeric", i, proc_name);
|
2021-01-28 08:31:11 -05:00
|
|
|
else
|
|
|
|
g_value_set_boolean (&value,
|
2021-01-28 09:08:39 -05:00
|
|
|
sc->vptr->ivalue (sc->vptr->pair_car (a)));
|
2019-08-12 20:11:45 +02:00
|
|
|
}
|
|
|
|
else if (G_VALUE_HOLDS_STRING (&value))
|
|
|
|
{
|
|
|
|
if (! sc->vptr->is_string (sc->vptr->pair_car (a)))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error (sc, "string", i, proc_name);
|
2021-01-28 08:31:11 -05:00
|
|
|
else
|
2019-08-12 20:11:45 +02:00
|
|
|
g_value_set_string (&value,
|
|
|
|
sc->vptr->string_value (sc->vptr->pair_car (a)));
|
2019-09-04 10:28:50 +02:00
|
|
|
}
|
2020-12-23 21:15:43 +01:00
|
|
|
else if (G_VALUE_HOLDS (&value, G_TYPE_STRV))
|
|
|
|
{
|
|
|
|
vector = sc->vptr->pair_car (a); /* vector is pointing to a list */
|
|
|
|
if (! sc->vptr->is_list (sc, vector))
|
|
|
|
return script_type_error (sc, "vector", i, proc_name);
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gchar **array;
|
|
|
|
|
|
|
|
n_elements = sc->vptr->list_length (sc, vector);
|
|
|
|
|
|
|
|
array = g_new0 (gchar *, n_elements + 1);
|
|
|
|
|
|
|
|
for (j = 0; j < n_elements; j++)
|
|
|
|
{
|
|
|
|
pointer v_element = sc->vptr->pair_car (vector);
|
|
|
|
|
|
|
|
if (!sc->vptr->is_string (v_element))
|
|
|
|
{
|
|
|
|
g_snprintf (error_str, sizeof (error_str),
|
|
|
|
"Item %d in vector is not a string (argument %d for function %s)",
|
|
|
|
j+1, i+1, proc_name);
|
|
|
|
g_strfreev (array);
|
|
|
|
return foreign_error (sc, error_str, vector);
|
|
|
|
}
|
|
|
|
|
|
|
|
array[j] = g_strdup (sc->vptr->string_value (v_element));
|
|
|
|
|
|
|
|
vector = sc->vptr->pair_cdr (vector);
|
|
|
|
}
|
|
|
|
|
|
|
|
g_value_take_boxed (&value, array);
|
|
|
|
|
|
|
|
#if DEBUG_MARSHALL
|
|
|
|
{
|
|
|
|
glong count = sc->vptr->list_length ( sc, sc->vptr->pair_car (a) );
|
|
|
|
g_printerr (" string vector has %ld elements\n", count);
|
|
|
|
if (count > 0)
|
|
|
|
{
|
|
|
|
g_printerr (" ");
|
|
|
|
for (j = 0; j < count; ++j)
|
|
|
|
g_printerr (" \"%s\"",
|
|
|
|
args[i].data.d_strv[j]);
|
|
|
|
g_printerr ("\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
}
|
2019-09-04 10:28:50 +02:00
|
|
|
else if (GIMP_VALUE_HOLDS_DISPLAY (&value))
|
|
|
|
{
|
|
|
|
if (! sc->vptr->is_number (sc->vptr->pair_car (a)))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error (sc, "numeric", i, proc_name);
|
2021-01-28 08:31:11 -05:00
|
|
|
else
|
2019-09-04 10:28:50 +02:00
|
|
|
{
|
|
|
|
GimpDisplay *display =
|
|
|
|
gimp_display_get_by_id (sc->vptr->ivalue (sc->vptr->pair_car (a)));
|
|
|
|
|
|
|
|
g_value_set_object (&value, display);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (GIMP_VALUE_HOLDS_IMAGE (&value))
|
|
|
|
{
|
|
|
|
if (! sc->vptr->is_number (sc->vptr->pair_car (a)))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error (sc, "numeric", i, proc_name);
|
2021-01-28 08:31:11 -05:00
|
|
|
else
|
2019-09-04 10:28:50 +02:00
|
|
|
{
|
|
|
|
GimpImage *image =
|
|
|
|
gimp_image_get_by_id (sc->vptr->ivalue (sc->vptr->pair_car (a)));
|
|
|
|
|
|
|
|
g_value_set_object (&value, image);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (GIMP_VALUE_HOLDS_LAYER (&value))
|
|
|
|
{
|
|
|
|
if (! sc->vptr->is_number (sc->vptr->pair_car (a)))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error (sc, "numeric", i, proc_name);
|
2021-01-28 08:31:11 -05:00
|
|
|
else
|
2019-09-04 10:28:50 +02:00
|
|
|
{
|
|
|
|
GimpLayer *layer =
|
|
|
|
gimp_layer_get_by_id (sc->vptr->ivalue (sc->vptr->pair_car (a)));
|
|
|
|
|
|
|
|
g_value_set_object (&value, layer);
|
2019-09-17 21:42:10 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (GIMP_VALUE_HOLDS_LAYER_MASK (&value))
|
|
|
|
{
|
|
|
|
if (! sc->vptr->is_number (sc->vptr->pair_car (a)))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error (sc, "numeric", i, proc_name);
|
2021-01-28 08:31:11 -05:00
|
|
|
else
|
2019-09-17 21:42:10 +02:00
|
|
|
{
|
|
|
|
GimpLayerMask *layer_mask =
|
|
|
|
gimp_layer_mask_get_by_id (sc->vptr->ivalue (sc->vptr->pair_car (a)));
|
|
|
|
|
|
|
|
g_value_set_object (&value, layer_mask);
|
2019-09-04 10:28:50 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (GIMP_VALUE_HOLDS_CHANNEL (&value))
|
|
|
|
{
|
|
|
|
if (! sc->vptr->is_number (sc->vptr->pair_car (a)))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error (sc, "numeric", i, proc_name);
|
2021-01-28 08:31:11 -05:00
|
|
|
else
|
2019-09-04 10:28:50 +02:00
|
|
|
{
|
|
|
|
GimpChannel *channel =
|
|
|
|
gimp_channel_get_by_id (sc->vptr->ivalue (sc->vptr->pair_car (a)));
|
|
|
|
|
|
|
|
g_value_set_object (&value, channel);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (GIMP_VALUE_HOLDS_DRAWABLE (&value))
|
|
|
|
{
|
|
|
|
if (! sc->vptr->is_number (sc->vptr->pair_car (a)))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error (sc, "numeric", i, proc_name);
|
2021-01-28 08:31:11 -05:00
|
|
|
else
|
2019-09-04 10:28:50 +02:00
|
|
|
{
|
2021-04-30 13:51:04 -04:00
|
|
|
gint id = sc->vptr->ivalue (sc->vptr->pair_car (a));
|
2019-09-04 10:28:50 +02:00
|
|
|
|
2021-04-30 13:51:04 -04:00
|
|
|
pointer error = marshal_ID_to_drawable(sc, a, id, &value);
|
|
|
|
if (error)
|
|
|
|
return error;
|
2019-09-04 10:28:50 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (GIMP_VALUE_HOLDS_VECTORS (&value))
|
|
|
|
{
|
|
|
|
if (! sc->vptr->is_number (sc->vptr->pair_car (a)))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error (sc, "numeric", i, proc_name);
|
2021-01-28 08:31:11 -05:00
|
|
|
else
|
2019-09-04 10:28:50 +02:00
|
|
|
{
|
|
|
|
GimpVectors *vectors =
|
|
|
|
gimp_vectors_get_by_id (sc->vptr->ivalue (sc->vptr->pair_car (a)));
|
|
|
|
|
|
|
|
g_value_set_object (&value, vectors);
|
2019-09-17 21:42:10 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (GIMP_VALUE_HOLDS_ITEM (&value))
|
|
|
|
{
|
|
|
|
if (! sc->vptr->is_number (sc->vptr->pair_car (a)))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error (sc, "numeric", i, proc_name);
|
2021-01-28 08:31:11 -05:00
|
|
|
else
|
2019-09-17 21:42:10 +02:00
|
|
|
{
|
2022-08-03 15:18:09 -04:00
|
|
|
gint item_ID;
|
|
|
|
item_ID = sc->vptr->ivalue (sc->vptr->pair_car (a));
|
2019-09-17 21:42:10 +02:00
|
|
|
|
2022-08-03 15:18:09 -04:00
|
|
|
/* Avoid failed assertion in libgimp.*/
|
|
|
|
if (gimp_item_id_is_valid (item_ID))
|
|
|
|
{
|
|
|
|
GimpItem *item = gimp_item_get_by_id (item_ID);
|
|
|
|
g_value_set_object (&value, item);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return script_error (sc, "runtime: invalid item ID", a);
|
|
|
|
}
|
2006-10-16 01:08:54 +00:00
|
|
|
}
|
2019-08-12 20:11:45 +02:00
|
|
|
}
|
|
|
|
else if (GIMP_VALUE_HOLDS_INT32_ARRAY (&value))
|
|
|
|
{
|
2006-11-09 23:03:55 +00:00
|
|
|
vector = sc->vptr->pair_car (a);
|
2019-08-12 20:11:45 +02:00
|
|
|
if (! sc->vptr->is_vector (vector))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error (sc, "vector", i, proc_name);
|
2021-01-28 08:31:11 -05:00
|
|
|
else
|
2004-04-08 16:05:27 +00:00
|
|
|
{
|
2021-01-28 08:31:11 -05:00
|
|
|
/* !!! Comments applying to all array args.
|
|
|
|
* n_elements is expected list length, from previous argument.
|
|
|
|
* A PDB procedure takes args paired: ...length, array...
|
|
|
|
* and a script passes the same paired args (..., 1, '("foo"))
|
|
|
|
* (FUTURE: a more object oriented design for the PDB API
|
|
|
|
* would obviate need for this discussion.)
|
|
|
|
*
|
|
|
|
* When a script passes a shorter or empty list,
|
|
|
|
* ensure we don't segfault on cdr past end of list.
|
|
|
|
*
|
|
|
|
* n_elements is unsigned, we don't need to check >= 0
|
|
|
|
*
|
|
|
|
* Since we are not checking for equality of passed length
|
|
|
|
* to actual container length, we adapt an array
|
|
|
|
* that is shorter than specified by the length arg.
|
|
|
|
* Ignoring a discrepancy by the script author.
|
|
|
|
* FUTURE: List must be *exactly* n_elements long.
|
|
|
|
* n_elements != sc->vptr->list_length (sc, vector))
|
|
|
|
*/
|
2019-08-12 20:11:45 +02:00
|
|
|
gint32 *array;
|
|
|
|
|
2019-08-20 01:03:38 +02:00
|
|
|
n_elements = GIMP_VALUES_GET_INT (args, i - 1);
|
2019-08-12 20:11:45 +02:00
|
|
|
|
2021-01-28 08:31:11 -05:00
|
|
|
if (n_elements > sc->vptr->vector_length (vector))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_length_error_in_vector (sc, i, proc_name, n_elements, vector);
|
2004-04-08 16:05:27 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
array = g_new0 (gint32, n_elements);
|
2006-11-09 23:03:55 +00:00
|
|
|
|
|
|
|
for (j = 0; j < n_elements; j++)
|
|
|
|
{
|
|
|
|
pointer v_element = sc->vptr->vector_elem (vector, j);
|
|
|
|
|
|
|
|
/* FIXME: Check values in vector stay within range for each type. */
|
2019-08-12 20:11:45 +02:00
|
|
|
if (! sc->vptr->is_number (v_element))
|
2006-11-09 23:03:55 +00:00
|
|
|
{
|
2019-08-12 20:11:45 +02:00
|
|
|
g_free (array);
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error_in_container (sc, "numeric", i, j, proc_name, vector);
|
2006-11-09 23:03:55 +00:00
|
|
|
}
|
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
array[j] = (gint32) sc->vptr->ivalue (v_element);
|
2006-11-09 23:03:55 +00:00
|
|
|
}
|
2004-10-04 22:00:16 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
gimp_value_take_int32_array (&value, array, n_elements);
|
|
|
|
|
2021-01-28 09:08:39 -05:00
|
|
|
debug_vector (sc, vector, "%ld");
|
2006-11-09 23:03:55 +00:00
|
|
|
}
|
2019-08-12 20:11:45 +02:00
|
|
|
}
|
2023-05-23 23:37:46 +02:00
|
|
|
else if (G_VALUE_HOLDS (&value, G_TYPE_BYTES))
|
2019-08-12 20:11:45 +02:00
|
|
|
{
|
2006-11-09 23:03:55 +00:00
|
|
|
vector = sc->vptr->pair_car (a);
|
2019-08-12 20:11:45 +02:00
|
|
|
if (! sc->vptr->is_vector (vector))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error (sc, "vector", i, proc_name);
|
2021-01-28 08:31:11 -05:00
|
|
|
else
|
2004-04-08 16:05:27 +00:00
|
|
|
{
|
2019-08-12 20:11:45 +02:00
|
|
|
guint8 *array;
|
|
|
|
|
2023-05-23 23:37:46 +02:00
|
|
|
n_elements = sc->vptr->vector_length (vector);
|
2004-10-04 22:00:16 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
array = g_new0 (guint8, n_elements);
|
2006-11-09 23:03:55 +00:00
|
|
|
|
|
|
|
for (j = 0; j < n_elements; j++)
|
|
|
|
{
|
|
|
|
pointer v_element = sc->vptr->vector_elem (vector, j);
|
|
|
|
|
2007-05-15 16:45:51 +00:00
|
|
|
if (!sc->vptr->is_number (v_element))
|
2006-11-09 23:03:55 +00:00
|
|
|
{
|
2019-08-12 20:11:45 +02:00
|
|
|
g_free (array);
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error_in_container (sc, "numeric", i, j, proc_name, vector);
|
2006-11-09 23:03:55 +00:00
|
|
|
}
|
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
array[j] = (guint8) sc->vptr->ivalue (v_element);
|
2006-11-09 23:03:55 +00:00
|
|
|
}
|
2006-10-16 01:08:54 +00:00
|
|
|
|
2023-05-23 23:37:46 +02:00
|
|
|
g_value_take_boxed (&value, g_bytes_new_take (array, n_elements));
|
2019-08-12 20:11:45 +02:00
|
|
|
|
2021-01-28 09:08:39 -05:00
|
|
|
debug_vector (sc, vector, "%ld");
|
2006-11-09 23:03:55 +00:00
|
|
|
}
|
2019-08-12 20:11:45 +02:00
|
|
|
}
|
|
|
|
else if (GIMP_VALUE_HOLDS_FLOAT_ARRAY (&value))
|
|
|
|
{
|
2006-11-09 23:03:55 +00:00
|
|
|
vector = sc->vptr->pair_car (a);
|
2019-08-12 20:11:45 +02:00
|
|
|
if (! sc->vptr->is_vector (vector))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error (sc, "vector", i, proc_name);
|
2021-01-28 08:31:11 -05:00
|
|
|
else
|
2004-04-08 16:05:27 +00:00
|
|
|
{
|
2019-08-12 20:11:45 +02:00
|
|
|
gdouble *array;
|
|
|
|
|
2019-08-20 01:03:38 +02:00
|
|
|
n_elements = GIMP_VALUES_GET_INT (args, i - 1);
|
2019-08-12 20:11:45 +02:00
|
|
|
|
2021-01-28 08:31:11 -05:00
|
|
|
if (n_elements > sc->vptr->vector_length (vector))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_length_error_in_vector (sc, i, proc_name, n_elements, vector);
|
2004-10-04 22:00:16 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
array = g_new0 (gdouble, n_elements);
|
2006-11-09 23:03:55 +00:00
|
|
|
|
|
|
|
for (j = 0; j < n_elements; j++)
|
|
|
|
{
|
|
|
|
pointer v_element = sc->vptr->vector_elem (vector, j);
|
|
|
|
|
|
|
|
if (!sc->vptr->is_number (v_element))
|
|
|
|
{
|
2019-08-12 20:11:45 +02:00
|
|
|
g_free (array);
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error_in_container (sc, "numeric", i, j, proc_name, vector);
|
2006-11-09 23:03:55 +00:00
|
|
|
}
|
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
array[j] = (gfloat) sc->vptr->rvalue (v_element);
|
2006-11-09 23:03:55 +00:00
|
|
|
}
|
2006-10-16 01:08:54 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
gimp_value_take_float_array (&value, array, n_elements);
|
|
|
|
|
2021-01-28 09:08:39 -05:00
|
|
|
debug_vector (sc, vector, "%f");
|
2006-11-09 23:03:55 +00:00
|
|
|
}
|
2019-08-12 20:11:45 +02:00
|
|
|
}
|
|
|
|
else if (GIMP_VALUE_HOLDS_RGB (&value))
|
|
|
|
{
|
|
|
|
GimpRGB color;
|
2004-04-08 16:05:27 +00:00
|
|
|
|
2006-10-16 01:08:54 +00:00
|
|
|
if (sc->vptr->is_string (sc->vptr->pair_car (a)))
|
2006-06-08 14:09:44 +00:00
|
|
|
{
|
2019-08-12 20:11:45 +02:00
|
|
|
if (! gimp_rgb_parse_css (&color,
|
2006-10-16 01:08:54 +00:00
|
|
|
sc->vptr->string_value (sc->vptr->pair_car (a)),
|
|
|
|
-1))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error (sc, "color string", i, proc_name);
|
2006-06-08 14:09:44 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
gimp_rgb_set_alpha (&color, 1.0);
|
2021-01-28 08:31:11 -05:00
|
|
|
g_debug ("(%s)", sc->vptr->string_value (sc->vptr->pair_car (a)));
|
2006-06-08 14:09:44 +00:00
|
|
|
}
|
2006-10-16 01:08:54 +00:00
|
|
|
else if (sc->vptr->is_list (sc, sc->vptr->pair_car (a)) &&
|
|
|
|
sc->vptr->list_length (sc, sc->vptr->pair_car (a)) == 3)
|
2004-04-08 16:05:27 +00:00
|
|
|
{
|
2006-10-16 01:08:54 +00:00
|
|
|
pointer color_list;
|
2014-10-31 12:13:07 -04:00
|
|
|
guchar r = 0, g = 0, b = 0;
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
2006-10-16 01:08:54 +00:00
|
|
|
color_list = sc->vptr->pair_car (a);
|
2014-10-31 12:13:07 -04:00
|
|
|
if (sc->vptr->is_number (sc->vptr->pair_car (color_list)))
|
|
|
|
r = CLAMP (sc->vptr->ivalue (sc->vptr->pair_car (color_list)),
|
|
|
|
0, 255);
|
|
|
|
else
|
2021-01-28 08:31:11 -05:00
|
|
|
return script_type_error_in_container (
|
|
|
|
sc, "numeric", i, 0, proc_name, 0);
|
2014-10-31 12:13:07 -04:00
|
|
|
|
2006-10-16 01:08:54 +00:00
|
|
|
color_list = sc->vptr->pair_cdr (color_list);
|
2014-10-31 12:13:07 -04:00
|
|
|
if (sc->vptr->is_number (sc->vptr->pair_car (color_list)))
|
|
|
|
g = CLAMP (sc->vptr->ivalue (sc->vptr->pair_car (color_list)),
|
|
|
|
0, 255);
|
|
|
|
else
|
2021-01-28 08:31:11 -05:00
|
|
|
return script_type_error_in_container (
|
|
|
|
sc, "numeric", i, 1, proc_name, 0);
|
2014-10-31 12:13:07 -04:00
|
|
|
|
2006-10-16 01:08:54 +00:00
|
|
|
color_list = sc->vptr->pair_cdr (color_list);
|
2014-10-31 12:13:07 -04:00
|
|
|
if (sc->vptr->is_number (sc->vptr->pair_car (color_list)))
|
|
|
|
b = CLAMP (sc->vptr->ivalue (sc->vptr->pair_car (color_list)),
|
|
|
|
0, 255);
|
|
|
|
else
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error_in_container (sc, "numeric", i, 2, proc_name, 0);
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
2021-01-28 08:31:11 -05:00
|
|
|
gimp_rgba_set_uchar (&color, r, g, b, 255);
|
|
|
|
gimp_value_set_rgb (&value, &color);
|
|
|
|
g_debug ("(%d %d %d)", r, g, b);
|
2004-04-08 16:05:27 +00:00
|
|
|
}
|
2006-06-08 14:09:44 +00:00
|
|
|
else
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error (sc, "color string or list", i, proc_name);
|
2019-08-12 20:11:45 +02:00
|
|
|
}
|
|
|
|
else if (GIMP_VALUE_HOLDS_RGB_ARRAY (&value))
|
|
|
|
{
|
2008-07-14 14:09:16 +00:00
|
|
|
vector = sc->vptr->pair_car (a);
|
2019-08-12 20:11:45 +02:00
|
|
|
if (! sc->vptr->is_vector (vector))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error (sc, "vector", i, proc_name);
|
2021-01-28 08:31:11 -05:00
|
|
|
else
|
2008-07-14 14:09:16 +00:00
|
|
|
{
|
2019-08-12 20:11:45 +02:00
|
|
|
GimpRGB *array;
|
|
|
|
|
2019-08-20 01:03:38 +02:00
|
|
|
n_elements = GIMP_VALUES_GET_INT (args, i - 1);
|
2019-08-12 20:11:45 +02:00
|
|
|
|
2021-01-28 08:31:11 -05:00
|
|
|
if (n_elements > sc->vptr->vector_length (vector))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_length_error_in_vector (sc, i, proc_name, n_elements, vector);
|
2008-07-14 14:09:16 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
array = g_new0 (GimpRGB, n_elements);
|
2008-07-14 14:09:16 +00:00
|
|
|
|
|
|
|
for (j = 0; j < n_elements; j++)
|
|
|
|
{
|
|
|
|
pointer v_element = sc->vptr->vector_elem (vector, j);
|
|
|
|
pointer color_list;
|
|
|
|
guchar r, g, b;
|
|
|
|
|
|
|
|
if (! (sc->vptr->is_list (sc,
|
|
|
|
sc->vptr->pair_car (v_element)) &&
|
|
|
|
sc->vptr->list_length (sc,
|
|
|
|
sc->vptr->pair_car (v_element)) == 3))
|
|
|
|
{
|
2021-01-28 08:31:11 -05:00
|
|
|
g_free (array);
|
2008-07-14 14:09:16 +00:00
|
|
|
g_snprintf (error_str, sizeof (error_str),
|
|
|
|
"Item %d in vector is not a color "
|
|
|
|
"(argument %d for function %s)",
|
|
|
|
j+1, i+1, proc_name);
|
2021-01-28 08:31:11 -05:00
|
|
|
return script_error (sc, error_str, 0);
|
2008-07-14 14:09:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
color_list = sc->vptr->pair_car (v_element);
|
|
|
|
r = CLAMP (sc->vptr->ivalue (sc->vptr->pair_car (color_list)),
|
|
|
|
0, 255);
|
|
|
|
color_list = sc->vptr->pair_cdr (color_list);
|
|
|
|
g = CLAMP (sc->vptr->ivalue (sc->vptr->pair_car (color_list)),
|
|
|
|
0, 255);
|
|
|
|
color_list = sc->vptr->pair_cdr (color_list);
|
|
|
|
b = CLAMP (sc->vptr->ivalue (sc->vptr->pair_car (color_list)),
|
|
|
|
0, 255);
|
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
gimp_rgba_set_uchar (&array[i], r, g, b, 255);
|
2008-07-14 14:09:16 +00:00
|
|
|
}
|
2019-08-12 20:11:45 +02:00
|
|
|
|
|
|
|
gimp_value_take_rgb_array (&value, array, n_elements);
|
|
|
|
|
2021-01-28 08:31:11 -05:00
|
|
|
g_debug ("color vector has %ld elements", sc->vptr->vector_length (vector));
|
2008-07-14 14:09:16 +00:00
|
|
|
}
|
2019-08-12 20:11:45 +02:00
|
|
|
}
|
|
|
|
else if (GIMP_VALUE_HOLDS_PARASITE (&value))
|
|
|
|
{
|
|
|
|
if (! sc->vptr->is_list (sc, sc->vptr->pair_car (a)) ||
|
2006-10-16 01:08:54 +00:00
|
|
|
sc->vptr->list_length (sc, sc->vptr->pair_car (a)) != 3)
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error (sc, "list", i, proc_name);
|
2021-01-28 08:31:11 -05:00
|
|
|
else
|
2004-04-08 16:05:27 +00:00
|
|
|
{
|
2019-08-12 20:11:45 +02:00
|
|
|
GimpParasite parasite;
|
|
|
|
pointer temp_val;
|
2008-09-19 12:15:26 +00:00
|
|
|
|
2004-04-08 16:05:27 +00:00
|
|
|
/* parasite->name */
|
2008-09-19 12:15:26 +00:00
|
|
|
temp_val = sc->vptr->pair_car (a);
|
2004-04-08 16:05:27 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
if (! sc->vptr->is_string (sc->vptr->pair_car (temp_val)))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error_in_container (sc, "string", i, 0, proc_name, 0);
|
2004-04-08 16:05:27 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
parasite.name =
|
2008-09-19 12:15:26 +00:00
|
|
|
sc->vptr->string_value (sc->vptr->pair_car (temp_val));
|
2021-01-28 08:31:11 -05:00
|
|
|
g_debug ("name '%s'", parasite.name);
|
2004-04-08 16:05:27 +00:00
|
|
|
|
|
|
|
/* parasite->flags */
|
2008-09-19 12:15:26 +00:00
|
|
|
temp_val = sc->vptr->pair_cdr (temp_val);
|
2004-04-08 16:05:27 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
if (! sc->vptr->is_number (sc->vptr->pair_car (temp_val)))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error_in_container (sc, "numeric", i, 1, proc_name, 0);
|
2004-04-08 16:05:27 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
parasite.flags =
|
2008-09-19 12:15:26 +00:00
|
|
|
sc->vptr->ivalue (sc->vptr->pair_car (temp_val));
|
2021-01-28 08:31:11 -05:00
|
|
|
g_debug ("flags %d", parasite.flags);
|
2004-04-08 16:05:27 +00:00
|
|
|
|
2006-10-16 01:08:54 +00:00
|
|
|
/* parasite->data */
|
2008-09-19 12:15:26 +00:00
|
|
|
temp_val = sc->vptr->pair_cdr (temp_val);
|
2004-04-08 16:05:27 +00:00
|
|
|
|
2008-09-19 12:15:26 +00:00
|
|
|
if (!sc->vptr->is_string (sc->vptr->pair_car (temp_val)))
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_type_error_in_container (
|
2021-01-28 08:31:11 -05:00
|
|
|
sc, "string", i, 2, proc_name, 0);
|
2004-04-08 16:05:27 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
parasite.data =
|
2008-09-19 12:15:26 +00:00
|
|
|
sc->vptr->string_value (sc->vptr->pair_car (temp_val));
|
2019-08-12 20:11:45 +02:00
|
|
|
parasite.size = strlen (parasite.data);
|
2008-09-19 12:15:26 +00:00
|
|
|
|
2021-01-28 08:31:11 -05:00
|
|
|
g_debug ("size %d", parasite.size);
|
|
|
|
g_debug ("data '%s'", (char *)parasite.data);
|
2004-04-08 16:05:27 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
g_value_set_boxed (&value, ¶site);
|
|
|
|
}
|
|
|
|
}
|
2021-04-30 13:51:04 -04:00
|
|
|
else if (GIMP_VALUE_HOLDS_OBJECT_ARRAY (&value))
|
|
|
|
{
|
|
|
|
vector = sc->vptr->pair_car (a);
|
|
|
|
|
|
|
|
if (sc->vptr->is_vector (vector))
|
|
|
|
{
|
|
|
|
pointer error = marshal_vector_to_drawable_array (sc, vector, &value);
|
|
|
|
if (error)
|
|
|
|
return error;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
return script_type_error (sc, "vector", i, proc_name);
|
|
|
|
}
|
|
|
|
else if (G_VALUE_TYPE (&value) == G_TYPE_FILE)
|
|
|
|
{
|
|
|
|
if (! sc->vptr->is_string (sc->vptr->pair_car (a)))
|
|
|
|
return script_type_error (sc, "string for path", i, proc_name);
|
|
|
|
marshal_path_string_to_gfile (sc, a, &value);
|
|
|
|
}
|
2019-08-12 20:11:45 +02:00
|
|
|
else if (G_VALUE_TYPE (&value) == GIMP_TYPE_PDB_STATUS_TYPE)
|
|
|
|
{
|
2021-01-28 08:31:11 -05:00
|
|
|
/* A PDB procedure signature wrongly requires a status. */
|
|
|
|
return implementation_error (sc,
|
2021-01-28 09:08:39 -05:00
|
|
|
"Status is for return types, not arguments",
|
|
|
|
sc->vptr->pair_car (a));
|
2019-08-12 20:11:45 +02:00
|
|
|
}
|
2022-09-05 19:28:35 -04:00
|
|
|
else if (GIMP_VALUE_HOLDS_RESOURCE (&value))
|
|
|
|
{
|
|
|
|
if (! sc->vptr->is_string (sc->vptr->pair_car (a)))
|
|
|
|
return script_type_error (sc, "string", i, proc_name);
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* Create new instance of a resource object. */
|
|
|
|
GimpResource *resource;
|
2023-05-31 16:12:04 +02:00
|
|
|
GType type = G_VALUE_TYPE (&value);
|
|
|
|
const gchar *name = sc->vptr->string_value (sc->vptr->pair_car (a));
|
|
|
|
resource = gimp_resource_get_by_name (type, name);
|
2022-09-05 19:28:35 -04:00
|
|
|
|
|
|
|
g_value_set_object (&value, resource);
|
|
|
|
}
|
|
|
|
}
|
2019-08-12 20:11:45 +02:00
|
|
|
else
|
|
|
|
{
|
2004-04-08 16:05:27 +00:00
|
|
|
g_snprintf (error_str, sizeof (error_str),
|
2021-01-28 08:31:11 -05:00
|
|
|
"Argument %d for %s is unhandled type %s",
|
2019-08-12 20:11:45 +02:00
|
|
|
i+1, proc_name, g_type_name (G_VALUE_TYPE (&value)));
|
2021-01-28 08:31:11 -05:00
|
|
|
return implementation_error (sc, error_str, 0);
|
2004-04-08 16:05:27 +00:00
|
|
|
}
|
2021-01-28 09:08:39 -05:00
|
|
|
debug_gvalue (&value);
|
2019-08-12 20:11:45 +02:00
|
|
|
gimp_value_array_append (args, &value);
|
|
|
|
g_value_unset (&value);
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
}
|
|
|
|
|
2021-01-28 08:31:11 -05:00
|
|
|
/* Omit refresh scripts from a script, better than crashing, see #575830. */
|
|
|
|
if (strcmp (proc_name, "script-fu-refresh") == 0)
|
|
|
|
return script_error (sc, "A script cannot refresh scripts", 0);
|
|
|
|
|
|
|
|
g_debug ("calling %s", proc_name);
|
|
|
|
values = gimp_pdb_run_procedure_array (gimp_get_pdb (),
|
|
|
|
proc_name, args);
|
|
|
|
g_debug ("done.");
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
|
|
|
/* Check the return status */
|
|
|
|
if (! values)
|
|
|
|
{
|
2021-01-28 08:31:11 -05:00
|
|
|
/* Usually a plugin that crashed, wire error */
|
2006-10-16 01:08:54 +00:00
|
|
|
g_snprintf (error_str, sizeof(error_str),
|
2021-01-28 08:31:11 -05:00
|
|
|
"in script, called procedure %s failed to return a status",
|
2007-09-27 10:27:46 +00:00
|
|
|
proc_name);
|
2021-01-28 08:31:11 -05:00
|
|
|
return script_error (sc, error_str, 0);
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
}
|
|
|
|
|
2021-01-28 08:31:11 -05:00
|
|
|
/* No need to log a string for status, we log the cases, or caller will log it.*/
|
2006-10-16 01:08:54 +00:00
|
|
|
|
2019-08-20 01:03:38 +02:00
|
|
|
switch (GIMP_VALUES_GET_ENUM (values, 0))
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
{
|
|
|
|
case GIMP_PDB_EXECUTION_ERROR:
|
2019-08-12 20:11:45 +02:00
|
|
|
if (gimp_value_array_length (values) > 1 &&
|
|
|
|
G_VALUE_HOLDS_STRING (gimp_value_array_index (values, 1)))
|
2008-09-10 20:33:50 +00:00
|
|
|
{
|
|
|
|
g_snprintf (error_str, sizeof (error_str),
|
|
|
|
"Procedure execution of %s failed: %s",
|
2019-08-12 20:11:45 +02:00
|
|
|
proc_name,
|
2019-08-20 01:03:38 +02:00
|
|
|
GIMP_VALUES_GET_STRING (values, 1));
|
2008-09-10 20:33:50 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
g_snprintf (error_str, sizeof (error_str),
|
|
|
|
"Procedure execution of %s failed",
|
|
|
|
proc_name);
|
|
|
|
}
|
2021-01-28 08:31:11 -05:00
|
|
|
/* not language errors, procedure returned error for unknown reason. */
|
2007-08-31 19:35:26 +00:00
|
|
|
return foreign_error (sc, error_str, 0);
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case GIMP_PDB_CALLING_ERROR:
|
2019-08-12 20:11:45 +02:00
|
|
|
if (gimp_value_array_length (values) > 1 &&
|
|
|
|
G_VALUE_HOLDS_STRING (gimp_value_array_index (values, 1)))
|
2008-09-10 20:33:50 +00:00
|
|
|
{
|
|
|
|
g_snprintf (error_str, sizeof (error_str),
|
|
|
|
"Procedure execution of %s failed on invalid input arguments: %s",
|
2019-08-12 20:11:45 +02:00
|
|
|
proc_name,
|
2019-08-20 01:03:38 +02:00
|
|
|
GIMP_VALUES_GET_STRING (values, 1));
|
2008-09-10 20:33:50 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
g_snprintf (error_str, sizeof (error_str),
|
|
|
|
"Procedure execution of %s failed on invalid input arguments",
|
|
|
|
proc_name);
|
|
|
|
}
|
2021-01-28 08:31:11 -05:00
|
|
|
/* not language errors, GIMP validated the GValueArray
|
|
|
|
* and decided it doesn't match the registered signature
|
|
|
|
* or the procedure decided its preconditions not met (e.g. out of range)
|
|
|
|
*/
|
2007-08-31 19:35:26 +00:00
|
|
|
return foreign_error (sc, error_str, 0);
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case GIMP_PDB_SUCCESS:
|
2021-01-28 08:31:11 -05:00
|
|
|
g_debug ("Count of non-status values returned: %d", gimp_value_array_length (values) - 1);
|
|
|
|
|
|
|
|
/* Counting down, i.e. traversing in reverse.
|
|
|
|
* i+1 is the current index. i is the preceding value.
|
|
|
|
* When at the current index is an array, preceding value (at i) is array length.
|
|
|
|
*
|
|
|
|
* The below code for array results is not safe.
|
|
|
|
* It implicitly requires, but does not explicitly check,
|
|
|
|
* that the returned length equals the actual length of the returned array,
|
|
|
|
* and iterates over the returned array assuming it has the returned length.
|
|
|
|
*/
|
2019-08-12 20:11:45 +02:00
|
|
|
for (i = gimp_value_array_length (values) - 2; i >= 0; --i)
|
2004-04-08 16:05:27 +00:00
|
|
|
{
|
2019-08-12 20:11:45 +02:00
|
|
|
GValue *value = gimp_value_array_index (values, i + 1);
|
|
|
|
gint j;
|
2008-09-09 14:22:44 +00:00
|
|
|
|
2021-01-28 09:08:39 -05:00
|
|
|
g_debug ("Return value %d is type %s", i+1, G_VALUE_TYPE_NAME (value));
|
2008-09-09 14:40:52 +00:00
|
|
|
|
2022-09-05 19:28:35 -04:00
|
|
|
/* Order is important.
|
|
|
|
* GFile before other objects.
|
|
|
|
* GIMP resource objects before GIMP Image, Drawable, etc. objects.
|
|
|
|
* Alternatively, more specific tests.
|
|
|
|
*/
|
2021-04-30 13:51:04 -04:00
|
|
|
if (G_VALUE_TYPE (value) == G_TYPE_FILE)
|
|
|
|
{
|
|
|
|
gchar *parsed_filepath = marshal_returned_gfile_to_string (value);
|
|
|
|
|
|
|
|
if (parsed_filepath)
|
|
|
|
{
|
|
|
|
g_debug ("PDB procedure returned GFile '%s'", parsed_filepath);
|
|
|
|
/* copy string into interpreter state. */
|
|
|
|
return_val = sc->vptr->cons (sc, sc->vptr->mk_string (sc, parsed_filepath), return_val);
|
|
|
|
g_free (parsed_filepath);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
g_warning ("PDB procedure failed to return a valid GFile");
|
|
|
|
return_val = sc->vptr->cons (sc, sc->vptr->mk_string (sc, ""), return_val);
|
|
|
|
}
|
|
|
|
/* Ensure return_val holds a string, possibly empty. */
|
|
|
|
}
|
2022-09-05 19:28:35 -04:00
|
|
|
else if (GIMP_VALUE_HOLDS_RESOURCE (value))
|
|
|
|
{
|
|
|
|
/* ScriptFu represents resource objects by ther unique string ID's. */
|
|
|
|
GObject *object = g_value_get_object (value);
|
2023-05-31 16:12:04 +02:00
|
|
|
gchar *name = NULL;
|
2022-09-05 19:28:35 -04:00
|
|
|
|
|
|
|
if (object)
|
2023-05-31 16:12:04 +02:00
|
|
|
name = gimp_resource_get_name (GIMP_RESOURCE(object));
|
2022-09-05 19:28:35 -04:00
|
|
|
|
2023-05-31 16:12:04 +02:00
|
|
|
if (! name)
|
|
|
|
g_warning("PDB procedure returned NULL object.");
|
2022-09-05 19:28:35 -04:00
|
|
|
|
2023-05-31 16:12:04 +02:00
|
|
|
return_val = sc->vptr->cons (sc, sc->vptr->mk_string (sc, name),
|
|
|
|
return_val);
|
2022-09-05 19:28:35 -04:00
|
|
|
|
2023-05-31 16:12:04 +02:00
|
|
|
g_free (name);
|
2022-09-05 19:28:35 -04:00
|
|
|
}
|
2021-04-30 13:51:04 -04:00
|
|
|
else if (G_VALUE_HOLDS_OBJECT (value))
|
2019-08-27 18:09:50 +02:00
|
|
|
{
|
2021-04-30 13:51:04 -04:00
|
|
|
/* G_VALUE_HOLDS_OBJECT only ensures value derives from GObject.
|
|
|
|
* Could be a GIMP or a GLib type.
|
|
|
|
* Here we handle GIMP types, which all have an id property.
|
2022-09-05 19:28:35 -04:00
|
|
|
* Resources have a string ID and Images and Drawables etc. have an int ID.
|
2021-04-30 13:51:04 -04:00
|
|
|
*/
|
2019-08-27 18:09:50 +02:00
|
|
|
GObject *object = g_value_get_object (value);
|
|
|
|
gint id = -1;
|
|
|
|
|
2021-01-28 09:08:39 -05:00
|
|
|
/* expect a GIMP opaque object having an "id" property */
|
2019-08-27 18:09:50 +02:00
|
|
|
if (object)
|
|
|
|
g_object_get (object, "id", &id, NULL);
|
|
|
|
|
2021-01-28 09:08:39 -05:00
|
|
|
/* id is -1 when the gvalue had no GObject*,
|
|
|
|
* or the referenced object had no property "id".
|
|
|
|
* This can be an undetected fault in the called procedure.
|
2021-04-30 13:51:04 -04:00
|
|
|
* It is not necessarily an error in the script.
|
2021-01-28 09:08:39 -05:00
|
|
|
*/
|
2021-04-30 13:51:04 -04:00
|
|
|
if (id == -1)
|
2023-05-31 16:12:04 +02:00
|
|
|
g_warning("PDB procedure returned NULL GIMP object.");
|
2021-04-30 13:51:04 -04:00
|
|
|
|
2021-01-28 09:08:39 -05:00
|
|
|
g_debug ("PDB procedure returned object ID: %i", id);
|
|
|
|
|
|
|
|
/* Scriptfu stores object IDs as int. */
|
2019-08-27 18:09:50 +02:00
|
|
|
return_val = sc->vptr->cons (sc, sc->vptr->mk_integer (sc, id),
|
|
|
|
return_val);
|
|
|
|
}
|
|
|
|
else if (G_VALUE_HOLDS_INT (value))
|
2004-04-08 16:05:27 +00:00
|
|
|
{
|
2019-08-12 20:11:45 +02:00
|
|
|
gint v = g_value_get_int (value);
|
2004-04-08 16:05:27 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
return_val = sc->vptr->cons (sc, sc->vptr->mk_integer (sc, v),
|
|
|
|
return_val);
|
|
|
|
}
|
|
|
|
else if (G_VALUE_HOLDS_UINT (value))
|
|
|
|
{
|
|
|
|
guint v = g_value_get_uint (value);
|
2009-08-07 15:13:12 -04:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
return_val = sc->vptr->cons (sc, sc->vptr->mk_integer (sc, v),
|
|
|
|
return_val);
|
|
|
|
}
|
|
|
|
else if (G_VALUE_HOLDS_DOUBLE (value))
|
|
|
|
{
|
|
|
|
gdouble v = g_value_get_double (value);
|
2004-04-08 16:05:27 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
return_val = sc->vptr->cons (sc, sc->vptr->mk_real (sc, v),
|
|
|
|
return_val);
|
|
|
|
}
|
|
|
|
else if (G_VALUE_HOLDS_ENUM (value))
|
|
|
|
{
|
|
|
|
gint v = g_value_get_enum (value);
|
2004-10-04 22:00:16 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
return_val = sc->vptr->cons (sc, sc->vptr->mk_integer (sc, v),
|
|
|
|
return_val);
|
|
|
|
}
|
|
|
|
else if (G_VALUE_HOLDS_BOOLEAN (value))
|
|
|
|
{
|
|
|
|
gboolean v = g_value_get_boolean (value);
|
2009-08-07 15:13:12 -04:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
return_val = sc->vptr->cons (sc, sc->vptr->mk_integer (sc, v),
|
|
|
|
return_val);
|
|
|
|
}
|
|
|
|
else if (G_VALUE_HOLDS_STRING (value))
|
|
|
|
{
|
|
|
|
const gchar *v = g_value_get_string (value);
|
2004-04-08 16:05:27 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
if (! v)
|
|
|
|
v = "";
|
2004-04-08 16:05:27 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
return_val = sc->vptr->cons (sc, sc->vptr->mk_string (sc, v),
|
|
|
|
return_val);
|
|
|
|
}
|
|
|
|
else if (GIMP_VALUE_HOLDS_INT32_ARRAY (value))
|
|
|
|
{
|
2019-08-20 01:03:38 +02:00
|
|
|
gint32 n = GIMP_VALUES_GET_INT (values, i);
|
2019-08-12 20:11:45 +02:00
|
|
|
const gint32 *v = gimp_value_get_int32_array (value);
|
|
|
|
pointer vector = sc->vptr->mk_vector (sc, n);
|
2009-08-07 15:13:12 -04:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
for (j = 0; j < n; j++)
|
|
|
|
{
|
|
|
|
sc->vptr->set_vector_elem (vector, j,
|
|
|
|
sc->vptr->mk_integer (sc, v[j]));
|
|
|
|
}
|
2009-08-07 15:13:12 -04:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
return_val = sc->vptr->cons (sc, vector, return_val);
|
|
|
|
}
|
2023-05-23 23:37:46 +02:00
|
|
|
else if (G_VALUE_HOLDS (value, G_TYPE_BYTES))
|
2019-08-12 20:11:45 +02:00
|
|
|
{
|
2023-05-23 23:37:46 +02:00
|
|
|
GBytes *v_bytes = g_value_get_boxed (value);
|
|
|
|
const guint8 *v = g_bytes_get_data (v_bytes, NULL);
|
|
|
|
gsize n = g_bytes_get_size (v_bytes);
|
|
|
|
pointer vector = sc->vptr->mk_vector (sc, n);
|
2004-04-08 16:05:27 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
for (j = 0; j < n; j++)
|
|
|
|
{
|
|
|
|
sc->vptr->set_vector_elem (vector, j,
|
|
|
|
sc->vptr->mk_integer (sc, v[j]));
|
|
|
|
}
|
2004-04-08 16:05:27 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
return_val = sc->vptr->cons (sc, vector, return_val);
|
|
|
|
}
|
|
|
|
else if (GIMP_VALUE_HOLDS_FLOAT_ARRAY (value))
|
|
|
|
{
|
2019-08-20 01:03:38 +02:00
|
|
|
gint32 n = GIMP_VALUES_GET_INT (values, i);
|
2019-08-12 20:11:45 +02:00
|
|
|
const gdouble *v = gimp_value_get_float_array (value);
|
|
|
|
pointer vector = sc->vptr->mk_vector (sc, n);
|
2009-08-07 15:13:12 -04:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
for (j = 0; j < n; j++)
|
|
|
|
{
|
|
|
|
sc->vptr->set_vector_elem (vector, j,
|
|
|
|
sc->vptr->mk_real (sc, v[j]));
|
|
|
|
}
|
2004-04-08 16:05:27 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
return_val = sc->vptr->cons (sc, vector, return_val);
|
|
|
|
}
|
2020-12-23 21:15:43 +01:00
|
|
|
else if (G_VALUE_HOLDS (value, G_TYPE_STRV))
|
2019-08-12 20:11:45 +02:00
|
|
|
{
|
2020-12-23 21:15:43 +01:00
|
|
|
gint32 n = 0;
|
|
|
|
const gchar **v = g_value_get_boxed (value);
|
2019-08-12 20:11:45 +02:00
|
|
|
pointer list = sc->NIL;
|
2004-04-08 16:05:27 +00:00
|
|
|
|
2020-12-23 21:15:43 +01:00
|
|
|
n = (v)? g_strv_length ((char **) v) : 0;
|
2019-08-12 20:11:45 +02:00
|
|
|
for (j = n - 1; j >= 0; j--)
|
|
|
|
{
|
|
|
|
list = sc->vptr->cons (sc,
|
|
|
|
sc->vptr->mk_string (sc,
|
|
|
|
v[j] ?
|
|
|
|
v[j] : ""),
|
|
|
|
list);
|
|
|
|
}
|
2004-04-08 16:05:27 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
return_val = sc->vptr->cons (sc, list, return_val);
|
|
|
|
}
|
|
|
|
else if (GIMP_VALUE_HOLDS_RGB (value))
|
|
|
|
{
|
|
|
|
GimpRGB v;
|
|
|
|
guchar r, g, b;
|
|
|
|
gpointer temp_val;
|
|
|
|
|
|
|
|
gimp_value_get_rgb (value, &v);
|
|
|
|
gimp_rgb_get_uchar (&v, &r, &g, &b);
|
|
|
|
|
|
|
|
temp_val = sc->vptr->cons
|
|
|
|
(sc,
|
|
|
|
sc->vptr->mk_integer (sc, r),
|
|
|
|
sc->vptr->cons
|
|
|
|
(sc,
|
2008-09-19 12:15:26 +00:00
|
|
|
sc->vptr->mk_integer (sc, g),
|
2019-08-12 20:11:45 +02:00
|
|
|
sc->vptr->cons
|
|
|
|
(sc,
|
|
|
|
sc->vptr->mk_integer (sc, b),
|
|
|
|
sc->NIL)));
|
2008-07-14 14:09:16 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
return_val = sc->vptr->cons (sc,
|
|
|
|
temp_val,
|
|
|
|
return_val);
|
|
|
|
}
|
|
|
|
else if (GIMP_VALUE_HOLDS_RGB_ARRAY (value))
|
|
|
|
{
|
2019-08-20 01:03:38 +02:00
|
|
|
gint32 n = GIMP_VALUES_GET_INT (values, i);
|
2019-08-12 20:11:45 +02:00
|
|
|
const GimpRGB *v = gimp_value_get_rgb_array (value);
|
|
|
|
pointer vector = sc->vptr->mk_vector (sc, n);
|
2008-07-14 14:09:16 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
for (j = 0; j < n; j++)
|
|
|
|
{
|
|
|
|
guchar r, g, b;
|
|
|
|
pointer temp_val;
|
|
|
|
|
|
|
|
gimp_rgb_get_uchar (&v[j], &r, &g, &b);
|
|
|
|
|
|
|
|
temp_val = sc->vptr->cons
|
|
|
|
(sc,
|
|
|
|
sc->vptr->mk_integer (sc, r),
|
|
|
|
sc->vptr->cons
|
|
|
|
(sc,
|
|
|
|
sc->vptr->mk_integer (sc, g),
|
|
|
|
sc->vptr->cons
|
|
|
|
(sc,
|
2008-09-19 12:15:26 +00:00
|
|
|
sc->vptr->mk_integer (sc, b),
|
|
|
|
sc->NIL)));
|
2019-08-12 20:11:45 +02:00
|
|
|
sc->vptr->set_vector_elem (vector, j, temp_val);
|
|
|
|
}
|
2009-08-07 15:13:12 -04:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
return_val = sc->vptr->cons (sc, vector, return_val);
|
|
|
|
}
|
|
|
|
else if (GIMP_VALUE_HOLDS_PARASITE (value))
|
|
|
|
{
|
|
|
|
GimpParasite *v = g_value_get_boxed (value);
|
2008-09-19 12:15:26 +00:00
|
|
|
|
2019-08-12 20:11:45 +02:00
|
|
|
if (v->name == NULL)
|
|
|
|
{
|
2021-01-28 08:31:11 -05:00
|
|
|
/* Wrongly passed a Parasite that appears to be null, or other error. */
|
|
|
|
return_val = implementation_error (sc, "Error: null parasite", 0);
|
2019-08-12 20:11:45 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gchar *data = g_strndup (v->data, v->size);
|
|
|
|
gint char_cnt = g_utf8_strlen (data, v->size);
|
|
|
|
pointer temp_val;
|
|
|
|
|
|
|
|
/* don't move the mk_foo() calls outside this function call,
|
|
|
|
* otherwise they might be garbage collected away!
|
|
|
|
*/
|
|
|
|
temp_val = sc->vptr->cons
|
|
|
|
(sc,
|
|
|
|
sc->vptr->mk_string (sc, v->name),
|
|
|
|
sc->vptr->cons
|
|
|
|
(sc,
|
|
|
|
sc->vptr->mk_integer (sc, v->flags),
|
|
|
|
sc->vptr->cons
|
|
|
|
(sc,
|
|
|
|
sc->vptr->mk_counted_string (sc,
|
|
|
|
data,
|
|
|
|
char_cnt),
|
|
|
|
sc->NIL)));
|
|
|
|
|
|
|
|
return_val = sc->vptr->cons (sc,
|
|
|
|
temp_val,
|
|
|
|
return_val);
|
|
|
|
g_free (data);
|
2006-10-16 01:08:54 +00:00
|
|
|
|
2021-01-28 08:31:11 -05:00
|
|
|
g_debug ("name '%s'", v->name);
|
|
|
|
g_debug ("flags %d", v->flags);
|
|
|
|
g_debug ("size %d", v->size);
|
|
|
|
g_debug ("data '%.*s'", v->size, (gchar *) v->data);
|
2019-08-12 20:11:45 +02:00
|
|
|
}
|
|
|
|
}
|
2021-04-30 13:51:04 -04:00
|
|
|
else if (GIMP_VALUE_HOLDS_OBJECT_ARRAY (value))
|
|
|
|
{
|
|
|
|
pointer vector = marshal_returned_object_array_to_vector (sc, value);
|
|
|
|
return_val = sc->vptr->cons (sc, vector, return_val);
|
|
|
|
}
|
2019-08-12 20:11:45 +02:00
|
|
|
else if (G_VALUE_TYPE (&value) == GIMP_TYPE_PDB_STATUS_TYPE)
|
|
|
|
{
|
2021-01-28 08:31:11 -05:00
|
|
|
/* Called procedure implemented incorrectly. */
|
|
|
|
return implementation_error (sc, "Procedure execution returned multiple status values", 0);
|
2019-08-12 20:11:45 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2021-01-28 08:31:11 -05:00
|
|
|
/* Missing cases here. */
|
2019-08-12 20:11:45 +02:00
|
|
|
g_snprintf (error_str, sizeof (error_str),
|
2021-01-28 08:31:11 -05:00
|
|
|
"Unhandled return type %s",
|
|
|
|
G_VALUE_TYPE_NAME (value));
|
|
|
|
return implementation_error (sc, error_str, 0);
|
2004-04-08 16:05:27 +00:00
|
|
|
}
|
|
|
|
}
|
2021-01-28 08:31:11 -05:00
|
|
|
break;
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
|
|
|
case GIMP_PDB_PASS_THROUGH:
|
|
|
|
case GIMP_PDB_CANCEL: /* should we do something here? */
|
2021-01-28 09:08:39 -05:00
|
|
|
g_debug ("Status is PASS_THROUGH or CANCEL");
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2021-01-28 08:31:11 -05:00
|
|
|
/* If we have no non-status return value(s) from PDB call, return
|
2008-09-19 12:15:26 +00:00
|
|
|
* either TRUE or FALSE to indicate if call succeeded.
|
|
|
|
*/
|
2006-11-18 22:30:23 +00:00
|
|
|
if (return_val == sc->NIL)
|
|
|
|
{
|
2021-01-28 09:08:39 -05:00
|
|
|
g_debug ("returning with only a status result");
|
2019-08-27 18:09:50 +02:00
|
|
|
if (GIMP_VALUES_GET_ENUM (values, 0) == GIMP_PDB_SUCCESS)
|
2008-09-19 12:15:26 +00:00
|
|
|
return_val = sc->vptr->cons (sc, sc->T, sc->NIL);
|
2006-11-18 22:30:23 +00:00
|
|
|
else
|
2008-09-19 12:15:26 +00:00
|
|
|
return_val = sc->vptr->cons (sc, sc->F, sc->NIL);
|
2006-11-18 22:30:23 +00:00
|
|
|
}
|
2021-01-28 09:08:39 -05:00
|
|
|
else
|
|
|
|
{
|
|
|
|
g_debug ("returning with non-empty result");
|
|
|
|
}
|
2006-11-18 22:30:23 +00:00
|
|
|
|
2004-10-04 22:00:16 +00:00
|
|
|
g_free (proc_name);
|
|
|
|
|
2021-01-28 08:31:11 -05:00
|
|
|
/* free executed procedure return values */
|
2019-08-12 20:11:45 +02:00
|
|
|
gimp_value_array_unref (values);
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
2021-01-28 08:31:11 -05:00
|
|
|
/* free arguments and values */
|
2019-08-12 20:11:45 +02:00
|
|
|
gimp_value_array_unref (args);
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
2022-05-28 10:02:10 -04:00
|
|
|
/* The callback is NULL except for script-fu-server. See explanation there. */
|
|
|
|
if (post_command_callback != NULL)
|
|
|
|
post_command_callback ();
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
|
|
|
#ifdef GDK_WINDOWING_WIN32
|
|
|
|
/* This seems to help a lot on Windoze. */
|
|
|
|
while (gtk_events_pending ())
|
|
|
|
gtk_main_iteration ();
|
|
|
|
#endif
|
|
|
|
|
|
|
|
return return_val;
|
2007-09-28 14:20:35 +00:00
|
|
|
}
|
|
|
|
|
plug-ins: in script-fu, don't query PDB procedures' info on startup
script-fu used to query the information of every PDB procedure on
startup, in order to get the number of parameters for each
procedure. This was done so that nullary procedures were defined
in such a way as to accept (and ignore) any number of arguments
(and at least one of the scripts we ship relies on this behavior).
However, this requires expensive back-and-forth communication with
the main GIMP process, which notable slowed down script-fu's
startup, and had a non-negligible impact on GIMP's startup time.
Instead, avoid querying procedure information, and implement the
special behavior for nullary procedures at call time. We do this
by defining, in addition to the "strict" gimp-proc-db-call
procedure, a "permissive" -gimp-proc-db-call internal procedure,
and using the latter to call the predefined PDB procedures.
2018-09-26 14:28:34 -04:00
|
|
|
static pointer
|
|
|
|
script_fu_marshal_procedure_call_strict (scheme *sc,
|
|
|
|
pointer a)
|
|
|
|
{
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_fu_marshal_procedure_call (sc, a, FALSE, FALSE);
|
plug-ins: in script-fu, don't query PDB procedures' info on startup
script-fu used to query the information of every PDB procedure on
startup, in order to get the number of parameters for each
procedure. This was done so that nullary procedures were defined
in such a way as to accept (and ignore) any number of arguments
(and at least one of the scripts we ship relies on this behavior).
However, this requires expensive back-and-forth communication with
the main GIMP process, which notable slowed down script-fu's
startup, and had a non-negligible impact on GIMP's startup time.
Instead, avoid querying procedure information, and implement the
special behavior for nullary procedures at call time. We do this
by defining, in addition to the "strict" gimp-proc-db-call
procedure, a "permissive" -gimp-proc-db-call internal procedure,
and using the latter to call the predefined PDB procedures.
2018-09-26 14:28:34 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
static pointer
|
|
|
|
script_fu_marshal_procedure_call_permissive (scheme *sc,
|
|
|
|
pointer a)
|
|
|
|
{
|
2021-01-28 09:08:39 -05:00
|
|
|
return script_fu_marshal_procedure_call (sc, a, TRUE, FALSE);
|
|
|
|
}
|
|
|
|
|
|
|
|
static pointer
|
|
|
|
script_fu_marshal_procedure_call_deprecated (scheme *sc,
|
|
|
|
pointer a)
|
|
|
|
{
|
|
|
|
return script_fu_marshal_procedure_call (sc, a, TRUE, TRUE);
|
plug-ins: in script-fu, don't query PDB procedures' info on startup
script-fu used to query the information of every PDB procedure on
startup, in order to get the number of parameters for each
procedure. This was done so that nullary procedures were defined
in such a way as to accept (and ignore) any number of arguments
(and at least one of the scripts we ship relies on this behavior).
However, this requires expensive back-and-forth communication with
the main GIMP process, which notable slowed down script-fu's
startup, and had a non-negligible impact on GIMP's startup time.
Instead, avoid querying procedure information, and implement the
special behavior for nullary procedures at call time. We do this
by defining, in addition to the "strict" gimp-proc-db-call
procedure, a "permissive" -gimp-proc-db-call internal procedure,
and using the latter to call the predefined PDB procedures.
2018-09-26 14:28:34 -04:00
|
|
|
}
|
|
|
|
|
2006-10-16 01:08:54 +00:00
|
|
|
static pointer
|
2008-09-09 14:22:44 +00:00
|
|
|
script_fu_register_call (scheme *sc,
|
|
|
|
pointer a)
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
{
|
2008-09-11 18:00:18 +00:00
|
|
|
return script_fu_add_script (sc, a);
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
}
|
|
|
|
|
2022-07-15 13:50:36 -04:00
|
|
|
static pointer
|
|
|
|
script_fu_register_call_filter (scheme *sc,
|
|
|
|
pointer a)
|
|
|
|
{
|
|
|
|
return script_fu_add_script_filter (sc, a);
|
|
|
|
}
|
|
|
|
|
2006-10-16 01:08:54 +00:00
|
|
|
static pointer
|
2008-09-09 14:22:44 +00:00
|
|
|
script_fu_menu_register_call (scheme *sc,
|
|
|
|
pointer a)
|
2004-11-17 15:24:07 +00:00
|
|
|
{
|
2008-09-11 18:00:18 +00:00
|
|
|
return script_fu_add_menu (sc, a);
|
2004-11-17 15:24:07 +00:00
|
|
|
}
|
|
|
|
|
2006-10-16 01:08:54 +00:00
|
|
|
static pointer
|
2008-09-09 14:22:44 +00:00
|
|
|
script_fu_quit_call (scheme *sc,
|
|
|
|
pointer a)
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
{
|
2022-05-28 10:02:10 -04:00
|
|
|
/* If script-fu-server running, tell it. */
|
|
|
|
if (quit_callback != NULL)
|
|
|
|
quit_callback ();
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
|
2006-10-16 01:08:54 +00:00
|
|
|
scheme_deinit (sc);
|
|
|
|
|
|
|
|
return sc->NIL;
|
new code to call the script_fuc_text_console pdb function. remove batch
2001-07-17 Mathieu Lacage <mathieu@gnome.org>
* app/batch.c: new code to call the script_fuc_text_console pdb function.
* app/main.c: (main): remove batch command code.
* plug-ins/script-fu/Makefile.am: add siod-wrapper.h/c
* plug-ins/script-fu/script-fu-console.c:
(script_fu_cc_key_function),
(script_fu_open_siod_console),
(script_fu_close_siod_console):
* plug-ins/script-fu/script-fu-scripts.h:
* plug-ins/script-fu/script-fu-server.c:
(script_fu_server_quit),
(script_fu_server_get_mode),
(execute_command):
Replace all direct calls to the scheme interpreter with calls to the siod-wrapper.
* plug-ins/script-fu/script-fu-console.h: remove run_eval.
* plug-ins/script-fu/script-fu-server.h:
* plug-ins/script-fu/script-fu-text-console.c:
(script_fu_text_console_run),
(read_command),
(script_fu_text_console_interface):
The actual new text console.
* plug-ins/script-fu/script-fu-text-console.h: header.
* plug-ins/script-fu/script-fu.c:
(script_fu_quit),
(script_fu_query),
(script_fu_run): rename to better words.
move most of the code to siod-wrapper.c/h
* plug-ins/script-fu/siod-wrapper.c:
(siod_get_output_file),
(siod_set_output_file),
(siod_get_verbose_level),
(siod_set_verbose_level),
(siod_print_welcome),
(siod_interpret_string),
(siod_get_error_msg),
(siod_get_success_msg),
(siod_init),
(init_procedures),
(init_constants),
(convert_string),
(sputs_fcn),
(lprin1s),
(marshall_proc_db_call),
(script_fu_register_call),
(script_fu_quit_call):
All the funcitons dealing with the internals of the scheme interpreter.
* plug-ins/script-fu/siod-wrapper.h: the header.
2001-07-17 22:53:21 +00:00
|
|
|
}
|
2008-09-11 18:00:18 +00:00
|
|
|
|
|
|
|
static pointer
|
|
|
|
script_fu_nil_call (scheme *sc,
|
|
|
|
pointer a)
|
|
|
|
{
|
|
|
|
return sc->NIL;
|
|
|
|
}
|