diff options
author | Michael Brown | 2013-12-08 02:03:35 +0100 |
---|---|---|
committer | Michael Brown | 2013-12-09 16:34:14 +0100 |
commit | e8b5b504860967ed9a594bafe7cbc844117b92b3 (patch) | |
tree | e584bd86dcec8cb6ca264f437dd18c77dc6b6535 /src/hci/commands | |
parent | [mucurses] Use centralised concept of colour pairs (diff) | |
download | ipxe-e8b5b504860967ed9a594bafe7cbc844117b92b3.tar.gz ipxe-e8b5b504860967ed9a594bafe7cbc844117b92b3.tar.xz ipxe-e8b5b504860967ed9a594bafe7cbc844117b92b3.zip |
[cmdline] Add the "colour" and "cpair" commands
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/hci/commands')
-rw-r--r-- | src/hci/commands/console_cmd.c | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/src/hci/commands/console_cmd.c b/src/hci/commands/console_cmd.c index f97bc3ee..9bea2790 100644 --- a/src/hci/commands/console_cmd.c +++ b/src/hci/commands/console_cmd.c @@ -32,6 +32,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include <ipxe/console.h> #include <ipxe/image.h> #include <ipxe/pixbuf.h> +#include <ipxe/ansicol.h> #include <usr/imgmgmt.h> /** "console" options */ @@ -116,10 +117,134 @@ static int console_exec ( int argc, char **argv ) { return rc; } +/** "colour" options */ +struct colour_options { + /** Basic colour */ + unsigned int basic; + /** 24-bit RGB value */ + unsigned int rgb; +}; + +/** "colour" option list */ +static struct option_descriptor colour_opts[] = { + OPTION_DESC ( "basic", 'b', required_argument, + struct colour_options, basic, parse_integer ), + OPTION_DESC ( "rgb", 'r', required_argument, + struct colour_options, rgb, parse_integer ), +}; + +/** "colour" command descriptor */ +static struct command_descriptor colour_cmd = + COMMAND_DESC ( struct colour_options, colour_opts, 1, 1, "<colour>" ); + +/** + * "colour" command + * + * @v argc Argument count + * @v argv Argument list + * @ret rc Return status code + */ +static int colour_exec ( int argc, char **argv ) { + struct colour_options opts; + unsigned int colour; + int rc; + + /* Initialise options */ + memset ( &opts, 0, sizeof ( opts ) ); + opts.basic = COLOUR_DEFAULT; + opts.rgb = ANSICOL_NO_RGB; + + /* Parse options */ + if ( ( rc = reparse_options ( argc, argv, &colour_cmd, &opts ) ) != 0 ) + return rc; + + /* Parse colour index */ + if ( ( rc = parse_integer ( argv[optind], &colour ) ) != 0 ) + return rc; + + /* Define colour */ + if ( ( rc = ansicol_define ( colour, opts.basic, opts.rgb ) ) != 0 ) { + printf ( "Could not define colour: %s\n", strerror ( rc ) ); + return rc; + } + + /* Reapply default colour pair, in case definition has changed */ + ansicol_set_pair ( CPAIR_DEFAULT ); + + return 0; +} + +/** "cpair" options */ +struct cpair_options { + /** Foreground colour */ + unsigned int foreground; + /** Background colour */ + unsigned int background; +}; + +/** "cpair" option list */ +static struct option_descriptor cpair_opts[] = { + OPTION_DESC ( "foreground", 'f', required_argument, + struct cpair_options, foreground, parse_integer ), + OPTION_DESC ( "background", 'b', required_argument, + struct cpair_options, background, parse_integer ), +}; + +/** "cpair" command descriptor */ +static struct command_descriptor cpair_cmd = + COMMAND_DESC ( struct cpair_options, cpair_opts, 1, 1, "<cpair>" ); + +/** + * "cpair" command + * + * @v argc Argument count + * @v argv Argument list + * @ret rc Return status code + */ +static int cpair_exec ( int argc, char **argv ) { + struct cpair_options opts; + unsigned int cpair; + int rc; + + /* Initialise options */ + memset ( &opts, 0, sizeof ( opts ) ); + opts.foreground = COLOUR_DEFAULT; + opts.background = COLOUR_DEFAULT; + + /* Parse options */ + if ( ( rc = reparse_options ( argc, argv, &cpair_cmd, &opts ) ) != 0 ) + return rc; + + /* Parse colour pair index */ + if ( ( rc = parse_integer ( argv[optind], &cpair ) ) != 0 ) + return rc; + + /* Define colour pair */ + if ( ( rc = ansicol_define_pair ( cpair, opts.foreground, + opts.background ) ) != 0 ) { + printf ( "Could not define colour pair: %s\n", + strerror ( rc ) ); + return rc; + } + + /* Reapply default colour pair, in case definition has changed */ + ansicol_set_pair ( CPAIR_DEFAULT ); + + return 0; +} + /** Console management commands */ struct command console_commands[] __command = { { .name = "console", .exec = console_exec, }, + { + .name = "colour", + .exec = colour_exec, + }, + { + .name = "cpair", + .exec = cpair_exec, + }, }; |