aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortgingold <tgingold@users.noreply.github.com>2017-04-18 06:48:02 +0200
committerGitHub <noreply@github.com>2017-04-18 06:48:02 +0200
commit4ba1e81209431b98723dc85d0a5a37c52982e874 (patch)
treebccfe8cb64e5ea6e9c29f94e9cca8072eec8b66b
parent2f29858cd3a29921b28a5e699b848f0ec16fb7cc (diff)
parentba52acf5442bfdc69bd8ef3f8aee88b6af4a73c5 (diff)
downloadghdl-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.c147
-rw-r--r--src/grt/ghwlib.c40
-rw-r--r--src/grt/ghwlib.h4
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);