/* The GIMP -- an image manipulation program * Copyright (C) 1995 Spencer Kimball and Peter Mattis * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "config.h" #include #include #include #if HAVE_UNISTD_H #include #endif #include #include #include "siod/siod.h" #include "siod-wrapper.h" #include "script-fu-console.h" #include "script-fu-scripts.h" #include "script-fu-server.h" #include "script-fu-text-console.h" #include "script-fu-intl.h" /* Declare local functions. */ static void script_fu_quit (void); static void script_fu_query (void); static void script_fu_run (const gchar *name, gint nparams, const GimpParam *params, gint *nreturn_vals, GimpParam **return_vals); static void script_fu_auxillary_init (void); static void script_fu_refresh_proc (const gchar *name, gint nparams, const GimpParam *params, gint *nreturn_vals, GimpParam **return_vals); GimpPlugInInfo PLUG_IN_INFO = { NULL, /* init_proc */ script_fu_quit, /* quit_proc */ script_fu_query, /* query_proc */ script_fu_run /* run_proc */ }; MAIN () static void script_fu_quit (void) { } static void script_fu_query (void) { static GimpParamDef console_args[] = { { GIMP_PDB_INT32, "run_mode", "Interactive, [non-interactive]" } }; static GimpParamDef textconsole_args[] = { { GIMP_PDB_INT32, "run_mode", "Interactive, [non-interactive]" } }; static GimpParamDef eval_args[] = { { GIMP_PDB_INT32, "run_mode", "[Interactive], non-interactive" }, { GIMP_PDB_STRING, "code", "The code to evaluate" } }; static GimpParamDef server_args[] = { { GIMP_PDB_INT32, "run_mode", "[Interactive], non-interactive" }, { GIMP_PDB_INT32, "port", "The port on which to listen for requests" }, { GIMP_PDB_STRING, "logfile", "The file to log server activity to" } }; gimp_plugin_domain_register (GETTEXT_PACKAGE "-script-fu", NULL); gimp_install_procedure ("extension_script_fu", "A scheme interpreter for scripting GIMP operations", "More help here later", "Spencer Kimball & Peter Mattis", "Spencer Kimball & Peter Mattis", "1997", NULL, NULL, GIMP_EXTENSION, 0, 0, NULL, NULL); gimp_install_procedure ("plug_in_script_fu_console", "Provides a console mode for script-fu development", "Provides an interface which allows interactive " "scheme development.", "Spencer Kimball & Peter Mattis", "Spencer Kimball & Peter Mattis", "1997", N_("Script-Fu _Console"), NULL, GIMP_PLUGIN, G_N_ELEMENTS (console_args), 0, console_args, NULL); gimp_plugin_menu_register ("plug_in_script_fu_console", N_("/Xtns/Script-Fu")); gimp_install_procedure ("plug_in_script_fu_text_console", "Provides a text console mode for script-fu " "development", "Provides an interface which allows interactive " "scheme development.", "Spencer Kimball & Peter Mattis", "Spencer Kimball & Peter Mattis", "1997", NULL, NULL, GIMP_PLUGIN, G_N_ELEMENTS (textconsole_args), 0, textconsole_args, NULL); gimp_install_procedure ("plug_in_script_fu_server", "Provides a server for remote script-fu operation", "Provides a server for remote script-fu operation", "Spencer Kimball & Peter Mattis", "Spencer Kimball & Peter Mattis", "1997", N_("_Start Server..."), NULL, GIMP_PLUGIN, G_N_ELEMENTS (server_args), 0, server_args, NULL); gimp_plugin_menu_register ("plug_in_script_fu_server", N_("/Xtns/Script-Fu")); gimp_install_procedure ("plug_in_script_fu_eval", "Evaluate scheme code", "Evaluate the code under the scheme interpreter " "(primarily for batch mode)", "Manish Singh", "Manish Singh", "1998", NULL, NULL, GIMP_PLUGIN, G_N_ELEMENTS (eval_args), 0, eval_args, NULL); } static void script_fu_run (const gchar *name, gint nparams, const GimpParam *param, gint *nreturn_vals, GimpParam **return_vals) { INIT_I18N(); siod_set_console_mode (0); siod_set_output_file (stdout); /* Determine before we allow scripts to register themselves * whether this is the base, automatically installed script-fu extension */ if (strcmp (name, "extension_script_fu") == 0) { /* Setup auxillary temporary procedures for the base extension */ script_fu_auxillary_init (); /* Init the interpreter */ siod_init (TRUE); } else { /* Init the interpreter */ siod_init (FALSE); } /* Load all of the available scripts */ script_fu_find_scripts (); if (strcmp (name, "extension_script_fu") == 0) { /* * The main, automatically installed script fu extension. For * things like logos and effects that are runnable from GIMP * menus. */ static GimpParam values[1]; GimpPDBStatusType status = GIMP_PDB_SUCCESS; /* Acknowledge that the extension is properly initialized */ gimp_extension_ack (); while (TRUE) gimp_extension_process (0); *nreturn_vals = 1; *return_vals = values; values[0].type = GIMP_PDB_STATUS; values[0].data.d_status = status; } else if (strcmp (name, "plug_in_script_fu_text_console") == 0) { /* * The script-fu text console for interactive SIOD development */ script_fu_text_console_run (name, nparams, param, nreturn_vals, return_vals); } else if (strcmp (name, "plug_in_script_fu_console") == 0) { /* * The script-fu console for interactive SIOD development */ script_fu_console_run (name, nparams, param, nreturn_vals, return_vals); } else if (strcmp (name, "plug_in_script_fu_server") == 0) { /* * The script-fu server for remote operation */ script_fu_server_run (name, nparams, param, nreturn_vals, return_vals); } else if (strcmp (name, "plug_in_script_fu_eval") == 0) { /* * A non-interactive "console" (for batch mode) */ script_fu_eval_run (name, nparams, param, nreturn_vals, return_vals); } } static void script_fu_auxillary_init (void) { static GimpParamDef args[] = { { GIMP_PDB_INT32, "run_mode", "[Interactive], non-interactive" } }; gimp_install_temp_proc ("script_fu_refresh", "Re-read all available scripts", "Re-read all available scripts", "Spencer Kimball & Peter Mattis", "Spencer Kimball & Peter Mattis", "1997", N_("_Refresh Scripts"), NULL, GIMP_TEMPORARY, G_N_ELEMENTS (args), 0, args, NULL, script_fu_refresh_proc); gimp_plugin_menu_register ("script_fu_refresh", N_("/Xtns/Script-Fu")); } static void script_fu_refresh_proc (const gchar *name, gint nparams, const GimpParam *params, gint *nreturn_vals, GimpParam **return_vals) { static GimpParam values[1]; GimpPDBStatusType status = GIMP_PDB_SUCCESS; /* Reload all of the available scripts */ script_fu_find_scripts (); *nreturn_vals = 1; *return_vals = values; values[0].type = GIMP_PDB_STATUS; values[0].data.d_status = status; }