]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
implement legacy_color
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Fri, 27 Aug 2010 20:09:09 +0000 (22:09 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Fri, 27 Aug 2010 20:09:09 +0000 (22:09 +0200)
grub-core/commands/legacycfg.c
grub-core/lib/legacy_parse.c

index ed02fd4f2746439051a800674edb729e76af60dc..db53f2c92c4c5a4b04ba4e0c6d736dd1b23528fe 100644 (file)
@@ -344,7 +344,41 @@ grub_cmd_legacy_initrd (struct grub_command *mycmd __attribute__ ((unused)),
                     "no kernel with module support is loaded in legacy way");
 }
 
+static grub_err_t
+grub_cmd_legacy_color (struct grub_command *mycmd __attribute__ ((unused)),
+                       int argc, char **args)
+{
+  if (argc < 1)
+    return grub_error (GRUB_ERR_BAD_ARGUMENT, "color required");
+  grub_env_set ("color_normal", args[0]);
+  if (argc >= 2)
+    grub_env_set ("color_highlight", args[1]);
+  else
+    {
+      char *slash = grub_strchr (args[0], '/');
+      char *invert;
+      grub_size_t len;
+
+      len = grub_strlen (args[0]);
+      if (!slash)
+       return grub_error (GRUB_ERR_BAD_ARGUMENT, "bad color specification %s",
+                          args[0]);
+      invert = grub_malloc (len + 1);
+      if (!invert)
+       return grub_errno;
+      grub_memcpy (invert, slash + 1, len - (slash - args[0]) - 1);
+      invert[len - (slash - args[0]) - 1] = '/'; 
+      grub_memcpy (invert + len - (slash - args[0]), args[0], slash - args[0]);
+      invert[len] = 0;
+      grub_env_set ("color_highlight", invert);
+      grub_free (invert);
+    }
+
+  return grub_errno;
+}
+
 static grub_command_t cmd_source, cmd_configfile, cmd_kernel, cmd_initrd;
+static grub_command_t cmd_color;
 
 GRUB_MOD_INIT(legacycfg)
 {
@@ -364,6 +398,10 @@ GRUB_MOD_INIT(legacycfg)
                                          grub_cmd_legacy_configfile,
                                          N_("FILE"),
                                          N_("Parse legacy config"));
+  cmd_color = grub_register_command ("legacy_color",
+                                    grub_cmd_legacy_color,
+                                    N_("NORMAL [HIGHLIGHT]"),
+                                    N_("Simulate grub-legacy color command"));
 }
 
 GRUB_MOD_FINI(legacycfg)
@@ -372,4 +410,5 @@ GRUB_MOD_FINI(legacycfg)
   grub_unregister_command (cmd_configfile);
   grub_unregister_command (cmd_kernel);
   grub_unregister_command (cmd_initrd);
+  grub_unregister_command (cmd_color);
 }
index 61952d35d36f0936bda68951f4d346f135ac2d21..1c502187d11f94308000ff48be3d177f90c5b66c 100644 (file)
@@ -62,7 +62,6 @@ struct legacy_command legacy_commands[] =
      "FILE1 FILE2",
      "Compare the file FILE1 with the FILE2 and inform the different values"
      " if any."},
-    /* FIXME: Implement command.  */
     {"color", "legacy_color '%s' '%s'\n", 2, {TYPE_VERBATIM, TYPE_VERBATIM},
      FLAG_IGNORE_REST, "NORMAL [HIGHLIGHT]",
      "Change the menu colors. The color NORMAL is used for most"