]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
[script] Allow passing of values from the .plymouth file to the script
authorCharlie Brej <cbrej@cs.man.ac.uk>
Tue, 20 Apr 2010 23:02:42 +0000 (00:02 +0100)
committerCharlie Brej <cbrej@cs.man.ac.uk>
Tue, 20 Apr 2010 23:02:42 +0000 (00:02 +0100)
An example in the script.plymouth shows a value being set. These values are
then present at the first execution of the script set in the global scope.

src/plugins/splash/script/plugin.c
themes/script/script.plymouth.in

index 0174594777ae1f94d26720a479078180fa15a620..79871c4bfd6e3f0717c59399c68b682829458a0a 100644 (file)
@@ -79,6 +79,7 @@ struct _ply_boot_splash_plugin
   char *script_filename;
   char *image_dir;
 
+  ply_list_t                    *script_env_vars;
   script_op_t                   *script_main_op;
 
   script_state_t                *script_state;
@@ -91,6 +92,12 @@ struct _ply_boot_splash_plugin
   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);
@@ -138,6 +145,28 @@ unpause_displays (ply_boot_splash_plugin_t *plugin)
     }
 }
 
+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)
 {
@@ -149,6 +178,10 @@ 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;
 }
@@ -156,6 +189,9 @@ create_plugin (ply_key_file_t *key_file)
 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;
 
@@ -169,6 +205,16 @@ destroy_plugin (ply_boot_splash_plugin_t *plugin)
       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);
@@ -208,9 +254,26 @@ on_boot_progress (ply_boot_splash_plugin_t *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,
index 8d916b53e163ce839b1666b52bbac495062c424f..599aa88d6f45cebecd42f8b6371b4a4aaab15eb9 100644 (file)
@@ -1,8 +1,11 @@
 [Plymouth Theme]
 Name=Script
-Description=Script plugin. not much here atm
+Description=Script example plugin.
 ModuleName=script
 
 [script]
 ImageDir=@PLYMOUTH_THEME_PATH@/script
 ScriptFile=@PLYMOUTH_THEME_PATH@/script/script.script
+
+[script-env-vars]
+example_env_var=example env var value