]> sigrok.org Git - sigrok-cli.git/commitdiff
decode: Rework logic for text output of protocol decoder annotations
authorGerhard Sittig <redacted>
Sun, 9 Jul 2017 11:44:39 +0000 (13:44 +0200)
committerGerhard Sittig <redacted>
Mon, 31 Jul 2017 17:38:27 +0000 (19:38 +0200)
Fold the previous three code paths which formatted text output for
annotations into one code path, which inspects the flags that were
determined before the actual output, and then always formats the fields
in identical ways regardless of why a field is shown.

Remove the assert checks that were introduced in a previous commit. The
logic for the field selection was proven to be identical to the previous
behaviour.

decode.c

index 4888a7c506f00b85406a7e92ecf08e11f864afe8..24c700183f02e7793f5dfc8cdfc839dac28c1ada 100644 (file)
--- a/decode.c
+++ b/decode.c
@@ -21,7 +21,6 @@
 #include <stdlib.h>
 #include <string.h>
 #include <glib.h>
-#include <assert.h>
 #include "sigrok-cli.h"
 
 #ifdef HAVE_SRD
@@ -417,12 +416,6 @@ int setup_pd_binary(char *opt_pd_binary)
        return 0;
 }
 
-static inline void pd_ann_check(gboolean chk)
-{
-
-       assert(chk);
-}
-
 void show_pd_annotations(struct srd_proto_data *pdata, void *cb_data)
 {
        struct srd_decoder *dec;
@@ -432,6 +425,7 @@ void show_pd_annotations(struct srd_proto_data *pdata, void *cb_data)
        char **ann_descr;
        gboolean show_ann, show_snum, show_class, show_quotes, show_abbrev;
        gboolean show_id_colon;
+       const char *quote;
 
        (void)cb_data;
 
@@ -487,37 +481,20 @@ void show_pd_annotations(struct srd_proto_data *pdata, void *cb_data)
         * Display the annotation's fields after the layout was
         * determined above.
         */
-       pd_ann_check(show_ann);
-       if (opt_loglevel <= SR_LOG_WARN) {
-               pd_ann_check(!show_snum);
-               pd_ann_check(show_id_colon);
-               pd_ann_check(!show_class);
-               pd_ann_check(!show_quotes);
-               pd_ann_check(!show_abbrev);
-               /* Show only the longest annotation. */
-               printf("%s: %s", pdata->pdo->proto_id, pda->ann_text[0]);
-       } else if (opt_loglevel >= SR_LOG_INFO) {
-               /* Sample numbers and quotes around the longest annotation. */
-               pd_ann_check(show_snum);
-               printf("%"PRIu64"-%"PRIu64"", pdata->start_sample, pdata->end_sample);
-               if (opt_loglevel == SR_LOG_INFO) {
-                       pd_ann_check(!show_id_colon);
-                       pd_ann_check(!show_class);
-                       pd_ann_check(show_quotes);
-                       pd_ann_check(!show_abbrev);
-                       printf(" %s \"%s\"", pdata->pdo->proto_id, pda->ann_text[0]);
-               } else {
-                       pd_ann_check(show_id_colon);
-                       pd_ann_check(show_class);
-                       pd_ann_check(show_quotes);
-                       pd_ann_check(show_abbrev);
-                       /* Protocol decoder id, annotation class,
-                        * all annotation strings. */
-                       ann_descr = g_slist_nth_data(dec->annotations, pda->ann_class);
-                       printf(" %s: %s:", pdata->pdo->proto_id, ann_descr[0]);
-                       for (i = 0; pda->ann_text[i]; i++)
-                               printf(" \"%s\"", pda->ann_text[i]);
-               }
+       if (show_snum) {
+               printf("%" PRIu64 "-%" PRIu64 " ",
+                       pdata->start_sample, pdata->end_sample);
+       }
+       printf("%s%s ", pdata->pdo->proto_id, show_id_colon ? ":" : "");
+       if (show_class) {
+               ann_descr = g_slist_nth_data(dec->annotations, pda->ann_class);
+               printf("%s: ", ann_descr[0]);
+       }
+       quote = show_quotes ? "\"" : "";
+       printf("%s%s%s", quote, pda->ann_text[0], quote);
+       if (show_abbrev) {
+               for (i = 1; pda->ann_text[i]; i++)
+                       printf(" %s%s%s", quote, pda->ann_text[i], quote);
        }
        printf("\n");
        fflush(stdout);