From 4f741ecd40916887fb37222f5faf9caa9af82464 Mon Sep 17 00:00:00 2001 From: borutr Date: Tue, 12 Jun 2007 15:43:05 +0000 Subject: [PATCH] sdcc-cf: * packages/build.gpsim/Makefile: use new svn URL scheme adcc-web: * index.php, snap_header.php, left_menu.inc: use new svn URL scheme sdcc: * src/pic16/main.c, src/SDCCargs.h, SDCCmain.c, support/regression/Makefile.in, support/scripts/build.mak, support/scripts/Makefile.snapshot: use new svn URL scheme git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4848 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- ChangeLog | 7 ++ src/SDCCargs.h | 18 +++- src/SDCCmain.c | 131 +++++++++++++++++++----------- src/pic16/main.c | 2 +- support/regression/Makefile.in | 2 +- support/scripts/Makefile.snapshot | 2 +- support/scripts/build.mak | 2 +- 7 files changed, 110 insertions(+), 54 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6d5c3a44..6cea3def 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-06-12 Borut Razem + + * src/pic16/main.c, src/SDCCargs.h, SDCCmain.c, + support/regression/Makefile.in, support/scripts/build.mak, + support/scripts/Makefile.snapshot: + use new svn URL scheme + 2007-06-10 Frieder Ferlemann * src/mcs51/peeph.def: disabled rule 132.d to fix #1734654 diff --git a/src/SDCCargs.h b/src/SDCCargs.h index 1a379101..dc8c3ff5 100644 --- a/src/SDCCargs.h +++ b/src/SDCCargs.h @@ -29,13 +29,23 @@ #ifndef SDCCARGS_H #define SDCCARGS_H +/** Specifies option argument types. */ +enum cl_opt_arg_type { + /* */ + CLAT_BOOLEAN, + CLAT_INTEGER, + CLAT_STRING, + CLAT_SET +}; + /** Table of all options supported by all ports. This table provides: * A reference for all options. * An easy way to maintain help for the options. * Automatic support for setting flags on simple options. */ -typedef struct { +typedef struct + { /** The short option character e.g. 'h' for -h. 0 for none. */ char shortOpt; /** Long option e.g. "--help". Includes the -- prefix. NULL for @@ -44,10 +54,12 @@ typedef struct { /** Pointer to an int that will be incremented every time the option is encountered. May be NULL. */ - int *pparameter; + void *pparameter; /** Help text to go with this option. May be NULL. */ const char *help; -} OPTION; + /** Optin argument type */ + enum cl_opt_arg_type arg_type; + } OPTION; char *getStringArg(const char *szStart, char **argv, int *pi, int argc); int getIntArg(const char *szStart, char **argv, int *pi, int argc); diff --git a/src/SDCCmain.c b/src/SDCCmain.c index 51218ee7..d8eb615f 100644 --- a/src/SDCCmain.c +++ b/src/SDCCmain.c @@ -768,77 +768,114 @@ tryHandleUnsupportedOpt(char **argv, int *pi) } static bool -scanOptionsTable(const OPTION *optionsTable, char shortOpt, const char *longOpt, char **argv, int *pi) +scanOptionsTable(const OPTION *optionsTable, char shortOpt, const char *longOpt, char **argv, int *pi, int argc) { int i; + for (i = 0; optionsTable[i].shortOpt != 0 || optionsTable[i].longOpt != NULL || optionsTable[i].help != NULL; i++) { - if (optionsTable[i].shortOpt == shortOpt || - (longOpt && optionsTable[i].longOpt && - strcmp(optionsTable[i].longOpt, longOpt) == 0)) + if (optionsTable[i].shortOpt == shortOpt) { - - /* If it is a flag then we can handle it here */ if (optionsTable[i].pparameter != NULL) { - if (optionsTable[i].shortOpt == shortOpt) + verifyShortOption(argv[*pi]); + + (*(int *)optionsTable[i].pparameter)++; + } + else + { + /* Not a flag. Handled manually later. */ + return FALSE; + } + } + else + { + size_t len = strlen(optionsTable[i].longOpt); + + if (longOpt && + (optionsTable[i].arg_type != CLAT_BOOLEAN || + optionsTable[i].arg_type == CLAT_BOOLEAN && len == strlen(longOpt) && optionsTable[i].longOpt) && + strncmp(optionsTable[i].longOpt, longOpt, len) == 0) + { + /* If it is a flag then we can handle it here */ + if (optionsTable[i].pparameter != NULL) { - verifyShortOption(argv[*pi]); + switch (optionsTable[i].arg_type) + { + case CLAT_BOOLEAN: + (*(int *)optionsTable[i].pparameter)++; + break; + + case CLAT_INTEGER: + *(int *)optionsTable[i].pparameter = getIntArg (optionsTable[i].longOpt, argv, pi, argc); + break; + + case CLAT_STRING: + if (*(char **)optionsTable[i].pparameter) + Safe_free(*(char **)optionsTable[i].pparameter); + *(char **)optionsTable[i].pparameter = Safe_strdup(getStringArg (optionsTable[i].longOpt, argv, pi, argc)); + break; + + case CLAT_SET: + if (*(set **)optionsTable[i].pparameter) + deleteSet((set **)optionsTable[i].pparameter); + setParseWithComma((set **)optionsTable[i].pparameter, getStringArg(optionsTable[i].longOpt, argv, &i, argc)); + break; + } + return TRUE; + } + else + { + /* Not a flag. Handled manually later. */ + return FALSE; } - - (*optionsTable[i].pparameter)++; - return 1; } - else { - /* Not a flag. Handled manually later. */ - return 0; - } } } /* Didn't find in the table */ - return 0; + return FALSE; } static bool -tryHandleSimpleOpt(char **argv, int *pi) +tryHandleSimpleOpt(char **argv, int *pi, int argc) { - if (argv[*pi][0] == '-') - { - const char *longOpt = ""; - char shortOpt = -1; + if (argv[*pi][0] == '-') + { + const char *longOpt = ""; + char shortOpt = -1; - if (argv[*pi][1] == '-') - { - /* Long option. */ - longOpt = argv[*pi]; - } - else - { - shortOpt = argv[*pi][1]; - } + if (argv[*pi][1] == '-') + { + /* Long option. */ + longOpt = argv[*pi]; + } + else + { + shortOpt = argv[*pi][1]; + } - if (scanOptionsTable(optionsTable, shortOpt, longOpt, argv, pi)) - { - return 1; - } - else if (port && port->poptions && - scanOptionsTable(port->poptions, shortOpt, longOpt, argv, pi)) - { - return 1; - } - else - { - return 0; - } + if (scanOptionsTable(optionsTable, shortOpt, longOpt, argv, pi, argc)) + { + return TRUE; } - else + else if (port && port->poptions && + scanOptionsTable(port->poptions, shortOpt, longOpt, argv, pi, argc)) { - /* Not an option, so can't be handled. */ - return 0; + return TRUE; } + else + { + return FALSE; + } + } + else + { + /* Not an option, so can't be handled. */ + return FALSE; + } } /*-----------------------------------------------------------------*/ @@ -866,7 +903,7 @@ parseCmdLine (int argc, char **argv) continue; } - if (tryHandleSimpleOpt(argv, &i) == TRUE) + if (tryHandleSimpleOpt(argv, &i, argc) == TRUE) { continue; } diff --git a/src/pic16/main.c b/src/pic16/main.c index bf969702..81ee7110 100644 --- a/src/pic16/main.c +++ b/src/pic16/main.c @@ -599,7 +599,7 @@ _pic16_parseOptions (int *pargc, char **argv, int *i) /* check for arguments that have associated an integer variable */ while(pic16_optionsTable[j].pparameter) { if(ISOPT( pic16_optionsTable[j].longOpt )) { - (*pic16_optionsTable[j].pparameter)++; + (*(int *)pic16_optionsTable[j].pparameter)++; return TRUE; } j++; diff --git a/support/regression/Makefile.in b/support/regression/Makefile.in index 7bf2b91b..8037ec13 100644 --- a/support/regression/Makefile.in +++ b/support/regression/Makefile.in @@ -16,7 +16,7 @@ # Dependancies: # * The sdcc-extra package, available from svn. -# o svn co https://svn.sourceforge.net/svnroot/sdcc/trunk/sdcc-extra +# o svn co https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc-extra # o Provides the emulators # * The gbdk-lib package from gbdk. # o cvs -d cvs.gbdk.sourceforge.net:/cvsroot/gbdk co gbdk-lib diff --git a/support/scripts/Makefile.snapshot b/support/scripts/Makefile.snapshot index c1bfff44..618d5d0f 100644 --- a/support/scripts/Makefile.snapshot +++ b/support/scripts/Makefile.snapshot @@ -1,5 +1,5 @@ # Simple weekly tarball generator -SVNROOT = https://svn.sourceforge.net/svnroot/sdcc/trunk/sdcc +SVNROOT = https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc DATE = `date +%Y%m%d` WWWROOT = /home/michaelh/www SNAP = $(WWWROOT)/snapshots diff --git a/support/scripts/build.mak b/support/scripts/build.mak index 945ac61a..d4f04770 100644 --- a/support/scripts/build.mak +++ b/support/scripts/build.mak @@ -26,7 +26,7 @@ COMPILE_MODE = linux-mingw32 SDCC_OR_GBDK = sdcc ROOT_GBDK = :pserver:anonymous@cvs.gbdk.sourceforge.net:/cvsroot/gbdk -ROOT_SDCC = https://svn.sourceforge.net/svnroot/sdcc +ROOT_SDCC = https://sdcc.svn.sourceforge.net/svnroot/sdcc ifeq ($(COMPILE_MODE),linux-linux) # For Linux -- 2.30.2