diff options
author | Max Kellermann <max@duempel.org> | 2008-10-03 14:24:28 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2008-10-03 14:24:28 +0200 |
commit | 7a12f9e8754a10634fa43732712dc60b87fa2c47 (patch) | |
tree | eee8b02c060839674ec6346697dde9d020a5e75e /src | |
parent | 43dfcc89822e46657db0d2bd52721e4ce852a357 (diff) | |
download | mpd-7a12f9e8754a10634fa43732712dc60b87fa2c47.tar.gz mpd-7a12f9e8754a10634fa43732712dc60b87fa2c47.tar.xz mpd-7a12f9e8754a10634fa43732712dc60b87fa2c47.zip |
colors: color id is the index of the "colors" array
The color ids are sequential, and we can save some bytes if we use it
for the array index.
Diffstat (limited to 'src')
-rw-r--r-- | src/colors.c | 69 | ||||
-rw-r--r-- | src/colors.h | 1 |
2 files changed, 25 insertions, 45 deletions
diff --git a/src/colors.c b/src/colors.c index 690b9f20d..68c5b6007 100644 --- a/src/colors.c +++ b/src/colors.c @@ -20,6 +20,7 @@ #include "i18n.h" #include "options.h" +#include <assert.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -58,26 +59,24 @@ typedef struct { } color_definition_entry_t; typedef struct { - enum color id; const char *name; short fg; attr_t attrs; } color_entry_t; -static color_entry_t colors[] = { - /* color pair, field name, color, mono attribute */ - { COLOR_TITLE, NAME_TITLE, COLOR_YELLOW, A_NORMAL }, - { COLOR_TITLE_BOLD, NAME_TITLE_BOLD, COLOR_BRIGHT_YELLOW, A_BOLD }, - { COLOR_LINE, NAME_LINE, COLOR_WHITE, A_NORMAL }, - { COLOR_LINE_BOLD, NAME_LINE_BOLD, COLOR_BRIGHT_WHITE, A_BOLD }, - { COLOR_LIST, NAME_LIST, COLOR_GREEN, A_NORMAL }, - { COLOR_LIST_BOLD, NAME_LIST_BOLD, COLOR_BRIGHT_GREEN, A_BOLD }, - { COLOR_PROGRESSBAR, NAME_PROGRESS, COLOR_WHITE, A_NORMAL }, - { COLOR_STATUS, NAME_STATUS, COLOR_YELLOW, A_NORMAL }, - { COLOR_STATUS_BOLD, NAME_STATUS_BOLD, COLOR_BRIGHT_YELLOW, A_BOLD }, - { COLOR_STATUS_TIME, NAME_STATUS_TIME, COLOR_RED, A_NORMAL }, - { COLOR_STATUS_ALERT, NAME_ALERT, COLOR_BRIGHT_RED, A_BOLD }, - { 0, NULL, 0, 0 } +static color_entry_t colors[COLOR_END] = { + /* color pair = field name, color, mono attribute */ + [COLOR_TITLE] = { NAME_TITLE, COLOR_YELLOW, A_NORMAL }, + [COLOR_TITLE_BOLD] = { NAME_TITLE_BOLD, COLOR_BRIGHT_YELLOW, A_BOLD }, + [COLOR_LINE] = { NAME_LINE, COLOR_WHITE, A_NORMAL }, + [COLOR_LINE_BOLD] = { NAME_LINE_BOLD, COLOR_BRIGHT_WHITE, A_BOLD }, + [COLOR_LIST] = { NAME_LIST, COLOR_GREEN, A_NORMAL }, + [COLOR_LIST_BOLD] = { NAME_LIST_BOLD, COLOR_BRIGHT_GREEN, A_BOLD }, + [COLOR_PROGRESSBAR] = { NAME_PROGRESS, COLOR_WHITE, A_NORMAL }, + [COLOR_STATUS] = { NAME_STATUS, COLOR_YELLOW, A_NORMAL }, + [COLOR_STATUS_BOLD] = { NAME_STATUS_BOLD, COLOR_BRIGHT_YELLOW, A_BOLD }, + [COLOR_STATUS_TIME] = { NAME_STATUS_TIME, COLOR_RED, A_NORMAL }, + [COLOR_STATUS_ALERT] = { NAME_ALERT, COLOR_BRIGHT_RED, A_BOLD }, }; /* background color */ @@ -86,29 +85,13 @@ static short bg = COLOR_BLACK; static GList *color_definition_list = NULL; static color_entry_t * -colors_lookup(enum color id) -{ - int i = 0; - - while (colors[i].name != NULL) { - if (colors[i].id == id) - return &colors[i]; - i++; - } - - return NULL; -} - -static color_entry_t * colors_lookup_by_name(const char *name) { - int i = 0; + enum color i; - while (colors[i].name != NULL) { + for (i = 1; i < COLOR_END; ++i) if (!strcasecmp(colors[i].name, name)) return &colors[i]; - i++; - } return NULL; } @@ -116,11 +99,10 @@ colors_lookup_by_name(const char *name) static int colors_update_pair(enum color id) { - color_entry_t *entry = colors_lookup(id); + color_entry_t *entry = &colors[id]; short fg = -1; - if (!entry) - return -1; + assert(id > 0 && id < COLOR_END); if (IS_BRIGHT(entry->fg)) { entry->attrs = A_BOLD; @@ -130,7 +112,7 @@ colors_update_pair(enum color id) fg = entry->fg; } - init_pair(entry->id, fg, bg); + init_pair(id, fg, bg); return 0; } @@ -249,13 +231,11 @@ colors_start(void) fprintf(stderr, _("Terminal lacks support for changing colors!\n")); if (options.enable_colors) { - int i = 0; + enum color i; - while (colors[i].name) { + for (i = 1; i < COLOR_END; ++i) /* update the color pairs */ - colors_update_pair(colors[i].id); - i++; - } + colors_update_pair(i); } } else if (options.enable_colors) { fprintf(stderr, _("Terminal lacks color capabilities!\n")); @@ -281,12 +261,11 @@ colors_start(void) int colors_use(WINDOW *w, enum color id) { - color_entry_t *entry = colors_lookup(id); + color_entry_t *entry = &colors[id]; short pair; attr_t attrs; - if (!entry) - return -1; + assert(id > 0 && id < COLOR_END); wattr_get(w, &attrs, &pair, NULL); diff --git a/src/colors.h b/src/colors.h index df0335561..b612a33ce 100644 --- a/src/colors.h +++ b/src/colors.h @@ -15,6 +15,7 @@ enum color { COLOR_STATUS_BOLD, COLOR_STATUS_TIME, COLOR_STATUS_ALERT, + COLOR_END }; short colors_str2color(const char *str); |