cmdutils: change semantics of show_help_options() and document it.
authorAnton Khirnov <anton@khirnov.net>
Sat, 11 Aug 2012 17:45:30 +0000 (19:45 +0200)
committerAnton Khirnov <anton@khirnov.net>
Sun, 19 Aug 2012 17:21:35 +0000 (19:21 +0200)
Currently it takes a mask and value, such that options for which
(flags & mask) == value.

Change it to take required flags and forbidden flags instead. This is
shorter and simpler to understand.

avconv_opt.c
avplay.c
cmdutils.c
cmdutils.h

index 8915a86..ac1a65e 100644 (file)
@@ -1795,24 +1795,19 @@ static int show_help(const char *opt, const char *arg)
     av_log_set_callback(log_callback_help);
     show_usage();
     show_help_options(options, "Main options:",
-                      OPT_EXPERT | OPT_AUDIO | OPT_VIDEO | OPT_SUBTITLE, 0);
+                      0, OPT_EXPERT | OPT_AUDIO | OPT_VIDEO | OPT_SUBTITLE);
     show_help_options(options, "Advanced options:",
-                      OPT_EXPERT | OPT_AUDIO | OPT_VIDEO | OPT_SUBTITLE,
-                      OPT_EXPERT);
+                      OPT_EXPERT, OPT_AUDIO | OPT_VIDEO | OPT_SUBTITLE);
     show_help_options(options, "Video options:",
-                      OPT_EXPERT | OPT_AUDIO | OPT_VIDEO,
-                      OPT_VIDEO);
+                      OPT_VIDEO, OPT_EXPERT | OPT_AUDIO);
     show_help_options(options, "Advanced Video options:",
-                      OPT_EXPERT | OPT_AUDIO | OPT_VIDEO,
-                      OPT_VIDEO | OPT_EXPERT);
+                      OPT_EXPERT | OPT_VIDEO, OPT_AUDIO);
     show_help_options(options, "Audio options:",
-                      OPT_EXPERT | OPT_AUDIO | OPT_VIDEO,
-                      OPT_AUDIO);
+                      OPT_AUDIO, OPT_EXPERT | OPT_VIDEO);
     show_help_options(options, "Advanced Audio options:",
-                      OPT_EXPERT | OPT_AUDIO | OPT_VIDEO,
-                      OPT_AUDIO | OPT_EXPERT);
+                      OPT_EXPERT | OPT_AUDIO, OPT_VIDEO);
     show_help_options(options, "Subtitle options:",
-                      OPT_SUBTITLE, OPT_SUBTITLE);
+                      OPT_SUBTITLE, 0);
     printf("\n");
     show_help_children(avcodec_get_class(), flags);
     show_help_children(avformat_get_class(), flags);
index bb10810..64d7b3d 100644 (file)
--- a/avplay.c
+++ b/avplay.c
@@ -2926,10 +2926,8 @@ static int show_help(const char *opt, const char *arg)
 {
     av_log_set_callback(log_callback_help);
     show_usage();
-    show_help_options(options, "Main options:",
-                      OPT_EXPERT, 0);
-    show_help_options(options, "Advanced options:",
-                      OPT_EXPERT, OPT_EXPERT);
+    show_help_options(options, "Main options:", 0, OPT_EXPERT);
+    show_help_options(options, "Advanced options:", OPT_EXPERT, 0);
     printf("\n");
     show_help_children(avcodec_get_class(), AV_OPT_FLAG_DECODING_PARAM);
     show_help_children(avformat_get_class(), AV_OPT_FLAG_DECODING_PARAM);
index 5107744..bc5cb8a 100644 (file)
@@ -113,8 +113,8 @@ int64_t parse_time_or_die(const char *context, const char *timestr,
     return us;
 }
 
-void show_help_options(const OptionDef *options, const char *msg, int mask,
-                       int value)
+void show_help_options(const OptionDef *options, const char *msg, int req_flags,
+                       int rej_flags)
 {
     const OptionDef *po;
     int first;
@@ -122,18 +122,21 @@ void show_help_options(const OptionDef *options, const char *msg, int mask,
     first = 1;
     for (po = options; po->name != NULL; po++) {
         char buf[64];
-        if ((po->flags & mask) == value) {
-            if (first) {
-                printf("%s\n", msg);
-                first = 0;
-            }
-            av_strlcpy(buf, po->name, sizeof(buf));
-            if (po->flags & HAS_ARG) {
-                av_strlcat(buf, " ", sizeof(buf));
-                av_strlcat(buf, po->argname, sizeof(buf));
-            }
-            printf("-%-17s  %s\n", buf, po->help);
+
+        if (((po->flags & req_flags) != req_flags) ||
+            (po->flags & rej_flags))
+            continue;
+
+        if (first) {
+            printf("%s\n", msg);
+            first = 0;
+        }
+        av_strlcpy(buf, po->name, sizeof(buf));
+        if (po->flags & HAS_ARG) {
+            av_strlcat(buf, " ", sizeof(buf));
+            av_strlcat(buf, po->argname, sizeof(buf));
         }
+        printf("-%-17s  %s\n", buf, po->help);
     }
     printf("\n");
 }
index 6fb5a35..eb8a22a 100644 (file)
@@ -153,8 +153,16 @@ typedef struct {
     const char *argname;
 } OptionDef;
 
-void show_help_options(const OptionDef *options, const char *msg, int mask,
-                       int value);
+/**
+ * Print help for all options matching specified flags.
+ *
+ * @param options a list of options
+ * @param msg title of this group. Only printed if at least one option matches.
+ * @param req_flags print only options which have all those flags set.
+ * @param rej_flags don't print options which have any of those flags set.
+ */
+void show_help_options(const OptionDef *options, const char *msg, int req_flags,
+                       int rej_flags);
 
 /**
  * Show help for all options with given flags in class and all its