Revision: 75468
          http://sourceforge.net/p/brlcad/code/75468
Author:   starseeker
Date:     2020-04-20 13:56:34 +0000 (Mon, 20 Apr 2020)
Log Message:
-----------
Merge changes from trunk through r75467

Modified Paths:
--------------
    brlcad/branches/dm-fb-merge/include/tclcad.h
    brlcad/branches/dm-fb-merge/src/librt/cache.c
    brlcad/branches/dm-fb-merge/src/libtclcad/tclcad_obj.c
    brlcad/branches/dm-fb-merge/src/mged/setup.c

Property Changed:
----------------
    brlcad/branches/dm-fb-merge/
    brlcad/branches/dm-fb-merge/include/

Index: brlcad/branches/dm-fb-merge
===================================================================
--- brlcad/branches/dm-fb-merge 2020-04-20 13:54:12 UTC (rev 75467)
+++ brlcad/branches/dm-fb-merge 2020-04-20 13:56:34 UTC (rev 75468)

Property changes on: brlcad/branches/dm-fb-merge
___________________________________________________________________
Modified: svn:mergeinfo
## -7,4 +7,4 ##
 /brlcad/branches/osg:62110-62113
 /brlcad/branches/prep-cache:68236-68933
 /brlcad/branches/tcltk86:68300-75257
-/brlcad/trunk:75440-75462
\ No newline at end of property
+/brlcad/trunk:75440-75467
\ No newline at end of property
Index: brlcad/branches/dm-fb-merge/include
===================================================================
--- brlcad/branches/dm-fb-merge/include 2020-04-20 13:54:12 UTC (rev 75467)
+++ brlcad/branches/dm-fb-merge/include 2020-04-20 13:56:34 UTC (rev 75468)

Property changes on: brlcad/branches/dm-fb-merge/include
___________________________________________________________________
Modified: svn:mergeinfo
## -6,4 +6,5 ##
 /brlcad/branches/opencl/include:65867-66137
 /brlcad/branches/osg/include:62110-62113
 /brlcad/branches/prep-cache/include:68236-68933
-/brlcad/branches/tcltk86/include:68300-75257
\ No newline at end of property
+/brlcad/branches/tcltk86/include:68300-75257
+/brlcad/trunk/include:75463-75467
\ No newline at end of property
Modified: brlcad/branches/dm-fb-merge/include/tclcad.h
===================================================================
--- brlcad/branches/dm-fb-merge/include/tclcad.h        2020-04-20 13:54:12 UTC 
(rev 75467)
+++ brlcad/branches/dm-fb-merge/include/tclcad.h        2020-04-20 13:56:34 UTC 
(rev 75468)
@@ -469,7 +469,18 @@
  */
 TCLCAD_EXPORT extern int tclcad_init(Tcl_Interp *interp, int init_gui, struct 
bu_vls *tlog);
 
+/**
+ * Create Tcl specific I/O handlers
+ */
+TCLCAD_EXPORT void
+tclcad_create_io_handler(void **chan, struct bu_process *p, int fd, int mode, 
void *data, ged_io_handler_callback_t callback);
 
+/**
+ * Delete Tcl specific I/O handlers
+ */
+TCLCAD_EXPORT void
+tclcad_delete_io_handler(void *interp, void *chan, struct bu_process *p, int 
fd, void *data, ged_io_handler_callback_t callback);
+
 __END_DECLS
 
 #endif /* TCLCAD_H */

Modified: brlcad/branches/dm-fb-merge/src/librt/cache.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/librt/cache.c       2020-04-20 13:54:12 UTC 
(rev 75467)
+++ brlcad/branches/dm-fb-merge/src/librt/cache.c       2020-04-20 13:56:34 UTC 
(rev 75468)
@@ -387,7 +387,7 @@
     buffer = (uint8_t *)bu_malloc(dest->ext_nbytes, "buffer");
 
     BU_ASSERT(dest->ext_nbytes < INT_MAX);
-    ret = LZ4_decompress_safe((const char *)(external->ext_buf + 
SIZEOF_NETWORK_LONG), (char *)buffer, external->ext_nbytes - 
SIZEOF_NETWORK_LONG, (int)dest->ext_nbytes);
+    ret = LZ4_decompress_fast((const char *)(external->ext_buf + 
SIZEOF_NETWORK_LONG), (char *)buffer, (int)dest->ext_nbytes);
     if (ret > 0)
        uncompressed = 1;
 

Modified: brlcad/branches/dm-fb-merge/src/libtclcad/tclcad_obj.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/libtclcad/tclcad_obj.c      2020-04-20 
13:54:12 UTC (rev 75467)
+++ brlcad/branches/dm-fb-merge/src/libtclcad/tclcad_obj.c      2020-04-20 
13:56:34 UTC (rev 75468)
@@ -54,6 +54,7 @@
 #include "rt/geom.h"
 #include "wdb.h"
 #include "raytrace.h"
+#include "ged.h"
 #include "tclcad.h"
 
 #include "rt/solid.h"
@@ -60,7 +61,6 @@
 #include "dm.h"
 #include "dm/bview.h"
 
-#include "ged.h"
 #include "icv/io.h"
 #include "icv/ops.h"
 #include "icv/crop.h"
@@ -1494,7 +1494,6 @@
     return TCL_OK;
 }
 
-
 /**
  * @brief create the Tcl command for to_open
  *
@@ -1666,6 +1665,52 @@
 }
 
 
+/* Wrappers for setting up/tearing down IO handler */
+#ifndef _WIN32
+void
+tclcad_create_io_handler(void **UNUSED(chan), struct bu_process *p, int fd, 
int mode, void *data, ged_io_handler_callback_t callback)
+{
+    int *fdp;
+    if (!p) return;
+    fdp = (int *)bu_process_fd(p, fd);
+    Tcl_CreateFileHandler(*fdp, mode, callback, (ClientData)data);
+}
+
+void
+tclcad_delete_io_handler(void *UNUSED(interp), void *UNUSED(chan), struct 
bu_process *p, int fd, void *UNUSED(data), ged_io_handler_callback_t 
UNUSED(callback))
+{
+    int *fdp;
+    if (!p) return;
+    fdp = (int *)bu_process_fd(p, fd);
+    Tcl_DeleteFileHandler(*fdp);
+    close(*fdp);
+}
+
+#else
+void
+tclcad_create_io_handler(void **chan, struct bu_process *p, int fd, int mode, 
void *data, ged_io_handler_callback_t callback)
+{
+    HANDLE *fdp;
+    if (!chan || !p) return;
+    fdp = (HANDLE *)bu_process_fd(p, fd);
+    (*chan) = (void *)Tcl_MakeFileChannel(*fdp, mode);
+    Tcl_CreateChannelHandler((Tcl_Channel)(*chan), mode, callback, 
(ClientData)data);
+}
+
+void
+tclcad_delete_io_handler(void *interp, void *chan, struct bu_process *p, int 
fd, void *data, ged_io_handler_callback_t callback)
+{
+    HANDLE *fdp;
+    Tcl_Interp *tcl_interp;
+    if (!chan || !p) return;
+    tcl_interp = (Tcl_Interp *)interp;
+    fdp = (HANDLE *)bu_process_fd(p, fd);
+    Tcl_DeleteChannelHandler((Tcl_Channel)chan, callback, (ClientData)data);
+    Tcl_Close(tcl_interp, (Tcl_Channel)chan);
+}
+#endif
+
+
 /**
  * @brief
  * A TCL interface to wdb_fopen() and wdb_dbopen().
@@ -1741,6 +1786,11 @@
     }
     gedp->ged_interp = (void *)interp;
 
+    /* Set the Tcl specific I/O handlers for asynchronous subprocess I/O */
+    gedp->ged_create_io_handler = &tclcad_create_io_handler;
+    gedp->ged_delete_io_handler = &tclcad_delete_io_handler;
+    gedp->io_mode = TCL_READABLE;
+
     /* initialize tclcad_obj */
     BU_ALLOC(top, struct tclcad_obj);
     top->to_interp = interp;

Modified: brlcad/branches/dm-fb-merge/src/mged/setup.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/mged/setup.c        2020-04-20 13:54:12 UTC 
(rev 75467)
+++ brlcad/branches/dm-fb-merge/src/mged/setup.c        2020-04-20 13:56:34 UTC 
(rev 75468)
@@ -474,6 +474,9 @@
     mged_global_variable_setup(*interpreter);
     mged_variable_setup(*interpreter);
     GEDP->ged_interp = (void *)*interpreter;
+    GEDP->ged_create_io_handler = &tclcad_create_io_handler;
+    GEDP->ged_delete_io_handler = &tclcad_delete_io_handler;
+    GEDP->io_mode = TCL_READABLE;
     GEDP->ged_interp_eval = &mged_db_search_callback;
 
     /* Tcl needs to write nulls onto subscripted variable names */

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