99#define ARG_STR_COLOR "color"
1010#define ARG_STR_HELP "help"
1111#define ARG_STR_LEVELS "levels"
12+ #define ARG_STR_VERBOSE "verbose"
1213#define ARG_STR_VERSION "version"
1314
1415#define ARG_CHAR_STYLE 's'
1516#define ARG_CHAR_COLOR 'c'
1617#define ARG_CHAR_HELP 'h'
1718#define ARG_CHAR_LEVELS 'l'
19+ #define ARG_CHAR_VERBOSE 'v'
1820#define ARG_CHAR_VERSION 'v'
1921
2022#define STYLE_STR_1 "fancy"
2123#define STYLE_STR_2 "retro"
24+ #define STYLE_STR_3 "legacy"
2225
2326struct args_struct {
2427 bool levels_flag ;
2528 bool help_flag ;
29+ bool verbose_flag ;
2630 bool version_flag ;
2731 STYLE style ;
2832 struct colors * colors ;
2933};
3034
31- static const char * SYTLES_STR_LIST [STYLES_COUNT ] = { STYLE_STR_1 , STYLE_STR_2 };
35+ static const char * SYTLES_STR_LIST [STYLES_COUNT ] = { STYLE_STR_1 , STYLE_STR_2 , STYLE_STR_3 };
3236static struct args_struct args ;
3337
3438STYLE get_style () {
@@ -52,7 +56,7 @@ bool show_levels() {
5256}
5357
5458bool verbose_enabled () {
55- return false ;
59+ return args . verbose_flag ;
5660}
5761
5862STYLE parse_style (char * style ) {
@@ -96,7 +100,7 @@ bool parse_color(char* optarg, struct colors** cs) {
96100 return false;
97101 }
98102
99- /*
103+ //TODO: Refactor c1->R c2->R ... to c[i]->R
100104 if ((* c1 )-> R < 0 || (* c1 )-> R > 255 ) {
101105 printErr ("Red in color 1 is invalid. Must be in range (0, 255)" );
102106 return false;
@@ -120,7 +124,7 @@ bool parse_color(char* optarg, struct colors** cs) {
120124 if ((* c2 )-> B < 0 || (* c2 )-> B > 255 ) {
121125 printErr ("Blue in color 2 is invalid. Must be in range (0, 255)" );
122126 return false;
123- }*/
127+ }
124128
125129 return true;
126130}
@@ -133,6 +137,7 @@ bool parse_args(int argc, char* argv[]) {
133137
134138 bool color_flag = false;
135139 args .levels_flag = false;
140+ args .verbose_flag = false;
136141 args .help_flag = false;
137142 args .style = STYLE_EMPTY ;
138143 args .colors = NULL ;
@@ -142,11 +147,12 @@ bool parse_args(int argc, char* argv[]) {
142147 {ARG_STR_COLOR , required_argument , 0 , ARG_CHAR_COLOR },
143148 {ARG_STR_HELP , no_argument , 0 , ARG_CHAR_HELP },
144149 {ARG_STR_LEVELS , no_argument , 0 , ARG_CHAR_LEVELS },
150+ {ARG_STR_VERBOSE , no_argument , 0 , ARG_CHAR_VERBOSE },
145151 {ARG_STR_VERSION , no_argument , 0 , ARG_CHAR_VERSION },
146152 {0 , 0 , 0 , 0 }
147153 };
148154
149- c = getopt_long (argc , argv ,"" ,long_options , & option_index );
155+ c = getopt_long (argc , argv , "" , long_options , & option_index );
150156
151157 while (c != -1 ) {
152158 if (c == ARG_CHAR_COLOR ) {
@@ -178,6 +184,13 @@ bool parse_args(int argc, char* argv[]) {
178184 }
179185 args .help_flag = true;
180186 }
187+ else if (c == ARG_CHAR_VERBOSE ) {
188+ if (args .verbose_flag ) {
189+ printErr ("Verbose option specified more than once" );
190+ return false;
191+ }
192+ args .verbose_flag = true;
193+ }
181194 else if (c == ARG_CHAR_LEVELS ) {
182195 if (args .levels_flag ) {
183196 printErr ("Levels option specified more than once" );
0 commit comments