00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifdef HAVE_CONFIG_H
00029 #include <config.h>
00030 #endif
00031
00032 #include <fors_recipe_impl.h>
00033 #include <fors_dfs.h>
00034 #include <fors_utils.h>
00035
00036 #include <cpl.h>
00037
00038 static int fors_recipe_create(cpl_plugin *);
00039 static int fors_recipe_exec(cpl_plugin *);
00040 static int fors_recipe_destroy(cpl_plugin *);
00041
00062 int cpl_plugin_get_info(cpl_pluginlist *list)
00063 {
00064 cpl_recipe *recipe = cpl_calloc(1, sizeof *recipe );
00065 cpl_plugin *plugin = &recipe->interface;
00066
00067 if (FORS_BINARY_VERSION != fors_get_version_binary())
00068 {
00069 cpl_msg_error(cpl_func,
00070 "I am fors_recipe version %d, but I am linking "
00071 "against the FORS library version %d. "
00072 "This will not work. "
00073 "Please remove all previous installations "
00074 "of the " PACKAGE_NAME " and try again.",
00075 FORS_BINARY_VERSION, fors_get_version_binary());
00076 return 1;
00077 }
00078
00079 cpl_plugin_init(plugin,
00080 CPL_PLUGIN_API,
00081 FORS_BINARY_VERSION,
00082 CPL_PLUGIN_TYPE_RECIPE,
00083 fors_recipe_name,
00084 fors_recipe_description_short,
00085 fors_recipe_description,
00086 fors_recipe_author,
00087 fors_recipe_email,
00088 fors_license,
00089 fors_recipe_create,
00090 fors_recipe_exec,
00091 fors_recipe_destroy);
00092
00093 cpl_pluginlist_append(list, plugin);
00094
00095 return 0;
00096 }
00097
00098
00109 static int fors_recipe_create(cpl_plugin *plugin)
00110 {
00111 cpl_recipe *recipe;
00112
00113 if (cpl_error_get_code() != CPL_ERROR_NONE) {
00114 cpl_msg_error(cpl_func,
00115 "CPL error code is set (%s), "
00116 "refusing to create recipe fors_recipe",
00117 cpl_error_get_message());
00118 return 1;
00119 }
00120
00121
00122
00123
00124
00125 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) {
00126 recipe = (cpl_recipe *)plugin;
00127 }
00128 else {
00129 return 1;
00130 }
00131
00132
00133
00134
00135
00136 recipe->parameters = cpl_parameterlist_new();
00137
00138 fors_recipe_define_parameters(recipe->parameters);
00139
00140 if (cpl_error_get_code() != CPL_ERROR_NONE) {
00141 cpl_msg_error(cpl_func,
00142 "Could not create fors_recipe parameters");
00143 return 1;
00144 }
00145
00146 return 0;
00147 }
00148
00149
00158 static int fors_recipe_exec(cpl_plugin *plugin)
00159 {
00160 cpl_recipe *recipe;
00161 cpl_errorstate initial_errorstate = cpl_errorstate_get();
00162
00163 if (cpl_error_get_code() != CPL_ERROR_NONE) {
00164 cpl_msg_error(cpl_func,
00165 "CPL error code is set (%s), "
00166 "refusing to execute recipe fors_recipe",
00167 cpl_error_get_message());
00168 return 1;
00169 }
00170
00171 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) {
00172 recipe = (cpl_recipe *)plugin;
00173 }
00174 else {
00175 cpl_msg_error(cpl_func,
00176 "Plugin is not a recipe");
00177 return 1;
00178 }
00179
00180 if (recipe->frames == NULL) {
00181 cpl_msg_error(cpl_func,
00182 "Null frameset");
00183 return 1;
00184 }
00185
00186 if (recipe->parameters == NULL) {
00187 cpl_msg_error(cpl_func,
00188 "Null parameter list");
00189 return 1;
00190 }
00191
00192 fors_begin(recipe->frames,
00193 fors_recipe_description_short);
00194
00195 fors_recipe(recipe->frames, recipe->parameters);
00196
00197 return fors_end(recipe->frames, initial_errorstate);
00198 }
00199
00200
00209 static int fors_recipe_destroy(cpl_plugin *plugin)
00210 {
00211 cpl_recipe *recipe;
00212
00213 if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) {
00214 recipe = (cpl_recipe *)plugin;
00215 }
00216 else {
00217 return -1;
00218 }
00219
00220 cpl_parameterlist_delete(recipe->parameters);
00221
00222 return 0;
00223 }
00224