From 4c09f86cfeeec05eb3c8b416e7be96c75480ab7d Mon Sep 17 00:00:00 2001 From: andreaskoepke Date: Mon, 5 Nov 2007 18:03:20 +0000 Subject: [PATCH] getopt is not re-entrant, so we rely on the external popt library to parse command line options --- tools/platforms/msp430/cppbsl/configure | 215 +++++- tools/platforms/msp430/cppbsl/configure.in | 4 +- tools/platforms/msp430/cppbsl/src/Makefile.am | 2 - .../platforms/msp430/cppbsl/src/Parameters.cc | 106 ++- tools/platforms/msp430/cppbsl/src/cmdline.cc | 620 ------------------ tools/platforms/msp430/cppbsl/src/cmdline.h | 182 ----- 6 files changed, 290 insertions(+), 839 deletions(-) delete mode 100755 tools/platforms/msp430/cppbsl/src/cmdline.cc delete mode 100755 tools/platforms/msp430/cppbsl/src/cmdline.h diff --git a/tools/platforms/msp430/cppbsl/configure b/tools/platforms/msp430/cppbsl/configure index 53dc469e..7ef6bab1 100755 --- a/tools/platforms/msp430/cppbsl/configure +++ b/tools/platforms/msp430/cppbsl/configure @@ -4144,8 +4144,219 @@ fi #checks for header files and libraries #AC_CHECK_HEADER(readline.h) #AC_CHECK_LIB(readline, rl_initialize) -# AC_CHECK_HEADER(popt.h) -# AC_CHECK_LIB(popt, poptGetNextOpt) +if test "${ac_cv_header_popt_h+set}" = set; then + echo "$as_me:$LINENO: checking for popt.h" >&5 +echo $ECHO_N "checking for popt.h... $ECHO_C" >&6 +if test "${ac_cv_header_popt_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_popt_h" >&5 +echo "${ECHO_T}$ac_cv_header_popt_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking popt.h usability" >&5 +echo $ECHO_N "checking popt.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking popt.h presence" >&5 +echo $ECHO_N "checking popt.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: popt.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: popt.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: popt.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: popt.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: popt.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: popt.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: popt.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: popt.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: popt.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: popt.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: popt.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: popt.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: popt.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: popt.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: popt.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: popt.h: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## -------------------------------------- ## +## Report this to koepke@tkn.tu-berlin.de ## +## -------------------------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for popt.h" >&5 +echo $ECHO_N "checking for popt.h... $ECHO_C" >&6 +if test "${ac_cv_header_popt_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_popt_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_popt_h" >&5 +echo "${ECHO_T}$ac_cv_header_popt_h" >&6 + +fi + + + +echo "$as_me:$LINENO: checking for poptGetNextOpt in -lpopt" >&5 +echo $ECHO_N "checking for poptGetNextOpt in -lpopt... $ECHO_C" >&6 +if test "${ac_cv_lib_popt_poptGetNextOpt+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpopt $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char poptGetNextOpt (); +int +main () +{ +poptGetNextOpt (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_popt_poptGetNextOpt=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_popt_poptGetNextOpt=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_popt_poptGetNextOpt" >&5 +echo "${ECHO_T}$ac_cv_lib_popt_poptGetNextOpt" >&6 +if test $ac_cv_lib_popt_poptGetNextOpt = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBPOPT 1 +_ACEOF + + LIBS="-lpopt $LIBS" + +fi + #AC_CHECK_HEADER(pthread.h) # Checks for typedefs, structures, and compiler characteristics. diff --git a/tools/platforms/msp430/cppbsl/configure.in b/tools/platforms/msp430/cppbsl/configure.in index e45cad40..293ae8b6 100644 --- a/tools/platforms/msp430/cppbsl/configure.in +++ b/tools/platforms/msp430/cppbsl/configure.in @@ -20,8 +20,8 @@ AC_C_CONST #checks for header files and libraries #AC_CHECK_HEADER(readline.h) #AC_CHECK_LIB(readline, rl_initialize) -# AC_CHECK_HEADER(popt.h) -# AC_CHECK_LIB(popt, poptGetNextOpt) +AC_CHECK_HEADER(popt.h) +AC_CHECK_LIB(popt, poptGetNextOpt) #AC_CHECK_HEADER(pthread.h) # Checks for typedefs, structures, and compiler characteristics. diff --git a/tools/platforms/msp430/cppbsl/src/Makefile.am b/tools/platforms/msp430/cppbsl/src/Makefile.am index 4f7ec416..8195481b 100644 --- a/tools/platforms/msp430/cppbsl/src/Makefile.am +++ b/tools/platforms/msp430/cppbsl/src/Makefile.am @@ -3,8 +3,6 @@ MAINTAINERCLEANFILES = Makefile.in bin_PROGRAMS=cppbsl cppbsl_SOURCES=\ - cmdline.h \ - cmdline.cc \ Parameters.h \ Parameters.cc \ Serial.h \ diff --git a/tools/platforms/msp430/cppbsl/src/Parameters.cc b/tools/platforms/msp430/cppbsl/src/Parameters.cc index fff59584..578035c3 100644 --- a/tools/platforms/msp430/cppbsl/src/Parameters.cc +++ b/tools/platforms/msp430/cppbsl/src/Parameters.cc @@ -31,52 +31,96 @@ #include #include #include -#include "cmdline.h" +#include #include "Parameters.h" using namespace std; Parameters::Parameters(int argc, char **argv) { + int c; action = NONE; - gengetopt_args_info args_info; - cmdline_parser_init(&args_info); - if(cmdline_parser(argc, argv, &args_info) != 0) { - exit(1); + device = 0; + verbose = false; + action = NONE; + image = 0; + telosb = false; + + poptOption optionsTable[] = { + {"debug",'D', 0, 0, 'd', "print many statements on progress"}, + {"f1x",'1', 0, 0, '1', "Specify CPU family, in case autodetect fails"}, + {"invert-reset",'R', 0, 0, 'R', "RESET pin is inverted"}, + {"invert-test",'T', 0, 0, 'T', "TEST pin is inverted"}, + {"telosb",'b', 0, 0, 'b', "Assume a TelosB node"}, + {"tmote",'b', 0, 0, 'b', "Assume a Tmote node"}, + {"intelhex",'I', 0, 0, 'I', "force fileformat to be IntelHex"}, + {"erase",'e', 0, 0, 'e', "erase device"}, + {"reset",'r', 0, 0, 'r', "reset device"}, + {"program",'p', POPT_ARG_STRING, &image, 0, + "Program file", ""}, + {"comport",'c', POPT_ARG_STRING, &device, 0, + "communicate with MSP430 using this device", ""}, + POPT_AUTOHELP + POPT_TABLEEND + }; + + poptContext optCon; /* context for parsing command-line options */ + optCon = poptGetContext(NULL, argc, (const char**)argv, optionsTable, 0); + /* Now do options processing */ + while((c = poptGetNextOpt(optCon)) >= 0) { + switch(c) { + case 'R': + invertReset = true; + break; + case 'T': + invertTest = true; + break; + case 'd': + verbose = true; + break; + case 'r': + if(action < RESET) { + action = RESET; + } + break; + case 'e': + if(action < ERASE) { + action = ERASE; + } + break; + case 'b': + telosb = true; + break; + default: + break; + } } - if(args_info.invert_test_given) { - invertTest = true; - } else { - invertTest = false; + if (c < -1) { + /* an error occurred during option processing */ + fprintf(stderr, "%s: %s\n", + poptBadOption(optCon, POPT_BADOPTION_NOALIAS), + poptStrerror(c)); + exit(1); } - if(args_info.invert_reset_given) { - invertReset = true; - } else { + if(telosb) { invertReset = false; + invertTest = false; } - if(args_info.debug_given) { - verbose = true; - } else { - verbose = false; - } - if((args_info.erase_given) && (action < ERASE)) { - action = ERASE; + if(image != 0) { + action = FLASH; } - if((args_info.reset_given) && (action < RESET)) { - action = RESET; + if(device != 0) { + dev = device; } - if(args_info.program_given) { - action = FLASH; - img = args_info.program_arg; + else { + exit(1); } - if(args_info.comport_given) { - dev = args_info.comport_arg; + if(image != 0) { + img = image; } - if(args_info.telosb_given || args_info.tmote_given) { - telosb = true; - invertReset = false; - invertTest = false; + else if(action == FLASH) { + exit(1); } - cmdline_parser_free(&args_info); + poptFreeContext(optCon); }; diff --git a/tools/platforms/msp430/cppbsl/src/cmdline.cc b/tools/platforms/msp430/cppbsl/src/cmdline.cc deleted file mode 100755 index 9e07133e..00000000 --- a/tools/platforms/msp430/cppbsl/src/cmdline.cc +++ /dev/null @@ -1,620 +0,0 @@ -/* - File autogenerated by gengetopt version 2.21 - generated with the following command: - ./src/gengetopt -i sample2.ggo - - The developers of gengetopt consider the fixed text that goes in all - gengetopt output files to be in the public domain: - we make no copyright claims on it. -*/ - -/* If we use autoconf. */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include - -#include "getopt.h" - -#include "cmdline.h" - -const char *gengetopt_args_info_purpose = "this is just a test program for gengetopt"; - -const char *gengetopt_args_info_usage = "Usage: " CMDLINE_PARSER_PACKAGE " [OPTIONS]..."; - -const char *gengetopt_args_info_description = ""; - -const char *gengetopt_args_info_help[] = { - " -h, --help Print help and exit", - " -V, --version Print version and exit", - " -T, --invert-test TEST pin is inverted (default=off)", - " -R, --invert-reset RESET pin is inverted (default=off)", - " --telosb Assume a TelosB node (default=off)", - " --tmote Assume a Tmote node (default=off)", - " -v, --debug be verbose for debug purposes (default=off)", - " -1, --f1x Specify CPU family (default=off)", - " -I, --intelhex force fileformat to be IntelHex (default=off)", - " -e, --erase erase device (default=off)", - " -r, --reset reset device (default=off)", - " -p, --program=STRING program file", - " -c, --comport=STRING communicate using this device", - 0 -}; - -static -void clear_given (struct gengetopt_args_info *args_info); -static -void clear_args (struct gengetopt_args_info *args_info); - -static int -cmdline_parser_internal (int argc, char * const *argv, struct gengetopt_args_info *args_info, - struct cmdline_parser_params *params, const char *additional_error); - -static int -cmdline_parser_required2 (struct gengetopt_args_info *args_info, const char *prog_name, const char *additional_error); - -static char * -gengetopt_strdup (const char *s); - -static -void clear_given (struct gengetopt_args_info *args_info) -{ - args_info->help_given = 0 ; - args_info->version_given = 0 ; - args_info->invert_test_given = 0 ; - args_info->invert_reset_given = 0 ; - args_info->telosb_given = 0 ; - args_info->tmote_given = 0 ; - args_info->debug_given = 0 ; - args_info->f1x_given = 0 ; - args_info->intelhex_given = 0 ; - args_info->erase_given = 0 ; - args_info->reset_given = 0 ; - args_info->program_given = 0 ; - args_info->comport_given = 0 ; -} - -static -void clear_args (struct gengetopt_args_info *args_info) -{ - args_info->invert_test_flag = 0; - args_info->invert_reset_flag = 0; - args_info->telosb_flag = 0; - args_info->tmote_flag = 0; - args_info->debug_flag = 0; - args_info->f1x_flag = 0; - args_info->intelhex_flag = 0; - args_info->erase_flag = 0; - args_info->reset_flag = 0; - args_info->program_arg = NULL; - args_info->program_orig = NULL; - args_info->comport_arg = NULL; - args_info->comport_orig = NULL; - -} - -static -void init_args_info(struct gengetopt_args_info *args_info) -{ - args_info->help_help = gengetopt_args_info_help[0] ; - args_info->version_help = gengetopt_args_info_help[1] ; - args_info->invert_test_help = gengetopt_args_info_help[2] ; - args_info->invert_reset_help = gengetopt_args_info_help[3] ; - args_info->telosb_help = gengetopt_args_info_help[4] ; - args_info->tmote_help = gengetopt_args_info_help[5] ; - args_info->debug_help = gengetopt_args_info_help[6] ; - args_info->f1x_help = gengetopt_args_info_help[7] ; - args_info->intelhex_help = gengetopt_args_info_help[8] ; - args_info->erase_help = gengetopt_args_info_help[9] ; - args_info->reset_help = gengetopt_args_info_help[10] ; - args_info->program_help = gengetopt_args_info_help[11] ; - args_info->comport_help = gengetopt_args_info_help[12] ; - -} - -void -cmdline_parser_print_version (void) -{ - printf ("%s %s\n", CMDLINE_PARSER_PACKAGE, CMDLINE_PARSER_VERSION); -} - -void -cmdline_parser_print_help (void) -{ - int i = 0; - cmdline_parser_print_version (); - - if (strlen(gengetopt_args_info_purpose) > 0) - printf("\n%s\n", gengetopt_args_info_purpose); - - printf("\n%s\n\n", gengetopt_args_info_usage); - - if (strlen(gengetopt_args_info_description) > 0) - printf("%s\n", gengetopt_args_info_description); - - while (gengetopt_args_info_help[i]) - printf("%s\n", gengetopt_args_info_help[i++]); -} - -void -cmdline_parser_init (struct gengetopt_args_info *args_info) -{ - clear_given (args_info); - clear_args (args_info); - init_args_info (args_info); -} - -struct cmdline_parser_params * -cmdline_parser_params_init() -{ - struct cmdline_parser_params *params = - (struct cmdline_parser_params *)malloc(sizeof(struct cmdline_parser_params)); - - if (params) - { - params->override = 0; - params->initialize = 0; - params->check_required = 0; - params->check_ambiguity = 0; - } - - return params; -} - -static void -cmdline_parser_release (struct gengetopt_args_info *args_info) -{ - - if (args_info->program_arg) - { - free (args_info->program_arg); /* free previous argument */ - args_info->program_arg = 0; - } - if (args_info->program_orig) - { - free (args_info->program_orig); /* free previous argument */ - args_info->program_orig = 0; - } - if (args_info->comport_arg) - { - free (args_info->comport_arg); /* free previous argument */ - args_info->comport_arg = 0; - } - if (args_info->comport_orig) - { - free (args_info->comport_orig); /* free previous argument */ - args_info->comport_orig = 0; - } - - clear_given (args_info); -} - -int -cmdline_parser_file_save(const char *filename, struct gengetopt_args_info *args_info) -{ - FILE *outfile; - int i = 0; - - outfile = fopen(filename, "w"); - - if (!outfile) - { - fprintf (stderr, "%s: cannot open file for writing: %s\n", CMDLINE_PARSER_PACKAGE, filename); - return EXIT_FAILURE; - } - - if (args_info->help_given) { - fprintf(outfile, "%s\n", "help"); - } - if (args_info->version_given) { - fprintf(outfile, "%s\n", "version"); - } - if (args_info->invert_test_given) { - fprintf(outfile, "%s\n", "invert-test"); - } - if (args_info->invert_reset_given) { - fprintf(outfile, "%s\n", "invert-reset"); - } - if (args_info->telosb_given) { - fprintf(outfile, "%s\n", "telosb"); - } - if (args_info->tmote_given) { - fprintf(outfile, "%s\n", "tmote"); - } - if (args_info->debug_given) { - fprintf(outfile, "%s\n", "debug"); - } - if (args_info->f1x_given) { - fprintf(outfile, "%s\n", "f1x"); - } - if (args_info->intelhex_given) { - fprintf(outfile, "%s\n", "intelhex"); - } - if (args_info->erase_given) { - fprintf(outfile, "%s\n", "erase"); - } - if (args_info->reset_given) { - fprintf(outfile, "%s\n", "reset"); - } - if (args_info->program_given) { - if (args_info->program_orig) { - fprintf(outfile, "%s=\"%s\"\n", "program", args_info->program_orig); - } else { - fprintf(outfile, "%s\n", "program"); - } - } - if (args_info->comport_given) { - if (args_info->comport_orig) { - fprintf(outfile, "%s=\"%s\"\n", "comport", args_info->comport_orig); - } else { - fprintf(outfile, "%s\n", "comport"); - } - } - - fclose (outfile); - - i = EXIT_SUCCESS; - return i; -} - -void -cmdline_parser_free (struct gengetopt_args_info *args_info) -{ - cmdline_parser_release (args_info); -} - - -/* gengetopt_strdup() */ -/* strdup.c replacement of strdup, which is not standard */ -char * -gengetopt_strdup (const char *s) -{ - char *result = NULL; - if (!s) - return result; - - result = (char*)malloc(strlen(s) + 1); - if (result == (char*)0) - return (char*)0; - strcpy(result, s); - return result; -} - -int -cmdline_parser (int argc, char * const *argv, struct gengetopt_args_info *args_info) -{ - return cmdline_parser2 (argc, argv, args_info, 0, 1, 1); -} - -int -cmdline_parser_ext (int argc, char * const *argv, struct gengetopt_args_info *args_info, - struct cmdline_parser_params *params) -{ - int result; - result = cmdline_parser_internal (argc, argv, args_info, params, NULL); - - if (result == EXIT_FAILURE) - { - cmdline_parser_free (args_info); - exit (EXIT_FAILURE); - } - - return result; -} - -int -cmdline_parser2 (int argc, char * const *argv, struct gengetopt_args_info *args_info, int override, int initialize, int check_required) -{ - int result; - struct cmdline_parser_params params; - - params.override = override; - params.initialize = initialize; - params.check_required = check_required; - params.check_ambiguity = 0; - - result = cmdline_parser_internal (argc, argv, args_info, ¶ms, NULL); - - if (result == EXIT_FAILURE) - { - cmdline_parser_free (args_info); - exit (EXIT_FAILURE); - } - - return result; -} - -int -cmdline_parser_required (struct gengetopt_args_info *args_info, const char *prog_name) -{ - int result = EXIT_SUCCESS; - - if (cmdline_parser_required2(args_info, prog_name, NULL) > 0) - result = EXIT_FAILURE; - - if (result == EXIT_FAILURE) - { - cmdline_parser_free (args_info); - exit (EXIT_FAILURE); - } - - return result; -} - -int -cmdline_parser_required2 (struct gengetopt_args_info *args_info, const char *prog_name, const char *additional_error) -{ - int error = 0; - - /* checks for required options */ - if (! args_info->comport_given) - { - fprintf (stderr, "%s: '--comport' ('-c') option required%s\n", prog_name, (additional_error ? additional_error : "")); - error = 1; - } - - - /* checks for dependences among options */ - - return error; -} - -int -cmdline_parser_internal (int argc, char * const *argv, struct gengetopt_args_info *args_info, - struct cmdline_parser_params *params, const char *additional_error) -{ - int c; /* Character of the parsed option. */ - - int error = 0; - struct gengetopt_args_info local_args_info; - - int override; - int initialize; - int check_required; - int check_ambiguity; - - override = params->override; - initialize = params->initialize; - check_required = params->check_required; - check_ambiguity = params->check_ambiguity; - - if (initialize) - cmdline_parser_init (args_info); - - cmdline_parser_init (&local_args_info); - - optarg = 0; - optind = 0; - opterr = 1; - optopt = '?'; - - while (1) - { - int option_index = 0; - char *stop_char; - - static struct option long_options[] = { - { "help", 0, NULL, 'h' }, - { "version", 0, NULL, 'V' }, - { "invert-test", 0, NULL, 'T' }, - { "invert-reset", 0, NULL, 'R' }, - { "telosb", 0, NULL, 0 }, - { "tmote", 0, NULL, 0 }, - { "debug", 0, NULL, 'v' }, - { "f1x", 0, NULL, '1' }, - { "intelhex", 0, NULL, 'I' }, - { "erase", 0, NULL, 'e' }, - { "reset", 0, NULL, 'r' }, - { "program", 1, NULL, 'p' }, - { "comport", 1, NULL, 'c' }, - { NULL, 0, NULL, 0 } - }; - - stop_char = 0; - c = getopt_long (argc, argv, "hVTRv1Ierp:c:", long_options, &option_index); - - if (c == -1) break; /* Exit from `while (1)' loop. */ - - switch (c) - { - case 'h': /* Print help and exit. */ - cmdline_parser_print_help (); - cmdline_parser_free (&local_args_info); - exit (EXIT_SUCCESS); - - case 'V': /* Print version and exit. */ - cmdline_parser_print_version (); - cmdline_parser_free (&local_args_info); - exit (EXIT_SUCCESS); - - case 'T': /* TEST pin is inverted. */ - if (local_args_info.invert_test_given || (check_ambiguity && args_info->invert_test_given)) - { - fprintf (stderr, "%s: `--invert-test' (`-T') option given more than once%s\n", argv[0], (additional_error ? additional_error : "")); - goto failure; - } - if (args_info->invert_test_given && ! override) - continue; - local_args_info.invert_test_given = 1; - args_info->invert_test_given = 1; - args_info->invert_test_flag = !(args_info->invert_test_flag); - break; - - case 'R': /* RESET pin is inverted. */ - if (local_args_info.invert_reset_given || (check_ambiguity && args_info->invert_reset_given)) - { - fprintf (stderr, "%s: `--invert-reset' (`-R') option given more than once%s\n", argv[0], (additional_error ? additional_error : "")); - goto failure; - } - if (args_info->invert_reset_given && ! override) - continue; - local_args_info.invert_reset_given = 1; - args_info->invert_reset_given = 1; - args_info->invert_reset_flag = !(args_info->invert_reset_flag); - break; - - case 'v': /* be verbose for debug purposes. */ - if (local_args_info.debug_given || (check_ambiguity && args_info->debug_given)) - { - fprintf (stderr, "%s: `--debug' (`-v') option given more than once%s\n", argv[0], (additional_error ? additional_error : "")); - goto failure; - } - if (args_info->debug_given && ! override) - continue; - local_args_info.debug_given = 1; - args_info->debug_given = 1; - args_info->debug_flag = !(args_info->debug_flag); - break; - - case '1': /* Specify CPU family. */ - if (local_args_info.f1x_given || (check_ambiguity && args_info->f1x_given)) - { - fprintf (stderr, "%s: `--f1x' (`-1') option given more than once%s\n", argv[0], (additional_error ? additional_error : "")); - goto failure; - } - if (args_info->f1x_given && ! override) - continue; - local_args_info.f1x_given = 1; - args_info->f1x_given = 1; - args_info->f1x_flag = !(args_info->f1x_flag); - break; - - case 'I': /* force fileformat to be IntelHex. */ - if (local_args_info.intelhex_given || (check_ambiguity && args_info->intelhex_given)) - { - fprintf (stderr, "%s: `--intelhex' (`-I') option given more than once%s\n", argv[0], (additional_error ? additional_error : "")); - goto failure; - } - if (args_info->intelhex_given && ! override) - continue; - local_args_info.intelhex_given = 1; - args_info->intelhex_given = 1; - args_info->intelhex_flag = !(args_info->intelhex_flag); - break; - - case 'e': /* erase device. */ - if (local_args_info.erase_given || (check_ambiguity && args_info->erase_given)) - { - fprintf (stderr, "%s: `--erase' (`-e') option given more than once%s\n", argv[0], (additional_error ? additional_error : "")); - goto failure; - } - if (args_info->erase_given && ! override) - continue; - local_args_info.erase_given = 1; - args_info->erase_given = 1; - args_info->erase_flag = !(args_info->erase_flag); - break; - - case 'r': /* reset device. */ - if (local_args_info.reset_given || (check_ambiguity && args_info->reset_given)) - { - fprintf (stderr, "%s: `--reset' (`-r') option given more than once%s\n", argv[0], (additional_error ? additional_error : "")); - goto failure; - } - if (args_info->reset_given && ! override) - continue; - local_args_info.reset_given = 1; - args_info->reset_given = 1; - args_info->reset_flag = !(args_info->reset_flag); - break; - - case 'p': /* program file. */ - if (local_args_info.program_given || (check_ambiguity && args_info->program_given)) - { - fprintf (stderr, "%s: `--program' (`-p') option given more than once%s\n", argv[0], (additional_error ? additional_error : "")); - goto failure; - } - if (args_info->program_given && ! override) - continue; - local_args_info.program_given = 1; - args_info->program_given = 1; - if (args_info->program_arg) - free (args_info->program_arg); /* free previous string */ - args_info->program_arg = gengetopt_strdup (optarg); - if (args_info->program_orig) - free (args_info->program_orig); /* free previous string */ - args_info->program_orig = gengetopt_strdup (optarg); - break; - - case 'c': /* communicate using this device. */ - if (local_args_info.comport_given || (check_ambiguity && args_info->comport_given)) - { - fprintf (stderr, "%s: `--comport' (`-c') option given more than once%s\n", argv[0], (additional_error ? additional_error : "")); - goto failure; - } - if (args_info->comport_given && ! override) - continue; - local_args_info.comport_given = 1; - args_info->comport_given = 1; - if (args_info->comport_arg) - free (args_info->comport_arg); /* free previous string */ - args_info->comport_arg = gengetopt_strdup (optarg); - if (args_info->comport_orig) - free (args_info->comport_orig); /* free previous string */ - args_info->comport_orig = gengetopt_strdup (optarg); - break; - - - case 0: /* Long option with no short option */ - /* Assume a TelosB node. */ - if (strcmp (long_options[option_index].name, "telosb") == 0) - { - if (local_args_info.telosb_given || (check_ambiguity && args_info->telosb_given)) - { - fprintf (stderr, "%s: `--telosb' option given more than once%s\n", argv[0], (additional_error ? additional_error : "")); - goto failure; - } - if (args_info->telosb_given && ! override) - continue; - local_args_info.telosb_given = 1; - args_info->telosb_given = 1; - args_info->telosb_flag = !(args_info->telosb_flag); - } - /* Assume a Tmote node. */ - else if (strcmp (long_options[option_index].name, "tmote") == 0) - { - if (local_args_info.tmote_given || (check_ambiguity && args_info->tmote_given)) - { - fprintf (stderr, "%s: `--tmote' option given more than once%s\n", argv[0], (additional_error ? additional_error : "")); - goto failure; - } - if (args_info->tmote_given && ! override) - continue; - local_args_info.tmote_given = 1; - args_info->tmote_given = 1; - args_info->tmote_flag = !(args_info->tmote_flag); - } - - break; - case '?': /* Invalid option. */ - /* `getopt_long' already printed an error message. */ - goto failure; - - default: /* bug: option not considered. */ - fprintf (stderr, "%s: option unknown: %c%s\n", CMDLINE_PARSER_PACKAGE, c, (additional_error ? additional_error : "")); - abort (); - } /* switch */ - } /* while */ - - - - if (check_required) - { - error += cmdline_parser_required2 (args_info, argv[0], additional_error); - } - - cmdline_parser_release (&local_args_info); - - if ( error ) - return (EXIT_FAILURE); - - return 0; - -failure: - - cmdline_parser_release (&local_args_info); - return (EXIT_FAILURE); -} diff --git a/tools/platforms/msp430/cppbsl/src/cmdline.h b/tools/platforms/msp430/cppbsl/src/cmdline.h deleted file mode 100755 index 773e3b23..00000000 --- a/tools/platforms/msp430/cppbsl/src/cmdline.h +++ /dev/null @@ -1,182 +0,0 @@ -/** @file cmdline.h - * @brief The header file for the command line option parser - * generated by GNU Gengetopt version 2.21 - * http://www.gnu.org/software/gengetopt. - * DO NOT modify this file, since it can be overwritten - * @author GNU Gengetopt by Lorenzo Bettini */ - -#ifndef CMDLINE_H -#define CMDLINE_H - -/* If we use autoconf. */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#ifndef CMDLINE_PARSER_PACKAGE -/** @brief the program name */ -#define CMDLINE_PARSER_PACKAGE PACKAGE -#endif - -#ifndef CMDLINE_PARSER_VERSION -/** @brief the program version */ -#define CMDLINE_PARSER_VERSION VERSION -#endif - -/** @brief Where the command line options are stored */ -struct gengetopt_args_info -{ - const char *help_help; /**< @brief Print help and exit help description. */ - const char *version_help; /**< @brief Print version and exit help description. */ - int invert_test_flag; /**< @brief TEST pin is inverted (default=off). */ - const char *invert_test_help; /**< @brief TEST pin is inverted help description. */ - int invert_reset_flag; /**< @brief RESET pin is inverted (default=off). */ - const char *invert_reset_help; /**< @brief RESET pin is inverted help description. */ - int telosb_flag; /**< @brief Assume a TelosB node (default=off). */ - const char *telosb_help; /**< @brief Assume a TelosB node help description. */ - int tmote_flag; /**< @brief Assume a Tmote node (default=off). */ - const char *tmote_help; /**< @brief Assume a Tmote node help description. */ - int debug_flag; /**< @brief be verbose for debug purposes (default=off). */ - const char *debug_help; /**< @brief be verbose for debug purposes help description. */ - int f1x_flag; /**< @brief Specify CPU family (default=off). */ - const char *f1x_help; /**< @brief Specify CPU family help description. */ - int intelhex_flag; /**< @brief force fileformat to be IntelHex (default=off). */ - const char *intelhex_help; /**< @brief force fileformat to be IntelHex help description. */ - int erase_flag; /**< @brief erase device (default=off). */ - const char *erase_help; /**< @brief erase device help description. */ - int reset_flag; /**< @brief reset device (default=off). */ - const char *reset_help; /**< @brief reset device help description. */ - char * program_arg; /**< @brief program file. */ - char * program_orig; /**< @brief program file original value given at command line. */ - const char *program_help; /**< @brief program file help description. */ - char * comport_arg; /**< @brief communicate using this device. */ - char * comport_orig; /**< @brief communicate using this device original value given at command line. */ - const char *comport_help; /**< @brief communicate using this device help description. */ - - int help_given ; /**< @brief Whether help was given. */ - int version_given ; /**< @brief Whether version was given. */ - int invert_test_given ; /**< @brief Whether invert-test was given. */ - int invert_reset_given ; /**< @brief Whether invert-reset was given. */ - int telosb_given ; /**< @brief Whether telosb was given. */ - int tmote_given ; /**< @brief Whether tmote was given. */ - int debug_given ; /**< @brief Whether debug was given. */ - int f1x_given ; /**< @brief Whether f1x was given. */ - int intelhex_given ; /**< @brief Whether intelhex was given. */ - int erase_given ; /**< @brief Whether erase was given. */ - int reset_given ; /**< @brief Whether reset was given. */ - int program_given ; /**< @brief Whether program was given. */ - int comport_given ; /**< @brief Whether comport was given. */ - -} ; - -/** @brief The additional parameters to pass to parser functions */ -struct cmdline_parser_params -{ - int override; /**< @brief whether to override possibly already present options (default 0) */ - int initialize; /**< @brief whether to initialize the option structure gengetopt_args_info (default 0) */ - int check_required; /**< @brief whether to check that all required options were provided (default 0) */ - int check_ambiguity; /**< @brief whether to check for options already specified in the option structure gengetopt_args_info (default 0) */ -} ; - -/** @brief the purpose string of the program */ -extern const char *gengetopt_args_info_purpose; -/** @brief the usage string of the program */ -extern const char *gengetopt_args_info_usage; -/** @brief all the lines making the help output */ -extern const char *gengetopt_args_info_help[]; - -/** - * The command line parser - * @param argc the number of command line options - * @param argv the command line options - * @param args_info the structure where option information will be stored - * @return 0 if everything went fine, NON 0 if an error took place - */ -int cmdline_parser (int argc, char * const *argv, - struct gengetopt_args_info *args_info); - -/** - * The command line parser (version with additional parameters - deprecated) - * @param argc the number of command line options - * @param argv the command line options - * @param args_info the structure where option information will be stored - * @param override whether to override possibly already present options - * @param initialize whether to initialize the option structure my_args_info - * @param check_required whether to check that all required options were provided - * @return 0 if everything went fine, NON 0 if an error took place - * @deprecated use cmdline_parser_ext() instead - */ -int cmdline_parser2 (int argc, char * const *argv, - struct gengetopt_args_info *args_info, - int override, int initialize, int check_required); - -/** - * The command line parser (version with additional parameters) - * @param argc the number of command line options - * @param argv the command line options - * @param args_info the structure where option information will be stored - * @param params additional parameters for the parser - * @return 0 if everything went fine, NON 0 if an error took place - */ -int cmdline_parser_ext (int argc, char * const *argv, - struct gengetopt_args_info *args_info, - struct cmdline_parser_params *params); - -/** - * Save the contents of the option struct into a (text) file. - * This file can be read by the config file parser (if generated by gengetopt) - * @param filename the file where to save - * @param args_info the option struct to save - * @return 0 if everything went fine, NON 0 if an error took place - */ -int cmdline_parser_file_save(const char *filename, - struct gengetopt_args_info *args_info); - -/** - * Print the help - */ -void cmdline_parser_print_help(void); -/** - * Print the version - */ -void cmdline_parser_print_version(void); - -/** - * Allocates dynamically a cmdline_parser_params structure and initializes - * all its fields to 0 - * @return the initialized cmdline_parser_params structure - */ -struct cmdline_parser_params *cmdline_parser_params_init(); - -/** - * Initializes the passed gengetopt_args_info structure's fields - * (also set default values for options that have a default) - * @param args_info the structure to initialize - */ -void cmdline_parser_init (struct gengetopt_args_info *args_info); -/** - * Deallocates the string fields of the gengetopt_args_info structure - * (but does not deallocate the structure itself) - * @param args_info the structure to deallocate - */ -void cmdline_parser_free (struct gengetopt_args_info *args_info); - -/** - * Checks that all the required options were specified - * @param args_info the structure to check - * @param prog_name the name of the program that will be used to print - * possible errors - * @return - */ -int cmdline_parser_required (struct gengetopt_args_info *args_info, - const char *prog_name); - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* CMDLINE_H */ -- 2.39.2