diff --git a/include/openbsc/debug.h b/include/openbsc/debug.h index dcb74c03f..018a11657 100644 --- a/include/openbsc/debug.h +++ b/include/openbsc/debug.h @@ -19,5 +19,6 @@ void debugp(unsigned int subsys, char *file, int line, const char *format, ...); void debug_parse_category_mask(const char* mask); +void debug_use_color(int use_color); #endif /* _DEBUG_H */ diff --git a/src/bsc_hack.c b/src/bsc_hack.c index aa2b58506..a8f5a8962 100644 --- a/src/bsc_hack.c +++ b/src/bsc_hack.c @@ -27,6 +27,9 @@ #include #include +#define _GNU_SOURCE +#include + #include #include #include @@ -581,8 +584,58 @@ static int bootstrap_network(void) return 0; } +static void print_usage() +{ + printf("Usage: bsc_hack\n"); +} + +static void print_help() +{ + printf(" Some useful help...\n"); + printf(" -d option --debug=DRLL:DCC:DMM:DRR:DRSL:DNM enable debugging\n"); + printf(" -n --disable-color\n"); + printf(" -h --help this text\n"); +} + +static void handle_options(int argc, char** argv) +{ + while (1) { + int option_index = 0, c; + static struct option long_options[] = { + {"help", 0, 0, 'h'}, + {"debug", 1, 0, 'd'}, + {"disable-color", 0, 0, 'n'}, + {0, 0, 0, 0} + }; + + c = getopt_long(argc, argv, "hnd:", + long_options, &option_index); + if (c == -1) + break; + + switch (c) { + case 'h': + print_usage(); + print_help(); + exit(0); + case 'n': + debug_use_color(0); + break; + case 'd': + debug_parse_category_mask(optarg); + break; + default: + /* ignore */ + break; + } + } +} + int main(int argc, char **argv) { + /* parse options */ + handle_options(argc, argv); + bootstrap_network(); while (1) { diff --git a/src/debug.c b/src/debug.c index c1bebcab1..27fdb9ceb 100644 --- a/src/debug.c +++ b/src/debug.c @@ -53,6 +53,11 @@ static const struct debug_info debug_info[] = { static int use_color = 1; +void debug_use_color(int color) +{ + use_color = color; +} + /* * Parse the category mask. * category1:category2:category3