diff options
author | tgingold <tgingold@users.noreply.github.com> | 2017-04-18 06:48:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-18 06:48:02 +0200 |
commit | 4ba1e81209431b98723dc85d0a5a37c52982e874 (patch) | |
tree | bccfe8cb64e5ea6e9c29f94e9cca8072eec8b66b | |
parent | 2f29858cd3a29921b28a5e699b848f0ec16fb7cc (diff) | |
parent | ba52acf5442bfdc69bd8ef3f8aee88b6af4a73c5 (diff) | |
download | ghdl-4ba1e81209431b98723dc85d0a5a37c52982e874.tar.gz ghdl-4ba1e81209431b98723dc85d0a5a37c52982e874.tar.bz2 ghdl-4ba1e81209431b98723dc85d0a5a37c52982e874.zip |
Merge pull request #336 from emogenet/master
Move skip flags to own arry in ghwlib + indent new code to indigenous style
-rw-r--r-- | src/grt/ghwdump.c | 147 | ||||
-rw-r--r-- | src/grt/ghwlib.c | 40 | ||||
-rw-r--r-- | src/grt/ghwlib.h | 4 |
3 files changed, 101 insertions, 90 deletions
diff --git a/src/grt/ghwdump.c b/src/grt/ghwdump.c index 3c399cf92..3b898d33d 100644 --- a/src/grt/ghwdump.c +++ b/src/grt/ghwdump.c @@ -41,92 +41,87 @@ usage (void) " -v verbose\n"); } -static void add_single_signal( - int **signalSet, - int *nbSignals, - int signal -) { - assert(NULL!=signalSet); - assert(NULL!=nbSignals); - assert(0<=nbSignals[0]); - assert(0<=signal); +static void +add_single_signal (int **signalSet, int *nbSignals, int signal) +{ + assert (NULL != signalSet); + assert (NULL != nbSignals); + assert (0 <= nbSignals[0]); + assert (0 <= signal); - int newSize = (1 + nbSignals[0]); - /*printf("adding signal %6d set of signals to display\n", signal);*/ - signalSet[0] = (int*)realloc(signalSet[0], newSize*sizeof(int)); - signalSet[0][nbSignals[0]] = signal; - nbSignals[0] = newSize; + int newSize = (1 + nbSignals[0]); + /*printf("adding signal %6d set of signals to display\n", signal); */ + signalSet[0] = (int *) realloc (signalSet[0], newSize * sizeof (int)); + signalSet[0][nbSignals[0]] = signal; + nbSignals[0] = newSize; } -static void add_signal_range( - int **signalSet, - int *nbSignals, - const char *s, - const char *e -) { +static void +add_signal_range (int **signalSet, + int *nbSignals, const char *s, const char *e) +{ - int i; - int rangeSize; - int rangeEnd = -1; - int rangeStart = -1; - int bytesMatched = -1; - int expected = ((e - s) - 1); - int itemsMatched =sscanf( - s, - "%d-%d%n", - &rangeStart, - &rangeEnd, - &bytesMatched - ); - if(2==itemsMatched && expected==bytesMatched) { - if(rangeEnd<rangeStart) { - int t = rangeEnd; - rangeEnd = rangeStart; - rangeStart = t; - } - } else { - itemsMatched = sscanf( - s, - "%d%n", - &rangeStart, - &bytesMatched - ); - if(1==itemsMatched && expected==bytesMatched) { - if(0<=rangeStart) { - rangeEnd = rangeStart; - } - } + int i; + int rangeSize; + int rangeEnd = -1; + int rangeStart = -1; + int bytesMatched = -1; + int expected = ((e - s) - 1); + int itemsMatched = sscanf (s, + "%d-%d%n", + &rangeStart, + &rangeEnd, + &bytesMatched); + if (2 == itemsMatched && expected == bytesMatched) + { + if (rangeEnd < rangeStart) + { + int t = rangeEnd; + rangeEnd = rangeStart; + rangeStart = t; + } + } + else + { + itemsMatched = sscanf (s, "%d%n", &rangeStart, &bytesMatched); + if (1 == itemsMatched && expected == bytesMatched) + { + if (0 <= rangeStart) + { + rangeEnd = rangeStart; + } + } } - rangeSize = (rangeEnd - rangeStart); - if(rangeEnd<0 || rangeStart<0 || rangeSize<0) { - fprintf( - stderr, - "incorrect signal range specification\"%s\" found in command line, aborting\n", - s - ); - exit(1); + rangeSize = (rangeEnd - rangeStart); + if (rangeEnd < 0 || rangeStart < 0 || rangeSize < 0) + { + fprintf (stderr, + "incorrect signal range specification\"%s\" found in command line, aborting\n", + s); + exit (1); } - for(i=rangeStart; i<=rangeEnd; ++i) { - add_single_signal(signalSet, nbSignals, i); + for (i = rangeStart; i <= rangeEnd; ++i) + { + add_single_signal (signalSet, nbSignals, i); } } -static void add_signals( - int **signalSet, - int *nbSignals, - const char *arg -) { - int c = -1; - const char *e; - const char *s = e = arg; - while(0!=c) { - c = *(e++); - if(','==c || 0==c) { - add_signal_range(signalSet, nbSignals, s, e); - s = e; - } +static void +add_signals (int **signalSet, int *nbSignals, const char *arg) +{ + int c = -1; + const char *e; + const char *s = e = arg; + while (0 != c) + { + c = *(e++); + if (',' == c || 0 == c) + { + add_signal_range (signalSet, nbSignals, s, e); + s = e; + } } } @@ -274,7 +269,7 @@ main (int argc, char **argv) { if (!filter_done) { - ghw_filter_values (hp, signal_set, nb_signals); + ghw_filter_signals (hp, signal_set, nb_signals); filter_done = 1; } ghw_disp_values (hp); diff --git a/src/grt/ghwlib.c b/src/grt/ghwlib.c index 4ac721ee0..bee84687c 100644 --- a/src/grt/ghwlib.c +++ b/src/grt/ghwlib.c @@ -839,6 +839,7 @@ ghw_read_hie (struct ghw_handler *h) h->hie = blk; h->nbr_sigs++; + h->skip_sigs = NULL; h->sigs = (struct ghw_sig *) malloc (h->nbr_sigs * sizeof (struct ghw_sig)); memset (h->sigs, 0, h->nbr_sigs * sizeof (struct ghw_sig)); @@ -1345,28 +1346,44 @@ ghw_get_value (char *buf, int len, union ghw_val *val, union ghw_type *type) } } -static int +static char is_skip_signal (int *signals_to_keep, int nb_signals_to_keep, int signal) { int i; - for (i = 0; i < nb_signals_to_keep; ++i) { - if (signal==signals_to_keep[i]) - return 0; + if (signal == signals_to_keep[i]) + { + return 0; + } } return 1; } void -ghw_filter_values (struct ghw_handler *h, int *signals_to_keep, int nb_signals_to_keep) +ghw_filter_signals (struct ghw_handler *h, + int *signals_to_keep, int nb_signals_to_keep) { int i; - - for (i = 0; i < h->nbr_sigs; ++i) + if (0 < nb_signals_to_keep && 0 != signals_to_keep) + { + if (0 == h->skip_sigs) + { + h->skip_sigs = (char *) malloc (sizeof (char) * h->nbr_sigs); + } + for (i = 0; i < h->nbr_sigs; ++i) + { + h->skip_sigs[i] = is_skip_signal (signals_to_keep, + nb_signals_to_keep, i); + } + } + else { - struct ghw_sig *s = &(h->sigs[i]); - s->skip = is_skip_signal (signals_to_keep, nb_signals_to_keep, i); + if (0 != h->skip_sigs) + { + free (h->skip_sigs); + h->skip_sigs = 0; + } } } @@ -1374,11 +1391,11 @@ void ghw_disp_values (struct ghw_handler *h) { int i; - for (i = 0; i < h->nbr_sigs; i++) { struct ghw_sig *s = &h->sigs[i]; - if (s->type != NULL && !(s->skip)) + int skip = (0 != h->skip_sigs && (0 != h->skip_sigs[i])); + if (s->type != NULL && !skip) { printf ("#%d: ", i); ghw_disp_value (s->val, s->type); @@ -1386,7 +1403,6 @@ ghw_disp_values (struct ghw_handler *h) } } } - int ghw_read_directory (struct ghw_handler *h) { diff --git a/src/grt/ghwlib.h b/src/grt/ghwlib.h index 145e6c2dd..11917542a 100644 --- a/src/grt/ghwlib.h +++ b/src/grt/ghwlib.h @@ -256,7 +256,6 @@ struct ghw_sig { union ghw_type *type; union ghw_val *val; - int skip; }; enum ghw_hie_kind { @@ -333,6 +332,7 @@ struct ghw_handler /* Non-composite (or basic) signals. */ int nbr_sigs; + char *skip_sigs; struct ghw_sig *sigs; /* Hierarchy. */ @@ -359,7 +359,7 @@ void ghw_disp_hie (struct ghw_handler *h, struct ghw_hie *top); int ghw_read_base (struct ghw_handler *h); -void ghw_filter_values (struct ghw_handler *h, int *signals_to_keep, int nb_signals_to_keep); +void ghw_filter_signals (struct ghw_handler *h, int *signals_to_keep, int nb_signals_to_keep); void ghw_disp_values (struct ghw_handler *h); |