Revision: 65586
          http://sourceforge.net/p/brlcad/code/65586
Author:   starseeker
Date:     2015-07-12 00:53:00 +0000 (Sun, 12 Jul 2015)
Log Message:
-----------
Switch bot's adjust command over to non-Tcl logic.  This one will need a lot of 
testing - there are a fair number of objects here and it's not immediately 
clear how to exercise them all.

Modified Paths:
--------------
    brlcad/trunk/src/librt/primitives/bot/bot.c

Modified: brlcad/trunk/src/librt/primitives/bot/bot.c
===================================================================
--- brlcad/trunk/src/librt/primitives/bot/bot.c 2015-07-12 00:27:26 UTC (rev 
65585)
+++ brlcad/trunk/src/librt/primitives/bot/bot.c 2015-07-12 00:53:00 UTC (rev 
65586)
@@ -2156,7 +2156,7 @@
 rt_bot_adjust(struct bu_vls *logstr, struct rt_db_internal *intern, int argc, 
const char **argv)
 {
     struct rt_bot_internal *bot;
-    Tcl_Obj *obj, **obj_array;
+    const char **obj_array = NULL;
     int len;
     size_t i;
     long li;
@@ -2166,8 +2166,6 @@
     RT_BOT_CK_MAGIC(bot);
 
     while (argc >= 2) {
-       obj = Tcl_NewStringObj(argv[1], -1);
-
        if (!bu_strncmp(argv[0], "fm", 2)) {
            if (argv[0][2] == '\0') {
                if (bot->face_mode)
@@ -2177,7 +2175,6 @@
                li = atol(&(argv[0][2]));
                if (li < 0 || (size_t)li >= bot->num_faces) {
                    bu_vls_printf(logstr, "face number [%ld] out of range 
(0..%zu)", li, bot->num_faces-1);
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
 
@@ -2195,10 +2192,9 @@
            long new_num = 0;
            size_t old_num = bot->num_normals;
 
-           new_num = atol(Tcl_GetStringFromObj(obj, NULL));
+           new_num = atol(argv[1]);
            if (new_num < 0) {
                bu_vls_printf(logstr, "Number of normals [%ld] may not be less 
than 0", new_num);
-               Tcl_DecrRefCount(obj);
                return BRLCAD_ERROR;
            }
 
@@ -2231,10 +2227,13 @@
            char *f_str;
 
            if (argv[0][2] == '\0') {
-               (void)Tcl_ListObjGetElements(brlcad_interp, obj, &len, 
&obj_array);
+               if (bu_argv_from_tcl_list(argv[1], &len, (const char 
***)&obj_array) != 0) {
+                   bu_vls_printf(logstr, "Tcl list parse error.", len);
+                   return BRLCAD_ERROR;
+               }
                if ((size_t)len != bot->num_faces || len <= 0) {
                    bu_vls_printf(logstr, "Only %d face normals? Must provide 
normals for all faces!!!", len);
-                   Tcl_DecrRefCount(obj);
+                   if (obj_array) bu_free((char *)obj_array, "obj_array");
                    return BRLCAD_ERROR;
                }
                if (bot->face_normals)
@@ -2242,12 +2241,12 @@
                bot->face_normals = (int *)bu_calloc(len*3, sizeof(int), "BOT 
face_normals");
                bot->num_face_normals = len;
                for (i = 0; i < (size_t)len; i++) {
-                   f_str = Tcl_GetStringFromObj(obj_array[i], NULL);
+                   f_str = (char *)obj_array[i];
                    while (isspace((int)*f_str)) f_str++;
 
                    if (*f_str == '\0') {
                        bu_vls_printf(logstr, "incomplete list of 
face_normals");
-                       Tcl_DecrRefCount(obj);
+                       bu_free((char *)obj_array, "obj_array");
                        return BRLCAD_ERROR;
                    }
 
@@ -2255,7 +2254,7 @@
                    li = atol(f_str);
                    if (li < 0) {
                        bu_vls_printf(logstr, "invalid face normal index 
[%ld]", li);
-                       Tcl_DecrRefCount(obj);
+                       bu_free((char *)obj_array, "obj_array");
                        return BRLCAD_ERROR;
                    }
                    bot->face_normals[i*3+0] = (size_t)li;
@@ -2263,7 +2262,7 @@
                    f_str = bu_next_token(f_str);
                    if (*f_str == '\0') {
                        bu_vls_printf(logstr, "incomplete list of 
face_normals");
-                       Tcl_DecrRefCount(obj);
+                       bu_free((char *)obj_array, "obj_array");
                        return BRLCAD_ERROR;
                    }
 
@@ -2271,7 +2270,7 @@
                    li = atol(f_str);
                    if (li < 0) {
                        bu_vls_printf(logstr, "invalid face normal index 
[%ld]", li);
-                       Tcl_DecrRefCount(obj);
+                       bu_free((char *)obj_array, "obj_array");
                        return BRLCAD_ERROR;
                    }
 
@@ -2279,7 +2278,7 @@
                    f_str = bu_next_token(f_str);
                    if (*f_str == '\0') {
                        bu_vls_printf(logstr, "incomplete list of 
face_normals");
-                       Tcl_DecrRefCount(obj);
+                       bu_free((char *)obj_array, "obj_array");
                        return BRLCAD_ERROR;
                    }
 
@@ -2287,55 +2286,50 @@
                    li = atol(f_str);
                    if (li < 0) {
                        bu_vls_printf(logstr, "invalid face normal index 
[%ld]", li);
-                       Tcl_DecrRefCount(obj);
+                       bu_free((char *)obj_array, "obj_array");
                        return BRLCAD_ERROR;
                    }
                    bot->face_normals[i*3+2] = li;
                }
+               bu_free((char *)obj_array, "obj_array");
                bot->bot_flags |= RT_BOT_HAS_SURFACE_NORMALS;
            } else {
                li = atol(&argv[0][2]);
                if (li < 0 || (size_t)li >= bot->num_faces) {
                    bu_vls_printf(logstr, "face_normal number [%ld] out of 
range!!!", li);
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
                i = (size_t)li;
-               f_str = Tcl_GetStringFromObj(obj, NULL);
+               f_str = (char *)argv[1];
                while (isspace((int)*f_str)) f_str++;
 
                li = atol(f_str);
                if (li < 0) {
                    bu_vls_printf(logstr, "invalid face normal index [%ld]", 
li);
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
                bot->face_normals[i*3+0] = li;
                f_str = bu_next_token(f_str);
                if (*f_str == '\0') {
                    bu_vls_printf(logstr, "incomplete vertex");
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
 
                li = atol(f_str);
                if (li < 0) {
                    bu_vls_printf(logstr, "invalid face normal index [%ld]", 
li);
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
                bot->face_normals[i*3+1] = li;
                f_str = bu_next_token(f_str);
                if (*f_str == '\0') {
                    bu_vls_printf(logstr, "incomplete vertex");
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
 
                li = atol(f_str);
                if (li < 0) {
                    bu_vls_printf(logstr, "invalid face normal index [%ld]", 
li);
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
                bot->face_normals[i*3+2] = li;
@@ -2344,10 +2338,12 @@
            char *v_str;
 
            if (argv[0][1] == '\0') {
-               (void)Tcl_ListObjGetElements(brlcad_interp, obj, &len, 
&obj_array);
+               if (bu_argv_from_tcl_list(argv[1], &len, (const char 
***)&obj_array) != 0) {
+                   bu_vls_printf(logstr, "Tcl list parse error.", len);
+                   return BRLCAD_ERROR;
+               }
                if (len <= 0) {
                    bu_vls_printf(logstr, "Must provide at least one 
normal!!!");
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
                bot->num_normals = len;
@@ -2358,53 +2354,51 @@
                bot->num_normals = 0;
                bot->normals = (fastf_t *)bu_calloc(len*3, sizeof(fastf_t), 
"BOT normals");
                for (i = 0; i < (size_t)len; i++) {
-                   v_str = Tcl_GetStringFromObj(obj_array[i], NULL);
+                   v_str = (char *)obj_array[i];
                    while (isspace((int)*v_str)) v_str++;
                    if (*v_str == '\0') {
                        bu_vls_printf(logstr, "incomplete list of normals");
-                       Tcl_DecrRefCount(obj);
+                       bu_free((char *)obj_array, "obj_array");
                        return BRLCAD_ERROR;
                    }
                    bot->normals[i*3+0] = atof(v_str);
                    v_str = bu_next_token(v_str);
                    if (*v_str == '\0') {
                        bu_vls_printf(logstr, "incomplete list of normals");
-                       Tcl_DecrRefCount(obj);
+                       bu_free((char *)obj_array, "obj_array");
                        return BRLCAD_ERROR;
                    }
                    bot->normals[i*3+1] = atof(v_str);
                    v_str = bu_next_token(v_str);
                    if (*v_str == '\0') {
                        bu_vls_printf(logstr, "incomplete list of normals");
-                       Tcl_DecrRefCount(obj);
+                       bu_free((char *)obj_array, "obj_array");
                        return BRLCAD_ERROR;
                    }
                    bot->normals[i*3+2] = atof(v_str);
                }
+               bu_free((char *)obj_array, "obj_array");
                bot->bot_flags |= RT_BOT_HAS_SURFACE_NORMALS;
            } else {
                li = atol(&argv[0][1]);
                if (li < 0 || (size_t)li >= bot->num_normals) {
                    bu_vls_printf(logstr, "normal number [%ld] out of 
range!!!", li);
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
                i = (size_t)li;
-               v_str = Tcl_GetStringFromObj(obj, NULL);
+               v_str = (char *)argv[1];
                while (isspace((int)*v_str)) v_str++;
 
                bot->normals[i*3+0] = atof(v_str);
                v_str = bu_next_token(v_str);
                if (*v_str == '\0') {
                    bu_vls_printf(logstr, "incomplete normal");
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
                bot->normals[i*3+1] = atof(v_str);
                v_str = bu_next_token(v_str);
                if (*v_str == '\0') {
                    bu_vls_printf(logstr, "incomplete normal");
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
                bot->normals[i*3+2] = atof(v_str);
@@ -2413,10 +2407,12 @@
            char *v_str;
 
            if (argv[0][1] == '\0') {
-               (void)Tcl_ListObjGetElements(brlcad_interp, obj, &len, 
&obj_array);
+               if (bu_argv_from_tcl_list(argv[1], &len, (const char 
***)&obj_array) != 0) {
+                   bu_vls_printf(logstr, "Tcl list parse error.", len);
+                   return BRLCAD_ERROR;
+               }
                if (len <= 0) {
                    bu_vls_printf(logstr, "Must provide at least one 
vertex!!!");
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
                bot->num_vertices = len;
@@ -2424,25 +2420,25 @@
                    bu_free(bot->vertices, "BOT vertices");
                bot->vertices = (fastf_t *)bu_calloc(len*3, sizeof(fastf_t), 
"BOT vertices");
                for (i = 0; i < (size_t)len; i++) {
-                   v_str = Tcl_GetStringFromObj(obj_array[i], NULL);
+                   v_str = (char *)obj_array[i];
                    while (isspace((int)*v_str)) v_str++;
                    if (*v_str == '\0') {
                        bu_vls_printf(logstr, "incomplete list of vertices");
-                       Tcl_DecrRefCount(obj);
+                       bu_free((char *)obj_array, "obj_array");
                        return BRLCAD_ERROR;
                    }
                    bot->vertices[i*3+0] = atof(v_str);
                    v_str = bu_next_token(v_str);
                    if (*v_str == '\0') {
                        bu_vls_printf(logstr, "incomplete list of vertices");
-                       Tcl_DecrRefCount(obj);
+                       bu_free((char *)obj_array, "obj_array");
                        return BRLCAD_ERROR;
                    }
                    bot->vertices[i*3+1] = atof(v_str);
                    v_str = bu_next_token(v_str);
                    if (*v_str == '\0') {
                        bu_vls_printf(logstr, "incomplete list of vertices");
-                       Tcl_DecrRefCount(obj);
+                       bu_free((char *)obj_array, "obj_array");
                        return BRLCAD_ERROR;
                    }
                    bot->vertices[i*3+2] = atof(v_str);
@@ -2451,25 +2447,22 @@
                li = atol(&argv[0][1]);
                if (li < 0 || (size_t)li >= bot->num_vertices) {
                    bu_vls_printf(logstr, "vertex number [%ld] out of 
range!!!", li);
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
                i = (size_t)li;
-               v_str = Tcl_GetStringFromObj(obj, NULL);
+               v_str = (char *)argv[1];
                while (isspace((int)*v_str)) v_str++;
 
                bot->vertices[i*3+0] = atof(v_str);
                v_str = bu_next_token(v_str);
                if (*v_str == '\0') {
                    bu_vls_printf(logstr, "incomplete vertex");
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
                bot->vertices[i*3+1] = atof(v_str);
                v_str = bu_next_token(v_str);
                if (*v_str == '\0') {
                    bu_vls_printf(logstr, "incomplete vertex");
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
                bot->vertices[i*3+2] = atof(v_str);
@@ -2478,10 +2471,12 @@
            char *f_str;
 
            if (argv[0][1] == '\0') {
-               (void)Tcl_ListObjGetElements(brlcad_interp, obj, &len, 
&obj_array);
+               if (bu_argv_from_tcl_list(argv[1], &len, (const char 
***)&obj_array) != 0) {
+                   bu_vls_printf(logstr, "Tcl list parse error.", len);
+                   return BRLCAD_ERROR;
+               }
                if (len <= 0) {
                    bu_vls_printf(logstr, "Must provide at least one face!!!");
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
                bot->num_faces = len;
@@ -2504,19 +2499,19 @@
                    }
                }
                for (i = 0; i < (size_t)len; i++) {
-                   f_str = Tcl_GetStringFromObj(obj_array[i], NULL);
+                   f_str = (char *)obj_array[i];
                    while (isspace((int)*f_str)) f_str++;
 
                    if (*f_str == '\0') {
                        bu_vls_printf(logstr, "incomplete list of faces");
-                       Tcl_DecrRefCount(obj);
+                       bu_free((char *)obj_array, "obj_array");
                        return BRLCAD_ERROR;
                    }
 
                    li = atol(f_str);
                    if (li < 0) {
                        bu_vls_printf(logstr, "invalid face index [%ld]", li);
-                       Tcl_DecrRefCount(obj);
+                       bu_free((char *)obj_array, "obj_array");
                        return BRLCAD_ERROR;
                    }
                    bot->faces[i*3+0] = li;
@@ -2524,14 +2519,14 @@
                    f_str = bu_next_token(f_str);
                    if (*f_str == '\0') {
                        bu_vls_printf(logstr, "incomplete list of faces");
-                       Tcl_DecrRefCount(obj);
+                       bu_free((char *)obj_array, "obj_array");
                        return BRLCAD_ERROR;
                    }
 
                    li = atol(f_str);
                    if (li < 0) {
                        bu_vls_printf(logstr, "invalid face index [%ld]", li);
-                       Tcl_DecrRefCount(obj);
+                       bu_free((char *)obj_array, "obj_array");
                        return BRLCAD_ERROR;
                    }
                    bot->faces[i*3+1] = li;
@@ -2539,33 +2534,32 @@
                    f_str = bu_next_token(f_str);
                    if (*f_str == '\0') {
                        bu_vls_printf(logstr, "incomplete list of faces");
-                       Tcl_DecrRefCount(obj);
+                       bu_free((char *)obj_array, "obj_array");
                        return BRLCAD_ERROR;
                    }
 
                    li = atol(f_str);
                    if (li < 0) {
                        bu_vls_printf(logstr, "invalid face index [%ld]", li);
-                       Tcl_DecrRefCount(obj);
+                       bu_free((char *)obj_array, "obj_array");
                        return BRLCAD_ERROR;
                    }
                    bot->faces[i*3+2] = li;
+                   bu_free((char *)obj_array, "obj_array");
                }
            } else {
                li = atol(&argv[0][1]);
                if (li < 0 || (size_t)li >= bot->num_faces) {
                    bu_vls_printf(logstr, "face number [%ld] out of range!!!", 
li);
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
                i = (size_t)li;
-               f_str = Tcl_GetStringFromObj(obj, NULL);
+               f_str = (char *)argv[1];
                while (isspace((int)*f_str)) f_str++;
 
                li = atol(f_str);
                if (li < 0) {
                    bu_vls_printf(logstr, "invalid face index [%ld]", li);
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
                bot->faces[i*3+0] = li;
@@ -2573,28 +2567,24 @@
                f_str = bu_next_token(f_str);
                if (*f_str == '\0') {
                    bu_vls_printf(logstr, "incomplete vertex");
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
 
                li = atol(f_str);
                if (li < 0) {
                    bu_vls_printf(logstr, "invalid face index [%ld]", li);
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
                bot->faces[i*3+1] = li;
                f_str = bu_next_token(f_str);
                if (*f_str == '\0') {
                    bu_vls_printf(logstr, "incomplete vertex");
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
 
                li = atol(f_str);
                if (li < 0) {
                    bu_vls_printf(logstr, "invalid face index [%ld]", li);
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
                bot->faces[i*3+2] = li;
@@ -2604,15 +2594,17 @@
            char *t_str;
 
            if (argv[0][1] == '\0') {
-               (void)Tcl_ListObjGetElements(brlcad_interp, obj, &len, 
&obj_array);
+               if (bu_argv_from_tcl_list(argv[1], &len, (const char 
***)&obj_array) != 0) {
+                   bu_vls_printf(logstr, "Tcl list parse error.", len);
+                   return BRLCAD_ERROR;
+               }
                if (len <= 0) {
                    bu_vls_printf(logstr, "Must provide at least one 
thickness!!!");
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
                if ((size_t)len > bot->num_faces) {
                    bu_vls_printf(logstr, "Too many thicknesses (there are not 
that many faces)!!!");
-                   Tcl_DecrRefCount(obj);
+                   bu_free((char *)obj_array, "obj_array");
                    return BRLCAD_ERROR;
                }
                if (!bot->thickness) {
@@ -2620,33 +2612,32 @@
                                                          "bot->thickness");
                }
                for (i = 0; i < (size_t)len; i++) {
-                   bot->thickness[i] = atof(Tcl_GetStringFromObj(obj_array[i], 
NULL));
+                   bot->thickness[i] = atof(obj_array[i]);
                }
            } else {
                li = atol(&argv[0][1]);
                if (li < 0 || (size_t)li >= bot->num_faces) {
                    bu_vls_printf(logstr, "face number [%ld] out of range!!!", 
li);
-                   Tcl_DecrRefCount(obj);
+                   bu_free((char *)obj_array, "obj_array");
                    return BRLCAD_ERROR;
                }
                if (!bot->thickness) {
                    bot->thickness = (fastf_t *)bu_calloc(bot->num_faces, 
sizeof(fastf_t),
                                                          "bot->thickness");
                }
-               t_str = Tcl_GetStringFromObj(obj, NULL);
+               t_str = (char *)argv[1];
                bot->thickness[li] = atof(t_str);
            }
        } else if (BU_STR_EQUAL(argv[0], "mode")) {
            char *m_str;
 
-           m_str = Tcl_GetStringFromObj(obj, NULL);
+           m_str = (char *)argv[1];
            if (isdigit((int)*m_str)) {
                int mode;
 
                mode = atoi(m_str);
                if (mode < RT_BOT_SURFACE || mode > RT_BOT_PLATE_NOCOS) {
                    bu_vls_printf(logstr, "unrecognized mode!!!");
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
                bot->mode = mode;
@@ -2661,21 +2652,19 @@
                    bot->mode = RT_BOT_PLATE_NOCOS;
                else {
                    bu_vls_printf(logstr, "unrecognized mode!!!");
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
            }
        } else if (!bu_strncmp(argv[0], "orient", 6)) {
            char *o_str;
 
-           o_str = Tcl_GetStringFromObj(obj, NULL);
+           o_str = (char *)argv[1];
            if (isdigit((int)*o_str)) {
                int orient;
 
                orient = atoi(o_str);
                if (orient < RT_BOT_UNORIENTED || orient > RT_BOT_CW) {
                    bu_vls_printf(logstr, "unrecognized orientation!!!");
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
                bot->orientation = orient;
@@ -2688,17 +2677,19 @@
                    bot->orientation = RT_BOT_CW;
                else {
                    bu_vls_printf(logstr, "unrecognized orientation!!!");
-                   Tcl_DecrRefCount(obj);
                    return BRLCAD_ERROR;
                }
            }
        } else if (BU_STR_EQUAL(argv[0], "flags")) {
-           (void)Tcl_ListObjGetElements(brlcad_interp, obj, &len, &obj_array);
+           if (bu_argv_from_tcl_list(argv[1], &len, (const char 
***)&obj_array) != 0) {
+               bu_vls_printf(logstr, "Tcl list parse error.", len);
+               return BRLCAD_ERROR;
+           }
            bot->bot_flags = 0;
            for (i = 0; i < (size_t)len; i++) {
                char *str;
 
-               str = Tcl_GetStringFromObj(obj_array[i], NULL);
+               str = (char *)obj_array[i];
                if (BU_STR_EQUAL(str, "has_normals")) {
                    bot->bot_flags |= RT_BOT_HAS_SURFACE_NORMALS;
                } else if (BU_STR_EQUAL(str, "use_normals")) {
@@ -2707,14 +2698,13 @@
                    bot->bot_flags |= RT_BOT_USE_FLOATS;
                } else {
                    bu_vls_printf(logstr, "unrecognized flag (must be 
\"has_normals\", \"use_normals\", or \"use_floats\"!!!");
-                   Tcl_DecrRefCount(obj);
+                   if (obj_array) bu_free((char *)obj_array, "obj_array");
                    return BRLCAD_ERROR;
                }
            }
+           if (obj_array) bu_free((char *)obj_array, "obj_array");
        }
 
-       Tcl_DecrRefCount(obj);
-
        argc -= 2;
        argv += 2;
     }

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


------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to