diff options
author | B. Watson <urchlay@slackware.uk> | 2024-12-15 16:24:26 -0500 |
---|---|---|
committer | B. Watson <urchlay@slackware.uk> | 2024-12-15 16:24:26 -0500 |
commit | 49d5ffdd4abe4e0425f60cf1f40aec5d157bfe50 (patch) | |
tree | 3d217c0788a40db00beae885c6016c64004bae1c /uxd.c | |
parent | ac14dd1755c1408996faed3a19f84570af804b50 (diff) | |
download | uxd-49d5ffdd4abe4e0425f60cf1f40aec5d157bfe50.tar.gz |
implement -c (colors) option.
Diffstat (limited to 'uxd.c')
-rw-r--r-- | uxd.c | 46 |
1 files changed, 40 insertions, 6 deletions
@@ -63,11 +63,13 @@ extern int optind; #define SPECIAL PURPLE #define BAD_FG BLACK -#define BAD_BG RED +#define BAD_BG bad_color -const int normal_colors[] = { GREEN, YELLOW }; +int normal_colors[] = { GREEN, YELLOW }; int cur_normal_color = 0; int dump_color; +int bad_color = RED; +int special_color = SPECIAL; const char *self; FILE *input; @@ -128,6 +130,36 @@ void open_input(const char *arg) { } } +void color_error(void) { + fprintf(stderr, "%s: invalid -c colors (-h for help).\n", self); + exit(1); +} + +void check_color(char c) { + if(c < '0' || c > '7') color_error(); +} + +void parse_colors(char *arg) { + if(!arg[0]) return; /* should never happen anyway */ + + /* first 2 are required */ + check_color(arg[0]); + check_color(arg[1]); + + normal_colors[0] = arg[0] - '0'; + normal_colors[1] = arg[1] - '0'; + + /* optional 3rd color */ + if(!arg[2]) return; + check_color(arg[2]); + special_color = arg[2] - '0'; + + /* optional 4th color */ + if(!arg[3]) return; + check_color(arg[3]); + bad_color = arg[3] - '0'; +} + long parse_number(const char *s) { return strtol(s, NULL, 0); /* TODO: error checking */ } @@ -142,10 +174,12 @@ void parse_args(int argc, char **argv) { version(); } - while((opt = my_getopt(argc, argv, "nbl:rmo:S:s:uhv")) != -1) { + while((opt = my_getopt(argc, argv, "c:nbl:rmo:S:s:uhv")) != -1) { switch(opt) { + case 'c': + mono = 0; parse_colors(optarg); break; case 'n': - break; + break; /* already handled in parse_options() */ case 'b': bold = 1; break; case 'l': @@ -414,11 +448,11 @@ int dump_utf8_char(void) { /* replacement character � is U+FFFD */ printable = "�"; } else if(special) { - fg = SPECIAL; + fg = special_color; bg = 0; printable = get_special(bytes[0]); } else if(cont_count == 2 && is_bom(bytes)) { - fg = SPECIAL; + fg = special_color; bg = 0; printable = "B"; } else { |