Tk Library Source Code

Artifact [5627d5f8be]
Login

Artifact 5627d5f8be9e399db4b4feff2a39ee5699a336b7:

Attachment "480227.diff" to ticket [480227ffff] added by andreas_kupries 2001-11-17 04:43:47.
? modules/fileinput
? modules/comm/comm.n.OLD
? modules/ftp/example
? modules/ftpd/examples
Index: ChangeLog
===================================================================
RCS file: /cvsroot/tcllib/tcllib/ChangeLog,v
retrieving revision 1.82
diff -u -r1.82 ChangeLog
--- ChangeLog	2001/11/16 21:12:37	1.82
+++ ChangeLog	2001/11/16 21:42:38
@@ -2,6 +2,8 @@
 
 	* csv: Applied patch #482570.
 
+	* comm: Fixed bug #480227.
+
 2001-11-12  Andreas Kupries  <[email protected]>
 
 	* irc: New module. Internet protocol handling. Internet Relay Chat
Index: modules/comm/ChangeLog
===================================================================
RCS file: /cvsroot/tcllib/tcllib/modules/comm/ChangeLog,v
retrieving revision 1.1
diff -u -r1.1 ChangeLog
--- modules/comm/ChangeLog	2001/08/22 20:20:57	1.1
+++ modules/comm/ChangeLog	2001/11/16 21:42:38
@@ -1,3 +1,11 @@
+2001-11-16  Andreas Kupries <[email protected]>
+
+	* comm.n: Updated to reflect the changes in the comm code
+	  (namespaces). This fixes SF item #480227.
+
+	* comm.tcl: Fixed two places where namespacing was not handled
+	  correctly.
+
 2001-08-22  Andreas Kupries <[email protected]>
 
 	* Integrated into tcllib.
Index: modules/comm/comm.n
===================================================================
RCS file: /cvsroot/tcllib/tcllib/modules/comm/comm.n,v
retrieving revision 1.2
diff -u -r1.2 comm.n
--- modules/comm/comm.n	2001/11/09 22:44:59	1.2
+++ modules/comm/comm.n	2001/11/16 21:42:38
@@ -16,7 +16,7 @@
 \fIchan \fBhook \fIevent\fR ?\fB+\fR??\fIscript\fR?
 \fIchan \fIoption\fP ?\fI arg arg ...\fR?
 .fi
-The package initializes \fBcomm\fR as the default \fIchan\fR.
+The package initializes \fB::comm::comm\fR as the default \fIchan\fR.
 .SH "INTRODUCTION"
 .PP
 The
@@ -38,9 +38,10 @@
 and
 .BR "winfo interps" :
 .CS
-\fBcomm send \fR?\fI-async\fR? \fIid cmd \fR?\fIarg arg ...\fR?
-\fBcomm interps\fP
+ \fB::comm::comm send \fR?\fI-async\fR? \fIid cmd \fR?\fIarg arg ...\fR?
+ \fB::comm::comm interps\fP
 .CE
+.PP
 This is all that is really needed to know in order to use
 .BR comm .
 '\"
@@ -61,7 +62,7 @@
 .IR id 's
 of all the interpreters on the system.
 .TP
-\fBcomm send \fR?\fI-async\fR? \fIid cmd \fR?\fIarg arg ...\fR? 
+\fB::comm::comm send \fR?\fI-async\fR? \fIid cmd \fR?\fIarg arg ...\fR? 
 This invokes the given command in the interpreter named by
 .IR id .
 The command waits for the result and remote errors are returned
@@ -69,12 +70,12 @@
 .B -async
 option is given.
 .TP
-\fBcomm self\fP
+\fB::comm::comm self\fP
 Returns the
 .I id
 for this channel.
 .TP
-\fBcomm interps\fP
+\fB::comm::comm interps\fP
 Returns a list of all the remote
 .IR id 's
 to which this channel is connected.
@@ -85,12 +86,12 @@
 or when a remote
 .I id
 first issues a command to this comm channel.
-\fBcomm ids\fP
+\fB::comm::comm ids\fP
 is an alias for this method.
 .TP
-\fBcomm connect \fR?\fIid\fR?
+\fB::comm::comm connect \fR?\fIid\fR?
 Whereas
-.B "comm send"
+.B "::comm::comm send"
 will automatically connect to the given
 .IR id ,
 this forces a connection to a remote
@@ -99,7 +100,7 @@
 After this, the remote
 .I id
 will appear in
-.BR "comm interps" .
+.BR "::comm::comm interps" .
 .LP
 These four methods make up the basic
 .B comm
@@ -110,7 +111,7 @@
 .SH "EVAL SEMANTICS"
 .PP
 The evaluation semantics of
-.B "comm send"
+.B "::comm::comm send"
 are intended to match Tk's
 .B send
 .IR exactly .
@@ -119,7 +120,7 @@
 evaluates arguments on the remote side.
 .LP
 If you find that
-.B "comm send"
+.B "::comm::comm send"
 doesn't work for a particular command,
 try the same thing with Tk's send and see if the result is different.
 If there is a problem, please report it.
@@ -128,10 +129,10 @@
 .B send
 command also produces the same error.
 .CS
-% \fBcomm send \fIid\fP llength {a b c}
-\fBwrong # args: should be "llength list"\fR
-% \fBsend \fIname\fP llength {a b c}
-\fBwrong # args: should be "llength list"\fR
+ % \fB::comm::comm send \fIid\fP llength {a b c}
+ \fBwrong # args: should be "llength list"\fR
+ % \fBsend \fIname\fP llength {a b c}
+ \fBwrong # args: should be "llength list"\fR
 .CE
 .LP
 The
@@ -154,27 +155,30 @@
 .B hook
 scripts are specific to the channel they are defined against. 
 .TP
-\fBcomm new \fIchan\fR ?\fIname value ...\fR?
+\fB::comm::comm new \fIchan\fR ?\fIname value ...\fR?
 This creates a new channel and Tcl command with the given channel name.
 This new command controls the new channel and takes all the same
 arguments as
-.BR comm .
+.BR ::comm::comm .
 Any remaining arguments are passed to the
 .B config
 method.
 .TP
-\fBcomm channels\fR
+\fB::comm::comm channels\fR
 This lists all the channels allocated in this Tcl interpreter.
 .LP
 The default configuration parameters for a new channel are:
+.PP
 .CS
 .B "-port 0 -local 1 -listen 0"
 .CE
+.PP
 The default channel
-.B comm
+.B ::comm::comm
 is created with:
+.PP
 .CS
-.B "comm new comm -port 0 -local 1 -listen 1"
+.B "::comm::comm new ::comm::comm -port 0 -local 1 -listen 1"
 .CE
 '\"
 '\"
@@ -187,11 +191,11 @@
 .B fconfigure
 in that it sets or queries configuration variables associated with a channel.
 .RS
-\fBcomm config
+\fB::comm::comm config
 .br
-\fBcomm config \fIname\fR
+\fB::comm::comm config \fIname\fR
 .br
-\fBcomm config ?\fIname value ...\fR?
+\fB::comm::comm config ?\fIname value ...\fR?
 .RE
 When given no arguments,
 .B config
@@ -225,7 +229,7 @@
 .I id
 will change when this happens.
 Recycling the socket is done by invoking
-.BR "comm abort" ,
+.BR "::comm::comm abort" ,
 which causes all active sends to terminate.
 '\"
 '\"
@@ -291,30 +295,30 @@
 .PP
 These methods give control over closing connections:
 .TP
-\fBcomm shutdown \fIid\fR 
+\fB::comm::comm shutdown \fIid\fR 
 This closes the connection to
 .IR id ,
 aborting all outstanding commands in progress.  Note that nothing
 prevents the connection from being immediately reopened by another
 incoming or outgoing command.
 .TP
-\fBcomm abort\fR
+\fB::comm::comm abort\fR
 This invokes shutdown on all open connections in this comm channel.
 .TP
-\fBcomm destroy\fR
+\fB::comm::comm destroy\fR
 This aborts all connections and then destroys the this comm channel itself,
 including closing the listening socket.
 Special code allows the default
-.B comm
+.B ::comm::comm
 channel to be closed
 such that the
-.B comm
+.B ::comm::comm
 command it is not destroyed.
 Doing so closes the listening socket, preventing both
 incoming and outgoing commands on the channel.
 This sequence reinitializes the default channel:
 .CS
-.B "comm destroy; comm new comm"
+.B "::comm::comm destroy; ::comm::comm new ::comm::comm"
 .CE
 .PP
 When a remote connection is lost (because the remote exited or called
@@ -333,7 +337,7 @@
 .PP
 This is a mechanism for setting hooks for particular events:
 .CS
-\fBcomm hook \fIevent\fR ?\fB+\fR??\fIscript\fR? 
+ \fB::comm::comm hook \fIevent\fR ?\fB+\fR??\fIscript\fR? 
 .CE
 .LP
 This uses a syntax similar to Tk's
@@ -386,16 +390,15 @@
 Example:
 .sp
 .CS
-% comm hook connecting {
-    if [string match {*[02468]} $id] {
-        error "Can't connect to even ids" 
-    }
-}
-% comm send 10000 puts ok
-Connect to remote failed: Can't connect to even ids
-% 
+ % ::comm::comm hook connecting {
+     if [string match {*[02468]} $id] {
+         error "Can't connect to even ids" 
+     }
+ }
+ % ::comm::comm send 10000 puts ok
+ Connect to remote failed: Can't connect to even ids
+ % 
 .CE
-
 .\"
 .TP
 .B connected
@@ -437,13 +440,12 @@
 is still unknown.  Example:
 .sp
 .CS
-comm hook incoming {
-    if [string match 127.0.0.1 $addr] {
-        error "I don't talk to myself"
-    }
-}
+ ::comm::comm hook incoming {
+     if [string match 127.0.0.1 $addr] {
+         error "I don't talk to myself"
+     }
+ }
 .CE
-
 .\"
 .TP
 \fBeval\fP
@@ -495,56 +497,67 @@
 Examples:
 .RS
 1. augmenting a command
+.PP
 .CS
-% comm send [comm self] pid
-5013
-% comm hook eval {puts "going to execute $buffer"}
-% comm send [comm self] pid
-going to execute pid
-5013
+ % ::comm::comm send [::comm::comm self] pid
+ 5013
+ % ::comm::comm hook eval {puts "going to execute $buffer"}
+ % ::comm::comm send [::comm::comm self] pid
+ going to execute pid
+ 5013
 .CE
+.PP
 2. short circuting a command
+.PP
 .CS
-% comm hook eval {puts "would have executed $buffer"; return 0}
-% comm send [comm self] pid
-would have executed pid
-0
+ % ::comm::comm hook eval {puts "would have executed $buffer"; return 0}
+ % ::comm::comm send [::comm::comm self] pid
+ would have executed pid
+ 0
 .CE
+.PP
 3. Replacing double eval semantics
+.PP
 .CS
-% comm send [comm self] llength {a b c}
-wrong # args: should be "llength list"
-% comm hook eval {return [uplevel #0 $buffer]}
-return [uplevel #0 $buffer]
-% comm send [comm self] llength {a b c}
-3
+ % ::comm::comm send [::comm::comm self] llength {a b c}
+ wrong # args: should be "llength list"
+ % ::comm::comm hook eval {return [uplevel #0 $buffer]}
+ return [uplevel #0 $buffer]
+ % ::comm::comm send [::comm::comm self] llength {a b c}
+ 3
 .CE
+.PP
 4. Using a slave interpreter
+.PP
 .CS
-% interp create foo
-% comm hook eval {return [foo eval $buffer]}
-% comm send [comm self] set myvar 123
-123
-% set myvar
-can't read "myvar": no such variable
-% foo eval set myvar
-123
+ % interp create foo
+ % ::comm::comm hook eval {return [foo eval $buffer]}
+ % ::comm::comm send [::comm::comm self] set myvar 123
+ 123
+ % set myvar
+ can't read "myvar": no such variable
+ % foo eval set myvar
+ 123
 .CE
+.PP
 5. Using a slave interpreter (double eval)
+.PP
 .CS
-% comm hook eval {return [eval foo eval $buffer]}
+ % ::comm::comm hook eval {return [eval foo eval $buffer]}
 .CE
+.PP
 6. Subverting the script to execute
+.PP
 .CS
-% comm hook eval {
-    switch -- $buffer {
-        a {return A-OK} b {return B-OK} default {error "$buffer is a no-no"}
-    }
-}
-% comm send [comm self] pid
-pid is a no-no
-% comm send [comm self] a
-A-OK
+ % ::comm::comm hook eval {
+     switch -- $buffer {
+         a {return A-OK} b {return B-OK} default {error "$buffer is a no-no"}
+     }
+ }
+ % ::comm::comm send [::comm::comm self] pid
+ pid is a no-no
+ % ::comm::comm send [::comm::comm self] a
+ A-OK
 .CE
 .RE
 
@@ -564,10 +577,11 @@
 is in one of the following forms
 .RS
 .CS
-return \fIresult\fP
-return -code \fIcode\fP \fIresult\fP
-return -code \fIcode\fP -errorinfo \fIinfo\fP -errorcode \fIecode\fP \fImsg\fP
+ return \fIresult\fP
+ return -code \fIcode\fP \fIresult\fP
+ return -code \fIcode\fP -errorinfo \fIinfo\fP -errorcode \fIecode\fP \fImsg\fP
 .CE
+.PP
 For safety reasons, this is decomposed.  The return result
 is in 
 .IR ret ,
@@ -577,6 +591,7 @@
 .I return(-errorinfo)
 .I return(-errordcode)
 .CE
+.PP
 Any of these may be the empty string.
 Modifying
 these four variables can change the return value, whereas
@@ -599,19 +614,19 @@
 Example:
 .sp
 .CS
-comm hook lost {
-    global myvar
-    if {$myvar(id) == $id} {
-        myfunc
-        return
-    }
-}
+ ::comm::comm hook lost {
+     global myvar
+     if {$myvar(id) == $id} {
+         myfunc
+         return
+     }
+ }
 .CE
 .SH UNSUPPORTED
 .PP
 These interfaces may change or go away in subsequence releases.
 .TP
-\fBcomm remoteid\fR 
+\fB::comm::comm remoteid\fR 
 Returns the
 .I id
 of the sender of the last remote command executed on this channel.
@@ -619,23 +634,23 @@
 must be called before any events are processed.
 Otherwise, another command may get invoked and change the value.
 .TP
-.B "comm_send"
+.B "::comm::comm_send"
 Invoking this procedure will substitute the Tk
 .B send
 and
 .B "winfo interps"
 commands with these equivalents that use
-.BR comm .
+.BR ::comm::comm .
 .sp
 .CS
-proc send {args} {
-    eval comm send $args
-}
-rename winfo tk_winfo
-proc winfo {cmd args} {
-    if ![string match in* $cmd] {return [eval [list tk_winfo $cmd] $args]}
-    return [comm interps]
-}
+ proc send {args} {
+     eval ::comm::comm send $args
+ }
+ rename winfo tk_winfo
+ proc winfo {cmd args} {
+     if ![string match in* $cmd] {return [eval [list tk_winfo $cmd] $args]}
+     return [::comm::comm interps]
+ }
 .CE
 '\"
 '\"
@@ -662,7 +677,7 @@
 uses the
 .B vwait
 command as a semaphore to indicate the return message has arrived.
-The difference is that a synchornous
+The difference is that a synchronous
 .B send
 will block the application and prevent all events
 (including window related ones) from being processed,
@@ -681,7 +696,7 @@
 At the cost of multiple channel support,
 .B comm
 could be changed to do blocking I/O on the socket,
-givng send-like blocking semantics.
+giving send-like blocking semantics.
 However, multiple channel support is a very useful feature of comm
 that it is deemed too important to lose.
 The remaining approaches involve a new loadable module written in C
@@ -715,15 +730,20 @@
 To load
 .B comm
 this command is usually used:
+.PP
 .CS
-\fBpackage require Comm 3\fR
+ \fBpackage require comm 3\fR
 .CE
+.PP
 Note that requiring no version (or a specific version) can also be done.
 .LP
 The revision history of
 .B comm
 includes these releases:
 
+.IP "3.7" 5
+Moved into tcllib and placed in a proper namespace.
+
 .IP "3.6" 5
 A bug in the looking up of the remoteid for a executed command
 could be triggered when the connection was closed while several
@@ -769,10 +789,11 @@
 .BR send :
 .RS
 .CS
-comm send \fIid\fP break
-catch {comm send \fIid\fP break}
-comm send \fIid\fP expr 1 / 0
+ comm send \fIid\fP break
+ catch {comm send \fIid\fP break}
+ comm send \fIid\fP expr 1 / 0
 .CE
+.PP
 Added a new hook for reply messages.
 Reworked method invocation to avoid the use of comm:* procedures;
 this also cut the invocation time down by 40%.
@@ -885,7 +906,7 @@
 .SH BUGS
 .IP \(bu
 If there is a failure initializing a channel created with
-.BR "comm new" ,
+.BR "::comm::comm new" ,
 then the channel should be destroyed.
 Currently, it is left in an inconsistent state.
 .IP \(bu
@@ -925,6 +946,7 @@
 .CS
 .B "comm send $other exit"
 .CE
+.PP
 Always make sure the channel is quiescent before closing/exiting or
 use at least Tcl7.6 under Windows.
 .LP
@@ -946,11 +968,11 @@
 interface using standard Tcl sockets, much like
 .BR comm .
 .PP
-Andreas Kupries <[email protected]> uses
+Andreas Kupries <[email protected]> uses
 .B comm
 and has built a simple nameserver as part of his Pool library.
 See
-.IR http://www.westend.com/~kupries/doc/pool/index.htm .
+.IR http://www.purl.org/net/akupries/soft/pool/index.htm .
 '\"
 '\"
 '\"
Index: modules/comm/comm.tcl
===================================================================
RCS file: /cvsroot/tcllib/tcllib/modules/comm/comm.tcl,v
retrieving revision 1.1
diff -u -r1.1 comm.tcl
--- modules/comm/comm.tcl	2001/08/22 20:20:57	1.1
+++ modules/comm/comm.tcl	2001/11/16 21:42:39
@@ -128,7 +128,7 @@
 proc ::comm::comm_send {} {
     proc send {args} {
 	# Use pure lists to speed this up.
-	eval [linsert $args 0 comm send]
+	eval [linsert $args 0 ::comm::comm send]
 	#eval comm send $args
     }
     rename winfo tk_winfo
@@ -138,7 +138,7 @@
 	    return [eval [linsert $args 0 tk_winfo $cmd]]
 	    #return [eval [list tk_winfo $cmd] $args]
 	}
-	return [comm interps]
+	return [::comm::comm interps]
     }
     proc ::comm::comm_send {} {}
 }