Hex Artifact Content
Not logged in

Artifact 0e3ccd671e1f4c4a2f6878487f72b9aaea565a45:


0000: 23 20 41 64 61 70 74 65 64 20 66 72 6f 6d 0a 23  # Adapted from.#
0010: 20 20 20 20 68 74 74 70 73 3a 2f 2f 77 69 6b 69      https://wiki
0020: 2e 74 63 6c 2d 6c 61 6e 67 2e 6f 72 67 2f 70 61  .tcl-lang.org/pa
0030: 67 65 2f 54 6b 63 6f 6e 2b 52 65 6d 6f 74 65 2b  ge/Tkcon+Remote+
0040: 41 63 63 65 73 73 2b 6f 76 65 72 2b 54 43 50 2b  Access+over+TCP+
0050: 53 6f 63 6b 65 74 73 0a 23 0a 23 20 55 73 65 66  Sockets.#.# Usef
0060: 75 6c 20 6f 6e 20 41 6e 64 72 6f 69 64 20 69 6e  ul on Android in
0070: 20 7e 2f 2e 77 69 73 68 72 63 20 66 6f 72 20 72   ~/.wishrc for r
0080: 65 6d 6f 74 65 20 63 6f 6e 74 72 6f 6c 0a 23 0a  emote control.#.
0090: 23 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71  #    package req
00a0: 75 69 72 65 20 74 6b 63 6f 6e 63 6c 69 65 6e 74  uire tkconclient
00b0: 0a 23 20 20 20 20 74 6b 63 6f 6e 63 6c 69 65 6e  .#    tkconclien
00c0: 74 3a 3a 73 74 61 72 74 20 31 32 33 34 35 0a 23  t::start 12345.#
00d0: 0a 23 20 77 68 65 6e 20 55 53 42 20 64 65 62 75  .# when USB debu
00e0: 67 67 69 6e 67 20 69 73 20 6f 6e 2c 20 66 6f 72  gging is on, for
00f0: 77 61 72 64 20 70 6f 72 74 20 31 32 33 34 35 20  ward port 12345 
0100: 6f 66 20 74 68 65 20 64 65 76 69 63 65 0a 23 20  of the device.# 
0110: 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69  with the followi
0120: 6e 67 20 61 64 62 20 63 6f 6d 6d 61 6e 64 20 6f  ng adb command o
0130: 6e 20 74 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e  n the developmen
0140: 74 20 73 79 73 74 65 6d 0a 23 0a 23 20 20 20 20  t system.#.#    
0150: 61 64 62 20 66 6f 72 77 61 72 64 20 74 63 70 3a  adb forward tcp:
0160: 31 32 33 34 35 20 74 63 70 3a 31 32 33 34 35 0a  12345 tcp:12345.
0170: 23 0a 23 20 74 68 65 6e 20 75 73 65 20 74 6b 63  #.# then use tkc
0180: 6f 6e 27 73 20 61 74 74 61 63 68 20 74 6f 20 73  on's attach to s
0190: 6f 63 6b 65 74 20 66 75 6e 63 74 69 6f 6e 20 77  ocket function w
01a0: 69 74 68 20 6c 6f 63 61 6c 68 6f 73 74 20 31 32  ith localhost 12
01b0: 33 34 35 0a 23 20 6f 72 20 61 6c 74 65 72 6e 61  345.# or alterna
01c0: 74 69 76 65 6c 79 20 75 73 65 20 22 6e 65 74 63  tively use "netc
01d0: 61 74 20 6c 6f 63 61 6c 68 6f 73 74 20 31 32 33  at localhost 123
01e0: 34 35 22 2c 0a 23 20 6f 72 20 61 6c 74 65 72 6e  45",.# or altern
01f0: 61 74 69 76 65 6c 79 20 75 73 65 20 22 73 6f 63  atively use "soc
0200: 61 74 20 54 43 50 3a 6c 6f 63 61 6c 68 6f 73 74  at TCP:localhost
0210: 3a 31 32 33 34 35 20 53 54 44 49 4f 22 2c 0a 23  :12345 STDIO",.#
0220: 20 6f 72 20 75 73 65 20 22 74 65 6c 6e 65 74 20   or use "telnet 
0230: 6c 6f 63 61 6c 68 6f 73 74 20 31 32 33 34 35 22  localhost 12345"
0240: 2e 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61  ...namespace eva
0250: 6c 20 74 6b 63 6f 6e 63 6c 69 65 6e 74 20 7b 0a  l tkconclient {.
0260: 20 20 20 20 76 61 72 69 61 62 6c 65 20 73 63 72      variable scr
0270: 69 70 74 20 22 22 0a 20 20 20 20 76 61 72 69 61  ipt "".    varia
0280: 62 6c 65 20 73 65 72 76 65 72 20 22 22 0a 20 20  ble server "".  
0290: 20 20 76 61 72 69 61 62 6c 65 20 73 6f 63 6b 65    variable socke
02a0: 74 20 22 22 0a 20 20 20 20 6e 61 6d 65 73 70 61  t "".    namespa
02b0: 63 65 20 65 78 70 6f 72 74 20 73 74 61 72 74 20  ce export start 
02c0: 73 74 6f 70 0a 20 20 20 20 70 72 6f 63 20 73 74  stop.    proc st
02d0: 61 72 74 20 7b 70 6f 72 74 20 7b 6d 79 61 64 64  art {port {myadd
02e0: 72 20 7b 7d 7d 7d 20 7b 0a 20 20 20 20 20 20 20  r {}}} {.       
02f0: 20 76 61 72 69 61 62 6c 65 20 73 6f 63 6b 65 74   variable socket
0300: 0a 20 20 20 20 20 20 20 20 76 61 72 69 61 62 6c  .        variabl
0310: 65 20 73 65 72 76 65 72 0a 20 20 20 20 20 20 20  e server.       
0320: 20 69 66 20 7b 24 73 6f 63 6b 65 74 20 6e 65 20   if {$socket ne 
0330: 22 22 20 7c 7c 20 24 73 65 72 76 65 72 20 6e 65  "" || $server ne
0340: 20 22 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 20   ""} {.         
0350: 20 20 20 73 74 6f 70 0a 20 20 20 20 20 20 20 20     stop.        
0360: 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 6d  }.        if {$m
0370: 79 61 64 64 72 20 65 71 20 22 22 7d 20 7b 0a 20  yaddr eq ""} {. 
0380: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73             set s
0390: 65 72 76 65 72 20 5b 73 6f 63 6b 65 74 20 2d 73  erver [socket -s
03a0: 65 72 76 65 72 20 5b 6e 61 6d 65 73 70 61 63 65  erver [namespace
03b0: 20 63 75 72 72 65 6e 74 5d 3a 3a 61 63 63 65 70   current]::accep
03c0: 74 20 24 70 6f 72 74 5d 0a 20 20 20 20 20 20 20  t $port].       
03d0: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
03e0: 20 20 20 20 20 20 73 65 74 20 73 65 72 76 65 72        set server
03f0: 20 5b 73 6f 63 6b 65 74 20 2d 73 65 72 76 65 72   [socket -server
0400: 20 5b 6e 61 6d 65 73 70 61 63 65 20 63 75 72 72   [namespace curr
0410: 65 6e 74 5d 3a 3a 61 63 63 65 70 74 20 5c 0a 20  ent]::accept \. 
0420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0430: 20 20 20 20 20 20 20 20 20 20 20 2d 6d 79 61 64             -myad
0440: 64 72 20 24 6d 79 61 64 64 72 20 24 70 6f 72 74  dr $myaddr $port
0450: 5d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ].        }.    
0460: 7d 0a 20 20 20 20 70 72 6f 63 20 73 74 6f 70 20  }.    proc stop 
0470: 7b 7d 20 7b 0a 20 20 20 20 20 20 20 20 76 61 72  {} {.        var
0480: 69 61 62 6c 65 20 73 65 72 76 65 72 0a 20 20 20  iable server.   
0490: 20 20 20 20 20 69 66 20 7b 24 73 65 72 76 65 72       if {$server
04a0: 20 6e 65 20 22 22 7d 20 7b 0a 20 20 20 20 20 20   ne ""} {.      
04b0: 20 20 20 20 20 20 63 6c 6f 73 65 73 6f 63 6b 65        closesocke
04c0: 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6c  t.            cl
04d0: 6f 73 65 20 24 73 65 72 76 65 72 0a 20 20 20 20  ose $server.    
04e0: 20 20 20 20 20 20 20 20 73 65 74 20 73 65 72 76          set serv
04f0: 65 72 20 22 22 0a 20 20 20 20 20 20 20 20 7d 0a  er "".        }.
0500: 20 20 20 20 7d 0a 20 20 20 20 70 72 6f 63 20 63      }.    proc c
0510: 6c 6f 73 65 73 6f 63 6b 65 74 20 7b 7d 20 7b 0a  losesocket {} {.
0520: 20 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65          variable
0530: 20 73 6f 63 6b 65 74 0a 20 20 20 20 20 20 20 20   socket.        
0540: 69 66 20 7b 24 73 6f 63 6b 65 74 20 65 71 20 22  if {$socket eq "
0550: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  "} {.           
0560: 20 72 65 74 75 72 6e 0a 20 20 20 20 20 20 20 20   return.        
0570: 7d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  }.        catch 
0580: 7b 63 6c 6f 73 65 20 24 73 6f 63 6b 65 74 7d 0a  {close $socket}.
0590: 20 20 20 20 20 20 20 20 73 65 74 20 73 6f 63 6b          set sock
05a0: 65 74 20 22 22 0a 20 20 20 20 20 20 20 20 23 20  et "".        # 
05b0: 52 65 73 74 6f 72 65 20 70 75 74 73 20 63 6f 6d  Restore puts com
05c0: 6d 61 6e 64 0a 20 20 20 20 20 20 20 20 72 65 6e  mand.        ren
05d0: 61 6d 65 20 3a 3a 70 75 74 73 20 22 22 0a 20 20  ame ::puts "".  
05e0: 20 20 20 20 20 20 72 65 6e 61 6d 65 20 5b 6e 61        rename [na
05f0: 6d 65 73 70 61 63 65 20 63 75 72 72 65 6e 74 5d  mespace current]
0600: 3a 3a 70 75 74 73 20 3a 3a 70 75 74 73 0a 20 20  ::puts ::puts.  
0610: 20 20 7d 0a 20 20 20 20 70 72 6f 63 20 61 63 63    }.    proc acc
0620: 65 70 74 20 7b 73 6f 63 6b 20 68 6f 73 74 20 70  ept {sock host p
0630: 6f 72 74 7d 20 7b 0a 20 20 20 20 20 20 20 20 76  ort} {.        v
0640: 61 72 69 61 62 6c 65 20 73 6f 63 6b 65 74 0a 20  ariable socket. 
0650: 20 20 20 20 20 20 20 66 63 6f 6e 66 69 67 75 72         fconfigur
0660: 65 20 24 73 6f 63 6b 20 2d 62 6c 6f 63 6b 69 6e  e $sock -blockin
0670: 67 20 30 20 2d 62 75 66 66 65 72 69 6e 67 20 6e  g 0 -buffering n
0680: 6f 6e 65 0a 20 20 20 20 20 20 20 20 69 66 20 7b  one.        if {
0690: 24 73 6f 63 6b 65 74 20 6e 65 20 22 22 7d 20 7b  $socket ne ""} {
06a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 74  .            put
06b0: 73 20 24 73 6f 63 6b 20 22 4f 6e 6c 79 20 6f 6e  s $sock "Only on
06c0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20  e connection at 
06d0: 61 20 74 69 6d 65 2c 20 70 6c 65 61 73 65 21 22  a time, please!"
06e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6c 6f  .            clo
06f0: 73 65 20 24 73 6f 63 6b 0a 20 20 20 20 20 20 20  se $sock.       
0700: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
0710: 20 20 20 20 20 20 73 65 74 20 73 6f 63 6b 65 74        set socket
0720: 20 24 73 6f 63 6b 0a 20 20 20 20 20 20 20 20 20   $sock.         
0730: 20 20 20 66 69 6c 65 65 76 65 6e 74 20 24 73 6f     fileevent $so
0740: 63 6b 20 72 65 61 64 61 62 6c 65 20 5b 6e 61 6d  ck readable [nam
0750: 65 73 70 61 63 65 20 63 75 72 72 65 6e 74 5d 3a  espace current]:
0760: 3a 68 61 6e 64 6c 65 0a 20 20 20 20 20 20 20 20  :handle.        
0770: 20 20 20 20 23 20 52 65 64 69 72 65 63 74 20 70      # Redirect p
0780: 75 74 73 20 63 6f 6d 6d 61 6e 64 0a 20 20 20 20  uts command.    
0790: 20 20 20 20 20 20 20 20 72 65 6e 61 6d 65 20 3a          rename :
07a0: 3a 70 75 74 73 20 5b 6e 61 6d 65 73 70 61 63 65  :puts [namespace
07b0: 20 63 75 72 72 65 6e 74 5d 3a 3a 70 75 74 73 0a   current]::puts.
07c0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 65              inte
07d0: 72 70 20 61 6c 69 61 73 20 7b 7d 20 3a 3a 70 75  rp alias {} ::pu
07e0: 74 73 20 7b 7d 20 5b 6e 61 6d 65 73 70 61 63 65  ts {} [namespace
07f0: 20 63 75 72 72 65 6e 74 5d 3a 3a 5f 70 75 74 73   current]::_puts
0800: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  .        }.    }
0810: 0a 20 20 20 20 70 72 6f 63 20 68 61 6e 64 6c 65  .    proc handle
0820: 20 7b 7d 20 7b 0a 20 20 20 20 20 20 20 20 76 61   {} {.        va
0830: 72 69 61 62 6c 65 20 73 63 72 69 70 74 0a 20 20  riable script.  
0840: 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 73        variable s
0850: 6f 63 6b 65 74 0a 20 20 20 20 20 20 20 20 69 66  ocket.        if
0860: 20 7b 5b 65 6f 66 20 24 73 6f 63 6b 65 74 5d 7d   {[eof $socket]}
0870: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63   {.            c
0880: 6c 6f 73 65 73 6f 63 6b 65 74 0a 20 20 20 20 20  losesocket.     
0890: 20 20 20 20 20 20 20 72 65 74 75 72 6e 0a 20 20         return.  
08a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
08b0: 69 66 20 7b 21 5b 63 61 74 63 68 20 7b 72 65 61  if {![catch {rea
08c0: 64 20 24 73 6f 63 6b 65 74 7d 20 63 68 75 6e 6b  d $socket} chunk
08d0: 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ]} {.           
08e0: 20 69 66 20 7b 24 63 68 75 6e 6b 20 65 71 20 22   if {$chunk eq "
08f0: 62 79 65 5c 6e 22 7d 20 7b 0a 20 20 20 20 20 20  bye\n"} {.      
0900: 20 20 20 20 20 20 20 20 20 20 70 75 74 73 20 24            puts $
0910: 73 6f 63 6b 65 74 20 22 42 79 65 21 22 0a 20 20  socket "Bye!".  
0920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6c                cl
0930: 6f 73 65 73 6f 63 6b 65 74 0a 20 20 20 20 20 20  osesocket.      
0940: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
0950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
0960: 20 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e             appen
0970: 64 20 73 63 72 69 70 74 20 24 63 68 75 6e 6b 0a  d script $chunk.
0980: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
0990: 5b 69 6e 66 6f 20 63 6f 6d 70 6c 65 74 65 20 24  [info complete $
09a0: 73 63 72 69 70 74 5d 7d 20 7b 0a 20 20 20 20 20  script]} {.     
09b0: 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
09c0: 20 7b 75 70 6c 65 76 65 6c 20 22 23 30 22 20 24   {uplevel "#0" $
09d0: 73 63 72 69 70 74 7d 20 72 65 73 75 6c 74 0a 20  script} result. 
09e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
09f0: 66 20 7b 24 72 65 73 75 6c 74 20 6e 65 20 22 22  f {$result ne ""
0a00: 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  } {.            
0a10: 20 20 20 20 20 20 20 20 70 75 74 73 20 24 73 6f          puts $so
0a20: 63 6b 65 74 20 24 72 65 73 75 6c 74 0a 20 20 20  cket $result.   
0a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
0a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
0a50: 65 74 20 73 63 72 69 70 74 20 22 22 0a 20 20 20  et script "".   
0a60: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
0a70: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
0a80: 20 20 20 20 20 20 20 20 63 6c 6f 73 65 73 6f 63          closesoc
0a90: 6b 65 74 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ket.        }.  
0aa0: 20 20 7d 0a 20 20 20 20 23 20 50 72 6f 63 65 64    }.    # Proced
0ab0: 75 72 65 20 70 61 72 74 69 61 6c 6c 79 20 62 6f  ure partially bo
0ac0: 72 72 6f 77 65 64 20 66 72 6f 6d 20 74 6b 63 6f  rrowed from tkco
0ad0: 6e 0a 20 20 20 20 70 72 6f 63 20 5f 70 75 74 73  n.    proc _puts
0ae0: 20 61 72 67 73 20 7b 0a 20 20 20 20 20 20 20 20   args {.        
0af0: 76 61 72 69 61 62 6c 65 20 73 6f 63 6b 65 74 0a  variable socket.
0b00: 20 20 20 20 20 20 20 20 73 65 74 20 6c 65 6e 20          set len 
0b10: 5b 6c 6c 65 6e 67 74 68 20 24 61 72 67 73 5d 0a  [llength $args].
0b20: 20 20 20 20 20 20 20 20 6c 61 73 73 69 67 6e 20          lassign 
0b30: 24 61 72 67 73 20 61 72 67 31 20 61 72 67 32 20  $args arg1 arg2 
0b40: 61 72 67 33 0a 20 20 20 20 20 20 20 20 73 77 69  arg3.        swi
0b50: 74 63 68 20 24 6c 65 6e 20 7b 0a 20 20 20 20 20  tch $len {.     
0b60: 20 20 20 20 20 20 20 31 20 7b 0a 20 20 20 20 20         1 {.     
0b70: 20 20 20 20 20 20 20 20 20 20 20 70 75 74 73 20             puts 
0b80: 24 73 6f 63 6b 65 74 20 24 61 72 67 31 0a 20 20  $socket $arg1.  
0b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
0ba0: 74 75 72 6e 0a 20 20 20 20 20 20 20 20 20 20 20  turn.           
0bb0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32   }.            2
0bc0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
0bd0: 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 61 72     switch -- $ar
0be0: 67 31 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  g1 {.           
0bf0: 20 20 20 20 20 20 20 20 20 2d 6e 6f 6e 65 77 6c           -nonewl
0c00: 69 6e 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ine {.          
0c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 75                pu
0c20: 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 73  ts -nonewline $s
0c30: 6f 63 6b 65 74 20 24 61 72 67 32 0a 20 20 20 20  ocket $arg2.    
0c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c50: 20 20 20 20 72 65 74 75 72 6e 0a 20 20 20 20 20      return.     
0c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
0c70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0c80: 20 20 20 20 20 73 74 64 6f 75 74 20 2d 20 73 74       stdout - st
0c90: 64 65 72 72 20 7b 0a 20 20 20 20 20 20 20 20 20  derr {.         
0ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
0cb0: 75 74 73 20 24 73 6f 63 6b 65 74 20 24 61 72 67  uts $socket $arg
0cc0: 32 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2.              
0cd0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
0ce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0cf0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
0d00: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
0d10: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
0d20: 20 20 20 33 20 7b 0a 20 20 20 20 20 20 20 20 20     3 {.         
0d30: 20 20 20 20 20 20 20 69 66 20 7b 24 61 72 67 31         if {$arg1
0d40: 20 65 71 20 22 2d 6e 6f 6e 65 77 6c 69 6e 65 22   eq "-nonewline"
0d50: 20 26 26 0a 20 20 20 20 20 20 20 20 20 20 20 20   &&.            
0d60: 20 20 20 20 20 20 20 20 28 24 61 72 67 32 20 65          ($arg2 e
0d70: 71 20 22 73 74 64 6f 75 74 22 20 7c 7c 20 24 61  q "stdout" || $a
0d80: 72 67 32 20 65 71 20 22 73 74 64 65 72 72 22 29  rg2 eq "stderr")
0d90: 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  } {.            
0da0: 20 20 20 20 20 20 20 20 70 75 74 73 20 2d 6e 6f          puts -no
0db0: 6e 65 77 6c 69 6e 65 20 24 73 6f 63 6b 65 74 20  newline $socket 
0dc0: 24 61 72 67 33 0a 20 20 20 20 20 20 20 20 20 20  $arg3.          
0dd0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
0de0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0df0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d   }.            }
0e00: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
0e10: 20 20 20 23 20 6e 6f 74 20 68 61 6e 64 6c 65 64     # not handled
0e20: 20 69 6e 20 73 77 69 74 63 68 20 61 62 6f 76 65   in switch above
0e30: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
0e40: 74 63 68 20 5b 6c 69 6e 73 65 72 74 20 24 61 72  tch [linsert $ar
0e50: 67 73 20 30 20 70 75 74 73 5d 20 6d 73 67 5d 7d  gs 0 puts] msg]}
0e60: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72   {.            r
0e70: 65 74 75 72 6e 20 2d 63 6f 64 65 20 65 72 72 6f  eturn -code erro
0e80: 72 20 24 6d 73 67 0a 20 20 20 20 20 20 20 20 7d  r $msg.        }
0e90: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
0ea0: 24 6d 73 67 0a 20 20 20 20 7d 0a 7d 0a 0a 70 61  $msg.    }.}..pa
0eb0: 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 74 6b  ckage provide tk
0ec0: 63 6f 6e 63 6c 69 65 6e 74 20 31 2e 30 0a 0a     conclient 1.0..