char *script_filename;
char *image_dir;
+ ply_list_t *script_env_vars;
script_op_t *script_main_op;
script_state_t *script_state;
uint32_t is_animating : 1;
};
+typedef struct
+{
+ char *key;
+ char *value;
+} script_env_var_t;
+
static void detach_from_event_loop (ply_boot_splash_plugin_t *plugin);
static void stop_animation (ply_boot_splash_plugin_t *plugin);
ply_boot_splash_plugin_interface_t *ply_boot_splash_plugin_get_interface (void);
}
}
+static void
+add_script_env_var (const char *group_name,
+ const char *key,
+ const char *value,
+ void *user_data)
+{
+ ply_list_t *script_env_vars;
+ script_env_var_t *new_env_var;
+
+ if (strcmp (group_name, "script-env-vars") != 0)
+ return;
+
+ script_env_vars = user_data;
+ new_env_var = malloc (sizeof (script_env_var_t));
+ new_env_var->key = strdup (key);
+ new_env_var->value = strdup (value);
+
+ ply_list_append_data (script_env_vars, new_env_var);
+
+ ply_trace ("%s %s %s", group_name, key, value);
+}
+
static ply_boot_splash_plugin_t *
create_plugin (ply_key_file_t *key_file)
{
plugin->script_filename = ply_key_file_get_value (key_file,
"script",
"ScriptFile");
+
+ plugin->script_env_vars = ply_list_new ();
+ ply_key_file_foreach_entry (key_file, add_script_env_var, plugin->script_env_vars);
+
plugin->displays = ply_list_new ();
return plugin;
}
static void
destroy_plugin (ply_boot_splash_plugin_t *plugin)
{
+ ply_list_node_t *node;
+ script_env_var_t *env_var;
+
if (plugin == NULL)
return;
detach_from_event_loop (plugin);
}
+ for (node = ply_list_get_first_node (plugin->script_env_vars);
+ node != NULL;
+ node = ply_list_get_next_node (plugin->script_env_vars, node))
+ {
+ env_var = ply_list_node_get_data (node);
+ free (env_var->key);
+ free (env_var->value);
+ free (env_var);
+ }
+ ply_list_free (plugin->script_env_vars);
free (plugin->script_filename);
free (plugin->image_dir);
free (plugin);
static bool
start_script_animation (ply_boot_splash_plugin_t *plugin)
{
+ ply_list_node_t *node;
+ script_obj_t *target_obj;
+ script_obj_t *value_obj;
+ script_env_var_t *env_var;
+
assert (plugin != NULL);
plugin->script_state = script_state_new (plugin);
+
+ for (node = ply_list_get_first_node (plugin->script_env_vars);
+ node != NULL;
+ node = ply_list_get_next_node (plugin->script_env_vars, node))
+ {
+ env_var = ply_list_node_get_data (node);
+ target_obj = script_obj_hash_get_element (plugin->script_state->global,
+ env_var->key);
+ value_obj = script_obj_new_string (env_var->value);
+ script_obj_assign (target_obj, value_obj);
+ }
+
plugin->script_image_lib = script_lib_image_setup (plugin->script_state,
plugin->image_dir);
plugin->script_sprite_lib = script_lib_sprite_setup (plugin->script_state,