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..