Revision: 77078
          http://sourceforge.net/p/brlcad/code/77078
Author:   starseeker
Date:     2020-09-08 16:46:19 +0000 (Tue, 08 Sep 2020)
Log Message:
-----------
Merge from trunk: r77067 through r77077

Modified Paths:
--------------
    brlcad/branches/RELEASE/AUTHORS
    brlcad/branches/RELEASE/include/tclcad.h
    brlcad/branches/RELEASE/src/libgcv/plugins/gdal/gdal.cpp
    brlcad/branches/RELEASE/src/libgcv/plugins/gdal/gdal_ll.cpp
    brlcad/branches/RELEASE/src/libged/bot/bot.cpp
    brlcad/branches/RELEASE/src/libtclcad/commands.c
    brlcad/branches/RELEASE/src/mged/mged.c

Added Paths:
-----------
    brlcad/branches/RELEASE/src/libgcv/plugins/vol/

Property Changed:
----------------
    brlcad/branches/RELEASE/
    brlcad/branches/RELEASE/include/

Index: brlcad/branches/RELEASE
===================================================================
--- brlcad/branches/RELEASE     2020-09-08 16:41:21 UTC (rev 77077)
+++ brlcad/branches/RELEASE     2020-09-08 16:46:19 UTC (rev 77078)

Property changes on: brlcad/branches/RELEASE
___________________________________________________________________
Modified: svn:mergeinfo
## -7,4 +7,4 ##
 /brlcad/branches/opencl:65867-66137
 /brlcad/branches/osg:62110-62113
 /brlcad/branches/prep-cache:68236-68933
-/brlcad/trunk:36844-37285,37571-38764,38777-38845,41559-43155,43159-43908,44241-44324,44326-44385,44710-45373,45377,45379-47342,47370-68122,68125-75207,75325,75375,75377-75378,75387,75470-75472,75477,75492,75495,75549,75565-75566,75656-75661,75672,75675,75678,75729,75811,76641-76768,76771-76954,76963-76967,76975-76991,76994-77066
\ No newline at end of property
+/brlcad/trunk:36844-37285,37571-38764,38777-38845,41559-43155,43159-43908,44241-44324,44326-44385,44710-45373,45377,45379-47342,47370-68122,68125-75207,75325,75375,75377-75378,75387,75470-75472,75477,75492,75495,75549,75565-75566,75656-75661,75672,75675,75678,75729,75811,76641-76768,76771-76954,76963-76967,76975-76991,76994-77077
\ No newline at end of property
Modified: brlcad/branches/RELEASE/AUTHORS
===================================================================
--- brlcad/branches/RELEASE/AUTHORS     2020-09-08 16:41:21 UTC (rev 77077)
+++ brlcad/branches/RELEASE/AUTHORS     2020-09-08 16:46:19 UTC (rev 77078)
@@ -903,7 +903,12 @@
 2020 April
 ARL Student Hire / University of Texas at Austin
 
+Das, Sumagna
+nicknames sumagnadas
+2020 May
+Open Source
 
+
 SPECIAL THANKS
 --------------
 

Index: brlcad/branches/RELEASE/include
===================================================================
--- brlcad/branches/RELEASE/include     2020-09-08 16:41:21 UTC (rev 77077)
+++ brlcad/branches/RELEASE/include     2020-09-08 16:46:19 UTC (rev 77078)

Property changes on: brlcad/branches/RELEASE/include
___________________________________________________________________
Modified: svn:mergeinfo
## -7,4 +7,4 ##
 /brlcad/branches/opencl/include:65867-66137
 /brlcad/branches/osg/include:62110-62113
 /brlcad/branches/prep-cache/include:68236-68933
-/brlcad/trunk/include:36844-37285,37571-38764,38777-38845,41559-43155,43159-43908,44241-44324,44326-44385,44710-45373,45377,45379-47342,47370-68122,68125-75207,75325,75375,75377-75378,75387,75470-75472,75477,75492,75495,75549,75565-75566,75656-75661,75672,75675,75678,75729,75811,76641-76726,76729-76730,76748-76764,76771-76858,76862-76954,76994-77065
\ No newline at end of property
+/brlcad/trunk/include:36844-37285,37571-38764,38777-38845,41559-43155,43159-43908,44241-44324,44326-44385,44710-45373,45377,45379-47342,47370-68122,68125-75207,75325,75375,75377-75378,75387,75470-75472,75477,75492,75495,75549,75565-75566,75656-75661,75672,75675,75678,75729,75811,76641-76726,76729-76730,76748-76764,76771-76858,76862-76954,76994-77065,77067-77077
\ No newline at end of property
Modified: brlcad/branches/RELEASE/include/tclcad.h
===================================================================
--- brlcad/branches/RELEASE/include/tclcad.h    2020-09-08 16:41:21 UTC (rev 
77077)
+++ brlcad/branches/RELEASE/include/tclcad.h    2020-09-08 16:46:19 UTC (rev 
77078)
@@ -518,7 +518,9 @@
  * Tcl specific I/O handlers
  */
 struct tclcad_io_data {
-    Tcl_Channel chan;
+       Tcl_Channel chan_stdin;
+    Tcl_Channel chan_stdout;
+    Tcl_Channel chan_stderr;
     Tcl_Interp *interp;
     int io_mode;
 };

Modified: brlcad/branches/RELEASE/src/libgcv/plugins/gdal/gdal.cpp
===================================================================
--- brlcad/branches/RELEASE/src/libgcv/plugins/gdal/gdal.cpp    2020-09-08 
16:41:21 UTC (rev 77077)
+++ brlcad/branches/RELEASE/src/libgcv/plugins/gdal/gdal.cpp    2020-09-08 
16:46:19 UTC (rev 77078)
@@ -97,7 +97,8 @@
 get_dataset_info(GDALDatasetH hDataset)
 {
     char *gdal_info = GDALInfo(hDataset, NULL);
-    if (gdal_info) bu_log("%s", gdal_info);
+    if (gdal_info)
+       bu_log("%s", gdal_info);
     CPLFree(gdal_info);
     return 0;
 }
@@ -108,13 +109,16 @@
     GDALDatasetH hDataset;
     GDALAllRegister();
 
-    if (!data) return 0;
+    if (!data)
+       return 0;
 
-    if (!bu_file_exists(data,NULL)) return 0;
+    if (!bu_file_exists(data,NULL))
+       return 0;
 
     hDataset = GDALOpenEx(data, GDAL_OF_READONLY | GDAL_OF_RASTER , NULL, 
NULL, NULL);
 
-    if (!hDataset) return 0;
+    if (!hDataset)
+       return 0;
 
     GDALClose(hDataset);
 
@@ -129,7 +133,8 @@
     GDALRasterBandH band = GDALGetRasterBand(ds, 1);
     mm[0] = GDALGetRasterMinimum(band, &bmin);
     mm[1] = GDALGetRasterMaximum(band, &bmin);
-    if (!bmin || !bmax) GDALComputeRasterMinMax(band, TRUE, mm);
+    if (!bmin || !bmax)
+       GDALComputeRasterMinMax(band, TRUE, mm);
     bu_log("Elevation Minimum/Maximum: %f, %f\n", mm[0], mm[1]);
 }
 
@@ -203,17 +208,20 @@
     (void)get_dataset_info(state->hDataset);
     gdal_elev_minmax(state->hDataset);
 
-    /* Stash the original Spatial Reference System as a PROJ.4 string for 
later assignment */
+    /* Stash the original Spatial Reference System as a PROJ.4 string
+     * for later assignment
+     */
     char *orig_proj4_str = NULL;
     OGRSpatialReference iSRS(GDALGetProjectionRef(state->hDataset));
     iSRS.exportToProj4(&orig_proj4_str);
 
-    /* Use the information in the data set to deduce the EPSG number 
corresponding
-     * to the correct UTM projection zone, define a spatial reference, and 
generate
-     * the "Well Known Text" to use as the argument to the warping function*/
+    /* Use the information in the data set to deduce the EPSG number
+     * corresponding to the correct UTM projection zone, define a
+     * spatial reference, and generate the "Well Known Text" to use as
+     * the argument to the warping function*/
     GDALDatasetH hOutDS;
     int zone = (state->ops->zone == INT_MAX) ? gdal_utm_zone(state) : 
state->ops->zone;
-    char *dunit;
+    char *dunit = NULL;
     const char *dunit_default = "m";
     struct bu_vls new_proj4_str = BU_VLS_INIT_ZERO;
     if (zone != INT_MAX) {
@@ -224,22 +232,26 @@
        char *dst_Wkt = NULL;
        oSRS.exportToWkt(&dst_Wkt);
 
-       /* Perform the UTM data warp.  At this point the data is not yet in the
-        * form needed by the DSP primitive */
+       /* Perform the UTM data warp.  At this point the data is not
+        * yet in the form needed by the DSP primitive */
        hOutDS = GDALAutoCreateWarpedVRT(state->hDataset, NULL, dst_Wkt, 
GRA_CubicSpline, 0.0, NULL);
        CPLFree(dst_Wkt);
-       dunit = bu_strdup(GDALGetRasterUnitType(((GDALDataset 
*)hOutDS)->GetRasterBand(1)));
-       bu_log("\nTransformed dataset info:\n");
-       (void)get_dataset_info(hOutDS);
-       gdal_elev_minmax(hOutDS);
+
+       if (hOutDS) {
+           dunit = bu_strdup(GDALGetRasterUnitType(((GDALDataset 
*)hOutDS)->GetRasterBand(1)));
+           bu_log("\nTransformed dataset info:\n");
+           (void)get_dataset_info(hOutDS);
+           gdal_elev_minmax(hOutDS);
+       }
     } else {
        hOutDS = state->hDataset;
        dunit = bu_strdup(GDALGetRasterUnitType(((GDALDataset 
*)hOutDS)->GetRasterBand(1)));
     }
-    if (!dunit || strlen(dunit) == 0) dunit = (char *)dunit_default;
+    if (!dunit || strlen(dunit) == 0)
+       dunit = (char *)dunit_default;
 
-    /* Do the translate step (a.l.a gdal_translate) that puts the data in a
-     * form we can use */
+    /* Do the translate step (a.l.a gdal_translate) that puts the data
+     * in a form we can use */
     char *img_opts[3];
     img_opts[0] = bu_strdup("-of");
     img_opts[1] = bu_strdup("MEM");
@@ -247,12 +259,15 @@
     GDALTranslateOptions *gdalt_opts = GDALTranslateOptionsNew(img_opts, NULL);
     GDALDatasetH flatDS = GDALTranslate("", hOutDS, gdalt_opts, NULL);
     GDALTranslateOptionsFree(gdalt_opts);
-    if (hOutDS != state->hDataset) GDALClose(hOutDS);
+    if (hOutDS != state->hDataset)
+       GDALClose(hOutDS);
     for(int i = 0; i < 3; i++) {
-       if(img_opts[i]) bu_free(img_opts[i], "imgopt");
+       if(img_opts[i])
+           bu_free(img_opts[i], "imgopt");
     }
 
-    /* Stash the flat Spatial Reference System as a PROJ.4 string for later 
assignment */
+    /* Stash the flat Spatial Reference System as a PROJ.4 string for
+     * later assignment */
     char *flat_proj4_str = NULL;
     OGRSpatialReference fSRS(GDALGetProjectionRef(flatDS));
     fSRS.exportToProj4(&flat_proj4_str);
@@ -278,7 +293,8 @@
        }
     }
 
-    /* Convert the data before writing it so the DSP get_obj_data routine sees 
what it expects */
+    /* Convert the data before writing it so the DSP get_obj_data
+     * routine sees what it expects */
     int in_cookie = bu_cv_cookie("hus");
     int out_cookie = bu_cv_cookie("nus"); /* data is network unsigned short */
     if (bu_cv_optimize(in_cookie) != bu_cv_optimize(out_cookie)) {
@@ -316,10 +332,11 @@
     GDALClose(flatDS);
     GDALClose(state->hDataset);
 
-    /* TODO: if we're going to BoT (3-space mesh, will depend on the transform 
requested) we will need different logic... */
+    /* TODO: if we're going to BoT (3-space mesh, will depend on the
+     * transform requested) we will need different logic... */
 
-    /* Write out the dsp.  Since we're using a data object, instead of a file,
-     * do the setup by hand. */
+    /* Write out the dsp.  Since we're using a data object, instead of
+     * a file, do the setup by hand. */
     struct rt_dsp_internal *dsp;
     BU_ALLOC(dsp, struct rt_dsp_internal);
     dsp->magic = RT_DSP_INTERNAL_MAGIC;
@@ -346,8 +363,8 @@
 
     wdb_export(state->wdbp, bu_vls_addr(&name_dsp), (void *)dsp, ID_DSP, 1);
 
-    /* Write out the original and current Spatial Reference Systems and other 
dimensional
-     * information to attributes on the dsp */
+    /* Write out the original and current Spatial Reference Systems
+     * and other dimensional information to attributes on the dsp */
     struct bu_attribute_value_set avs;
     bu_avs_init_empty(&avs);
     struct directory *dp = db_lookup(state->wdbp->dbip, 
bu_vls_addr(&name_dsp), LOOKUP_QUIET);
@@ -370,9 +387,12 @@
        (void)db5_update_attributes(dp, &avs, state->wdbp->dbip);
     }
 
-    if (dunit != dunit_default) bu_free(dunit, "free dunit");
-    if (orig_proj4_str) CPLFree(orig_proj4_str);
-    if (flat_proj4_str) CPLFree(flat_proj4_str);
+    if (dunit != dunit_default)
+       bu_free(dunit, "free dunit");
+    if (orig_proj4_str)
+       CPLFree(orig_proj4_str);
+    if (flat_proj4_str)
+       CPLFree(flat_proj4_str);
     bu_vls_free(&new_proj4_str);
 
     bu_vls_free(&name_root);

Modified: brlcad/branches/RELEASE/src/libgcv/plugins/gdal/gdal_ll.cpp
===================================================================
--- brlcad/branches/RELEASE/src/libgcv/plugins/gdal/gdal_ll.cpp 2020-09-08 
16:41:21 UTC (rev 77077)
+++ brlcad/branches/RELEASE/src/libgcv/plugins/gdal/gdal_ll.cpp 2020-09-08 
16:46:19 UTC (rev 77078)
@@ -66,19 +66,24 @@
            CPLPopErrorHandler();
            OSRDestroySpatialReference(hll);
        }
-       if(hpj != NULL) OSRDestroySpatialReference(hpj);
+       if (hpj != NULL)
+           OSRDestroySpatialReference(hpj);
     }
 
     if(htfm != NULL) {
        if (OCTTransform(htfm,1,&longitude,&latitude,NULL)) {
-           if (lat_center)  (*lat_center)  = latitude;
-           if (long_center) (*long_center) = longitude;
+           if (lat_center)
+               *lat_center  = latitude;
+           if (long_center)
+               *long_center = longitude;
        } else {
            return 0;
        }
     } else {
-       if (lat_center)  (*lat_center)  = latitude;
-       if (long_center) (*long_center) = longitude;
+       if (lat_center)
+           *lat_center  = latitude;
+       if (long_center)
+           *long_center = longitude;
     }
     bu_log("lat: %f, long: %f\n", latitude, longitude);
 

Modified: brlcad/branches/RELEASE/src/libged/bot/bot.cpp
===================================================================
--- brlcad/branches/RELEASE/src/libged/bot/bot.cpp      2020-09-08 16:41:21 UTC 
(rev 77077)
+++ brlcad/branches/RELEASE/src/libged/bot/bot.cpp      2020-09-08 16:46:19 UTC 
(rev 77078)
@@ -125,12 +125,43 @@
 
     /* print result string */
     if (!EQUAL(propVal, -1.0)) {
-
+       int intprop = (int) propVal;
        fastf_t tmp = (int) propVal;
 
        if (EQUAL(propVal, tmp)) {
            /* int result */
-           bu_vls_printf(gb->gedp->ged_result_str, "%d", (int) propVal);
+           /* for orientation and mode, print something more informative than 
just
+            * the number */
+           if (BU_STR_EQUAL(argv[0], "orientation")) {
+               switch (intprop) {
+                   case RT_BOT_UNORIENTED:
+                       bu_vls_printf(gb->gedp->ged_result_str, "none");
+                       break;
+                   case RT_BOT_CCW:
+                       bu_vls_printf(gb->gedp->ged_result_str, "ccw");
+                       break;
+                   case RT_BOT_CW:
+                       bu_vls_printf(gb->gedp->ged_result_str, "cw");
+                       break;
+               }
+           } else if (BU_STR_EQUAL(argv[0], "type") || BU_STR_EQUAL(argv[0], 
"mode")){
+               switch (intprop) {
+                   case RT_BOT_SURFACE:
+                       bu_vls_printf(gb->gedp->ged_result_str, "surface");
+                       break;
+                   case RT_BOT_SOLID:
+                       bu_vls_printf(gb->gedp->ged_result_str, "solid");
+                       break;
+                   case RT_BOT_PLATE:
+                       bu_vls_printf(gb->gedp->ged_result_str, "plate");
+                       break;
+                   case RT_BOT_PLATE_NOCOS:
+                       bu_vls_printf(gb->gedp->ged_result_str, "plate_nocos");
+                       break;
+               }
+           } else {
+               bu_vls_printf(gb->gedp->ged_result_str, "%d", (int) propVal);
+           }
        } else {
            /* float result */
            bu_vls_printf(gb->gedp->ged_result_str, "%f", propVal);
@@ -144,6 +175,98 @@
 }
 
 extern "C" int
+_bot_cmd_set(void *bs, int argc, const char **argv)
+{
+    const char *usage_string = "bot set <orientation|type> <objname> <val>";
+    const char *purpose_string = "Set BoT object properties";
+    if (_bot_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+       return GED_OK;
+    }
+
+    struct _ged_bot_info *gb = (struct _ged_bot_info *)bs;
+
+    argc--; argv++;
+
+    if (argc != 3) {
+       bu_vls_printf(gb->gedp->ged_result_str, "%s", usage_string);
+       return GED_ERROR;
+    }
+
+    if (_bot_obj_setup(gb, argv[1]) & GED_ERROR) {
+       return GED_ERROR;
+    }
+
+    if (!BU_STR_EQUAL(argv[0], "orientation") && !BU_STR_EQUAL(argv[0], 
"type") && !BU_STR_EQUAL(argv[0], "mode")) {
+       bu_vls_printf(gb->gedp->ged_result_str, "%s", usage_string);
+       return GED_ERROR;
+    }
+
+    if (BU_STR_EQUAL(argv[0], "orientation")) {
+       int mode = INT_MAX;
+       struct rt_bot_internal *bot = (struct rt_bot_internal 
*)(gb->intern->idb_ptr);
+       if (BU_STR_EQUIV(argv[2], "none") || BU_STR_EQUIV(argv[2], 
"unoriented")) {
+           mode = RT_BOT_UNORIENTED;
+       }
+       if (BU_STR_EQUIV(argv[2], "ccw") || BU_STR_EQUIV(argv[2], 
"counterclockwise")) {
+           mode = RT_BOT_CCW;
+       }
+       if (BU_STR_EQUIV(argv[2], "cw") || BU_STR_EQUIV(argv[2], "clockwise")) {
+           mode = RT_BOT_CW;
+       }
+       if (mode == INT_MAX) {
+           bu_vls_printf(gb->gedp->ged_result_str, "Possible orientations are: 
none ccw cw");
+           return GED_ERROR;
+       }
+       bot->orientation = mode;
+    }
+
+    if (BU_STR_EQUAL(argv[0], "type") || BU_STR_EQUAL(argv[0], "mode")) {
+       int mode = INT_MAX;
+       struct rt_bot_internal *bot = (struct rt_bot_internal 
*)(gb->intern->idb_ptr);
+       if (BU_STR_EQUIV(argv[2], "surface") || BU_STR_EQUIV(argv[2], "surf")) {
+           mode = RT_BOT_SURFACE;
+       }
+       if (BU_STR_EQUIV(argv[2], "solid") || BU_STR_EQUIV(argv[2], "sol")) {
+           mode = RT_BOT_SOLID;
+       }
+       if (BU_STR_EQUIV(argv[2], "plate")) {
+           mode = RT_BOT_PLATE;
+       }
+       if (BU_STR_EQUIV(argv[2], "plate_nocos")) {
+           mode = RT_BOT_PLATE_NOCOS;
+       }
+       if (mode == INT_MAX) {
+           bu_vls_printf(gb->gedp->ged_result_str, "Possible types are: 
surface solid plate plate_nocos");
+           return GED_ERROR;
+       }
+       int old_mode = bot->mode;
+       bot->mode = mode;
+       if (bot->mode == RT_BOT_PLATE || bot->mode == RT_BOT_PLATE_NOCOS) {
+           if (old_mode != RT_BOT_PLATE && old_mode != RT_BOT_PLATE_NOCOS) {
+               /* need to create some thicknesses */
+               bot->thickness = (fastf_t *)bu_calloc(bot->num_faces, 
sizeof(fastf_t), "BOT thickness");
+               bot->face_mode = bu_bitv_new(bot->num_faces);
+           }
+       } else {
+           if (old_mode == RT_BOT_PLATE || old_mode == RT_BOT_PLATE_NOCOS) {
+               /* free the per face memory */
+               bu_free((char *)bot->thickness, "BOT thickness");
+               bot->thickness = (fastf_t *)NULL;
+               bu_free((char *)bot->face_mode, "BOT face_mode");
+               bot->face_mode = (struct bu_bitv *)NULL;
+           }
+       }
+    }
+
+    if (rt_db_put_internal(gb->dp, gb->gedp->ged_wdbp->dbip, gb->intern, 
&rt_uniresource) < 0) {
+       bu_vls_printf(gb->gedp->ged_result_str, "Failed to update BoT");
+       return GED_ERROR;
+    }
+
+    return GED_OK;
+}
+
+extern "C" int
 _bot_cmd_chull(void *bs, int argc, const char **argv)
 {
     const char *usage_string = "bot [options] chull <objname> [output_bot]";
@@ -313,6 +436,7 @@
     { "chull",      _bot_cmd_chull},
     { "isect",      _bot_cmd_isect},
     { "remesh",     _bot_cmd_remesh},
+    { "set",        _bot_cmd_set},
     { (char *)NULL,      NULL}
 };
 

Modified: brlcad/branches/RELEASE/src/libtclcad/commands.c
===================================================================
--- brlcad/branches/RELEASE/src/libtclcad/commands.c    2020-09-08 16:41:21 UTC 
(rev 77077)
+++ brlcad/branches/RELEASE/src/libtclcad/commands.c    2020-09-08 16:46:19 UTC 
(rev 77078)
@@ -1215,8 +1215,20 @@
     struct tclcad_io_data *t_iod = (struct tclcad_io_data 
*)p->gedp->ged_io_data;
     HANDLE *fdp = (HANDLE *)bu_process_fd(p->p, d);
     if (fdp) {
-       t_iod->chan = Tcl_MakeFileChannel(*fdp, t_iod->io_mode);
-       Tcl_CreateChannelHandler(t_iod->chan, t_iod->io_mode, callback, 
(ClientData)data);
+               switch (d) {
+               case BU_PROCESS_STDIN:
+                       t_iod->chan_stdin = Tcl_MakeFileChannel(*fdp, 
t_iod->io_mode);
+                       Tcl_CreateChannelHandler(t_iod->chan_stdin, 
t_iod->io_mode, callback, (ClientData)data);
+                       break;
+               case BU_PROCESS_STDOUT:
+                       t_iod->chan_stdout = Tcl_MakeFileChannel(*fdp, 
t_iod->io_mode);
+                       Tcl_CreateChannelHandler(t_iod->chan_stdout, 
t_iod->io_mode, callback, (ClientData)data);
+                       break;
+               case BU_PROCESS_STDERR:
+                       t_iod->chan_stderr = Tcl_MakeFileChannel(*fdp, 
t_iod->io_mode);
+                       Tcl_CreateChannelHandler(t_iod->chan_stderr, 
t_iod->io_mode, callback, (ClientData)data);
+                       break;
+               }
     }
 }
 
@@ -1227,8 +1239,20 @@
     if (!p || !p->p || !p->gedp || !p->gedp->ged_io_data)
                return;
     struct tclcad_io_data *t_iod = (struct tclcad_io_data 
*)p->gedp->ged_io_data;
-    Tcl_DeleteChannelHandler(t_iod->chan, NULL, (ClientData)NULL);
-    Tcl_Close(t_iod->interp, t_iod->chan);
+       switch (d) {
+       case BU_PROCESS_STDIN:
+               Tcl_DeleteChannelHandler(t_iod->chan_stdin, NULL, 
(ClientData)NULL);
+               Tcl_Close(t_iod->interp, t_iod->chan_stdin);
+               break;
+       case BU_PROCESS_STDOUT:
+               Tcl_DeleteChannelHandler(t_iod->chan_stdout, NULL, 
(ClientData)NULL);
+               Tcl_Close(t_iod->interp, t_iod->chan_stdout);
+               break;
+       case BU_PROCESS_STDERR:
+               Tcl_DeleteChannelHandler(t_iod->chan_stderr, NULL, 
(ClientData)NULL);
+               Tcl_Close(t_iod->interp, t_iod->chan_stderr);
+               break;
+       }
 }
 #endif
 

Modified: brlcad/branches/RELEASE/src/mged/mged.c
===================================================================
--- brlcad/branches/RELEASE/src/mged/mged.c     2020-09-08 16:41:21 UTC (rev 
77077)
+++ brlcad/branches/RELEASE/src/mged/mged.c     2020-09-08 16:46:19 UTC (rev 
77078)
@@ -2802,6 +2802,8 @@
     GEDP->ged_destroy_vlist_callback = freeDListsAll;
     GEDP->ged_create_io_handler = &tclcad_create_io_handler;
     GEDP->ged_delete_io_handler = &tclcad_delete_io_handler;
+    GEDP->ged_interp = (void *)interpreter;
+    GEDP->ged_interp_eval = &mged_db_search_callback;
     struct tclcad_io_data *t_iod;
     BU_GET(t_iod, struct tclcad_io_data);
     t_iod->io_mode = TCL_READABLE;
@@ -2964,6 +2966,8 @@
     GEDP->ged_destroy_vlist_callback = freeDListsAll;
     GEDP->ged_create_io_handler = &tclcad_create_io_handler;
     GEDP->ged_delete_io_handler = &tclcad_delete_io_handler;
+    GEDP->ged_interp = (void *)interpreter;
+    GEDP->ged_interp_eval = &mged_db_search_callback;
     struct tclcad_io_data *t_iod;
     BU_GET(t_iod, struct tclcad_io_data);
     t_iod->io_mode = TCL_READABLE;

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