[PD-cvs] SF.net SVN: pure-data:[10476] branches/pd-devel/0.41.4/src

eighthave at users.sourceforge.net eighthave at users.sourceforge.net
Tue Jan 6 19:08:41 CET 2009


Revision: 10476
          http://pure-data.svn.sourceforge.net/pure-data/?rev=10476&view=rev
Author:   eighthave
Date:     2009-01-06 18:08:40 +0000 (Tue, 06 Jan 2009)

Log Message:
-----------
now 'pd-gui' can handle commands from 'pd' that have \n in them.  this technique has promise for handling other errors as well, since the  Tcl catch is already there

Modified Paths:
--------------
    branches/pd-devel/0.41.4/src/pd.tk
    branches/pd-devel/0.41.4/src/pd_connect.tcl

Modified: branches/pd-devel/0.41.4/src/pd.tk
===================================================================
--- branches/pd-devel/0.41.4/src/pd.tk	2009-01-06 05:05:36 UTC (rev 10475)
+++ branches/pd-devel/0.41.4/src/pd.tk	2009-01-06 18:08:40 UTC (rev 10476)
@@ -17,6 +17,7 @@
 package require pd_menus
 package require pd_bindings
 
+# import 'pd' into the global namespace for backwards compatibility
 namespace import ::pd_connect::pd
 
 # ------------------------------------------------------------------------------

Modified: branches/pd-devel/0.41.4/src/pd_connect.tcl
===================================================================
--- branches/pd-devel/0.41.4/src/pd_connect.tcl	2009-01-06 05:05:36 UTC (rev 10475)
+++ branches/pd-devel/0.41.4/src/pd_connect.tcl	2009-01-06 18:08:40 UTC (rev 10476)
@@ -10,15 +10,15 @@
 
 proc ::pd_connect::connect_to_pd {portnumber} {
 	variable pd_socket
-	puts stderr "Connecting to 127.0.0.1 $portnumber ..."
-	if {[catch {set pd_socket [socket 127.0.0.1 $portnumber]}]} {
+	puts stderr "Connecting to localhost $portnumber ..."
+	if {[catch {set pd_socket [socket localhost $portnumber]}]} {
 		puts stderr "WARNING: connect to pd failed, retrying port $portnumber."
 		after 1000 ::pd_connect::connect_to_pd $portnumber
 		return
 	}
 	puts stderr "Connected to pd on port $portnumber"
 	fconfigure $pd_socket -blocking 1 -buffering line 
-	fileevent $pd_socket readable [list pd_readsocket $::pd_connect::pd_socket]
+	fileevent $pd_socket readable [list ::pd_connect::pd_readsocket ""]
 }
 
 # send a message from Tcl to Pd
@@ -30,9 +30,21 @@
 
 # figure out which namespace the eval is using... this probably needs to be
 # global so that eval runs in the global namespace
-proc pd_readsocket {pd_socket} {
-	set cmd_from_pd [gets $pd_socket]
-	puts stderr "cmd_from_pd $cmd_from_pd"
-	eval $cmd_from_pd
-#	eval [gets $pd_socket]
+proc ::pd_connect::pd_readsocket {cmd_from_pd} {
+	variable pd_socket
+	if {$cmd_from_pd == ""} {puts stderr "called with blank args aka READABLE"}
+	append cmd_from_pd [gets $pd_socket]
+	puts stderr "cmd_from_pd: $cmd_from_pd"
+	if {[catch {uplevel #0 $cmd_from_pd}]} {
+		global errorInfo
+		puts stderr "errorInfo <<$errorInfo>>"
+		if {[regexp -line -- "^missing close-brace.*" $errorInfo]} {
+			# TODO consider using [info complete $cmd_from_pd] in a loop
+			puts stderr "appending another line"
+			pd_readsocket $cmd_from_pd
+		} else {
+			#puts stderr "DIFFERENT ERROR on eval: $errorInfo"
+			puts stderr "DIFFERENT ERROR on eval"
+		}
+	}
 }


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




More information about the Pd-cvs mailing list