Revision: 65239
          http://sourceforge.net/p/brlcad/code/65239
Author:   starseeker
Date:     2015-06-10 15:32:42 +0000 (Wed, 10 Jun 2015)
Log Message:
-----------
Implement bu_opt_bool using bu_str_true

Modified Paths:
--------------
    brlcad/trunk/include/bu/opt.h
    brlcad/trunk/src/libbu/opt.c
    brlcad/trunk/src/libbu/tests/CMakeLists.txt
    brlcad/trunk/src/libbu/tests/opt.c

Modified: brlcad/trunk/include/bu/opt.h
===================================================================
--- brlcad/trunk/include/bu/opt.h       2015-06-10 15:24:08 UTC (rev 65238)
+++ brlcad/trunk/include/bu/opt.h       2015-06-10 15:32:42 UTC (rev 65239)
@@ -162,8 +162,8 @@
 BU_EXPORT extern int bu_opt_int(struct bu_vls *msg, int argc, const char 
**argv, void *set_var);
 BU_EXPORT extern int bu_opt_fastf_t(struct bu_vls *msg, int argc, const char 
**argv, void *set_var);
 BU_EXPORT extern int bu_opt_vls(struct bu_vls *msg, int argc, const char 
**argv, void *set_var);
+BU_EXPORT extern int bu_opt_bool(struct bu_vls *msg, int argc, const char 
**argv, void *set_var);
 /* TODO - unimplemented */
-BU_EXPORT extern int bu_opt_bool(struct bu_vls *msg, int argc, const char 
**argv, void *set_var);
 BU_EXPORT extern int bu_opt_long(struct bu_vls *msg, int argc, const char 
**argv, void *set_var);
 BU_EXPORT extern int bu_opt_float(struct bu_vls *msg, int argc, const char 
**argv, void *set_var);
 BU_EXPORT extern int bu_opt_double(struct bu_vls *msg, int argc, const char 
**argv, void *set_var);

Modified: brlcad/trunk/src/libbu/opt.c
===================================================================
--- brlcad/trunk/src/libbu/opt.c        2015-06-10 15:24:08 UTC (rev 65238)
+++ brlcad/trunk/src/libbu/opt.c        2015-06-10 15:32:42 UTC (rev 65239)
@@ -580,6 +580,33 @@
     return 1;
 }
 
+int
+bu_opt_bool(struct bu_vls *msg, int argc, const char **argv, void *set_var)
+{
+    int *b_set = (int *)set_var;
+    int bool_val;
+
+    if (!argv || !argv[0] || strlen(argv[0]) == 0 || argc != 1 ) {
+       return 0;
+    }
+
+    bool_val = bu_str_true(argv[0]);
+
+    if (bool_val != 0 && bool_val != 1) {
+       if (msg) bu_vls_printf(msg, "Invalid input for boolean type: %s\n", 
argv[0]);
+       return -1;
+    }
+
+    if (b_set) (*b_set) = bool_val;
+    return 1;
+}
+
+
+
+
+
+
+
 /*
  * Local Variables:
  * mode: C

Modified: brlcad/trunk/src/libbu/tests/CMakeLists.txt
===================================================================
--- brlcad/trunk/src/libbu/tests/CMakeLists.txt 2015-06-10 15:24:08 UTC (rev 
65238)
+++ brlcad/trunk/src/libbu/tests/CMakeLists.txt 2015-06-10 15:32:42 UTC (rev 
65239)
@@ -460,7 +460,14 @@
 add_test(NAME bu_opt_1_h_07  COMMAND tester_bu_opt 1 21)
 add_test(NAME bu_opt_1_h_08  COMMAND tester_bu_opt 1 22)
 add_test(NAME bu_opt_1_h_09  COMMAND tester_bu_opt 1 23)
+add_test(NAME bu_opt_1_h_10  COMMAND tester_bu_opt 1 24)
 
+add_test(NAME bu_opt_1_b_01  COMMAND tester_bu_opt 1 25)
+add_test(NAME bu_opt_1_b_02  COMMAND tester_bu_opt 1 26)
+add_test(NAME bu_opt_1_b_03  COMMAND tester_bu_opt 1 27)
+add_test(NAME bu_opt_1_b_04  COMMAND tester_bu_opt 1 28)
+
+
 add_test(NAME bu_opt_2_color_00  COMMAND tester_bu_opt 2 0)
 add_test(NAME bu_opt_2_color_01  COMMAND tester_bu_opt 2 1)
 add_test(NAME bu_opt_2_color_02  COMMAND tester_bu_opt 2 2)

Modified: brlcad/trunk/src/libbu/tests/opt.c
===================================================================
--- brlcad/trunk/src/libbu/tests/opt.c  2015-06-10 15:24:08 UTC (rev 65238)
+++ brlcad/trunk/src/libbu/tests/opt.c  2015-06-10 15:32:42 UTC (rev 65239)
@@ -53,6 +53,7 @@
 
 #define voff 0
 #define hoff 15
+#define boff 25
 
 void
 set_msg_str(struct bu_vls *msg, int ac, const char **av)
@@ -147,12 +148,14 @@
 {
     static int print_help = 0;
     static int verbosity = 0;
+    static int b = -1;
 
     /* Option descriptions */
-    struct bu_opt_desc d[4] = {
-       {"h", "help",      0, 0, NULL,     (void *)&print_help, "",  help_str},
-       {"?", "",          0, 0, NULL,     (void *)&print_help, "",  help_str},
-       {"v", "verbosity", 0, 1, &d1_verb, (void *)&verbosity,  "#", "Set 
verbosity (range is 0 to 3)"},
+    struct bu_opt_desc d[5] = {
+       {"h", "help",      0, 0, NULL,     (void *)&print_help, "",     
help_str},
+       {"?", "",          0, 0, NULL,     (void *)&print_help, "",     
help_str},
+       {"v", "verbosity", 0, 1, &d1_verb, (void *)&verbosity,  "#",    "Set 
verbosity (range is 0 to 3)"},
+       {"b", "bool",      1, 1, &bu_opt_bool, (void *)&b,      "bool", "Set 
verbosity (range is 0 to 3)"},
        BU_OPT_DESC_NULL
     };
 
@@ -356,6 +359,41 @@
            ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, d);
            EXPECT_FAILURE("print_help", "extra arg");
            break;
+       case boff:
+           ac = 2;
+           av[0] = "-b";
+           av[1] = "true";
+           set_msg_str(&parse_msgs, ac, av);
+           ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, d);
+           EXPECT_SUCCESS_INT("bool", b, 1);
+           break;
+       case boff  + 1:
+           ac = 2;
+           av[0] = "-b";
+           av[1] = "false";
+           set_msg_str(&parse_msgs, ac, av);
+           ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, d);
+           EXPECT_SUCCESS_INT("bool", b, 0);
+           break;
+       case boff  + 2:
+           ac = 2;
+           av[0] = "--bool";
+           av[1] = "1";
+           set_msg_str(&parse_msgs, ac, av);
+           ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, d);
+           EXPECT_SUCCESS_INT("bool", b, 1);
+           break;
+       case boff  + 3:
+           ac = 2;
+           av[0] = "--bool";
+           av[1] = "0";
+           set_msg_str(&parse_msgs, ac, av);
+           ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, d);
+           EXPECT_SUCCESS_INT("bool", b, 0);
+           break;
+       default:
+           bu_vls_printf(&parse_msgs, "unknown test: %d\n", test_num);
+           return -1;
     }
 
     if (ret > 0) {

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to