Jim Tcl
Hex Artifact Content
Not logged in

Artifact 8754884a960adaab826f6856767610e9cd6c9871:


0000: 3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d 22 31  <?xml version="1
0010: 2e 30 22 20 65 6e 63 6f 64 69 6e 67 3d 22 55 54  .0" encoding="UT
0020: 46 2d 38 22 3f 3e 0a 3c 66 65 65 64 20 78 6d 6c  F-8"?>.<feed xml
0030: 6e 73 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77  ns="http://www.w
0040: 33 2e 6f 72 67 2f 32 30 30 35 2f 41 74 6f 6d 22  3.org/2005/Atom"
0050: 3e 0a 20 20 3c 69 64 3e 68 74 74 70 3a 2f 2f 6a  >.  <id>http://j
0060: 69 6d 2e 62 65 72 6c 69 6f 73 2e 64 65 2f 3c 2f  im.berlios.de/</
0070: 69 64 3e 0a 20 20 3c 74 69 74 6c 65 3e 4a 69 6d  id>.  <title>Jim
0080: 20 54 63 6c 20 4e 65 77 73 3c 2f 74 69 74 6c 65   Tcl News</title
0090: 3e 0a 20 20 3c 75 70 64 61 74 65 64 3e 32 30 31  >.  <updated>201
00a0: 32 2d 30 32 2d 30 39 54 31 34 3a 30 30 3a 30 30  2-02-09T14:00:00
00b0: 5a 3c 2f 75 70 64 61 74 65 64 3e 0a 20 20 3c 6c  Z</updated>.  <l
00c0: 69 6e 6b 20 72 65 6c 3d 22 61 6c 74 65 72 6e 61  ink rel="alterna
00d0: 74 65 22 20 68 72 65 66 3d 22 68 74 74 70 3a 2f  te" href="http:/
00e0: 2f 6a 69 6d 2e 62 65 72 6c 69 6f 73 2e 64 65 2f  /jim.berlios.de/
00f0: 22 2f 3e 0a 20 20 3c 6c 69 6e 6b 20 72 65 6c 3d  "/>.  <link rel=
0100: 22 73 65 6c 66 22 20 68 72 65 66 3d 22 68 74 74  "self" href="htt
0110: 70 3a 2f 2f 6a 69 6d 2e 62 65 72 6c 69 6f 73 2e  p://jim.berlios.
0120: 64 65 2f 66 65 65 64 2e 78 6d 6c 22 2f 3e 0a 20  de/feed.xml"/>. 
0130: 20 3c 61 75 74 68 6f 72 3e 0a 20 20 20 20 3c 6e   <author>.    <n
0140: 61 6d 65 3e 73 74 65 76 65 62 40 77 6f 72 6b 77  ame>steveb@workw
0150: 61 72 65 2e 6e 65 74 2e 61 75 3c 2f 6e 61 6d 65  are.net.au</name
0160: 3e 0a 20 20 20 20 3c 75 72 69 3e 6d 61 69 6c 74  >.    <uri>mailt
0170: 6f 3a 73 74 65 76 65 62 40 77 6f 72 6b 77 61 72  o:steveb@workwar
0180: 65 2e 6e 65 74 2e 61 75 3c 2f 75 72 69 3e 0a 20  e.net.au</uri>. 
0190: 20 3c 2f 61 75 74 68 6f 72 3e 0a 20 20 3c 65 6e   </author>.  <en
01a0: 74 72 79 3e 0a 20 20 20 20 3c 69 64 3e 74 61 67  try>.    <id>tag
01b0: 3a 6a 69 6d 2e 62 65 72 6c 69 6f 73 2e 64 65 2c  :jim.berlios.de,
01c0: 32 30 31 32 2d 30 32 2d 31 30 3a 2f 61 72 74 69  2012-02-10:/arti
01d0: 63 6c 65 73 2f 6e 6f 2d 6e 61 6d 65 73 70 61 63  cles/no-namespac
01e0: 65 73 2d 72 65 76 69 73 69 74 65 64 2f 3c 2f 69  es-revisited/</i
01f0: 64 3e 0a 20 20 20 20 3c 74 69 74 6c 65 20 74 79  d>.    <title ty
0200: 70 65 3d 22 68 74 6d 6c 22 3e 43 6f 70 69 6e 67  pe="html">Coping
0210: 20 77 69 74 68 6f 75 74 20 4e 61 6d 65 73 70 61   without Namespa
0220: 63 65 73 20 2d 20 52 65 76 69 73 69 74 65 64 3c  ces - Revisited<
0230: 2f 74 69 74 6c 65 3e 0a 20 20 20 20 3c 70 75 62  /title>.    <pub
0240: 6c 69 73 68 65 64 3e 32 30 31 32 2d 30 32 2d 30  lished>2012-02-0
0250: 39 54 31 34 3a 30 30 3a 30 30 5a 3c 2f 70 75 62  9T14:00:00Z</pub
0260: 6c 69 73 68 65 64 3e 0a 20 20 20 20 3c 75 70 64  lished>.    <upd
0270: 61 74 65 64 3e 32 30 31 32 2d 30 32 2d 30 39 54  ated>2012-02-09T
0280: 31 34 3a 30 30 3a 30 30 5a 3c 2f 75 70 64 61 74  14:00:00Z</updat
0290: 65 64 3e 0a 20 20 20 20 3c 6c 69 6e 6b 20 72 65  ed>.    <link re
02a0: 6c 3d 22 61 6c 74 65 72 6e 61 74 65 22 20 68 72  l="alternate" hr
02b0: 65 66 3d 22 68 74 74 70 3a 2f 2f 6a 69 6d 2e 62  ef="http://jim.b
02c0: 65 72 6c 69 6f 73 2e 64 65 2f 61 72 74 69 63 6c  erlios.de/articl
02d0: 65 73 2f 6e 6f 2d 6e 61 6d 65 73 70 61 63 65 73  es/no-namespaces
02e0: 2d 72 65 76 69 73 69 74 65 64 2f 22 2f 3e 0a 20  -revisited/"/>. 
02f0: 20 20 20 3c 63 6f 6e 74 65 6e 74 20 74 79 70 65     <content type
0300: 3d 22 68 74 6d 6c 22 3e 26 6c 74 3b 70 26 67 74  ="html">&lt;p&gt
0310: 3b 42 61 63 6b 20 69 6e 20 74 68 65 20 61 72 74  ;Back in the art
0320: 69 63 6c 65 20 26 6c 74 3b 61 20 68 72 65 66 3d  icle &lt;a href=
0330: 22 2f 61 72 74 69 63 6c 65 73 2f 6e 6f 2d 6e 61  "/articles/no-na
0340: 6d 65 73 70 61 63 65 73 2f 22 26 67 74 3b 43 6f  mespaces/"&gt;Co
0350: 70 69 6e 67 20 77 69 74 68 6f 75 74 20 4e 61 6d  ping without Nam
0360: 65 73 70 61 63 65 73 26 6c 74 3b 2f 61 26 67 74  espaces&lt;/a&gt
0370: 3b 2c 0a 77 65 20 64 69 73 63 75 73 73 65 64 20  ;,.we discussed 
0380: 74 68 61 74 20 66 61 63 74 20 74 68 61 74 20 4a  that fact that J
0390: 69 6d 20 54 63 6c 20 64 69 64 20 6e 6f 74 20 73  im Tcl did not s
03a0: 75 70 70 6f 72 74 20 6e 61 6d 65 73 70 61 63 65  upport namespace
03b0: 73 2c 20 62 75 74 0a 74 68 61 74 20 73 6d 61 6c  s, but.that smal
03c0: 6c 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  l changes to the
03d0: 20 73 6f 75 72 63 65 20 63 6f 75 6c 64 20 62 65   source could be
03e0: 20 6d 61 64 65 20 74 6f 20 61 6c 6c 6f 77 20 6e   made to allow n
03f0: 61 6d 65 73 70 61 63 65 2d 62 61 73 65 64 0a 54  amespace-based.T
0400: 63 6c 20 63 6f 64 65 20 74 6f 20 62 65 20 70 6f  cl code to be po
0410: 72 74 65 64 20 66 6f 72 20 75 73 65 20 77 69 74  rted for use wit
0420: 68 20 4a 69 6d 20 54 63 6c 2e 26 6c 74 3b 2f 70  h Jim Tcl.&lt;/p
0430: 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 4e  &gt;..&lt;p&gt;N
0440: 6f 77 20 77 69 74 68 20 26 6c 74 3b 61 20 68 72  ow with &lt;a hr
0450: 65 66 3d 22 2f 61 72 74 69 63 6c 65 73 2f 6c 69  ef="/articles/li
0460: 67 68 74 2d 77 65 69 67 68 74 2d 6e 61 6d 65 73  ght-weight-names
0470: 70 61 63 65 73 2f 22 26 67 74 3b 6e 61 6d 65 73  paces/"&gt;names
0480: 70 61 63 65 73 20 73 75 70 70 6f 72 74 65 64 26  paces supported&
0490: 6c 74 3b 2f 61 26 67 74 3b 0a 69 6e 20 26 6c 74  lt;/a&gt;.in &lt
04a0: 3b 61 20 68 72 65 66 3d 22 2f 61 72 74 69 63 6c  ;a href="/articl
04b0: 65 73 2f 6a 69 6d 2d 72 65 6c 65 61 73 65 2d 30  es/jim-release-0
04c0: 2e 37 33 2f 22 26 67 74 3b 4a 69 6d 20 54 63 6c  .73/"&gt;Jim Tcl
04d0: 20 30 2e 37 33 26 6c 74 3b 2f 61 26 67 74 3b 2c   0.73&lt;/a&gt;,
04e0: 20 70 6f 72 74 69 6e 67 20 54 63 6c 20 63 6f 64   porting Tcl cod
04f0: 65 0a 77 68 69 63 68 20 6d 61 6b 65 73 20 75 73  e.which makes us
0500: 65 20 6f 66 20 6e 61 6d 65 73 70 61 63 65 73 20  e of namespaces 
0510: 69 73 20 65 61 73 69 65 72 20 74 68 61 6e 20 65  is easier than e
0520: 76 65 72 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a  ver.&lt;/p&gt;..
0530: 26 6c 74 3b 70 26 67 74 3b 4f 6e 63 65 20 61 67  &lt;p&gt;Once ag
0540: 61 69 6e 2c 20 6c 65 74 27 73 20 63 6f 6e 73 69  ain, let's consi
0550: 64 65 72 20 70 6f 72 74 69 6e 67 20 26 6c 74 3b  der porting &lt;
0560: 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 74  a href="http://t
0570: 63 6c 6c 69 62 2e 63 76 73 2e 73 6f 75 72 63 65  cllib.cvs.source
0580: 66 6f 72 67 65 2e 6e 65 74 2f 76 69 65 77 76 63  forge.net/viewvc
0590: 2f 74 63 6c 6c 69 62 2f 74 63 6c 6c 69 62 2f 6d  /tcllib/tcllib/m
05a0: 6f 64 75 6c 65 73 2f 64 6e 73 2f 64 6e 73 2e 74  odules/dns/dns.t
05b0: 63 6c 22 26 67 74 3b 64 6e 73 2e 74 63 6c 26 6c  cl"&gt;dns.tcl&l
05c0: 74 3b 2f 61 26 67 74 3b 0a 66 72 6f 6d 20 26 6c  t;/a&gt;.from &l
05d0: 74 3b 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f  t;a href="http:/
05e0: 2f 74 63 6c 6c 69 62 2e 73 6f 75 72 63 65 66 6f  /tcllib.sourcefo
05f0: 72 67 65 2e 6e 65 74 2f 22 26 67 74 3b 74 63 6c  rge.net/"&gt;tcl
0600: 6c 69 62 26 6c 74 3b 2f 61 26 67 74 3b 20 74 6f  lib&lt;/a&gt; to
0610: 20 4a 69 6d 20 54 63 6c 2e 26 6c 74 3b 2f 70 26   Jim Tcl.&lt;/p&
0620: 67 74 3b 0a 0a 26 6c 74 3b 68 72 20 2f 26 67 74  gt;..&lt;hr /&gt
0630: 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 46 69 72 73  ;..&lt;p&gt;Firs
0640: 74 6c 79 20 61 6e 20 65 78 70 6c 61 6e 61 74 69  tly an explanati
0650: 6f 6e 20 6f 66 20 77 68 61 74 20 77 61 73 20 63  on of what was c
0660: 68 61 6e 67 65 64 2e 26 6c 74 3b 2f 70 26 67 74  hanged.&lt;/p&gt
0670: 3b 0a 0a 26 6c 74 3b 70 72 65 20 63 6c 61 73 73  ;..&lt;pre class
0680: 3d 22 73 68 5f 74 63 6c 22 26 67 74 3b 0a 2d 2d  ="sh_tcl"&gt;.--
0690: 2d 20 64 6e 73 2e 74 63 6c 2e 6f 72 69 67 09 32  - dns.tcl.orig.2
06a0: 30 31 32 2d 30 33 2d 30 35 20 31 33 3a 30 32 3a  012-03-05 13:02:
06b0: 33 36 2e 30 30 30 30 30 30 30 30 30 20 2b 31 30  36.000000000 +10
06c0: 30 30 0a 2b 2b 2b 20 64 6e 73 2e 74 63 6c 09 32  00.+++ dns.tcl.2
06d0: 30 31 32 2d 30 33 2d 30 35 20 31 33 3a 30 32 3a  012-03-05 13:02:
06e0: 35 36 2e 30 30 30 30 30 30 30 30 30 20 2b 31 30  56.000000000 +10
06f0: 30 30 0a 40 40 20 2d 31 2c 33 20 2b 31 2c 31 35  00.@@ -1,3 +1,15
0700: 20 40 40 0a 2b 23 20 64 6e 73 2e 74 63 6c 20 2d   @@.+# dns.tcl -
0710: 20 53 74 65 76 65 20 42 65 6e 6e 65 74 74 20 26   Steve Bennett &
0720: 61 6d 70 3b 6c 74 3b 73 74 65 76 65 62 40 77 6f  amp;lt;steveb@wo
0730: 72 6b 77 61 72 65 2e 6e 65 74 2e 61 75 26 61 6d  rkware.net.au&am
0740: 70 3b 67 74 3b 0a 2b 23 0a 2b 23 20 4d 6f 64 69  p;gt;.+#.+# Modi
0750: 66 69 65 64 20 66 6f 72 20 4a 69 6d 20 54 63 6c  fied for Jim Tcl
0760: 20 74 6f 3a 0a 2b 23 20 2d 20 75 73 65 20 75 64   to:.+# - use ud
0770: 70 20 74 72 61 6e 73 70 6f 72 74 20 62 79 20 64  p transport by d
0780: 65 66 61 75 6c 74 0a 2b 23 20 2d 20 75 73 65 20  efault.+# - use 
0790: 73 65 6e 64 74 6f 2f 72 65 63 76 66 72 6f 6d 0a  sendto/recvfrom.
07a0: 2b 23 20 2d 20 64 6f 6e 27 74 20 74 72 79 20 74  +# - don't try t
07b0: 6f 20 64 65 74 65 72 6d 69 6e 65 20 6c 6f 63 61  o determine loca
07c0: 6c 20 6e 61 6d 65 73 65 72 76 65 72 73 0a 2b 23  l nameservers.+#
07d0: 20 2d 20 72 65 6d 6f 76 65 20 73 75 70 70 6f 72   - remove suppor
07e0: 74 20 66 6f 72 20 64 6e 73 20 75 72 69 73 20 61  t for dns uris a
07f0: 6e 64 20 66 69 6e 64 69 6e 67 20 6c 6f 63 61 6c  nd finding local
0800: 20 6e 61 6d 65 73 65 72 76 65 72 73 0a 2b 23 20   nameservers.+# 
0810: 2d 20 72 65 6d 6f 76 65 20 6c 6f 67 67 69 6e 67  - remove logging
0820: 20 63 61 6c 6c 73 0a 2b 23 20 20 20 28 62 6f 74   calls.+#   (bot
0830: 68 20 6f 66 20 74 68 65 73 65 20 69 6e 20 6f 72  h of these in or
0840: 64 65 72 20 74 6f 20 72 65 6d 6f 76 65 20 64 65  der to remove de
0850: 70 65 6e 64 65 6e 63 69 65 73 20 6f 6e 20 74 63  pendencies on tc
0860: 6c 6c 69 62 29 0a 2b 0a 2b 23 20 42 61 73 65 64  llib).+.+# Based
0870: 20 6f 6e 3a 0a 2b 0a 20 23 20 64 6e 73 2e 74 63   on:.+. # dns.tc
0880: 6c 20 2d 20 43 6f 70 79 72 69 67 68 74 20 28 43  l - Copyright (C
0890: 29 20 32 30 30 32 20 50 61 74 20 54 68 6f 79 74  ) 2002 Pat Thoyt
08a0: 73 20 26 61 6d 70 3b 6c 74 3b 70 61 74 74 68 6f  s &amp;lt;pattho
08b0: 79 74 73 40 75 73 65 72 73 2e 73 6f 75 72 63 65  yts@users.source
08c0: 66 6f 72 67 65 2e 6e 65 74 26 61 6d 70 3b 67 74  forge.net&amp;gt
08d0: 3b 0a 20 23 0a 20 23 20 50 72 6f 76 69 64 65 20  ;. #. # Provide 
08e0: 61 20 54 63 6c 20 6f 6e 6c 79 20 44 6f 6d 61 69  a Tcl only Domai
08f0: 6e 20 4e 61 6d 65 20 53 65 72 76 69 63 65 20 63  n Name Service c
0900: 6c 69 65 6e 74 2e 20 53 65 65 20 52 46 43 20 31  lient. See RFC 1
0910: 30 33 34 20 61 6e 64 20 52 46 43 20 31 30 33 35  034 and RFC 1035
0920: 0a 26 6c 74 3b 2f 70 72 65 26 67 74 3b 0a 0a 26  .&lt;/pre&gt;..&
0930: 6c 74 3b 70 26 67 74 3b 46 6f 72 20 73 69 6d 70  lt;p&gt;For simp
0940: 6c 69 63 69 74 79 2c 20 77 65 20 72 65 6d 6f 76  licity, we remov
0950: 65 20 74 68 65 20 64 65 70 65 6e 64 65 6e 63 69  e the dependenci
0960: 65 73 20 6f 6e 20 74 63 6c 6c 69 62 20 26 6c 74  es on tcllib &lt
0970: 3b 63 6f 64 65 26 67 74 3b 6c 6f 67 67 65 72 26  ;code&gt;logger&
0980: 6c 74 3b 2f 63 6f 64 65 26 67 74 3b 2c 20 26 6c  lt;/code&gt;, &l
0990: 74 3b 63 6f 64 65 26 67 74 3b 75 72 69 26 6c 74  t;code&gt;uri&lt
09a0: 3b 2f 63 6f 64 65 26 67 74 3b 20 61 6e 64 20 26  ;/code&gt; and &
09b0: 6c 74 3b 63 6f 64 65 26 67 74 3b 69 70 26 6c 74  lt;code&gt;ip&lt
09c0: 3b 2f 63 6f 64 65 26 67 74 3b 20 74 6f 0a 61 6c  ;/code&gt; to.al
09d0: 6c 6f 77 20 74 68 69 73 20 65 78 61 6d 70 6c 65  low this example
09e0: 20 74 6f 20 62 65 20 73 65 6c 66 20 63 6f 6e 74   to be self cont
09f0: 61 69 6e 65 64 2e 20 49 6e 20 4a 69 6d 20 54 63  ained. In Jim Tc
0a00: 6c 20 74 68 65 20 26 6c 74 3b 63 6f 64 65 26 67  l the &lt;code&g
0a10: 74 3b 62 69 6e 61 72 79 26 6c 74 3b 2f 63 6f 64  t;binary&lt;/cod
0a20: 65 26 67 74 3b 20 61 6e 64 20 26 6c 74 3b 63 6f  e&gt; and &lt;co
0a30: 64 65 26 67 74 3b 6e 61 6d 65 73 70 61 63 65 26  de&gt;namespace&
0a40: 6c 74 3b 2f 63 6f 64 65 26 67 74 3b 0a 6d 6f 64  lt;/code&gt;.mod
0a50: 75 6c 65 73 20 61 72 65 20 6f 70 74 69 6f 6e 61  ules are optiona
0a60: 6c 2c 20 73 6f 20 6c 6f 61 64 20 74 68 65 6d 20  l, so load them 
0a70: 69 66 20 72 65 71 75 69 72 65 64 2e 26 6c 74 3b  if required.&lt;
0a80: 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70 72 65 20  /p&gt;..&lt;pre 
0a90: 63 6c 61 73 73 3d 22 73 68 5f 74 63 6c 22 26 67  class="sh_tcl"&g
0aa0: 74 3b 0a 40 40 20 2d 33 31 2c 31 34 20 2b 34 33  t;.@@ -31,14 +43
0ab0: 2c 31 31 20 40 40 0a 20 23 0a 20 23 20 24 49 64  ,11 @@. #. # $Id
0ac0: 3a 20 64 6e 73 2e 74 63 6c 2c 76 20 31 2e 33 36  : dns.tcl,v 1.36
0ad0: 20 32 30 30 38 2f 31 31 2f 32 32 20 31 32 3a 32   2008/11/22 12:2
0ae0: 38 3a 35 34 20 6d 69 63 34 32 20 45 78 70 20 24  8:54 mic42 Exp $
0af0: 0a 20 0a 2d 70 61 63 6b 61 67 65 20 72 65 71 75  . .-package requ
0b00: 69 72 65 20 54 63 6c 20 38 2e 32 3b 20 20 20 20  ire Tcl 8.2;    
0b10: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 74 63              # tc
0b20: 6c 20 6d 69 6e 69 6d 75 6d 20 76 65 72 73 69 6f  l minimum versio
0b30: 6e 0a 2d 70 61 63 6b 61 67 65 20 72 65 71 75 69  n.-package requi
0b40: 72 65 20 6c 6f 67 67 65 72 3b 20 20 20 20 20 20  re logger;      
0b50: 20 20 20 20 20 20 20 20 20 20 20 23 20 74 63 6c             # tcl
0b60: 6c 69 62 20 31 2e 33 0a 2d 70 61 63 6b 61 67 65  lib 1.3.-package
0b70: 20 72 65 71 75 69 72 65 20 75 72 69 3b 20 20 20   require uri;   
0b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b90: 20 23 20 74 63 6c 6c 69 62 20 31 2e 31 0a 2d 70   # tcllib 1.1.-p
0ba0: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 75  ackage require u
0bb0: 72 69 3a 3a 75 72 6e 3b 20 20 20 20 20 20 20 20  ri::urn;        
0bc0: 20 20 20 20 20 20 20 23 20 74 63 6c 6c 69 62 20         # tcllib 
0bd0: 31 2e 32 0a 2d 70 61 63 6b 61 67 65 20 72 65 71  1.2.-package req
0be0: 75 69 72 65 20 69 70 3b 20 20 20 20 20 20 20 20  uire ip;        
0bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 74               # t
0c00: 63 6c 6c 69 62 20 31 2e 37 0a 2b 70 61 63 6b 61  cllib 1.7.+packa
0c10: 67 65 20 72 65 71 75 69 72 65 20 62 69 6e 61 72  ge require binar
0c20: 79 0a 2b 70 61 63 6b 61 67 65 20 72 65 71 75 69  y.+package requi
0c30: 72 65 20 6e 61 6d 65 73 70 61 63 65 0a 20 0a 20  re namespace. . 
0c40: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a  namespace eval :
0c50: 3a 64 6e 73 20 7b 0a 2d 20 20 20 20 76 61 72 69  :dns {.-    vari
0c60: 61 62 6c 65 20 76 65 72 73 69 6f 6e 20 31 2e 33  able version 1.3
0c70: 2e 33 0a 2b 20 20 20 20 76 61 72 69 61 62 6c 65  .3.+    variable
0c80: 20 76 65 72 73 69 6f 6e 20 31 2e 33 2e 33 2d 6a   version 1.3.3-j
0c90: 69 6d 32 0a 20 20 20 20 20 76 61 72 69 61 62 6c  im2.     variabl
0ca0: 65 20 72 63 73 69 64 20 7b 24 49 64 3a 20 64 6e  e rcsid {$Id: dn
0cb0: 73 2e 74 63 6c 2c 76 20 31 2e 33 36 20 32 30 30  s.tcl,v 1.36 200
0cc0: 38 2f 31 31 2f 32 32 20 31 32 3a 32 38 3a 35 34  8/11/22 12:28:54
0cd0: 20 6d 69 63 34 32 20 45 78 70 20 24 7d 0a 20 0a   mic42 Exp $}. .
0ce0: 20 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65       namespace e
0cf0: 78 70 6f 72 74 20 63 6f 6e 66 69 67 75 72 65 20  xport configure 
0d00: 72 65 73 6f 6c 76 65 20 6e 61 6d 65 20 61 64 64  resolve name add
0d10: 72 65 73 73 20 63 6e 61 6d 65 20 5c 0a 26 6c 74  ress cname \.&lt
0d20: 3b 2f 70 72 65 26 67 74 3b 0a 0a 26 6c 74 3b 70  ;/pre&gt;..&lt;p
0d30: 26 67 74 3b 53 69 6e 63 65 20 4a 69 6d 20 54 63  &gt;Since Jim Tc
0d40: 6c 20 73 75 70 70 6f 72 74 73 20 75 64 70 20 6f  l supports udp o
0d50: 75 74 2d 6f 66 2d 74 68 65 2d 62 6f 78 2c 20 61  ut-of-the-box, a
0d60: 6e 64 20 69 74 20 69 73 20 6d 6f 72 65 20 65 66  nd it is more ef
0d70: 66 69 63 69 65 6e 74 2c 0a 64 65 66 61 75 6c 74  ficient,.default
0d80: 20 74 6f 20 75 64 70 20 72 61 74 68 65 72 20 74   to udp rather t
0d90: 68 61 6e 20 74 63 70 2e 20 41 6c 73 6f 20 63 6f  han tcp. Also co
0da0: 6d 6d 65 6e 74 20 6f 75 74 20 74 68 65 20 6c 6f  mment out the lo
0db0: 67 67 69 6e 67 20 63 61 6c 6c 73 2e 26 6c 74 3b  gging calls.&lt;
0dc0: 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70 72 65 20  /p&gt;..&lt;pre 
0dd0: 63 6c 61 73 73 3d 22 73 68 5f 74 63 6c 22 26 67  class="sh_tcl"&g
0de0: 74 3b 0a 40 40 20 2d 34 39 2c 32 33 20 2b 35 38  t;.@@ -49,23 +58
0df0: 2c 31 33 20 40 40 0a 20 20 20 20 20 20 20 20 20  ,13 @@.         
0e00: 61 72 72 61 79 20 73 65 74 20 6f 70 74 69 6f 6e  array set option
0e10: 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  s {.            
0e20: 20 70 6f 72 74 20 20 20 20 20 20 20 35 33 0a 20   port       53. 
0e30: 20 20 20 20 20 20 20 20 20 20 20 20 74 69 6d 65              time
0e40: 6f 75 74 20 20 20 20 33 30 30 30 30 0a 2d 20 20  out    30000.-  
0e50: 20 20 20 20 20 20 20 20 20 20 70 72 6f 74 6f 63            protoc
0e60: 6f 6c 20 20 20 74 63 70 0a 2b 20 20 20 20 20 20  ol   tcp.+      
0e70: 20 20 20 20 20 20 70 72 6f 74 6f 63 6f 6c 20 20        protocol  
0e80: 20 75 64 70 0a 20 20 20 20 20 20 20 20 20 20 20   udp.           
0e90: 20 20 73 65 61 72 63 68 20 20 20 20 20 7b 7d 0a    search     {}.
0ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d               nam
0eb0: 65 73 65 72 76 65 72 20 7b 6c 6f 63 61 6c 68 6f  eserver {localho
0ec0: 73 74 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  st}.            
0ed0: 20 6c 6f 67 6c 65 76 65 6c 20 20 20 77 61 72 6e   loglevel   warn
0ee0: 0a 20 20 20 20 20 20 20 20 20 7d 0a 2d 20 20 20  .         }.-   
0ef0: 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c 6f       variable lo
0f00: 67 20 5b 6c 6f 67 67 65 72 3a 3a 69 6e 69 74 20  g [logger::init 
0f10: 64 6e 73 5d 0a 2d 20 20 20 20 20 20 20 20 24 7b  dns].-        ${
0f20: 6c 6f 67 7d 3a 3a 73 65 74 6c 65 76 65 6c 20 24  log}::setlevel $
0f30: 6f 70 74 69 6f 6e 73 28 6c 6f 67 6c 65 76 65 6c  options(loglevel
0f40: 29 0a 2d 20 20 20 20 7d 0a 2d 0a 2d 20 20 20 20  ).-    }.-.-    
0f50: 23 20 57 65 20 63 61 6e 20 75 73 65 20 65 69 74  # We can use eit
0f60: 68 65 72 20 63 65 70 74 63 6c 20 6f 72 20 74 63  her ceptcl or tc
0f70: 6c 75 64 70 20 66 6f 72 20 55 44 50 20 73 75 70  ludp for UDP sup
0f80: 70 6f 72 74 2e 0a 2d 20 20 20 20 69 66 20 7b 21  port..-    if {!
0f90: 5b 63 61 74 63 68 20 7b 70 61 63 6b 61 67 65 20  [catch {package 
0fa0: 72 65 71 75 69 72 65 20 75 64 70 20 31 2e 30 2e  require udp 1.0.
0fb0: 34 7d 20 6d 73 67 5d 7d 20 7b 20 3b 23 20 74 63  4} msg]} { ;# tc
0fc0: 6c 75 64 70 20 31 2e 30 2e 34 2b 0a 2d 20 20 20  ludp 1.0.4+.-   
0fd0: 20 20 20 20 20 23 20 49 66 20 54 63 6c 55 44 50       # If TclUDP
0fe0: 20 31 2e 30 2e 34 20 6f 72 20 62 65 74 74 65 72   1.0.4 or better
0ff0: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 75   is available, u
1000: 73 65 20 69 74 2e 0a 2d 20 20 20 20 20 20 20 20  se it..-        
1010: 73 65 74 20 6f 70 74 69 6f 6e 73 28 70 72 6f 74  set options(prot
1020: 6f 63 6f 6c 29 20 75 64 70 0a 2d 20 20 20 20 7d  ocol) udp.-    }
1030: 20 65 6c 73 65 20 7b 0a 2d 20 20 20 20 20 20 20   else {.-       
1040: 20 69 66 20 7b 21 5b 63 61 74 63 68 20 7b 70 61   if {![catch {pa
1050: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 63 65  ckage require ce
1060: 70 74 63 6c 7d 20 6d 73 67 5d 7d 20 7b 0a 2d 20  ptcl} msg]} {.- 
1070: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6f             set o
1080: 70 74 69 6f 6e 73 28 70 72 6f 74 6f 63 6f 6c 29  ptions(protocol)
1090: 20 75 64 70 0a 2d 20 20 20 20 20 20 20 20 7d 0a   udp.-        }.
10a0: 2b 20 20 20 20 20 20 20 20 23 76 61 72 69 61 62  +        #variab
10b0: 6c 65 20 6c 6f 67 20 5b 6c 6f 67 67 65 72 3a 3a  le log [logger::
10c0: 69 6e 69 74 20 64 6e 73 5d 0a 2b 20 20 20 20 20  init dns].+     
10d0: 20 20 20 23 24 7b 6c 6f 67 7d 3a 3a 73 65 74 6c     #${log}::setl
10e0: 65 76 65 6c 20 24 6f 70 74 69 6f 6e 73 28 6c 6f  evel $options(lo
10f0: 67 6c 65 76 65 6c 29 0a 20 20 20 20 20 7d 0a 20  glevel).     }. 
1100: 0a 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 74  .     variable t
1110: 79 70 65 73 0a 26 6c 74 3b 2f 70 72 65 26 67 74  ypes.&lt;/pre&gt
1120: 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 75 64 70 20  ;..&lt;p&gt;udp 
1130: 69 73 20 62 75 69 6c 74 2d 69 6e 20 77 69 74 68  is built-in with
1140: 20 4a 69 6d 20 54 63 6c 2e 26 6c 74 3b 2f 70 26   Jim Tcl.&lt;/p&
1150: 67 74 3b 0a 0a 26 6c 74 3b 70 72 65 20 63 6c 61  gt;..&lt;pre cla
1160: 73 73 3d 22 73 68 5f 74 63 6c 22 26 67 74 3b 0a  ss="sh_tcl"&gt;.
1170: 40 40 20 2d 32 34 38 2c 31 34 20 2b 32 33 37 2c  @@ -248,14 +237,
1180: 36 20 40 40 0a 20 20 20 20 20 20 20 20 20 72 65  6 @@.         re
1190: 74 75 72 6e 20 2d 63 6f 64 65 20 65 72 72 6f 72  turn -code error
11a0: 20 22 6e 6f 20 6e 61 6d 65 73 65 72 76 65 72 20   "no nameserver 
11b0: 73 70 65 63 69 66 69 65 64 22 0a 20 20 20 20 20  specified".     
11c0: 7d 0a 20 0a 2d 20 20 20 20 69 66 20 7b 24 73 74  }. .-    if {$st
11d0: 61 74 65 28 2d 70 72 6f 74 6f 63 6f 6c 29 20 3d  ate(-protocol) =
11e0: 3d 20 22 75 64 70 22 7d 20 7b 0a 2d 20 20 20 20  = "udp"} {.-    
11f0: 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68      if {[llength
1200: 20 5b 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64   [package provid
1210: 65 20 63 65 70 74 63 6c 5d 5d 20 3d 3d 20 30 20  e ceptcl]] == 0 
1220: 5c 0a 2d 20 20 20 20 20 20 20 20 20 20 20 20 20  \.-             
1230: 20 20 20 26 61 6d 70 3b 61 6d 70 3b 26 61 6d 70     &amp;amp;&amp
1240: 3b 61 6d 70 3b 20 5b 6c 6c 65 6e 67 74 68 20 5b  ;amp; [llength [
1250: 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20  package provide 
1260: 75 64 70 5d 5d 20 3d 3d 20 30 7d 20 7b 0a 2d 20  udp]] == 0} {.- 
1270: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1280: 6e 20 2d 63 6f 64 65 20 65 72 72 6f 72 20 22 75  n -code error "u
1290: 64 70 20 73 75 70 70 6f 72 74 20 69 73 20 6e 6f  dp support is no
12a0: 74 20 61 76 61 69 6c 61 62 6c 65 2c 5c 0a 2d 20  t available,\.- 
12b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
12c0: 65 74 20 63 65 70 74 63 6c 20 6f 72 20 74 63 6c  et ceptcl or tcl
12d0: 75 64 70 22 0a 2d 20 20 20 20 20 20 20 20 7d 0a  udp".-        }.
12e0: 2d 20 20 20 20 7d 0a 2d 20 20 20 20 0a 20 20 20  -    }.-    .   
12f0: 20 20 23 20 43 68 65 63 6b 20 66 6f 72 20 72 65    # Check for re
1300: 76 65 72 73 65 20 6c 6f 6f 6b 75 70 73 0a 20 20  verse lookups.  
1310: 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 7b     if {[regexp {
1320: 5e 28 3f 3a 5c 64 7b 30 2c 33 7d 5c 2e 29 7b 33  ^(?:\d{0,3}\.){3
1330: 7d 5c 64 7b 30 2c 33 7d 24 7d 20 24 73 74 61 74  }\d{0,3}$} $stat
1340: 65 28 71 75 65 72 79 29 5d 7d 20 7b 0a 20 20 20  e(query)]} {.   
1350: 20 20 20 20 20 20 73 65 74 20 61 64 64 72 20 5b        set addr [
1360: 6c 72 65 76 65 72 73 65 20 5b 73 70 6c 69 74 20  lreverse [split 
1370: 24 73 74 61 74 65 28 71 75 65 72 79 29 20 2e 5d  $state(query) .]
1380: 5d 0a 26 6c 74 3b 2f 70 72 65 26 67 74 3b 0a 0a  ].&lt;/pre&gt;..
1390: 26 6c 74 3b 70 26 67 74 3b 75 64 70 20 69 6e 20  &lt;p&gt;udp in 
13a0: 4a 69 6d 20 54 63 6c 20 77 6f 72 6b 73 20 6a 75  Jim Tcl works ju
13b0: 73 74 20 6c 69 6b 65 20 74 63 70 2c 20 77 69 74  st like tcp, wit
13c0: 68 20 26 6c 74 3b 63 6f 64 65 26 67 74 3b 72 65  h &lt;code&gt;re
13d0: 61 64 61 62 6c 65 26 6c 74 3b 2f 63 6f 64 65 26  adable&lt;/code&
13e0: 67 74 3b 20 65 76 65 6e 74 20 68 61 6e 64 6c 65  gt; event handle
13f0: 72 20 62 65 69 6e 67 0a 74 72 69 67 67 65 72 65  r being.triggere
1400: 64 20 77 68 65 6e 20 74 68 65 20 72 65 73 70 6f  d when the respo
1410: 6e 73 65 20 69 73 20 61 76 61 69 6c 61 62 6c 65  nse is available
1420: 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74  .&lt;/p&gt;..&lt
1430: 3b 70 72 65 20 63 6c 61 73 73 3d 22 73 68 5f 74  ;pre class="sh_t
1440: 63 6c 22 26 67 74 3b 0a 40 40 20 2d 32 37 33 2c  cl"&gt;.@@ -273,
1450: 36 20 2b 32 35 34 2c 37 20 40 40 0a 20 20 20 20  6 +254,7 @@.    
1460: 20 20 20 20 20 7d 0a 20 20 20 20 20 7d 20 65 6c       }.     } el
1470: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 55 64  se {.         Ud
1480: 70 54 72 61 6e 73 6d 69 74 20 24 74 6f 6b 65 6e  pTransmit $token
1490: 0a 2b 20 20 20 20 20 20 20 20 77 61 69 74 20 24  .+        wait $
14a0: 74 6f 6b 65 6e 0a 20 20 20 20 20 7d 0a 20 20 20  token.     }.   
14b0: 20 20 0a 20 20 20 20 20 72 65 74 75 72 6e 20 24    .     return $
14c0: 74 6f 6b 65 6e 0a 26 6c 74 3b 2f 70 72 65 26 67  token.&lt;/pre&g
14d0: 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 4a 69 6d  t;..&lt;p&gt;Jim
14e0: 20 54 63 6c 20 68 61 73 20 6e 6f 20 73 75 70 70   Tcl has no supp
14f0: 6f 72 74 20 66 6f 72 20 61 73 79 6e 63 20 63 6f  ort for async co
1500: 6e 6e 65 63 74 2c 20 61 6e 64 20 74 68 65 20 70  nnect, and the p
1510: 61 72 61 6d 65 74 65 72 73 20 74 6f 20 26 6c 74  arameters to &lt
1520: 3b 63 6f 64 65 26 67 74 3b 73 6f 63 6b 65 74 26  ;code&gt;socket&
1530: 6c 74 3b 2f 63 6f 64 65 26 67 74 3b 20 61 72 65  lt;/code&gt; are
1540: 20 61 20 6c 69 74 74 6c 65 20 64 69 66 66 65 72   a little differ
1550: 65 6e 74 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a  ent.&lt;/p&gt;..
1560: 26 6c 74 3b 70 72 65 20 63 6c 61 73 73 3d 22 73  &lt;pre class="s
1570: 68 5f 74 63 6c 22 26 67 74 3b 0a 40 40 20 2d 36  h_tcl"&gt;.@@ -6
1580: 36 38 2c 39 20 2b 36 35 30 2c 39 20 40 40 0a 20  68,9 +650,9 @@. 
1590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b0: 20 20 20 22 6f 70 65 72 61 74 69 6f 6e 20 74 69     "operation ti
15c0: 6d 65 64 20 6f 75 74 22 5d 5d 0a 20 20 20 20 20  med out"]].     
15d0: 7d 0a 20 0a 2d 20 20 20 20 23 20 53 6f 6d 65 74  }. .-    # Somet
15e0: 69 6d 65 73 20 44 4e 53 20 73 65 72 76 65 72 73  imes DNS servers
15f0: 20 64 72 6f 70 20 54 43 50 20 72 65 71 75 65 73   drop TCP reques
1600: 74 73 2e 20 53 6f 20 69 74 27 73 20 62 65 74 74  ts. So it's bett
1610: 65 72 20 74 6f 0a 2d 20 20 20 20 23 20 75 73 65  er to.-    # use
1620: 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73 20 63 6f   asynchronous co
1630: 6e 6e 65 63 74 0a 2d 20 20 20 20 73 65 74 20 73  nnect.-    set s
1640: 20 5b 73 6f 63 6b 65 74 20 2d 61 73 79 6e 63 20   [socket -async 
1650: 24 73 74 61 74 65 28 2d 6e 61 6d 65 73 65 72 76  $state(-nameserv
1660: 65 72 29 20 24 73 74 61 74 65 28 2d 70 6f 72 74  er) $state(-port
1670: 29 5d 0a 2b 20 20 20 20 23 20 4a 69 6d 20 54 63  )].+    # Jim Tc
1680: 6c 20 68 61 73 20 6e 6f 20 61 73 79 6e 63 20 63  l has no async c
1690: 6f 6e 6e 65 63 74 20 2e 2e 2e 0a 2b 0a 2b 20 20  onnect ....+.+  
16a0: 20 20 73 65 74 20 73 20 5b 73 6f 63 6b 65 74 20    set s [socket 
16b0: 73 74 72 65 61 6d 20 24 73 74 61 74 65 28 2d 6e  stream $state(-n
16c0: 61 6d 65 73 65 72 76 65 72 29 3a 24 73 74 61 74  ameserver):$stat
16d0: 65 28 2d 70 6f 72 74 29 5d 0a 20 20 20 20 20 66  e(-port)].     f
16e0: 69 6c 65 65 76 65 6e 74 20 24 73 20 77 72 69 74  ileevent $s writ
16f0: 61 62 6c 65 20 5b 6c 69 73 74 20 5b 6e 61 6d 65  able [list [name
1700: 73 70 61 63 65 20 6f 72 69 67 69 6e 20 54 63 70  space origin Tcp
1710: 43 6f 6e 6e 65 63 74 65 64 5d 20 24 74 6f 6b 65  Connected] $toke
1720: 6e 20 24 73 5d 0a 20 20 20 20 20 73 65 74 20 73  n $s].     set s
1730: 74 61 74 65 28 73 6f 63 6b 29 20 24 73 0a 20 20  tate(sock) $s.  
1740: 20 20 20 73 65 74 20 73 74 61 74 65 28 73 74 61     set state(sta
1750: 74 75 73 29 20 63 6f 6e 6e 65 63 74 0a 26 6c 74  tus) connect.&lt
1760: 3b 2f 70 72 65 26 67 74 3b 0a 0a 26 6c 74 3b 70  ;/pre&gt;..&lt;p
1770: 26 67 74 3b 43 6f 6d 6d 65 6e 74 20 6f 75 74 20  &gt;Comment out 
1780: 74 68 65 20 61 73 79 6e 63 20 63 6f 6e 6e 65 63  the async connec
1790: 74 20 63 68 65 63 6b 2e 26 6c 74 3b 2f 70 26 67  t check.&lt;/p&g
17a0: 74 3b 0a 0a 26 6c 74 3b 70 72 65 20 63 6c 61 73  t;..&lt;pre clas
17b0: 73 3d 22 73 68 5f 74 63 6c 22 26 67 74 3b 0a 40  s="sh_tcl"&gt;.@
17c0: 40 20 2d 36 38 33 2c 31 31 20 2b 36 36 35 2c 31  @ -683,11 +665,1
17d0: 33 20 40 40 0a 20 20 20 20 20 75 70 76 61 72 20  3 @@.     upvar 
17e0: 30 20 24 74 6f 6b 65 6e 20 73 74 61 74 65 0a 20  0 $token state. 
17f0: 0a 20 20 20 20 20 66 69 6c 65 65 76 65 6e 74 20  .     fileevent 
1800: 24 73 20 77 72 69 74 61 62 6c 65 20 7b 7d 0a 2d  $s writable {}.-
1810: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
1820: 66 63 6f 6e 66 69 67 75 72 65 20 24 73 20 2d 70  fconfigure $s -p
1830: 65 65 72 6e 61 6d 65 7d 5d 7d 20 7b 0a 2d 09 23  eername}]} {.-.#
1840: 20 54 43 50 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   TCP connection 
1850: 66 61 69 6c 65 64 0a 2d 20 20 20 20 20 20 20 20  failed.-        
1860: 46 69 6e 69 73 68 20 24 74 6f 6b 65 6e 20 22 63  Finish $token "c
1870: 61 6e 27 74 20 63 6f 6e 6e 65 63 74 20 74 6f 20  an't connect to 
1880: 73 65 72 76 65 72 22 0a 2d 09 72 65 74 75 72 6e  server".-.return
1890: 0a 2d 20 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 23  .-    }.+.+    #
18a0: 20 4a 69 6d 20 54 63 6c 20 68 61 73 20 6e 6f 20   Jim Tcl has no 
18b0: 61 73 79 6e 63 20 63 6f 6e 6e 65 63 74 20 2e 2e  async connect ..
18c0: 2e 0a 2b 23 20 20 20 20 69 66 20 7b 5b 63 61 74  ..+#    if {[cat
18d0: 63 68 20 7b 66 63 6f 6e 66 69 67 75 72 65 20 24  ch {fconfigure $
18e0: 73 20 2d 70 65 65 72 6e 61 6d 65 7d 5d 7d 20 7b  s -peername}]} {
18f0: 0a 2b 23 09 23 20 54 43 50 20 63 6f 6e 6e 65 63  .+#.# TCP connec
1900: 74 69 6f 6e 20 66 61 69 6c 65 64 0a 2b 23 20 20  tion failed.+#  
1910: 20 20 20 20 20 20 46 69 6e 69 73 68 20 24 74 6f        Finish $to
1920: 6b 65 6e 20 22 63 61 6e 27 74 20 63 6f 6e 6e 65  ken "can't conne
1930: 63 74 20 74 6f 20 73 65 72 76 65 72 22 0a 2b 23  ct to server".+#
1940: 09 72 65 74 75 72 6e 0a 2b 23 20 20 20 20 7d 0a  .return.+#    }.
1950: 20 0a 20 20 20 20 20 66 63 6f 6e 66 69 67 75 72   .     fconfigur
1960: 65 20 24 73 20 2d 62 6c 6f 63 6b 69 6e 67 20 30  e $s -blocking 0
1970: 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69   -translation bi
1980: 6e 61 72 79 20 2d 62 75 66 66 65 72 69 6e 67 20  nary -buffering 
1990: 6e 6f 6e 65 0a 20 0a 26 6c 74 3b 2f 70 72 65 26  none. .&lt;/pre&
19a0: 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 75 64  gt;..&lt;p&gt;ud
19b0: 70 20 69 6e 20 4a 69 6d 20 54 63 6c 20 69 73 20  p in Jim Tcl is 
19c0: 65 61 73 79 2e 20 53 69 6d 70 79 20 63 72 65 61  easy. Simpy crea
19d0: 74 65 20 74 68 65 20 73 6f 63 6b 65 74 20 77 69  te the socket wi
19e0: 74 68 20 26 6c 74 3b 63 6f 64 65 26 67 74 3b 73  th &lt;code&gt;s
19f0: 6f 63 6b 65 74 20 64 67 72 61 6d 26 6c 74 3b 2f  ocket dgram&lt;/
1a00: 63 6f 64 65 26 67 74 3b 20 61 6e 64 0a 73 65 6e  code&gt; and.sen
1a10: 64 20 77 69 74 68 20 26 6c 74 3b 63 6f 64 65 26  d with &lt;code&
1a20: 67 74 3b 73 65 6e 64 74 6f 26 6c 74 3b 2f 63 6f  gt;sendto&lt;/co
1a30: 64 65 26 67 74 3b 2e 26 6c 74 3b 2f 70 26 67 74  de&gt;.&lt;/p&gt
1a40: 3b 0a 0a 26 6c 74 3b 70 72 65 20 63 6c 61 73 73  ;..&lt;pre class
1a50: 3d 22 73 68 5f 74 63 6c 22 26 67 74 3b 0a 40 40  ="sh_tcl"&gt;.@@
1a60: 20 2d 37 32 32 2c 31 38 20 2b 37 30 36 2c 31 30   -722,18 +706,10
1a70: 20 40 40 0a 20 20 20 20 20 20 20 20 20 20 20 20   @@.            
1a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a90: 20 20 20 20 20 20 20 22 6f 70 65 72 61 74 69 6f         "operatio
1aa0: 6e 20 74 69 6d 65 64 20 6f 75 74 22 5d 5d 0a 20  n timed out"]]. 
1ab0: 20 20 20 20 7d 0a 20 20 20 20 20 0a 2d 20 20 20      }.     .-   
1ac0: 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 70   if {[llength [p
1ad0: 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 63  ackage provide c
1ae0: 65 70 74 63 6c 5d 5d 20 26 61 6d 70 3b 67 74 3b  eptcl]] &amp;gt;
1af0: 20 30 7d 20 7b 0a 2d 20 20 20 20 20 20 20 20 23   0} {.-        #
1b00: 20 75 73 69 6e 67 20 63 65 70 74 63 6c 0a 2d 20   using ceptcl.- 
1b10: 20 20 20 20 20 20 20 73 65 74 20 73 74 61 74 65         set state
1b20: 28 73 6f 63 6b 29 20 5b 63 65 70 20 2d 74 79 70  (sock) [cep -typ
1b30: 65 20 64 61 74 61 67 72 61 6d 20 24 73 74 61 74  e datagram $stat
1b40: 65 28 2d 6e 61 6d 65 73 65 72 76 65 72 29 20 24  e(-nameserver) $
1b50: 73 74 61 74 65 28 2d 70 6f 72 74 29 5d 0a 2d 20  state(-port)].- 
1b60: 20 20 20 20 20 20 20 66 63 6f 6e 66 69 67 75 72         fconfigur
1b70: 65 20 24 73 74 61 74 65 28 73 6f 63 6b 29 20 2d  e $state(sock) -
1b80: 62 6c 6f 63 6b 69 6e 67 20 30 0a 2d 20 20 20 20  blocking 0.-    
1b90: 7d 20 65 6c 73 65 20 7b 0a 2d 20 20 20 20 20 20  } else {.-      
1ba0: 20 20 23 20 75 73 69 6e 67 20 74 63 6c 75 64 70    # using tcludp
1bb0: 0a 2d 20 20 20 20 20 20 20 20 73 65 74 20 73 74  .-        set st
1bc0: 61 74 65 28 73 6f 63 6b 29 20 5b 75 64 70 5f 6f  ate(sock) [udp_o
1bd0: 70 65 6e 5d 0a 2d 20 20 20 20 20 20 20 20 75 64  pen].-        ud
1be0: 70 5f 63 6f 6e 66 20 24 73 74 61 74 65 28 73 6f  p_conf $state(so
1bf0: 63 6b 29 20 24 73 74 61 74 65 28 2d 6e 61 6d 65  ck) $state(-name
1c00: 73 65 72 76 65 72 29 20 24 73 74 61 74 65 28 2d  server) $state(-
1c10: 70 6f 72 74 29 0a 2d 20 20 20 20 7d 0a 2d 20 20  port).-    }.-  
1c20: 20 20 66 63 6f 6e 66 69 67 75 72 65 20 24 73 74    fconfigure $st
1c30: 61 74 65 28 73 6f 63 6b 29 20 2d 74 72 61 6e 73  ate(sock) -trans
1c40: 6c 61 74 69 6f 6e 20 62 69 6e 61 72 79 20 2d 62  lation binary -b
1c50: 75 66 66 65 72 69 6e 67 20 6e 6f 6e 65 0a 2b 20  uffering none.+ 
1c60: 20 20 20 73 65 74 20 73 74 61 74 65 28 73 6f 63     set state(soc
1c70: 6b 29 20 5b 73 6f 63 6b 65 74 20 64 67 72 61 6d  k) [socket dgram
1c80: 5d 0a 2b 20 20 20 20 23 66 63 6f 6e 66 69 67 75  ].+    #fconfigu
1c90: 72 65 20 24 73 74 61 74 65 28 73 6f 63 6b 29 20  re $state(sock) 
1ca0: 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69 6e  -translation bin
1cb0: 61 72 79 20 2d 62 75 66 66 65 72 69 6e 67 20 6e  ary -buffering n
1cc0: 6f 6e 65 0a 20 20 20 20 20 73 65 74 20 73 74 61  one.     set sta
1cd0: 74 65 28 73 74 61 74 75 73 29 20 63 6f 6e 6e 65  te(status) conne
1ce0: 63 74 0a 2d 20 20 20 20 70 75 74 73 20 2d 6e 6f  ct.-    puts -no
1cf0: 6e 65 77 6c 69 6e 65 20 24 73 74 61 74 65 28 73  newline $state(s
1d00: 6f 63 6b 29 20 24 73 74 61 74 65 28 72 65 71 75  ock) $state(requ
1d10: 65 73 74 29 0a 2b 20 20 20 20 24 73 74 61 74 65  est).+    $state
1d20: 28 73 6f 63 6b 29 20 73 65 6e 64 74 6f 20 24 73  (sock) sendto $s
1d30: 74 61 74 65 28 72 65 71 75 65 73 74 29 20 24 73  tate(request) $s
1d40: 74 61 74 65 28 2d 6e 61 6d 65 73 65 72 76 65 72  tate(-nameserver
1d50: 29 3a 24 73 74 61 74 65 28 2d 70 6f 72 74 29 0a  ):$state(-port).
1d60: 20 20 20 20 20 0a 20 20 20 20 20 66 69 6c 65 65       .     filee
1d70: 76 65 6e 74 20 24 73 74 61 74 65 28 73 6f 63 6b  vent $state(sock
1d80: 29 20 72 65 61 64 61 62 6c 65 20 5b 6c 69 73 74  ) readable [list
1d90: 20 5b 6e 61 6d 65 73 70 61 63 65 20 63 75 72 72   [namespace curr
1da0: 65 6e 74 5d 3a 3a 55 64 70 45 76 65 6e 74 20 24  ent]::UdpEvent $
1db0: 74 6f 6b 65 6e 5d 0a 20 20 20 20 20 0a 26 6c 74  token].     .&lt
1dc0: 3b 2f 70 72 65 26 67 74 3b 0a 0a 26 6c 74 3b 70  ;/pre&gt;..&lt;p
1dd0: 26 67 74 3b 52 65 61 64 69 6e 67 20 66 72 6f 6d  &gt;Reading from
1de0: 20 61 20 75 64 70 20 73 6f 63 6b 65 74 20 69 73   a udp socket is
1df0: 20 62 65 73 74 20 64 6f 6e 65 20 77 69 74 68 20   best done with 
1e00: 26 6c 74 3b 63 6f 64 65 26 67 74 3b 72 65 63 76  &lt;code&gt;recv
1e10: 66 72 6f 6d 26 6c 74 3b 2f 63 6f 64 65 26 67 74  from&lt;/code&gt
1e20: 3b 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74  ;&lt;/p&gt;..&lt
1e30: 3b 70 72 65 20 63 6c 61 73 73 3d 22 73 68 5f 74  ;pre class="sh_t
1e40: 63 6c 22 26 67 74 3b 0a 40 40 20 2d 38 37 39 2c  cl"&gt;.@@ -879,
1e50: 37 20 2b 38 35 35 2c 37 20 40 40 0a 20 20 20 20  7 +855,7 @@.    
1e60: 20 75 70 76 61 72 20 30 20 24 74 6f 6b 65 6e 20   upvar 0 $token 
1e70: 73 74 61 74 65 0a 20 20 20 20 20 73 65 74 20 73  state.     set s
1e80: 20 24 73 74 61 74 65 28 73 6f 63 6b 29 0a 20 0a   $state(sock). .
1e90: 2d 20 20 20 20 73 65 74 20 70 61 79 6c 6f 61 64  -    set payload
1ea0: 20 5b 72 65 61 64 20 24 73 74 61 74 65 28 73 6f   [read $state(so
1eb0: 63 6b 29 5d 0a 2b 20 20 20 20 73 65 74 20 70 61  ck)].+    set pa
1ec0: 79 6c 6f 61 64 20 5b 24 73 74 61 74 65 28 73 6f  yload [$state(so
1ed0: 63 6b 29 20 72 65 63 76 66 72 6f 6d 20 31 35 30  ck) recvfrom 150
1ee0: 30 5d 0a 20 20 20 20 20 61 70 70 65 6e 64 20 73  0].     append s
1ef0: 74 61 74 65 28 72 65 70 6c 79 29 20 24 70 61 79  tate(reply) $pay
1f00: 6c 6f 61 64 0a 20 0a 20 20 20 20 20 62 69 6e 61  load. .     bina
1f10: 72 79 20 73 63 61 6e 20 24 70 61 79 6c 6f 61 64  ry scan $payload
1f20: 20 53 20 69 64 0a 26 6c 74 3b 2f 70 72 65 26 67   S id.&lt;/pre&g
1f30: 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 4a 69 6d  t;..&lt;p&gt;Jim
1f40: 20 54 63 6c 20 68 61 73 20 26 6c 74 3b 63 6f 64   Tcl has &lt;cod
1f50: 65 26 67 74 3b 6c 72 65 76 65 72 73 65 26 6c 74  e&gt;lreverse&lt
1f60: 3b 2f 63 6f 64 65 26 67 74 3b 20 62 75 69 6c 74  ;/code&gt; built
1f70: 2d 69 6e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26  -in&lt;/p&gt;..&
1f80: 6c 74 3b 70 72 65 20 63 6c 61 73 73 3d 22 73 68  lt;pre class="sh
1f90: 5f 74 63 6c 22 26 67 74 3b 0a 40 40 20 2d 31 30  _tcl"&gt;.@@ -10
1fa0: 31 31 2c 31 37 20 2b 39 38 37 2c 36 20 40 40 0a  11,17 +987,6 @@.
1fb0: 20 7d 0a 20 0a 20 23 20 2d 2d 2d 2d 2d 2d 2d 2d   }. . # --------
1fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1fd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1fe0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1ff0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2000: 2d 0a 2d 23 20 44 65 73 63 72 69 70 74 69 6f 6e  -.-# Description
2010: 3a 0a 2d 23 20 20 20 52 65 76 65 72 73 65 20 61  :.-#   Reverse a
2020: 20 6c 69 73 74 2e 20 43 6f 64 65 20 66 72 6f 6d   list. Code from
2030: 20 68 74 74 70 3a 2f 2f 77 69 6b 69 2e 74 63 6c   http://wiki.tcl
2040: 2e 74 6b 2f 74 63 6c 2f 34 33 0a 2d 23 0a 2d 70  .tk/tcl/43.-#.-p
2050: 72 6f 63 20 3a 3a 64 6e 73 3a 3a 6c 72 65 76 65  roc ::dns::lreve
2060: 72 73 65 20 7b 6c 73 74 7d 20 7b 0a 2d 20 20 20  rse {lst} {.-   
2070: 20 73 65 74 20 72 65 73 20 7b 7d 0a 2d 20 20 20   set res {}.-   
2080: 20 73 65 74 20 69 20 5b 6c 6c 65 6e 67 74 68 20   set i [llength 
2090: 24 6c 73 74 5d 0a 2d 20 20 20 20 77 68 69 6c 65  $lst].-    while
20a0: 20 7b 24 69 7d 20 7b 6c 61 70 70 65 6e 64 20 72   {$i} {lappend r
20b0: 65 73 20 5b 6c 69 6e 64 65 78 20 24 6c 73 74 20  es [lindex $lst 
20c0: 5b 69 6e 63 72 20 69 20 2d 31 5d 5d 7d 0a 2d 20  [incr i -1]]}.- 
20d0: 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 0a 2d     return $res.-
20e0: 7d 0a 2d 0a 2d 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  }.-.-# ---------
20f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2130: 0a 20 0a 20 70 72 6f 63 20 3a 3a 64 6e 73 3a 3a  . . proc ::dns::
2140: 4b 65 79 4f 66 20 7b 61 72 72 61 79 6e 61 6d 65  KeyOf {arrayname
2150: 20 76 61 6c 75 65 20 7b 64 65 66 61 75 6c 74 20   value {default 
2160: 7b 7d 7d 7d 20 7b 0a 20 20 20 20 20 75 70 76 61  {}}} {.     upva
2170: 72 20 24 61 72 72 61 79 6e 61 6d 65 20 61 72 72  r $arrayname arr
2180: 61 79 0a 26 6c 74 3b 2f 70 72 65 26 67 74 3b 0a  ay.&lt;/pre&gt;.
2190: 0a 26 6c 74 3b 68 72 20 2f 26 67 74 3b 0a 0a 26  .&lt;hr /&gt;..&
21a0: 6c 74 3b 70 26 67 74 3b 4e 6f 74 69 63 65 20 74  lt;p&gt;Notice t
21b0: 68 61 74 20 6e 6f 20 6e 61 6d 65 73 70 61 63 65  hat no namespace
21c0: 2d 72 65 6c 61 74 65 64 20 63 68 61 6e 67 65 73  -related changes
21d0: 20 77 65 72 65 20 72 65 71 75 69 72 65 64 20 77   were required w
21e0: 68 65 6e 20 70 6f 72 74 69 6e 67 20 74 68 69 73  hen porting this
21f0: 20 6d 6f 64 75 6c 65 2e 26 6c 74 3b 2f 70 26 67   module.&lt;/p&g
2200: 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 54 68 65  t;..&lt;p&gt;The
2210: 20 6c 61 74 65 73 74 20 76 65 72 73 69 6f 6e 20   latest version 
2220: 6f 66 20 26 6c 74 3b 61 20 68 72 65 66 3d 22 68  of &lt;a href="h
2230: 74 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f  ttps://github.co
2240: 6d 2f 6d 73 74 65 76 65 62 2f 6a 69 6d 74 63 6c  m/msteveb/jimtcl
2250: 2f 62 6c 6f 62 2f 61 64 33 62 33 63 34 38 63 39  /blob/ad3b3c48c9
2260: 64 37 65 39 2f 65 78 61 6d 70 6c 65 73 2f 64 6e  d7e9/examples/dn
2270: 73 2e 74 63 6c 22 26 67 74 3b 64 6e 73 2e 74 63  s.tcl"&gt;dns.tc
2280: 6c 20 66 6f 72 20 4a 69 6d 20 54 63 6c 26 6c 74  l for Jim Tcl&lt
2290: 3b 2f 61 26 67 74 3b 20 69 73 0a 61 76 61 69 6c  ;/a&gt; is.avail
22a0: 61 62 6c 65 20 69 6e 20 67 69 74 2e 26 6c 74 3b  able in git.&lt;
22b0: 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74  /p&gt;..&lt;p&gt
22c0: 3b 53 74 65 76 65 20 42 65 6e 6e 65 74 74 20 28  ;Steve Bennett (
22d0: 26 6c 74 3b 61 20 68 72 65 66 3d 22 26 61 6d 70  &lt;a href="&amp
22e0: 3b 23 31 30 39 3b 26 61 6d 70 3b 23 30 39 37 3b  ;#109;&amp;#097;
22f0: 26 61 6d 70 3b 23 31 30 35 3b 26 61 6d 70 3b 23  &amp;#105;&amp;#
2300: 31 30 38 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61  108;&amp;#116;&a
2310: 6d 70 3b 23 31 31 31 3b 3a 26 61 6d 70 3b 23 31  mp;#111;:&amp;#1
2320: 31 35 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d  15;&amp;#116;&am
2330: 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31 31 38  p;#101;&amp;#118
2340: 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b  ;&amp;#101;&amp;
2350: 23 30 39 38 3b 26 61 6d 70 3b 23 30 36 34 3b 26  #098;&amp;#064;&
2360: 61 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23 31  amp;#119;&amp;#1
2370: 31 31 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d  11;&amp;#114;&am
2380: 70 3b 23 31 30 37 3b 26 61 6d 70 3b 23 31 31 39  p;#107;&amp;#119
2390: 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b  ;&amp;#097;&amp;
23a0: 23 31 31 34 3b 26 61 6d 70 3b 23 31 30 31 3b 26  #114;&amp;#101;&
23b0: 61 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23 31  amp;#046;&amp;#1
23c0: 31 30 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d  10;&amp;#101;&am
23d0: 70 3b 23 31 31 36 3b 26 61 6d 70 3b 23 30 34 36  p;#116;&amp;#046
23e0: 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b  ;&amp;#097;&amp;
23f0: 23 31 31 37 3b 22 26 67 74 3b 26 61 6d 70 3b 23  #117;"&gt;&amp;#
2400: 31 31 35 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61  115;&amp;#116;&a
2410: 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31 31  mp;#101;&amp;#11
2420: 38 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70  8;&amp;#101;&amp
2430: 3b 23 30 39 38 3b 26 61 6d 70 3b 23 30 36 34 3b  ;#098;&amp;#064;
2440: 26 61 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23  &amp;#119;&amp;#
2450: 31 31 31 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61  111;&amp;#114;&a
2460: 6d 70 3b 23 31 30 37 3b 26 61 6d 70 3b 23 31 31  mp;#107;&amp;#11
2470: 39 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70  9;&amp;#097;&amp
2480: 3b 23 31 31 34 3b 26 61 6d 70 3b 23 31 30 31 3b  ;#114;&amp;#101;
2490: 26 61 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23  &amp;#046;&amp;#
24a0: 31 31 30 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61  110;&amp;#101;&a
24b0: 6d 70 3b 23 31 31 36 3b 26 61 6d 70 3b 23 30 34  mp;#116;&amp;#04
24c0: 36 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70  6;&amp;#097;&amp
24d0: 3b 23 31 31 37 3b 26 6c 74 3b 2f 61 26 67 74 3b  ;#117;&lt;/a&gt;
24e0: 29 26 6c 74 3b 2f 70 26 67 74 3b 0a 3c 2f 63 6f  )&lt;/p&gt;.</co
24f0: 6e 74 65 6e 74 3e 0a 20 20 3c 2f 65 6e 74 72 79  ntent>.  </entry
2500: 3e 0a 20 20 3c 65 6e 74 72 79 3e 0a 20 20 20 20  >.  <entry>.    
2510: 3c 69 64 3e 74 61 67 3a 6a 69 6d 2e 62 65 72 6c  <id>tag:jim.berl
2520: 69 6f 73 2e 64 65 2c 32 30 31 31 2d 31 32 2d 32  ios.de,2011-12-2
2530: 32 3a 2f 61 72 74 69 63 6c 65 73 2f 6a 69 6d 2d  2:/articles/jim-
2540: 72 65 6c 65 61 73 65 2d 30 2d 37 33 2f 3c 2f 69  release-0-73/</i
2550: 64 3e 0a 20 20 20 20 3c 74 69 74 6c 65 20 74 79  d>.    <title ty
2560: 70 65 3d 22 68 74 6d 6c 22 3e 4a 69 6d 20 54 63  pe="html">Jim Tc
2570: 6c 20 76 65 72 73 69 6f 6e 20 30 2e 37 33 3c 2f  l version 0.73</
2580: 74 69 74 6c 65 3e 0a 20 20 20 20 3c 70 75 62 6c  title>.    <publ
2590: 69 73 68 65 64 3e 32 30 31 31 2d 31 32 2d 32 31  ished>2011-12-21
25a0: 54 31 34 3a 30 30 3a 30 30 5a 3c 2f 70 75 62 6c  T14:00:00Z</publ
25b0: 69 73 68 65 64 3e 0a 20 20 20 20 3c 75 70 64 61  ished>.    <upda
25c0: 74 65 64 3e 32 30 31 31 2d 31 32 2d 32 31 54 31  ted>2011-12-21T1
25d0: 34 3a 30 30 3a 30 30 5a 3c 2f 75 70 64 61 74 65  4:00:00Z</update
25e0: 64 3e 0a 20 20 20 20 3c 6c 69 6e 6b 20 72 65 6c  d>.    <link rel
25f0: 3d 22 61 6c 74 65 72 6e 61 74 65 22 20 68 72 65  ="alternate" hre
2600: 66 3d 22 68 74 74 70 3a 2f 2f 6a 69 6d 2e 62 65  f="http://jim.be
2610: 72 6c 69 6f 73 2e 64 65 2f 61 72 74 69 63 6c 65  rlios.de/article
2620: 73 2f 6a 69 6d 2d 72 65 6c 65 61 73 65 2d 30 2d  s/jim-release-0-
2630: 37 33 2f 22 2f 3e 0a 20 20 20 20 3c 63 6f 6e 74  73/"/>.    <cont
2640: 65 6e 74 20 74 79 70 65 3d 22 68 74 6d 6c 22 3e  ent type="html">
2650: 26 6c 74 3b 68 32 20 69 64 3d 22 61 6e 6e 6f 75  &lt;h2 id="annou
2660: 6e 63 65 2d 6a 69 6d 2d 74 63 6c 2d 76 65 72 73  nce-jim-tcl-vers
2670: 69 6f 6e 2d 30 37 33 22 26 67 74 3b 41 4e 4e 4f  ion-073"&gt;ANNO
2680: 55 4e 43 45 3a 20 4a 69 6d 20 54 63 6c 20 76 65  UNCE: Jim Tcl ve
2690: 72 73 69 6f 6e 20 30 2e 37 33 26 6c 74 3b 2f 68  rsion 0.73&lt;/h
26a0: 32 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b  2&gt;..&lt;p&gt;
26b0: 4a 69 6d 20 54 63 6c 20 30 2e 37 33 20 68 61 73  Jim Tcl 0.73 has
26c0: 20 62 65 65 6e 20 72 65 6c 65 61 73 65 64 20 61   been released a
26d0: 6e 64 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20  nd is available 
26e0: 66 72 6f 6d 3a 20 26 6c 74 3b 2f 70 26 67 74 3b  from: &lt;/p&gt;
26f0: 0a 0a 26 6c 74 3b 70 26 67 74 3b 26 6c 74 3b 61  ..&lt;p&gt;&lt;a
2700: 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 72 65   href="http://re
2710: 70 6f 2e 6f 72 2e 63 7a 2f 77 2f 6a 69 6d 74 63  po.or.cz/w/jimtc
2720: 6c 2e 67 69 74 22 26 67 74 3b 68 74 74 70 3a 2f  l.git"&gt;http:/
2730: 2f 72 65 70 6f 2e 6f 72 2e 63 7a 2f 77 2f 6a 69  /repo.or.cz/w/ji
2740: 6d 74 63 6c 2e 67 69 74 26 6c 74 3b 2f 61 26 67  mtcl.git&lt;/a&g
2750: 74 3b 20 6f 72 20 26 6c 74 3b 61 20 68 72 65 66  t; or &lt;a href
2760: 3d 22 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62  ="https://github
2770: 2e 63 6f 6d 2f 6d 73 74 65 76 65 62 2f 6a 69 6d  .com/msteveb/jim
2780: 74 63 6c 22 26 67 74 3b 68 74 74 70 73 3a 2f 2f  tcl"&gt;https://
2790: 67 69 74 68 75 62 2e 63 6f 6d 2f 6d 73 74 65 76  github.com/mstev
27a0: 65 62 2f 6a 69 6d 74 63 6c 26 6c 74 3b 2f 61 26  eb/jimtcl&lt;/a&
27b0: 67 74 3b 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26  gt;&lt;/p&gt;..&
27c0: 6c 74 3b 70 26 67 74 3b 46 69 6e 64 20 6f 75 74  lt;p&gt;Find out
27d0: 20 61 6c 6c 20 61 62 6f 75 74 20 4a 69 6d 20 54   all about Jim T
27e0: 63 6c 20 61 74 20 26 6c 74 3b 61 20 68 72 65 66  cl at &lt;a href
27f0: 3d 22 68 74 74 70 3a 2f 2f 6a 69 6d 2e 74 63 6c  ="http://jim.tcl
2800: 2e 74 6b 2f 22 26 67 74 3b 68 74 74 70 3a 2f 2f  .tk/"&gt;http://
2810: 6a 69 6d 2e 74 63 6c 2e 74 6b 2f 26 6c 74 3b 2f  jim.tcl.tk/&lt;/
2820: 61 26 67 74 3b 26 6c 74 3b 2f 70 26 67 74 3b 0a  a&gt;&lt;/p&gt;.
2830: 0a 26 6c 74 3b 68 32 20 69 64 3d 22 63 68 61 6e  .&lt;h2 id="chan
2840: 67 65 73 2d 73 69 6e 63 65 2d 76 65 72 73 69 6f  ges-since-versio
2850: 6e 2d 30 37 32 22 26 67 74 3b 43 48 41 4e 47 45  n-072"&gt;CHANGE
2860: 53 20 53 49 4e 43 45 20 56 45 52 53 49 4f 4e 20  S SINCE VERSION 
2870: 30 2e 37 32 26 6c 74 3b 2f 68 32 26 67 74 3b 0a  0.72&lt;/h2&gt;.
2880: 0a 26 6c 74 3b 70 26 67 74 3b 54 68 69 73 20 72  .&lt;p&gt;This r
2890: 65 6c 65 61 73 65 20 69 6e 63 6f 72 70 6f 72 61  elease incorpora
28a0: 74 65 73 20 62 75 67 20 66 69 78 65 73 20 61 6e  tes bug fixes an
28b0: 64 20 6d 61 6e 79 20 6e 65 77 20 66 65 61 74 75  d many new featu
28c0: 72 65 73 2e 0a 41 20 73 75 6d 6d 61 72 79 20 69  res..A summary i
28d0: 73 20 62 65 6c 6f 77 2e 20 53 65 65 20 67 69 74  s below. See git
28e0: 20 66 6f 72 20 74 68 65 20 66 75 6c 6c 20 63 68   for the full ch
28f0: 61 6e 67 65 6c 6f 67 2e 26 6c 74 3b 2f 70 26 67  angelog.&lt;/p&g
2900: 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 26 6c 74  t;..&lt;p&gt;&lt
2910: 3b 73 74 72 6f 6e 67 26 67 74 3b 42 75 67 73 20  ;strong&gt;Bugs 
2920: 66 69 78 65 64 20 69 6e 20 76 65 72 73 69 6f 6e  fixed in version
2930: 20 30 2e 37 33 26 6c 74 3b 2f 73 74 72 6f 6e 67   0.73&lt;/strong
2940: 26 67 74 3b 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a  &gt;&lt;/p&gt;..
2950: 26 6c 74 3b 75 6c 26 67 74 3b 0a 20 20 26 6c 74  &lt;ul&gt;.  &lt
2960: 3b 6c 69 26 67 74 3b 26 6c 74 3b 63 6f 64 65 26  ;li&gt;&lt;code&
2970: 67 74 3b 65 78 65 63 26 6c 74 3b 2f 63 6f 64 65  gt;exec&lt;/code
2980: 26 67 74 3b 20 6f 6e 20 63 79 67 77 69 6e 20 6e  &gt; on cygwin n
2990: 6f 77 20 63 6f 72 72 65 63 74 6c 79 20 70 61 73  ow correctly pas
29a0: 73 65 73 20 24 3a 3a 65 6e 76 26 6c 74 3b 2f 6c  ses $::env&lt;/l
29b0: 69 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67  i&gt;.  &lt;li&g
29c0: 74 3b 4f 6e 20 6d 69 6e 67 77 20 61 6e 64 20 63  t;On mingw and c
29d0: 79 67 77 69 6e 2c 20 26 6c 74 3b 63 6f 64 65 26  ygwin, &lt;code&
29e0: 67 74 3b 2d 2d 73 68 61 72 65 64 26 6c 74 3b 2f  gt;--shared&lt;/
29f0: 63 6f 64 65 26 67 74 3b 20 63 72 65 61 74 65 73  code&gt; creates
2a00: 20 6c 69 62 6a 69 6d 2e 64 6c 6c 20 72 61 74 68   libjim.dll rath
2a10: 65 72 20 74 68 61 6e 20 6c 69 62 6a 69 6d 2e 73  er than libjim.s
2a20: 6f 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26  o&lt;/li&gt;.  &
2a30: 6c 74 3b 6c 69 26 67 74 3b 55 54 46 2d 38 20 63  lt;li&gt;UTF-8 c
2a40: 61 73 65 20 66 6f 6c 64 69 6e 67 20 6d 61 79 20  ase folding may 
2a50: 63 68 61 6e 67 65 20 74 68 65 20 65 6e 63 6f 64  change the encod
2a60: 65 64 20 6c 65 6e 67 74 68 26 6c 74 3b 2f 6c 69  ed length&lt;/li
2a70: 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74  &gt;.  &lt;li&gt
2a80: 3b 46 69 78 20 61 20 26 6c 74 3b 63 6f 64 65 26  ;Fix a &lt;code&
2a90: 67 74 3b 72 65 67 65 78 70 26 6c 74 3b 2f 63 6f  gt;regexp&lt;/co
2aa0: 64 65 26 67 74 3b 20 69 6e 66 69 6e 69 74 65 20  de&gt; infinite 
2ab0: 6c 6f 6f 70 20 6f 6e 20 69 6e 76 61 6c 69 64 20  loop on invalid 
2ac0: 55 54 46 2d 38 20 73 74 72 69 6e 67 73 26 6c 74  UTF-8 strings&lt
2ad0: 3b 2f 6c 69 26 67 74 3b 0a 20 20 26 6c 74 3b 6c  ;/li&gt;.  &lt;l
2ae0: 69 26 67 74 3b 50 72 65 76 65 6e 74 20 69 6e 66  i&gt;Prevent inf
2af0: 69 6e 69 74 65 20 72 65 63 75 72 73 69 6f 6e 20  inite recursion 
2b00: 69 6e 20 26 6c 74 3b 63 6f 64 65 26 67 74 3b 65  in &lt;code&gt;e
2b10: 76 61 6c 26 6c 74 3b 2f 63 6f 64 65 26 67 74 3b  val&lt;/code&gt;
2b20: 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26 6c  &lt;/li&gt;.  &l
2b30: 74 3b 6c 69 26 67 74 3b 44 6f 6e 26 61 6d 70 3b  t;li&gt;Don&amp;
2b40: 72 73 71 75 6f 3b 74 20 61 6c 6c 6f 77 20 26 6c  rsquo;t allow &l
2b50: 74 3b 63 6f 64 65 26 67 74 3b 75 70 76 61 72 26  t;code&gt;upvar&
2b60: 6c 74 3b 2f 63 6f 64 65 26 67 74 3b 20 74 6f 20  lt;/code&gt; to 
2b70: 61 20 68 69 67 68 65 72 20 6c 65 76 65 6c 26 6c  a higher level&l
2b80: 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26 6c 74 3b  t;/li&gt;.  &lt;
2b90: 6c 69 26 67 74 3b 26 6c 74 3b 63 6f 64 65 26 67  li&gt;&lt;code&g
2ba0: 74 3b 72 65 67 65 78 70 26 6c 74 3b 2f 63 6f 64  t;regexp&lt;/cod
2bb0: 65 26 67 74 3b 20 63 6f 75 6e 74 65 64 20 6d 61  e&gt; counted ma
2bc0: 74 63 68 65 73 20 6d 61 79 20 62 65 20 77 72 6f  tches may be wro
2bd0: 6e 67 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74  ng on subsequent
2be0: 20 75 73 65 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a   use&lt;/li&gt;.
2bf0: 20 20 26 6c 74 3b 6c 69 26 67 74 3b 46 6f 72 6d    &lt;li&gt;Form
2c00: 20 66 65 65 64 20 28 5c 66 29 20 69 73 20 61 20   feed (\f) is a 
2c10: 76 61 6c 69 64 20 77 68 69 74 65 20 73 70 61 63  valid white spac
2c20: 65 20 63 68 61 72 61 63 74 65 72 26 6c 74 3b 2f  e character&lt;/
2c30: 6c 69 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26  li&gt;.  &lt;li&
2c40: 67 74 3b 50 61 72 73 69 6e 67 20 62 75 67 20 66  gt;Parsing bug f
2c50: 6f 72 20 71 75 6f 74 65 64 20 6f 72 70 68 61 6e  or quoted orphan
2c60: 20 24 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20   $&lt;/li&gt;.  
2c70: 26 6c 74 3b 6c 69 26 67 74 3b 53 74 61 6e 64 61  &lt;li&gt;Standa
2c80: 72 64 20 68 61 6e 64 6c 65 73 20 77 65 72 65 20  rd handles were 
2c90: 6e 6f 74 20 62 65 69 6e 67 20 6b 65 70 74 20 6f  not being kept o
2ca0: 70 65 6e 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20  pen&lt;/li&gt;. 
2cb0: 20 26 6c 74 3b 6c 69 26 67 74 3b 46 69 78 20 65   &lt;li&gt;Fix e
2cc0: 64 67 65 20 63 61 73 65 73 20 77 69 74 68 20 26  dge cases with &
2cd0: 6c 74 3b 63 6f 64 65 26 67 74 3b 74 61 69 6c 63  lt;code&gt;tailc
2ce0: 61 6c 6c 26 6c 74 3b 2f 63 6f 64 65 26 67 74 3b  all&lt;/code&gt;
2cf0: 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 26 6c 74 3b  &lt;/li&gt;.&lt;
2d00: 2f 75 6c 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67  /ul&gt;..&lt;p&g
2d10: 74 3b 26 6c 74 3b 73 74 72 6f 6e 67 26 67 74 3b  t;&lt;strong&gt;
2d20: 46 65 61 74 75 72 65 73 20 61 64 64 65 64 20 69  Features added i
2d30: 6e 20 76 65 72 73 69 6f 6e 20 30 2e 37 33 26 6c  n version 0.73&l
2d40: 74 3b 2f 73 74 72 6f 6e 67 26 67 74 3b 26 6c 74  t;/strong&gt;&lt
2d50: 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 75 6c 26  ;/p&gt;..&lt;ul&
2d60: 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74 3b  gt;.  &lt;li&gt;
2d70: 41 64 64 65 64 20 73 75 70 70 6f 72 74 20 66 6f  Added support fo
2d80: 72 20 6e 61 6d 65 73 70 61 63 65 73 20 61 6e 64  r namespaces and
2d90: 20 74 68 65 20 26 6c 74 3b 63 6f 64 65 26 67 74   the &lt;code&gt
2da0: 3b 6e 61 6d 65 73 70 61 63 65 26 6c 74 3b 2f 63  ;namespace&lt;/c
2db0: 6f 64 65 26 67 74 3b 20 63 6f 6d 6d 61 6e 64 26  ode&gt; command&
2dc0: 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26 6c 74  lt;/li&gt;.  &lt
2dd0: 3b 6c 69 26 67 74 3b 54 68 65 20 26 61 6d 70 3b  ;li&gt;The &amp;
2de0: 6c 64 71 75 6f 3b 66 75 6c 6c 26 61 6d 70 3b 72  ldquo;full&amp;r
2df0: 64 71 75 6f 3b 20 73 71 6c 69 74 65 33 20 65 78  dquo; sqlite3 ex
2e00: 74 65 6e 73 69 6f 6e 20 69 73 20 69 6e 63 6c 75  tension is inclu
2e10: 64 65 64 20 69 6e 20 74 68 65 20 72 65 70 6f 26  ded in the repo&
2e20: 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26 6c 74  lt;/li&gt;.  &lt
2e30: 3b 6c 69 26 67 74 3b 42 75 69 6c 74 2d 69 6e 20  ;li&gt;Built-in 
2e40: 72 65 67 65 78 70 20 6e 6f 77 20 73 75 70 70 6f  regexp now suppo
2e50: 72 74 20 6e 6f 6e 2d 63 61 70 74 75 72 69 6e 67  rt non-capturing
2e60: 20 70 61 72 65 6e 74 68 65 73 65 73 3a 20 26 6c   parentheses: &l
2e70: 74 3b 63 6f 64 65 26 67 74 3b 28 3f 3a 2e 2e 2e  t;code&gt;(?:...
2e80: 29 26 6c 74 3b 2f 63 6f 64 65 26 67 74 3b 26 6c  )&lt;/code&gt;&l
2e90: 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26 6c 74 3b  t;/li&gt;.  &lt;
2ea0: 6c 69 26 67 74 3b 41 64 64 65 64 20 26 6c 74 3b  li&gt;Added &lt;
2eb0: 63 6f 64 65 26 67 74 3b 73 74 72 69 6e 67 20 72  code&gt;string r
2ec0: 65 70 6c 61 63 65 26 6c 74 3b 2f 63 6f 64 65 26  eplace&lt;/code&
2ed0: 67 74 3b 20 61 6e 64 20 26 6c 74 3b 63 6f 64 65  gt; and &lt;code
2ee0: 26 67 74 3b 73 74 72 69 6e 67 20 74 6f 74 69 74  &gt;string totit
2ef0: 6c 65 26 6c 74 3b 2f 63 6f 64 65 26 67 74 3b 26  le&lt;/code&gt;&
2f00: 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26 6c 74  lt;/li&gt;.  &lt
2f10: 3b 6c 69 26 67 74 3b 41 64 64 65 64 20 26 6c 74  ;li&gt;Added &lt
2f20: 3b 63 6f 64 65 26 67 74 3b 69 6e 66 6f 20 73 74  ;code&gt;info st
2f30: 61 74 69 63 73 26 6c 74 3b 2f 63 6f 64 65 26 67  atics&lt;/code&g
2f40: 74 3b 20 74 6f 20 61 63 63 65 73 73 20 70 72 6f  t; to access pro
2f50: 63 20 73 74 61 74 69 63 20 76 61 72 69 61 62 6c  c static variabl
2f60: 65 73 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20  es&lt;/li&gt;.  
2f70: 26 6c 74 3b 6c 69 26 67 74 3b 41 64 64 65 64 20  &lt;li&gt;Added 
2f80: 26 6c 74 3b 63 6f 64 65 26 67 74 3b 69 6e 66 6f  &lt;code&gt;info
2f90: 20 61 6c 69 61 73 26 6c 74 3b 2f 63 6f 64 65 26   alias&lt;/code&
2fa0: 67 74 3b 20 74 6f 20 61 63 63 65 73 73 20 74 68  gt; to access th
2fb0: 65 20 74 61 72 67 65 74 20 6f 66 20 61 6e 20 61  e target of an a
2fc0: 6c 69 61 73 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a  lias&lt;/li&gt;.
2fd0: 20 20 26 6c 74 3b 6c 69 26 67 74 3b 41 64 64 65    &lt;li&gt;Adde
2fe0: 64 20 26 6c 74 3b 63 6f 64 65 26 67 74 3b 62 75  d &lt;code&gt;bu
2ff0: 69 6c 64 2d 6a 69 6d 2d 65 78 74 26 6c 74 3b 2f  ild-jim-ext&lt;/
3000: 63 6f 64 65 26 67 74 3b 20 66 6f 72 20 65 61 73  code&gt; for eas
3010: 79 20 73 65 70 61 72 61 74 65 20 62 75 69 6c 64  y separate build
3020: 69 6e 67 20 6f 66 20 6c 6f 61 64 61 62 6c 65 20  ing of loadable 
3030: 6d 6f 64 75 6c 65 73 20 28 65 78 74 65 6e 73 69  modules (extensi
3040: 6f 6e 73 29 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a  ons)&lt;/li&gt;.
3050: 20 20 26 6c 74 3b 6c 69 26 67 74 3b 26 6c 74 3b    &lt;li&gt;&lt;
3060: 63 6f 64 65 26 67 74 3b 6c 6f 63 61 6c 26 6c 74  code&gt;local&lt
3070: 3b 2f 63 6f 64 65 26 67 74 3b 20 6e 6f 77 20 77  ;/code&gt; now w
3080: 6f 72 6b 73 20 77 69 74 68 20 61 6e 79 20 63 6f  orks with any co
3090: 6d 6d 61 6e 64 2c 20 6e 6f 74 20 6a 75 73 74 20  mmand, not just 
30a0: 70 72 6f 63 73 26 6c 74 3b 2f 6c 69 26 67 74 3b  procs&lt;/li&gt;
30b0: 0a 20 20 26 6c 74 3b 6c 69 26 67 74 3b 55 54 46  .  &lt;li&gt;UTF
30c0: 2d 38 20 65 6e 63 6f 64 69 6e 67 20 70 61 73 74  -8 encoding past
30d0: 20 74 68 65 20 62 61 73 69 63 20 6d 75 6c 74 69   the basic multi
30e0: 6c 69 6e 67 75 61 6c 20 70 6c 61 6e 65 20 28 42  lingual plane (B
30f0: 4d 50 29 20 69 73 20 73 75 70 70 6f 72 74 65 64  MP) is supported
3100: 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26 6c  &lt;/li&gt;.  &l
3110: 74 3b 6c 69 26 67 74 3b 41 64 64 65 64 20 26 6c  t;li&gt;Added &l
3120: 74 3b 63 6f 64 65 26 67 74 3b 74 63 6c 3a 3a 70  t;code&gt;tcl::p
3130: 72 65 66 69 78 26 6c 74 3b 2f 63 6f 64 65 26 67  refix&lt;/code&g
3140: 74 3b 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20  t;&lt;/li&gt;.  
3150: 26 6c 74 3b 6c 69 26 67 74 3b 41 64 64 65 64 20  &lt;li&gt;Added 
3160: 74 68 65 20 26 6c 74 3b 63 6f 64 65 26 67 74 3b  the &lt;code&gt;
3170: 68 69 73 74 6f 72 79 26 6c 74 3b 2f 63 6f 64 65  history&lt;/code
3180: 26 67 74 3b 20 63 6f 6d 6d 61 6e 64 20 74 6f 20  &gt; command to 
3190: 61 63 63 65 73 73 20 63 6f 6d 6d 61 6e 64 20 6c  access command l
31a0: 69 6e 65 20 65 64 69 74 69 6e 67 20 61 6e 64 20  ine editing and 
31b0: 68 69 73 74 6f 72 79 20 66 72 6f 6d 20 73 63 72  history from scr
31c0: 69 70 74 73 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a  ipts&lt;/li&gt;.
31d0: 20 20 26 6c 74 3b 6c 69 26 67 74 3b 41 64 64 65    &lt;li&gt;Adde
31e0: 64 20 61 20 54 63 6c 2d 63 6f 6d 70 61 74 69 62  d a Tcl-compatib
31f0: 6c 65 20 26 6c 74 3b 63 6f 64 65 26 67 74 3b 61  le &lt;code&gt;a
3200: 70 70 6c 79 26 6c 74 3b 2f 63 6f 64 65 26 67 74  pply&lt;/code&gt
3210: 3b 20 63 6f 6d 6d 61 6e 64 26 6c 74 3b 2f 6c 69  ; command&lt;/li
3220: 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74  &gt;.  &lt;li&gt
3230: 3b 4d 6f 73 74 20 65 78 74 65 6e 73 69 6f 6e 73  ;Most extensions
3240: 20 61 72 65 20 6e 6f 77 20 65 6e 61 62 6c 65 64   are now enabled
3250: 20 62 79 20 64 65 66 61 75 6c 74 26 6c 74 3b 2f   by default&lt;/
3260: 6c 69 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26  li&gt;.  &lt;li&
3270: 67 74 3b 4a 69 6d 20 54 63 6c 20 6e 6f 77 20 63  gt;Jim Tcl now c
3280: 6f 6d 70 69 6c 65 73 20 77 69 74 68 20 4d 53 56  ompiles with MSV
3290: 43 20 6f 6e 20 57 69 6e 64 6f 77 73 20 28 62 75  C on Windows (bu
32a0: 74 20 6e 6f 20 62 75 69 6c 64 20 73 75 70 70 6f  t no build suppo
32b0: 72 74 29 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 26  rt)&lt;/li&gt;.&
32c0: 6c 74 3b 2f 75 6c 26 67 74 3b 0a 0a 26 6c 74 3b  lt;/ul&gt;..&lt;
32d0: 70 26 67 74 3b 53 74 65 76 65 20 42 65 6e 6e 65  p&gt;Steve Benne
32e0: 74 74 20 28 26 6c 74 3b 61 20 68 72 65 66 3d 22  tt (&lt;a href="
32f0: 26 61 6d 70 3b 23 31 30 39 3b 26 61 6d 70 3b 23  &amp;#109;&amp;#
3300: 30 39 37 3b 26 61 6d 70 3b 23 31 30 35 3b 26 61  097;&amp;#105;&a
3310: 6d 70 3b 23 31 30 38 3b 26 61 6d 70 3b 23 31 31  mp;#108;&amp;#11
3320: 36 3b 26 61 6d 70 3b 23 31 31 31 3b 3a 26 61 6d  6;&amp;#111;:&am
3330: 70 3b 23 31 31 35 3b 26 61 6d 70 3b 23 31 31 36  p;#115;&amp;#116
3340: 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b  ;&amp;#101;&amp;
3350: 23 31 31 38 3b 26 61 6d 70 3b 23 31 30 31 3b 26  #118;&amp;#101;&
3360: 61 6d 70 3b 23 30 39 38 3b 26 61 6d 70 3b 23 30  amp;#098;&amp;#0
3370: 36 34 3b 26 61 6d 70 3b 23 31 31 39 3b 26 61 6d  64;&amp;#119;&am
3380: 70 3b 23 31 31 31 3b 26 61 6d 70 3b 23 31 31 34  p;#111;&amp;#114
3390: 3b 26 61 6d 70 3b 23 31 30 37 3b 26 61 6d 70 3b  ;&amp;#107;&amp;
33a0: 23 31 31 39 3b 26 61 6d 70 3b 23 30 39 37 3b 26  #119;&amp;#097;&
33b0: 61 6d 70 3b 23 31 31 34 3b 26 61 6d 70 3b 23 31  amp;#114;&amp;#1
33c0: 30 31 3b 26 61 6d 70 3b 23 30 34 36 3b 26 61 6d  01;&amp;#046;&am
33d0: 70 3b 23 31 31 30 3b 26 61 6d 70 3b 23 31 30 31  p;#110;&amp;#101
33e0: 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d 70 3b  ;&amp;#116;&amp;
33f0: 23 30 34 36 3b 26 61 6d 70 3b 23 30 39 37 3b 26  #046;&amp;#097;&
3400: 61 6d 70 3b 23 31 31 37 3b 22 26 67 74 3b 26 61  amp;#117;"&gt;&a
3410: 6d 70 3b 23 31 31 35 3b 26 61 6d 70 3b 23 31 31  mp;#115;&amp;#11
3420: 36 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70  6;&amp;#101;&amp
3430: 3b 23 31 31 38 3b 26 61 6d 70 3b 23 31 30 31 3b  ;#118;&amp;#101;
3440: 26 61 6d 70 3b 23 30 39 38 3b 26 61 6d 70 3b 23  &amp;#098;&amp;#
3450: 30 36 34 3b 26 61 6d 70 3b 23 31 31 39 3b 26 61  064;&amp;#119;&a
3460: 6d 70 3b 23 31 31 31 3b 26 61 6d 70 3b 23 31 31  mp;#111;&amp;#11
3470: 34 3b 26 61 6d 70 3b 23 31 30 37 3b 26 61 6d 70  4;&amp;#107;&amp
3480: 3b 23 31 31 39 3b 26 61 6d 70 3b 23 30 39 37 3b  ;#119;&amp;#097;
3490: 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d 70 3b 23  &amp;#114;&amp;#
34a0: 31 30 31 3b 26 61 6d 70 3b 23 30 34 36 3b 26 61  101;&amp;#046;&a
34b0: 6d 70 3b 23 31 31 30 3b 26 61 6d 70 3b 23 31 30  mp;#110;&amp;#10
34c0: 31 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d 70  1;&amp;#116;&amp
34d0: 3b 23 30 34 36 3b 26 61 6d 70 3b 23 30 39 37 3b  ;#046;&amp;#097;
34e0: 26 61 6d 70 3b 23 31 31 37 3b 26 6c 74 3b 2f 61  &amp;#117;&lt;/a
34f0: 26 67 74 3b 29 26 6c 74 3b 2f 70 26 67 74 3b 0a  &gt;)&lt;/p&gt;.
3500: 3c 2f 63 6f 6e 74 65 6e 74 3e 0a 20 20 3c 2f 65  </content>.  </e
3510: 6e 74 72 79 3e 0a 20 20 3c 65 6e 74 72 79 3e 0a  ntry>.  <entry>.
3520: 20 20 20 20 3c 69 64 3e 74 61 67 3a 6a 69 6d 2e      <id>tag:jim.
3530: 62 65 72 6c 69 6f 73 2e 64 65 2c 32 30 31 31 2d  berlios.de,2011-
3540: 31 32 2d 31 35 3a 2f 61 72 74 69 63 6c 65 73 2f  12-15:/articles/
3550: 6c 69 67 68 74 2d 77 65 69 67 68 74 2d 6e 61 6d  light-weight-nam
3560: 65 73 70 61 63 65 73 2f 3c 2f 69 64 3e 0a 20 20  espaces/</id>.  
3570: 20 20 3c 74 69 74 6c 65 20 74 79 70 65 3d 22 68    <title type="h
3580: 74 6d 6c 22 3e 4c 69 67 68 74 77 65 69 67 68 74  tml">Lightweight
3590: 20 4e 61 6d 65 73 70 61 63 65 73 3c 2f 74 69 74   Namespaces</tit
35a0: 6c 65 3e 0a 20 20 20 20 3c 70 75 62 6c 69 73 68  le>.    <publish
35b0: 65 64 3e 32 30 31 31 2d 31 32 2d 31 34 54 31 34  ed>2011-12-14T14
35c0: 3a 30 30 3a 30 30 5a 3c 2f 70 75 62 6c 69 73 68  :00:00Z</publish
35d0: 65 64 3e 0a 20 20 20 20 3c 75 70 64 61 74 65 64  ed>.    <updated
35e0: 3e 32 30 31 31 2d 31 32 2d 31 34 54 31 34 3a 30  >2011-12-14T14:0
35f0: 30 3a 30 30 5a 3c 2f 75 70 64 61 74 65 64 3e 0a  0:00Z</updated>.
3600: 20 20 20 20 3c 6c 69 6e 6b 20 72 65 6c 3d 22 61      <link rel="a
3610: 6c 74 65 72 6e 61 74 65 22 20 68 72 65 66 3d 22  lternate" href="
3620: 68 74 74 70 3a 2f 2f 6a 69 6d 2e 62 65 72 6c 69  http://jim.berli
3630: 6f 73 2e 64 65 2f 61 72 74 69 63 6c 65 73 2f 6c  os.de/articles/l
3640: 69 67 68 74 2d 77 65 69 67 68 74 2d 6e 61 6d 65  ight-weight-name
3650: 73 70 61 63 65 73 2f 22 2f 3e 0a 20 20 20 20 3c  spaces/"/>.    <
3660: 63 6f 6e 74 65 6e 74 20 74 79 70 65 3d 22 68 74  content type="ht
3670: 6d 6c 22 3e 26 6c 74 3b 70 26 67 74 3b 4e 65 77  ml">&lt;p&gt;New
3680: 20 69 6e 20 4a 69 6d 20 54 63 6c 20 76 30 2e 37   in Jim Tcl v0.7
3690: 33 20 69 73 20 28 6f 70 74 69 6f 6e 61 6c 29 20  3 is (optional) 
36a0: 73 75 70 70 6f 72 74 20 66 6f 72 20 6e 61 6d 65  support for name
36b0: 73 70 61 63 65 73 2e 26 6c 74 3b 2f 70 26 67 74  spaces.&lt;/p&gt
36c0: 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 54 68 65 20  ;..&lt;p&gt;The 
36d0: 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 74 61 6b  following is tak
36e0: 65 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d  en directly from
36f0: 20 52 45 41 44 4d 45 2e 6e 61 6d 65 73 70 61 63   README.namespac
3700: 65 73 20 69 6e 20 74 68 65 20 4a 69 6d 20 54 63  es in the Jim Tc
3710: 6c 20 72 65 70 6f 73 69 74 6f 72 79 2e 26 6c 74  l repository.&lt
3720: 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 68 72 20  ;/p&gt;..&lt;hr 
3730: 2f 26 67 74 3b 0a 0a 26 6c 74 3b 68 31 20 69 64  /&gt;..&lt;h1 id
3740: 3d 22 6c 69 67 68 74 77 65 69 67 68 74 2d 6e 61  ="lightweight-na
3750: 6d 65 73 70 61 63 65 73 2d 66 6f 72 2d 6a 69 6d  mespaces-for-jim
3760: 2d 74 63 6c 22 26 67 74 3b 4c 69 67 68 74 77 65  -tcl"&gt;Lightwe
3770: 69 67 68 74 20 4e 61 6d 65 73 70 61 63 65 73 20  ight Namespaces 
3780: 66 6f 72 20 4a 69 6d 20 54 63 6c 26 6c 74 3b 2f  for Jim Tcl&lt;/
3790: 68 31 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74  h1&gt;..&lt;p&gt
37a0: 3b 54 68 65 72 65 20 61 72 65 20 74 77 6f 20 62  ;There are two b
37b0: 72 6f 61 64 20 72 65 71 75 69 72 65 6d 65 6e 74  road requirement
37c0: 73 20 66 6f 72 20 6e 61 6d 65 73 70 61 63 65 20  s for namespace 
37d0: 73 75 70 70 6f 72 74 20 69 6e 20 4a 69 6d 20 54  support in Jim T
37e0: 63 6c 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26  cl.&lt;/p&gt;..&
37f0: 6c 74 3b 75 6c 26 67 74 3b 0a 20 20 26 6c 74 3b  lt;ul&gt;.  &lt;
3800: 6c 69 26 67 74 3b 28 31 29 20 54 6f 20 61 6c 6c  li&gt;(1) To all
3810: 6f 77 20 63 6f 64 65 20 66 72 6f 6d 20 6d 75 6c  ow code from mul
3820: 74 69 70 6c 65 20 73 6f 75 72 63 65 73 20 77 68  tiple sources wh
3830: 69 6c 65 20 72 65 64 75 63 69 6e 67 20 74 68 65  ile reducing the
3840: 20 63 68 61 6e 63 65 20 6f 66 20 6e 61 6d 65 20   chance of name 
3850: 63 6c 61 73 68 65 73 26 6c 74 3b 2f 6c 69 26 67  clashes&lt;/li&g
3860: 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74 3b 28  t;.  &lt;li&gt;(
3870: 32 29 20 54 6f 20 73 69 6d 70 6c 69 66 79 20 70  2) To simplify p
3880: 6f 72 74 69 6e 67 20 65 78 69 73 74 69 6e 67 20  orting existing 
3890: 54 63 6c 20 63 6f 64 65 20 77 68 69 63 68 20 75  Tcl code which u
38a0: 73 65 73 20 6e 61 6d 65 73 70 61 63 65 73 26 6c  ses namespaces&l
38b0: 74 3b 2f 6c 69 26 67 74 3b 0a 26 6c 74 3b 2f 75  t;/li&gt;.&lt;/u
38c0: 6c 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b  l&gt;..&lt;p&gt;
38d0: 54 68 69 73 20 70 72 6f 70 6f 73 61 6c 20 61 64  This proposal ad
38e0: 64 72 65 73 73 65 73 20 62 6f 74 68 20 6f 66 20  dresses both of 
38f0: 74 68 65 73 65 20 72 65 71 75 69 72 65 6d 65 6e  these requiremen
3900: 74 73 2c 20 77 69 74 68 20 74 68 65 20 66 6f 6c  ts, with the fol
3910: 6c 6f 77 69 6e 67 0a 61 64 64 69 74 69 6f 6e 61  lowing.additiona
3920: 6c 20 72 65 71 75 69 72 65 6d 65 6e 74 73 20 69  l requirements i
3930: 6d 70 6f 73 65 64 20 62 79 20 4a 69 6d 20 54 63  mposed by Jim Tc
3940: 6c 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c  l.&lt;/p&gt;..&l
3950: 74 3b 75 6c 26 67 74 3b 0a 20 20 26 6c 74 3b 6c  t;ul&gt;.  &lt;l
3960: 69 26 67 74 3b 28 33 29 20 53 75 70 70 6f 72 74  i&gt;(3) Support
3970: 20 66 6f 72 20 6e 61 6d 65 73 70 61 63 65 73 20   for namespaces 
3980: 73 68 6f 75 6c 64 20 62 65 20 6f 70 74 69 6f 6e  should be option
3990: 61 6c 2c 20 77 69 74 68 20 74 68 65 20 73 70 61  al, with the spa
39a0: 63 65 20 61 6e 64 20 74 69 6d 65 20 6f 76 65 72  ce and time over
39b0: 68 65 61 64 0a 20 77 68 65 6e 20 6e 61 6d 65 73  head. when names
39c0: 70 61 63 65 73 20 61 72 65 20 64 69 73 61 62 6c  paces are disabl
39d0: 65 64 20 61 73 20 63 6c 6f 73 65 20 74 6f 20 7a  ed as close to z
39e0: 65 72 6f 20 61 73 20 70 6f 73 73 69 62 6c 65 2e  ero as possible.
39f0: 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26 6c  &lt;/li&gt;.  &l
3a00: 74 3b 6c 69 26 67 74 3b 28 34 29 20 54 68 65 20  t;li&gt;(4) The 
3a10: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 73  implementation s
3a20: 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20 61  hould be small a
3a30: 6e 64 20 72 65 61 73 6f 6e 61 62 6c 79 20 65 66  nd reasonably ef
3a40: 66 69 63 69 65 6e 74 2e 26 6c 74 3b 2f 6c 69 26  ficient.&lt;/li&
3a50: 67 74 3b 0a 26 6c 74 3b 2f 75 6c 26 67 74 3b 0a  gt;.&lt;/ul&gt;.
3a60: 0a 26 6c 74 3b 70 26 67 74 3b 54 6f 20 66 75 72  .&lt;p&gt;To fur
3a70: 74 68 65 72 20 65 78 70 61 6e 64 20 6f 6e 20 72  ther expand on r
3a80: 65 71 75 69 72 65 6d 65 6e 74 20 28 32 29 2c 20  equirement (2), 
3a90: 74 68 65 20 67 6f 61 6c 20 69 73 20 6e 6f 74 20  the goal is not 
3aa0: 74 6f 20 62 65 20 61 62 6c 65 20 74 6f 20 72 75  to be able to ru
3ab0: 6e 0a 61 6e 79 20 54 63 6c 20 73 63 72 69 70 74  n.any Tcl script
3ac0: 73 20 75 73 69 6e 67 20 6e 61 6d 65 73 70 61 63  s using namespac
3ad0: 65 73 20 77 69 74 68 20 6e 6f 20 63 68 61 6e 67  es with no chang
3ae0: 65 73 2e 20 52 61 74 68 65 72 2c 20 73 63 72 69  es. Rather, scri
3af0: 70 74 73 0a 77 68 69 63 68 20 75 73 65 20 6e 61  pts.which use na
3b00: 6d 65 73 70 61 63 65 73 20 69 6e 20 61 20 73 74  mespaces in a st
3b10: 72 61 69 67 68 74 66 6f 72 77 61 72 64 20 6d 61  raightforward ma
3b20: 6e 6e 65 72 2c 20 73 68 6f 75 6c 64 20 62 65 20  nner, should be 
3b30: 65 61 73 69 6c 79 0a 70 6f 72 74 65 64 20 77 69  easily.ported wi
3b40: 74 68 20 63 68 61 6e 67 65 73 20 77 68 69 63 68  th changes which
3b50: 20 61 72 65 20 63 6f 6d 70 61 74 69 62 6c 65 20   are compatible 
3b60: 77 69 74 68 20 54 63 6c 2e 26 6c 74 3b 2f 70 26  with Tcl.&lt;/p&
3b70: 67 74 3b 0a 0a 26 6c 74 3b 68 32 20 69 64 3d 22  gt;..&lt;h2 id="
3b80: 69 6d 70 6c 69 63 69 74 2d 6e 61 6d 65 73 70 61  implicit-namespa
3b90: 63 65 73 22 26 67 74 3b 49 6d 70 6c 69 63 69 74  ces"&gt;Implicit
3ba0: 20 6e 61 6d 65 73 70 61 63 65 73 26 6c 74 3b 2f   namespaces&lt;/
3bb0: 68 32 26 67 74 3b 0a 26 6c 74 3b 70 26 67 74 3b  h2&gt;.&lt;p&gt;
3bc0: 52 61 74 68 65 72 20 74 68 61 6e 20 73 75 70 70  Rather than supp
3bd0: 6f 72 74 69 6e 67 20 65 78 70 6c 69 63 69 74 20  orting explicit 
3be0: 6e 61 6d 65 73 70 61 63 65 73 20 61 73 20 54 63  namespaces as Tc
3bf0: 6c 20 64 6f 65 73 2c 20 4a 69 6d 20 54 63 6c 0a  l does, Jim Tcl.
3c00: 73 75 70 70 6f 72 74 73 20 69 6d 70 6c 69 63 69  supports implici
3c10: 74 20 6e 61 6d 65 73 70 61 63 65 73 2e 20 41 6e  t namespaces. An
3c20: 79 20 70 72 6f 63 65 64 75 72 65 20 6f 72 20 76  y procedure or v
3c30: 61 72 69 61 62 6c 65 20 77 68 69 63 68 0a 69 73  ariable which.is
3c40: 20 64 65 66 69 6e 65 64 20 77 69 74 68 20 61 20   defined with a 
3c50: 6e 61 6d 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  name containing 
3c60: 3a 3a 2c 20 69 73 20 69 6d 70 6c 69 63 69 74 6c  ::, is implicitl
3c70: 79 20 73 63 6f 70 65 64 20 77 69 74 68 69 6e 0a  y scoped within.
3c80: 61 20 6e 61 6d 65 73 70 61 63 65 2e 26 6c 74 3b  a namespace.&lt;
3c90: 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74  /p&gt;..&lt;p&gt
3ca0: 3b 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68  ;For example, th
3cb0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 72 6f 63  e following proc
3cc0: 65 64 75 72 65 20 61 6e 64 20 76 61 72 69 61 62  edure and variab
3cd0: 6c 65 20 61 72 65 20 63 72 65 61 74 65 64 0a 69  le are created.i
3ce0: 6e 20 74 68 65 20 6e 61 6d 65 73 70 61 63 65 20  n the namespace 
3cf0: 26 61 6d 70 3b 6c 73 71 75 6f 3b 74 65 73 74 26  &amp;lsquo;test&
3d00: 61 6d 70 3b 72 73 71 75 6f 3b 26 6c 74 3b 2f 70  amp;rsquo;&lt;/p
3d10: 26 67 74 3b 0a 0a 26 6c 74 3b 70 72 65 20 63 6c  &gt;..&lt;pre cl
3d20: 61 73 73 3d 22 73 68 5f 74 63 6c 22 26 67 74 3b  ass="sh_tcl"&gt;
3d30: 0a 70 72 6f 63 20 3a 3a 74 65 73 74 3a 3a 6d 79  .proc ::test::my
3d40: 70 72 6f 63 20 7b 7d 20 7b 0a 20 20 70 75 74 73  proc {} {.  puts
3d50: 20 22 49 20 61 6d 20 69 6e 20 6e 61 6d 65 73 70   "I am in namesp
3d60: 61 63 65 20 5b 6e 61 6d 65 73 70 61 63 65 20 63  ace [namespace c
3d70: 75 72 72 65 6e 74 5d 22 0a 7d 0a 73 65 74 20 3a  urrent]".}.set :
3d80: 3a 74 65 73 74 3a 3a 6d 79 76 61 72 20 33 0a 26  :test::myvar 3.&
3d90: 6c 74 3b 2f 70 72 65 26 67 74 3b 0a 0a 26 6c 74  lt;/pre&gt;..&lt
3da0: 3b 70 26 67 74 3b 54 68 69 73 20 61 70 70 72 6f  ;p&gt;This appro
3db0: 61 63 68 20 61 6c 6c 6f 77 73 20 6d 75 63 68 20  ach allows much 
3dc0: 6f 66 20 74 68 65 20 65 78 69 73 74 69 6e 67 20  of the existing 
3dd0: 76 61 72 69 61 62 6c 65 20 61 6e 64 20 63 6f 6d  variable and com
3de0: 6d 61 6e 64 0a 72 65 73 6f 6c 75 74 69 6f 6e 20  mand.resolution 
3df0: 6d 61 63 68 69 6e 65 72 79 20 74 6f 20 62 65 20  machinery to be 
3e00: 75 73 65 64 20 77 69 74 68 20 6c 69 74 74 6c 65  used with little
3e10: 20 63 68 61 6e 67 65 2e 20 49 74 20 61 6c 73 6f   change. It also
3e20: 20 6d 65 61 6e 73 0a 74 68 61 74 20 69 74 20 69   means.that it i
3e30: 73 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 73 69  s possible to si
3e40: 6d 70 6c 79 20 64 65 66 69 6e 65 20 61 20 6e 61  mply define a na
3e50: 6d 65 73 70 61 63 65 2d 73 63 6f 70 65 64 20 76  mespace-scoped v
3e60: 61 72 69 61 62 6c 65 0a 6f 72 20 70 72 6f 63 65  ariable.or proce
3e70: 64 75 72 65 20 77 69 74 68 6f 75 74 20 66 69 72  dure without fir
3e80: 73 74 20 63 72 65 61 74 69 6e 67 20 74 68 65 20  st creating the 
3e90: 6e 61 6d 65 73 70 61 63 65 2c 20 61 6e 64 20 73  namespace, and s
3ea0: 69 6d 69 6c 61 72 6c 79 2c 0a 6e 61 6d 65 73 70  imilarly,.namesp
3eb0: 61 63 65 73 20 26 61 6d 70 3b 6c 64 71 75 6f 3b  aces &amp;ldquo;
3ec0: 64 69 73 61 70 70 65 61 72 26 61 6d 70 3b 72 64  disappear&amp;rd
3ed0: 71 75 6f 3b 20 77 68 65 6e 20 61 6c 6c 20 76 61  quo; when all va
3ee0: 72 69 61 62 6c 65 73 20 61 6e 64 20 70 72 6f 63  riables and proc
3ef0: 65 64 75 72 65 73 20 64 65 66 69 6e 65 64 0a 77  edures defined.w
3f00: 69 74 68 20 74 68 65 20 6e 61 6d 65 73 70 61 63  ith the namespac
3f10: 65 20 73 63 6f 70 65 20 61 72 65 20 64 65 6c 65  e scope are dele
3f20: 74 65 64 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a  ted.&lt;/p&gt;..
3f30: 26 6c 74 3b 68 32 20 69 64 3d 22 6e 61 6d 65 73  &lt;h2 id="names
3f40: 70 61 63 65 73 2d 70 72 6f 63 65 64 75 72 65 73  paces-procedures
3f50: 2d 61 6e 64 2d 63 61 6c 6c 2d 66 72 61 6d 65 73  -and-call-frames
3f60: 22 26 67 74 3b 4e 61 6d 65 73 70 61 63 65 73 2c  "&gt;Namespaces,
3f70: 20 70 72 6f 63 65 64 75 72 65 73 20 61 6e 64 20   procedures and 
3f80: 63 61 6c 6c 20 66 72 61 6d 65 73 26 6c 74 3b 2f  call frames&lt;/
3f90: 68 32 26 67 74 3b 0a 26 6c 74 3b 70 26 67 74 3b  h2&gt;.&lt;p&gt;
3fa0: 57 68 65 6e 20 6e 61 6d 65 73 70 61 63 65 20 73  When namespace s
3fb0: 75 70 70 6f 72 74 20 69 73 20 65 6e 61 62 6c 65  upport is enable
3fc0: 64 20 28 61 74 20 62 75 69 6c 64 20 74 69 6d 65  d (at build time
3fd0: 29 2c 20 65 61 63 68 20 70 72 6f 63 65 64 75 72  ), each procedur
3fe0: 65 20 68 61 73 20 61 6e 20 61 73 73 6f 63 69 61  e has an associa
3ff0: 74 65 64 0a 6e 61 6d 65 73 70 61 63 65 20 28 62  ted.namespace (b
4000: 61 73 65 64 20 6f 6e 20 74 68 65 20 70 72 6f 63  ased on the proc
4010: 65 64 75 72 65 20 6e 61 6d 65 29 2e 20 57 68 65  edure name). Whe
4020: 6e 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20  n the procedure 
4030: 69 73 20 65 76 61 6c 75 61 74 65 64 2c 0a 74 68  is evaluated,.th
4040: 65 20 6e 61 6d 65 73 70 61 63 65 20 66 6f 72 20  e namespace for 
4050: 74 68 65 20 63 72 65 61 74 65 64 20 63 61 6c 6c  the created call
4060: 20 66 72 61 6d 65 20 69 73 20 73 65 74 20 74 6f   frame is set to
4070: 20 74 68 65 20 6e 61 6d 65 73 70 61 63 65 20 61   the namespace a
4080: 73 73 6f 63 69 61 74 65 64 0a 77 69 74 68 20 74  ssociated.with t
4090: 68 65 20 70 72 6f 63 65 64 75 72 65 2e 26 6c 74  he procedure.&lt
40a0: 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67  ;/p&gt;..&lt;p&g
40b0: 74 3b 43 6f 6d 6d 61 6e 64 20 72 65 73 6f 6c 75  t;Command resolu
40c0: 74 69 6f 6e 20 69 73 20 62 61 73 65 64 20 6f 6e  tion is based on
40d0: 20 74 68 65 20 6e 61 6d 65 73 70 61 63 65 20 6f   the namespace o
40e0: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 61  f the current ca
40f0: 6c 6c 20 66 72 61 6d 65 2e 0a 41 6e 20 75 6e 73  ll frame..An uns
4100: 63 6f 70 65 64 20 63 6f 6d 6d 61 6e 64 20 6e 61  coped command na
4110: 6d 65 20 77 69 6c 6c 20 66 69 72 73 74 20 62 65  me will first be
4120: 20 6c 6f 6f 6b 65 64 20 75 70 20 69 6e 20 74 68   looked up in th
4130: 65 20 63 75 72 72 65 6e 74 20 6e 61 6d 65 73 70  e current namesp
4140: 61 63 65 2c 0a 61 6e 64 20 74 68 65 6e 20 69 6e  ace,.and then in
4150: 20 74 68 65 20 67 6c 6f 62 61 6c 20 6e 61 6d 65   the global name
4160: 73 70 61 63 65 2e 26 6c 74 3b 2f 70 26 67 74 3b  space.&lt;/p&gt;
4170: 0a 0a 26 6c 74 3b 70 26 67 74 3b 54 68 69 73 20  ..&lt;p&gt;This 
4180: 61 6c 73 6f 20 6d 65 61 6e 73 20 74 68 61 74 20  also means that 
4190: 63 6f 6d 6d 61 6e 64 73 20 77 68 69 63 68 20 64  commands which d
41a0: 6f 20 6e 6f 74 20 63 72 65 61 74 65 20 61 20 63  o not create a c
41b0: 61 6c 6c 20 66 72 61 6d 65 20 28 73 75 63 68 20  all frame (such 
41c0: 61 73 20 63 6f 6d 6d 61 6e 64 73 0a 69 6d 70 6c  as commands.impl
41d0: 65 6d 65 6e 74 65 64 20 69 6e 20 43 29 20 64 6f  emented in C) do
41e0: 20 6e 6f 74 20 68 61 76 65 20 61 6e 20 61 73 73   not have an ass
41f0: 6f 63 69 61 74 65 64 20 6e 61 6d 65 73 70 61 63  ociated namespac
4200: 65 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c  e.&lt;/p&gt;..&l
4210: 74 3b 70 26 67 74 3b 53 69 6d 69 6c 61 72 6c 79  t;p&gt;Similarly
4220: 20 74 6f 20 54 63 6c 2c 20 6e 61 6d 65 73 70 61   to Tcl, namespa
4230: 63 65 20 65 76 61 6c 20 69 6e 74 72 6f 64 75 63  ce eval introduc
4240: 65 73 20 61 20 74 65 6d 70 6f 72 61 72 79 2c 20  es a temporary, 
4250: 61 6e 6f 6e 79 6d 6f 75 73 0a 63 61 6c 6c 20 66  anonymous.call f
4260: 72 61 6d 65 20 77 69 74 68 20 74 68 65 20 61 73  rame with the as
4270: 73 6f 63 69 61 74 65 64 20 6e 61 6d 65 73 70 61  sociated namespa
4280: 63 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  ce. For example,
4290: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 77   the following.w
42a0: 69 6c 6c 20 72 65 74 75 72 6e 20 26 61 6d 70 3b  ill return &amp;
42b0: 6c 64 71 75 6f 3b 3a 3a 74 65 73 74 2c 31 26 61  ldquo;::test,1&a
42c0: 6d 70 3b 72 64 71 75 6f 3b 2e 26 6c 74 3b 2f 70  mp;rdquo;.&lt;/p
42d0: 26 67 74 3b 0a 0a 26 6c 74 3b 70 72 65 20 63 6c  &gt;..&lt;pre cl
42e0: 61 73 73 3d 22 73 68 5f 74 63 6c 22 26 67 74 3b  ass="sh_tcl"&gt;
42f0: 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20  .namespace eval 
4300: 74 65 73 74 20 7b 0a 09 70 75 74 73 20 5b 6e 61  test {..puts [na
4310: 6d 65 73 70 61 63 65 20 63 75 72 72 65 6e 74 5d  mespace current]
4320: 2c 5b 69 6e 66 6f 20 6c 65 76 65 6c 5d 0a 7d 0a  ,[info level].}.
4330: 26 6c 74 3b 2f 70 72 65 26 67 74 3b 0a 0a 26 6c  &lt;/pre&gt;..&l
4340: 74 3b 68 32 20 69 64 3d 22 76 61 72 69 61 62 6c  t;h2 id="variabl
4350: 65 2d 72 65 73 6f 6c 75 74 69 6f 6e 22 26 67 74  e-resolution"&gt
4360: 3b 56 61 72 69 61 62 6c 65 20 72 65 73 6f 6c 75  ;Variable resolu
4370: 74 69 6f 6e 26 6c 74 3b 2f 68 32 26 67 74 3b 0a  tion&lt;/h2&gt;.
4380: 26 6c 74 3b 70 26 67 74 3b 54 68 65 20 76 61 72  &lt;p&gt;The var
4390: 69 61 62 6c 65 20 63 6f 6d 6d 61 6e 64 20 69 6e  iable command in
43a0: 20 4a 69 6d 20 54 63 6c 20 68 61 73 20 74 68 65   Jim Tcl has the
43b0: 20 73 61 6d 65 20 73 79 6e 74 61 78 20 61 73 20   same syntax as 
43c0: 54 63 6c 2c 20 62 75 74 20 69 73 20 63 6c 6f 73  Tcl, but is clos
43d0: 65 72 20 69 6e 20 62 65 68 61 76 69 6f 75 72 20  er in behaviour 
43e0: 74 6f 20 74 68 65 20 67 6c 6f 62 61 6c 20 63 6f  to the global co
43f0: 6d 6d 61 6e 64 2e 0a 54 68 65 20 76 61 72 69 61  mmand..The varia
4400: 62 6c 65 20 63 6f 6d 6d 61 6e 64 20 63 72 65 61  ble command crea
4410: 74 65 73 20 61 20 6c 69 6e 6b 20 66 72 6f 6d 20  tes a link from 
4420: 61 20 6c 6f 63 61 6c 20 76 61 72 69 61 62 6c 65  a local variable
4430: 20 74 6f 20 61 20 6e 61 6d 65 73 70 61 63 65 20   to a namespace 
4440: 76 61 72 69 61 62 6c 65 2c 20 70 6f 73 73 69 62  variable, possib
4450: 6c 79 20 69 6e 69 74 69 61 6c 69 73 69 6e 67 20  ly initialising 
4460: 69 74 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26  it.&lt;/p&gt;..&
4470: 6c 74 3b 70 26 67 74 3b 46 6f 72 20 65 78 61 6d  lt;p&gt;For exam
4480: 70 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ple, the followi
4490: 6e 67 20 70 72 6f 63 65 64 75 72 65 20 75 73 65  ng procedure use
44a0: 73 20 26 61 6d 70 3b 6c 73 71 75 6f 3b 76 61 72  s &amp;lsquo;var
44b0: 69 61 62 6c 65 26 61 6d 70 3b 72 73 71 75 6f 3b  iable&amp;rsquo;
44c0: 20 74 6f 20 69 6e 69 74 69 61 6c 73 65 20 61 6e   to initialse an
44d0: 64 20 61 63 63 65 73 73 20 6d 79 76 61 72 2e 26  d access myvar.&
44e0: 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70  lt;/p&gt;..&lt;p
44f0: 72 65 20 63 6c 61 73 73 3d 22 73 68 5f 74 63 6c  re class="sh_tcl
4500: 22 26 67 74 3b 0a 70 72 6f 63 20 3a 3a 74 65 73  "&gt;.proc ::tes
4510: 74 3a 3a 6d 79 70 72 6f 63 20 7b 7d 20 7b 0a 20  t::myproc {} {. 
4520: 20 76 61 72 69 61 62 6c 65 20 6d 79 76 61 72 20   variable myvar 
4530: 34 0a 20 20 69 6e 63 72 20 6d 79 76 61 72 0a 7d  4.  incr myvar.}
4540: 0a 26 6c 74 3b 2f 70 72 65 26 67 74 3b 0a 0a 26  .&lt;/pre&gt;..&
4550: 6c 74 3b 70 26 67 74 3b 4e 6f 74 65 20 74 68 61  lt;p&gt;Note tha
4560: 74 20 74 68 65 72 65 20 69 73 20 6e 6f 20 61 75  t there is no au
4570: 74 6f 6d 61 74 69 63 20 72 65 73 6f 6c 75 74 69  tomatic resoluti
4580: 6f 6e 20 6f 66 20 6e 61 6d 65 73 70 61 63 65 20  on of namespace 
4590: 76 61 72 69 61 62 6c 65 73 2e 0a 46 6f 72 20 65  variables..For e
45a0: 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 6f 6c 6c  xample, the foll
45b0: 6f 77 69 6e 67 20 77 69 6c 6c 20 26 6c 74 3b 65  owing will &lt;e
45c0: 6d 26 67 74 3b 6e 6f 74 26 6c 74 3b 2f 65 6d 26  m&gt;not&lt;/em&
45d0: 67 74 3b 20 77 6f 72 6b 2e 26 6c 74 3b 2f 70 26  gt; work.&lt;/p&
45e0: 67 74 3b 0a 0a 26 6c 74 3b 70 72 65 20 63 6c 61  gt;..&lt;pre cla
45f0: 73 73 3d 22 73 68 5f 74 63 6c 22 26 67 74 3b 0a  ss="sh_tcl"&gt;.
4600: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a  namespace eval :
4610: 3a 74 65 73 74 20 7b 0a 20 20 76 61 72 69 61 62  :test {.  variab
4620: 6c 65 20 6d 79 76 61 72 20 34 0a 7d 0a 6e 61 6d  le myvar 4.}.nam
4630: 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 74 65  espace eval ::te
4640: 73 74 20 7b 0a 20 20 23 20 54 68 69 73 20 77 69  st {.  # This wi
4650: 6c 6c 20 69 6e 63 72 65 6d 65 6e 74 20 61 20 6c  ll increment a l
4660: 6f 63 61 6c 20 76 61 72 69 61 62 6c 65 2c 20 6e  ocal variable, n
4670: 6f 74 20 3a 3a 74 65 73 74 3a 3a 6d 79 76 61 72  ot ::test::myvar
4680: 0a 20 20 69 6e 63 72 20 6d 79 76 61 72 0a 7d 0a  .  incr myvar.}.
4690: 26 6c 74 3b 2f 70 72 65 26 67 74 3b 0a 0a 26 6c  &lt;/pre&gt;..&l
46a0: 74 3b 70 26 67 74 3b 41 6e 64 20 73 69 6d 69 6c  t;p&gt;And simil
46b0: 61 72 6c 79 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  arly, the follow
46c0: 69 6e 67 20 77 69 6c 6c 20 6f 6e 6c 79 20 61 63  ing will only ac
46d0: 63 65 73 73 20 6c 6f 63 61 6c 20 76 61 72 69 61  cess local varia
46e0: 62 6c 65 73 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a  bles&lt;/p&gt;..
46f0: 26 6c 74 3b 70 72 65 20 63 6c 61 73 73 3d 22 73  &lt;pre class="s
4700: 68 5f 74 63 6c 22 26 67 74 3b 0a 73 65 74 20 78  h_tcl"&gt;.set x
4710: 20 33 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61   3.namespace eva
4720: 6c 20 3a 3a 74 65 73 74 20 7b 0a 09 23 20 54 68  l ::test {..# Th
4730: 69 73 20 77 69 6c 6c 20 69 6e 63 72 65 6d 65 6d  is will incremem
4740: 65 6e 74 20 61 20 6c 6f 63 61 6c 20 76 61 72 69  ent a local vari
4750: 61 62 6c 65 2c 20 6e 6f 74 20 3a 3a 78 0a 09 69  able, not ::x..i
4760: 6e 63 72 20 78 0a 09 23 20 54 68 69 73 20 77 69  ncr x..# This wi
4770: 6c 6c 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e  ll also incremen
4780: 74 20 61 20 6c 6f 63 61 6c 20 76 61 72 69 61 62  t a local variab
4790: 6c 65 0a 09 69 6e 63 72 20 61 62 63 3a 3a 64 65  le..incr abc::de
47a0: 66 0a 7d 0a 26 6c 74 3b 2f 70 72 65 26 67 74 3b  f.}.&lt;/pre&gt;
47b0: 0a 0a 26 6c 74 3b 70 26 67 74 3b 49 6e 20 74 68  ..&lt;p&gt;In th
47c0: 65 20 73 61 6d 65 20 77 61 79 20 74 68 61 74 20  e same way that 
47d0: 76 61 72 69 61 62 6c 65 20 72 65 73 6f 6c 75 74  variable resolut
47e0: 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 26 61 6d  ion does not &am
47f0: 70 3b 6c 64 71 75 6f 3b 66 61 6c 6c 20 62 61 63  p;ldquo;fall bac
4800: 6b 26 61 6d 70 3b 72 64 71 75 6f 3b 20 74 6f 0a  k&amp;rdquo; to.
4810: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 73  global variables
4820: 2c 20 69 74 20 61 6c 73 6f 20 64 6f 65 73 20 6e  , it also does n
4830: 6f 74 20 26 61 6d 70 3b 6c 64 71 75 6f 3b 66 61  ot &amp;ldquo;fa
4840: 6c 6c 20 62 61 63 6b 26 61 6d 70 3b 72 64 71 75  ll back&amp;rdqu
4850: 6f 3b 20 74 6f 20 6e 61 6d 65 73 70 61 63 65 20  o; to namespace 
4860: 76 61 72 69 61 62 6c 65 73 2e 26 6c 74 3b 2f 70  variables.&lt;/p
4870: 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 54  &gt;..&lt;p&gt;T
4880: 68 69 73 20 61 70 70 72 6f 61 63 68 20 61 6c 6c  his approach all
4890: 6f 77 73 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74  ows name resolut
48a0: 69 6f 6e 20 74 6f 20 62 65 20 73 69 6d 70 6c 65  ion to be simple
48b0: 72 20 61 6e 64 20 6d 6f 72 65 20 65 66 66 69 63  r and more effic
48c0: 69 65 6e 74 0a 73 69 6e 63 65 20 69 74 20 75 73  ient.since it us
48d0: 65 73 20 74 68 65 20 73 61 6d 65 20 76 61 72 69  es the same vari
48e0: 61 62 6c 65 20 6c 69 6e 6b 69 6e 67 20 6d 65 63  able linking mec
48f0: 68 61 6e 69 73 6d 20 61 73 20 75 70 76 61 72 2f  hanism as upvar/
4900: 67 6c 6f 62 61 6c 0a 61 6e 64 20 69 74 20 61 6c  global.and it al
4910: 6c 6f 77 73 20 6e 61 6d 65 73 70 61 63 65 73 20  lows namespaces 
4920: 74 6f 20 62 65 20 69 6d 70 6c 69 63 69 74 2e 20  to be implicit. 
4930: 49 74 20 61 6c 73 6f 20 73 6f 6c 76 65 73 20 74  It also solves t
4940: 68 65 20 26 61 6d 70 3b 6c 64 71 75 6f 3b 63 72  he &amp;ldquo;cr
4950: 65 61 74 69 76 65 0a 77 72 69 74 69 6e 67 26 61  eative.writing&a
4960: 6d 70 3b 72 64 71 75 6f 3b 20 70 72 6f 62 6c 65  mp;rdquo; proble
4970: 6d 20 77 68 65 72 65 20 61 20 76 61 72 69 61 62  m where a variab
4980: 6c 65 20 6d 61 79 20 62 65 20 63 72 65 61 74 65  le may be create
4990: 64 20 69 6e 20 61 6e 20 75 6e 69 6e 74 65 6e 74  d in an unintent
49a0: 69 6f 6e 61 6c 0a 73 63 6f 70 65 2e 26 6c 74 3b  ional.scope.&lt;
49b0: 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 68 32 20 69  /p&gt;..&lt;h2 i
49c0: 64 3d 22 74 68 65 2d 6e 61 6d 65 73 70 61 63 65  d="the-namespace
49d0: 2d 63 6f 6d 6d 61 6e 64 22 26 67 74 3b 54 68 65  -command"&gt;The
49e0: 20 6e 61 6d 65 73 70 61 63 65 20 63 6f 6d 6d 61   namespace comma
49f0: 6e 64 26 6c 74 3b 2f 68 32 26 67 74 3b 0a 26 6c  nd&lt;/h2&gt;.&l
4a00: 74 3b 70 26 67 74 3b 43 75 72 72 65 6e 74 6c 79  t;p&gt;Currently
4a10: 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
4a20: 6e 61 6d 65 73 70 61 63 65 20 63 6f 6d 6d 61 6e  namespace comman
4a30: 64 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  ds are supported
4a40: 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74  .&lt;/p&gt;..&lt
4a50: 3b 75 6c 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69  ;ul&gt;.  &lt;li
4a60: 26 67 74 3b 63 75 72 72 65 6e 74 20 2d 20 72 65  &gt;current - re
4a70: 74 75 72 6e 73 20 74 68 65 20 63 75 72 72 65 6e  turns the curren
4a80: 74 2c 20 66 75 6c 6c 79 2d 71 75 61 6c 69 66 69  t, fully-qualifi
4a90: 65 64 20 6e 61 6d 65 73 70 61 63 65 26 6c 74 3b  ed namespace&lt;
4aa0: 2f 6c 69 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69  /li&gt;.  &lt;li
4ab0: 26 67 74 3b 65 76 61 6c 20 2d 20 65 76 61 6c 75  &gt;eval - evalu
4ac0: 61 74 65 73 20 61 20 73 63 72 69 70 74 20 69 6e  ates a script in
4ad0: 20 61 20 6e 61 6d 65 73 70 61 63 65 20 28 69 6e   a namespace (in
4ae0: 74 72 6f 64 75 63 65 73 20 61 20 63 61 6c 6c 20  troduces a call 
4af0: 66 72 61 6d 65 29 26 6c 74 3b 2f 6c 69 26 67 74  frame)&lt;/li&gt
4b00: 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74 3b 71 75  ;.  &lt;li&gt;qu
4b10: 61 6c 69 66 69 65 72 73 2c 20 74 61 69 6c 2c 20  alifiers, tail, 
4b20: 70 61 72 65 6e 74 20 2d 20 6e 6f 74 65 20 74 68  parent - note th
4b30: 61 74 20 74 68 65 73 65 20 64 6f 20 6e 6f 74 20  at these do not 
4b40: 63 68 65 63 6b 20 66 6f 72 20 65 78 69 73 74 65  check for existe
4b50: 6e 63 65 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20  nce&lt;/li&gt;. 
4b60: 20 26 6c 74 3b 6c 69 26 67 74 3b 63 6f 64 65 2c   &lt;li&gt;code,
4b70: 20 69 6e 73 63 6f 70 65 20 2d 20 69 6d 70 6c 65   inscope - imple
4b80: 6d 65 6e 74 65 64 26 6c 74 3b 2f 6c 69 26 67 74  mented&lt;/li&gt
4b90: 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74 3b 64 65  ;.  &lt;li&gt;de
4ba0: 6c 65 74 65 20 2d 20 64 65 6c 65 74 65 73 20 61  lete - deletes a
4bb0: 6c 6c 20 76 61 72 69 61 62 6c 65 73 20 61 6e 64  ll variables and
4bc0: 20 63 6f 6d 6d 61 6e 64 73 20 77 69 74 68 20 74   commands with t
4bd0: 68 65 20 6e 61 6d 65 73 70 61 63 65 20 70 72 65  he namespace pre
4be0: 66 69 78 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20  fix&lt;/li&gt;. 
4bf0: 20 26 6c 74 3b 6c 69 26 67 74 3b 77 68 69 63 68   &lt;li&gt;which
4c00: 20 2d 20 69 6d 70 6c 65 6d 65 6e 74 65 64 26 6c   - implemented&l
4c10: 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26 6c 74 3b  t;/li&gt;.  &lt;
4c20: 6c 69 26 67 74 3b 75 70 76 61 72 20 2d 20 69 6d  li&gt;upvar - im
4c30: 70 6c 65 6d 65 6e 74 65 64 26 6c 74 3b 2f 6c 69  plemented&lt;/li
4c40: 26 67 74 3b 0a 26 6c 74 3b 2f 75 6c 26 67 74 3b  &gt;.&lt;/ul&gt;
4c50: 0a 0a 26 6c 74 3b 68 32 20 69 64 3d 22 6e 61 6d  ..&lt;h2 id="nam
4c60: 65 73 70 61 63 65 2d 63 68 69 6c 64 72 65 6e 2d  espace-children-
4c70: 65 78 69 73 74 73 2d 70 61 74 68 22 26 67 74 3b  exists-path"&gt;
4c80: 6e 61 6d 65 73 70 61 63 65 20 63 68 69 6c 64 72  namespace childr
4c90: 65 6e 2c 20 65 78 69 73 74 73 2c 20 70 61 74 68  en, exists, path
4ca0: 26 6c 74 3b 2f 68 32 26 67 74 3b 0a 26 6c 74 3b  &lt;/h2&gt;.&lt;
4cb0: 70 26 67 74 3b 57 69 74 68 20 69 6d 70 6c 69 63  p&gt;With implic
4cc0: 69 74 20 6e 61 6d 65 73 70 61 63 65 73 2c 20 74  it namespaces, t
4cd0: 68 65 20 6e 61 6d 65 73 70 61 63 65 20 65 78 69  he namespace exi
4ce0: 73 74 73 20 61 6e 64 20 6e 61 6d 65 73 70 61 63  sts and namespac
4cf0: 65 20 63 68 69 6c 64 72 65 6e 20 63 6f 6d 6d 61  e children comma
4d00: 6e 64 73 0a 61 72 65 20 65 78 70 65 6e 73 69 76  nds.are expensiv
4d10: 65 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 61  e to implement a
4d20: 6e 64 20 61 72 65 20 6f 66 20 6c 69 6d 69 74 65  nd are of limite
4d30: 64 20 75 73 65 2e 20 43 68 65 63 6b 69 6e 67 20  d use. Checking 
4d40: 74 68 65 20 65 78 69 73 74 65 6e 63 65 0a 6f 66  the existence.of
4d50: 20 61 20 6e 61 6d 65 73 70 61 63 65 20 63 61 6e   a namespace can
4d60: 20 62 65 20 62 65 74 74 65 72 20 64 6f 6e 65 20   be better done 
4d70: 62 79 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20  by checking for 
4d80: 74 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66  the existence of
4d90: 20 61 20 6b 6e 6f 77 6e 20 70 72 6f 63 65 64 75   a known procedu
4da0: 72 65 0a 6f 72 20 76 61 72 69 61 62 6c 65 20 69  re.or variable i
4db0: 6e 20 74 68 65 20 6e 61 6d 65 73 70 61 63 65 2e  n the namespace.
4dc0: 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b  &lt;/p&gt;..&lt;
4dd0: 70 26 67 74 3b 43 6f 6d 6d 61 6e 64 20 72 65 73  p&gt;Command res
4de0: 6f 6c 75 74 69 6f 6e 20 69 73 20 61 6c 77 61 79  olution is alway
4df0: 73 20 64 6f 6e 65 20 62 79 20 66 69 72 73 74 20  s done by first 
4e00: 6c 6f 6f 6b 69 6e 67 20 69 6e 20 74 68 65 20 6e  looking in the n
4e10: 61 6d 65 73 70 61 63 65 20 61 6e 64 20 74 68 65  amespace and the
4e20: 6e 0a 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20  n.at the global 
4e30: 73 63 6f 70 65 2c 20 73 6f 20 6e 61 6d 65 73 70  scope, so namesp
4e40: 61 63 65 20 70 61 74 68 20 69 73 20 6e 6f 74 20  ace path is not 
4e50: 72 65 71 75 69 72 65 64 2e 26 6c 74 3b 2f 70 26  required.&lt;/p&
4e60: 67 74 3b 0a 0a 26 6c 74 3b 68 32 20 69 64 3d 22  gt;..&lt;h2 id="
4e70: 6e 61 6d 65 73 70 61 63 65 2d 65 6e 73 65 6d 62  namespace-ensemb
4e80: 6c 65 22 26 67 74 3b 6e 61 6d 65 73 70 61 63 65  le"&gt;namespace
4e90: 20 65 6e 73 65 6d 62 6c 65 26 6c 74 3b 2f 68 32   ensemble&lt;/h2
4ea0: 26 67 74 3b 0a 26 6c 74 3b 70 26 67 74 3b 54 68  &gt;.&lt;p&gt;Th
4eb0: 65 20 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65  e namespace ense
4ec0: 6d 62 6c 65 20 63 6f 6d 6d 61 6e 64 20 69 73 20  mble command is 
4ed0: 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 73 75  not currently su
4ee0: 70 70 6f 72 74 65 64 2e 20 41 20 66 75 74 75 72  pported. A futur
4ef0: 65 20 76 65 72 73 69 6f 6e 0a 6f 66 20 4a 69 6d  e version.of Jim
4f00: 20 54 63 6c 20 77 69 6c 6c 20 68 61 76 65 20 61   Tcl will have a
4f10: 20 67 65 6e 65 72 61 6c 2d 70 75 72 70 6f 73 65   general-purpose
4f20: 20 65 6e 73 65 6d 62 6c 65 20 63 72 65 61 74 69   ensemble creati
4f30: 6f 6e 20 61 6e 64 20 6d 61 6e 69 70 75 6c 61 74  on and manipulat
4f40: 69 6f 6e 0a 6d 65 63 68 61 6e 69 73 6d 20 61 6e  ion.mechanism an
4f50: 64 20 6e 61 6d 65 73 70 61 63 65 20 65 6e 73 65  d namespace ense
4f60: 6d 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6d 70  mble will be imp
4f70: 6c 65 6d 65 6e 74 65 64 20 69 6e 20 74 65 72 6d  lemented in term
4f80: 73 20 6f 66 20 74 68 61 74 20 6d 65 63 68 61 6e  s of that mechan
4f90: 69 73 6d 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a  ism.&lt;/p&gt;..
4fa0: 26 6c 74 3b 68 32 20 69 64 3d 22 6e 61 6d 65 73  &lt;h2 id="names
4fb0: 70 61 63 65 2d 69 6d 70 6f 72 74 2d 65 78 70 6f  pace-import-expo
4fc0: 72 74 2d 66 6f 72 67 65 74 2d 6f 72 69 67 69 6e  rt-forget-origin
4fd0: 22 26 67 74 3b 6e 61 6d 65 73 70 61 63 65 20 69  "&gt;namespace i
4fe0: 6d 70 6f 72 74 2c 20 65 78 70 6f 72 74 2c 20 66  mport, export, f
4ff0: 6f 72 67 65 74 2c 20 6f 72 69 67 69 6e 26 6c 74  orget, origin&lt
5000: 3b 2f 68 32 26 67 74 3b 0a 26 6c 74 3b 70 26 67  ;/h2&gt;.&lt;p&g
5010: 74 3b 53 69 6e 63 65 20 4a 69 6d 20 54 63 6c 20  t;Since Jim Tcl 
5020: 6e 61 6d 65 73 70 61 63 65 73 20 61 72 65 20 69  namespaces are i
5030: 6d 70 6c 69 63 69 74 2c 20 74 68 65 72 65 20 69  mplicit, there i
5040: 73 20 6e 6f 20 6c 6f 63 61 74 69 6f 6e 20 74 6f  s no location to
5050: 20 73 74 6f 72 65 20 65 78 70 6f 72 74 20 70 61   store export pa
5060: 74 74 65 72 6e 73 2e 0a 54 68 65 72 65 66 6f 72  tterns..Therefor
5070: 65 20 74 68 65 20 6e 61 6d 65 73 70 61 63 65 20  e the namespace 
5080: 65 78 70 6f 72 74 20 63 6f 6d 6d 61 6e 64 20 69  export command i
5090: 73 20 61 20 64 75 6d 6d 79 20 63 6f 6d 6d 61 6e  s a dummy comman
50a0: 64 20 77 68 69 63 68 20 64 6f 65 73 20 6e 6f 74  d which does not
50b0: 68 69 6e 67 2e 0a 41 6c 6c 20 70 72 6f 63 65 64  hing..All proced
50c0: 75 72 65 73 20 69 6e 20 61 20 6e 61 6d 65 73 70  ures in a namesp
50d0: 61 63 65 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ace are consider
50e0: 65 64 20 74 6f 20 62 65 20 65 78 70 6f 72 74 65  ed to be exporte
50f0: 64 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c  d.&lt;/p&gt;..&l
5100: 74 3b 70 26 67 74 3b 54 68 65 20 6e 61 6d 65 73  t;p&gt;The names
5110: 70 61 63 65 20 69 6d 70 6f 72 74 20 63 6f 6d 6d  pace import comm
5120: 61 6e 64 20 77 6f 72 6b 73 20 62 79 20 63 72 65  and works by cre
5130: 61 74 69 6e 67 20 61 6c 69 61 73 65 73 20 74 6f  ating aliases to
5140: 20 74 68 65 20 74 61 72 67 65 74 20 6e 61 6d 65   the target name
5150: 73 70 61 63 65 0a 70 72 6f 63 65 64 75 72 65 73  space.procedures
5160: 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74  .&lt;/p&gt;..&lt
5170: 3b 70 26 67 74 3b 6e 61 6d 65 73 70 61 63 65 20  ;p&gt;namespace 
5180: 66 6f 72 67 65 74 20 69 73 20 6e 6f 74 20 69 6d  forget is not im
5190: 70 6c 65 6d 65 6e 74 65 64 2e 26 6c 74 3b 2f 70  plemented.&lt;/p
51a0: 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 6e  &gt;..&lt;p&gt;n
51b0: 61 6d 65 73 70 61 63 65 20 6f 72 69 67 69 6e 20  amespace origin 
51c0: 75 6e 64 65 72 73 74 61 6e 64 73 20 61 6c 69 61  understands alia
51d0: 73 65 73 20 63 72 65 61 74 65 64 20 62 79 20 6e  ses created by n
51e0: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 0a  amespace import.
51f0: 61 6e 64 20 63 61 6e 20 72 65 74 75 72 6e 20 74  and can return t
5200: 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 6f 6d 6d  he original comm
5210: 61 6e 64 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a  and.&lt;/p&gt;..
5220: 26 6c 74 3b 68 32 20 69 64 3d 22 6e 61 6d 65 73  &lt;h2 id="names
5230: 70 61 63 65 2d 75 6e 6b 6e 6f 77 6e 22 26 67 74  pace-unknown"&gt
5240: 3b 6e 61 6d 65 73 70 61 63 65 20 75 6e 6b 6e 6f  ;namespace unkno
5250: 77 6e 26 6c 74 3b 2f 68 32 26 67 74 3b 0a 26 6c  wn&lt;/h2&gt;.&l
5260: 74 3b 70 26 67 74 3b 49 66 20 61 6e 20 75 6e 64  t;p&gt;If an und
5270: 65 66 69 6e 65 64 20 63 6f 6d 6d 61 6e 64 20 69  efined command i
5280: 73 20 69 6e 76 6f 6b 65 64 2c 20 74 68 65 20 26  s invoked, the &
5290: 61 6d 70 3b 6c 64 71 75 6f 3b 75 6e 6b 6e 6f 77  amp;ldquo;unknow
52a0: 6e 26 61 6d 70 3b 72 64 71 75 6f 3b 20 63 6f 6d  n&amp;rdquo; com
52b0: 6d 61 6e 64 20 69 73 20 69 6e 76 6f 6b 65 64 2e  mand is invoked.
52c0: 0a 54 68 65 20 73 61 6d 65 20 6e 61 6d 65 73 70  .The same namesp
52d0: 61 63 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 72  ace resolution r
52e0: 75 6c 65 73 20 61 70 70 6c 79 20 66 6f 72 20 74  ules apply for t
52f0: 68 65 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6d 6d 61  he unknown comma
5300: 6e 64 2e 0a 54 68 69 73 20 6d 65 61 6e 73 20 74  nd..This means t
5310: 68 61 74 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  hat in the follo
5320: 77 69 6e 67 20 65 78 61 6d 70 6c 65 2c 20 74 65  wing example, te
5330: 73 74 3a 3a 75 6e 6b 6e 6f 77 6e 20 77 69 6c 6c  st::unknown will
5340: 20 62 65 20 69 6e 76 6f 6b 65 64 0a 66 6f 72 20   be invoked.for 
5350: 74 68 65 20 6d 69 73 73 69 6e 67 20 63 6f 6d 6d  the missing comm
5360: 61 6e 64 20 72 61 74 68 65 72 20 74 68 61 6e 20  and rather than 
5370: 74 68 65 20 67 6c 6f 62 61 6c 20 3a 3a 75 6e 6b  the global ::unk
5380: 6e 6f 77 6e 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a  nown.&lt;/p&gt;.
5390: 0a 26 6c 74 3b 70 72 65 20 63 6c 61 73 73 3d 22  .&lt;pre class="
53a0: 73 68 5f 74 63 6c 22 26 67 74 3b 0a 70 72 6f 63  sh_tcl"&gt;.proc
53b0: 20 75 6e 6b 6e 6f 77 6e 20 7b 61 72 67 73 7d 20   unknown {args} 
53c0: 7b 0a 09 70 75 74 73 20 22 67 6c 6f 62 61 6c 20  {..puts "global 
53d0: 75 6e 6b 6e 6f 77 6e 22 0a 7d 0a 0a 70 72 6f 63  unknown".}..proc
53e0: 20 74 65 73 74 3a 3a 75 6e 6b 6e 6f 77 6e 20 7b   test::unknown {
53f0: 61 72 67 73 7d 20 7b 0a 09 70 75 74 73 20 22 74  args} {..puts "t
5400: 65 73 74 20 75 6e 6b 6e 6f 77 6e 22 0a 7d 0a 0a  est unknown".}..
5410: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 74  namespace eval t
5420: 65 73 74 20 7b 0a 09 62 6f 67 75 73 0a 7d 0a 26  est {..bogus.}.&
5430: 6c 74 3b 2f 70 72 65 26 67 74 3b 0a 0a 26 6c 74  lt;/pre&gt;..&lt
5440: 3b 70 26 67 74 3b 54 68 69 73 20 61 70 70 72 6f  ;p&gt;This appro
5450: 61 63 68 20 72 65 71 75 69 72 65 73 20 6e 6f 20  ach requires no 
5460: 73 70 65 63 69 61 6c 20 73 75 70 70 6f 72 74 20  special support 
5470: 61 6e 64 20 70 72 6f 76 69 64 65 73 20 65 6e 6f  and provides eno
5480: 75 67 68 20 66 6c 65 78 69 62 69 6c 69 74 79 20  ugh flexibility 
5490: 74 68 61 74 0a 74 68 65 20 6e 61 6d 65 73 70 61  that.the namespa
54a0: 63 65 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6d 6d 61  ce unknown comma
54b0: 6e 64 20 69 73 20 6e 6f 74 20 69 6d 70 6c 65 6d  nd is not implem
54c0: 65 6e 74 65 64 2e 26 6c 74 3b 2f 70 26 67 74 3b  ented.&lt;/p&gt;
54d0: 0a 0a 26 6c 74 3b 68 32 20 69 64 3d 22 70 6f 72  ..&lt;h2 id="por
54e0: 74 69 6e 67 2d 6e 61 6d 65 73 70 61 63 65 2d 63  ting-namespace-c
54f0: 6f 64 65 2d 66 72 6f 6d 2d 74 63 6c 2d 74 6f 2d  ode-from-tcl-to-
5500: 6a 69 6d 2d 74 63 6c 22 26 67 74 3b 50 6f 72 74  jim-tcl"&gt;Port
5510: 69 6e 67 20 6e 61 6d 65 73 70 61 63 65 20 63 6f  ing namespace co
5520: 64 65 20 66 72 6f 6d 20 54 63 6c 20 74 6f 20 4a  de from Tcl to J
5530: 69 6d 20 54 63 6c 26 6c 74 3b 2f 68 32 26 67 74  im Tcl&lt;/h2&gt
5540: 3b 0a 26 6c 74 3b 70 26 67 74 3b 46 6f 72 20 6d  ;.&lt;p&gt;For m
5550: 6f 73 74 20 63 6f 64 65 2c 20 74 68 65 20 66 6f  ost code, the fo
5560: 6c 6c 6f 77 69 6e 67 20 63 68 61 6e 67 65 73 20  llowing changes 
5570: 77 69 6c 6c 20 62 65 20 73 75 66 66 69 63 69 65  will be sufficie
5580: 6e 74 20 74 6f 20 70 6f 72 74 20 63 6f 64 65 2e  nt to port code.
5590: 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b  &lt;/p&gt;..&lt;
55a0: 6f 6c 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26  ol&gt;.  &lt;li&
55b0: 67 74 3b 0a 20 20 20 20 26 6c 74 3b 70 26 67 74  gt;.    &lt;p&gt
55c0: 3b 43 61 6e 6f 6e 69 63 61 6c 69 73 65 20 6e 61  ;Canonicalise na
55d0: 6d 65 73 70 61 63 65 20 6e 61 6d 65 73 2e 20 46  mespace names. F
55e0: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 3a 3a 6e 73  or example, ::ns
55f0: 3a 3a 20 73 68 6f 75 6c 64 20 62 65 20 77 72 69  :: should be wri
5600: 74 74 65 6e 0a 61 73 20 3a 3a 6e 73 20 6f 72 20  tten.as ::ns or 
5610: 6e 73 20 61 73 20 61 70 70 72 6f 70 72 69 61 74  ns as appropriat
5620: 65 2c 20 61 6e 64 20 65 78 63 65 73 73 20 63 6f  e, and excess co
5630: 6c 6f 6e 73 20 73 68 6f 75 6c 64 20 62 65 20 72  lons should be r
5640: 65 6d 6f 76 65 64 2e 0a 46 6f 72 20 65 78 61 6d  emoved..For exam
5650: 70 6c 65 20 3a 3a 6e 73 3a 3a 3a 62 6c 61 68 20  ple ::ns:::blah 
5660: 73 68 6f 75 6c 64 20 62 65 20 77 72 69 74 74 65  should be writte
5670: 6e 20 61 73 20 3a 3a 6e 73 3a 3a 62 6c 61 68 0a  n as ::ns::blah.
5680: 28 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 6f  (Note that the o
5690: 6e 6c 79 20 26 61 6d 70 3b 6c 64 71 75 6f 3b 65  nly &amp;ldquo;e
56a0: 78 63 65 73 73 20 63 6f 6c 6f 6e 26 61 6d 70 3b  xcess colon&amp;
56b0: 72 64 71 75 6f 3b 20 63 61 73 65 20 73 75 70 70  rdquo; case supp
56c0: 6f 72 74 65 64 20 69 73 20 3a 3a 3a 3a 61 62 63  orted is ::::abc
56d0: 0a 69 6e 20 6f 72 64 65 72 20 74 6f 20 73 75 70  .in order to sup
56e0: 70 6f 72 74 20 5b 6e 61 6d 65 73 70 61 63 65 20  port [namespace 
56f0: 63 75 72 72 65 6e 74 5d 3a 3a 61 62 63 20 69 6e  current]::abc in
5700: 20 74 68 65 20 67 6c 6f 62 61 6c 20 6e 61 6d 65   the global name
5710: 73 70 61 63 65 29 26 6c 74 3b 2f 70 26 67 74 3b  space)&lt;/p&gt;
5720: 0a 20 20 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20  .  &lt;/li&gt;. 
5730: 20 26 6c 74 3b 6c 69 26 67 74 3b 0a 20 20 20 20   &lt;li&gt;.    
5740: 26 6c 74 3b 70 26 67 74 3b 54 68 65 20 76 61 72  &lt;p&gt;The var
5750: 69 61 62 6c 65 20 63 6f 6d 6d 61 6e 64 20 73 68  iable command sh
5760: 6f 75 6c 64 20 62 65 20 75 73 65 64 20 77 69 74  ould be used wit
5770: 68 69 6e 20 6e 61 6d 65 73 70 61 63 65 20 65 76  hin namespace ev
5780: 61 6c 20 74 6f 20 6c 69 6e 6b 0a 74 6f 20 6e 61  al to link.to na
5790: 6d 65 73 70 61 63 65 20 76 61 72 69 61 62 6c 65  mespace variable
57a0: 73 2c 20 61 6e 64 20 61 63 63 65 73 73 20 74 6f  s, and access to
57b0: 20 76 61 72 69 61 62 6c 65 73 20 69 6e 20 6f 74   variables in ot
57c0: 68 65 72 20 6e 61 6d 65 73 70 61 63 65 73 0a 73  her namespaces.s
57d0: 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79 20 71  hould be fully q
57e0: 75 61 6c 69 66 69 65 64 26 6c 74 3b 2f 70 26 67  ualified&lt;/p&g
57f0: 74 3b 0a 20 20 26 6c 74 3b 2f 6c 69 26 67 74 3b  t;.  &lt;/li&gt;
5800: 0a 26 6c 74 3b 2f 6f 6c 26 67 74 3b 0a 0a 26 6c  .&lt;/ol&gt;..&l
5810: 74 3b 68 32 20 69 64 3d 22 63 68 61 6e 67 65 73  t;h2 id="changes
5820: 2d 69 6e 2d 74 68 65 2d 63 6f 72 65 2d 6a 69 6d  -in-the-core-jim
5830: 2d 74 63 6c 22 26 67 74 3b 43 68 61 6e 67 65 73  -tcl"&gt;Changes
5840: 20 69 6e 20 74 68 65 20 63 6f 72 65 20 4a 69 6d   in the core Jim
5850: 20 54 63 6c 26 6c 74 3b 2f 68 32 26 67 74 3b 0a   Tcl&lt;/h2&gt;.
5860: 26 6c 74 3b 70 26 67 74 3b 50 72 65 76 69 6f 75  &lt;p&gt;Previou
5870: 73 6c 79 20 4a 69 6d 20 54 63 6c 20 70 65 72 66  sly Jim Tcl perf
5880: 6f 72 6d 65 64 20 6e 6f 20 73 63 6f 70 69 6e 67  ormed no scoping
5890: 20 6f 66 20 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65   of command name
58a0: 73 2e 20 20 69 2e 65 2e 20 54 68 65 0a 3a 3a 66  s.  i.e. The.::f
58b0: 6f 72 6d 61 74 20 63 6f 6d 6d 61 6e 64 20 77 61  ormat command wa
58c0: 73 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69 66  s considered dif
58d0: 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20  ferent from the 
58e0: 66 6f 72 6d 61 74 20 63 6f 6d 6d 61 6e 64 2e 26  format command.&
58f0: 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70  lt;/p&gt;..&lt;p
5900: 26 67 74 3b 45 76 65 6e 20 69 66 20 6e 61 6d 65  &gt;Even if name
5910: 73 70 61 63 65 20 73 75 70 70 6f 72 74 20 69 73  space support is
5920: 20 64 69 73 61 62 6c 65 64 2c 20 74 68 65 20 63   disabled, the c
5930: 6f 6d 6d 61 6e 64 20 72 65 73 6f 6c 75 74 69 6f  ommand resolutio
5940: 6e 20 77 69 6c 6c 0a 72 65 63 6f 67 6e 69 73 65  n will.recognise
5950: 64 20 67 6c 6f 62 61 6c 20 73 63 6f 70 69 6e 67  d global scoping
5960: 20 6f 66 20 63 6f 6d 6d 61 6e 64 73 20 61 6e 64   of commands and
5970: 20 74 72 65 61 74 20 74 68 65 73 65 20 61 73 20   treat these as 
5980: 69 64 65 6e 74 69 63 61 6c 2e 26 6c 74 3b 2f 70  identical.&lt;/p
5990: 26 67 74 3b 0a 3c 2f 63 6f 6e 74 65 6e 74 3e 0a  &gt;.</content>.
59a0: 20 20 3c 2f 65 6e 74 72 79 3e 0a 20 20 3c 65 6e    </entry>.  <en
59b0: 74 72 79 3e 0a 20 20 20 20 3c 69 64 3e 74 61 67  try>.    <id>tag
59c0: 3a 6a 69 6d 2e 62 65 72 6c 69 6f 73 2e 64 65 2c  :jim.berlios.de,
59d0: 32 30 31 31 2d 31 31 2d 31 30 3a 2f 61 72 74 69  2011-11-10:/arti
59e0: 63 6c 65 73 2f 6a 69 6d 2d 74 63 6c 2d 74 6b 2d  cles/jim-tcl-tk-
59f0: 32 30 31 31 2d 70 61 70 65 72 2f 3c 2f 69 64 3e  2011-paper/</id>
5a00: 0a 20 20 20 20 3c 74 69 74 6c 65 20 74 79 70 65  .    <title type
5a10: 3d 22 68 74 6d 6c 22 3e 4a 69 6d 20 40 20 54 63  ="html">Jim @ Tc
5a20: 6c 2f 54 6b 20 32 30 31 31 3c 2f 74 69 74 6c 65  l/Tk 2011</title
5a30: 3e 0a 20 20 20 20 3c 70 75 62 6c 69 73 68 65 64  >.    <published
5a40: 3e 32 30 31 31 2d 31 31 2d 30 39 54 31 34 3a 30  >2011-11-09T14:0
5a50: 30 3a 30 30 5a 3c 2f 70 75 62 6c 69 73 68 65 64  0:00Z</published
5a60: 3e 0a 20 20 20 20 3c 75 70 64 61 74 65 64 3e 32  >.    <updated>2
5a70: 30 31 31 2d 31 31 2d 30 39 54 31 34 3a 30 30 3a  011-11-09T14:00:
5a80: 30 30 5a 3c 2f 75 70 64 61 74 65 64 3e 0a 20 20  00Z</updated>.  
5a90: 20 20 3c 6c 69 6e 6b 20 72 65 6c 3d 22 61 6c 74    <link rel="alt
5aa0: 65 72 6e 61 74 65 22 20 68 72 65 66 3d 22 68 74  ernate" href="ht
5ab0: 74 70 3a 2f 2f 6a 69 6d 2e 62 65 72 6c 69 6f 73  tp://jim.berlios
5ac0: 2e 64 65 2f 61 72 74 69 63 6c 65 73 2f 6a 69 6d  .de/articles/jim
5ad0: 2d 74 63 6c 2d 74 6b 2d 32 30 31 31 2d 70 61 70  -tcl-tk-2011-pap
5ae0: 65 72 2f 22 2f 3e 0a 20 20 20 20 3c 63 6f 6e 74  er/"/>.    <cont
5af0: 65 6e 74 20 74 79 70 65 3d 22 68 74 6d 6c 22 3e  ent type="html">
5b00: 26 6c 74 3b 70 26 67 74 3b 41 74 20 74 68 65 20  &lt;p&gt;At the 
5b10: 26 6c 74 3b 61 20 68 72 65 66 3d 22 68 74 74 70  &lt;a href="http
5b20: 3a 2f 2f 77 77 77 2e 74 63 6c 2e 74 6b 2f 63 6f  ://www.tcl.tk/co
5b30: 6d 6d 75 6e 69 74 79 2f 74 63 6c 32 30 31 31 2f  mmunity/tcl2011/
5b40: 22 26 67 74 3b 54 63 6b 2f 54 6b 20 32 30 31 31  "&gt;Tck/Tk 2011
5b50: 20 63 6f 6e 66 65 72 65 6e 63 65 26 6c 74 3b 2f   conference&lt;/
5b60: 61 26 67 74 3b 20 49 0a 70 72 65 73 65 6e 74 65  a&gt; I.presente
5b70: 64 20 61 20 70 61 70 65 72 20 6f 6e 20 4a 69 6d  d a paper on Jim
5b80: 20 54 63 6c 2e 20 49 74 20 73 65 65 6d 65 64 20   Tcl. It seemed 
5b90: 74 6f 20 62 65 20 77 65 6c 6c 20 72 65 63 65 69  to be well recei
5ba0: 76 65 64 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a  ved.&lt;/p&gt;..
5bb0: 26 6c 74 3b 70 26 67 74 3b 59 6f 75 20 63 61 6e  &lt;p&gt;You can
5bc0: 20 72 65 61 64 20 74 68 65 20 70 61 70 65 72 20   read the paper 
5bd0: 62 79 20 63 6c 69 63 6b 69 6e 67 20 6f 6e 20 74  by clicking on t
5be0: 68 65 20 69 6d 61 67 65 20 62 65 6c 6f 77 2e 26  he image below.&
5bf0: 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70  lt;/p&gt;..&lt;p
5c00: 26 67 74 3b 26 6c 74 3b 61 20 68 72 65 66 3d 22  &gt;&lt;a href="
5c10: 68 74 74 70 3a 2f 2f 77 6f 72 6b 77 61 72 65 2e  http://workware.
5c20: 6e 65 74 2e 61 75 2f 70 61 70 65 72 73 2f 6a 69  net.au/papers/ji
5c30: 6d 74 63 6c 2d 74 63 6c 2d 74 6b 2d 32 30 31 31  mtcl-tcl-tk-2011
5c40: 2e 70 64 66 22 26 67 74 3b 26 6c 74 3b 69 6d 67  .pdf"&gt;&lt;img
5c50: 20 73 72 63 3d 22 2f 69 6d 67 2f 6a 69 6d 74 63   src="/img/jimtc
5c60: 6c 2d 74 63 6c 2d 74 6b 2d 32 30 31 31 2d 66 72  l-tcl-tk-2011-fr
5c70: 6f 6e 74 2e 70 6e 67 22 20 2f 26 67 74 3b 26 6c  ont.png" /&gt;&l
5c80: 74 3b 2f 61 26 67 74 3b 26 6c 74 3b 2f 70 26 67  t;/a&gt;&lt;/p&g
5c90: 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 53 74 65  t;..&lt;p&gt;Ste
5ca0: 76 65 20 42 65 6e 6e 65 74 74 20 28 26 6c 74 3b  ve Bennett (&lt;
5cb0: 61 20 68 72 65 66 3d 22 26 61 6d 70 3b 23 31 30  a href="&amp;#10
5cc0: 39 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70  9;&amp;#097;&amp
5cd0: 3b 23 31 30 35 3b 26 61 6d 70 3b 23 31 30 38 3b  ;#105;&amp;#108;
5ce0: 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d 70 3b 23  &amp;#116;&amp;#
5cf0: 31 31 31 3b 3a 26 61 6d 70 3b 23 31 31 35 3b 26  111;:&amp;#115;&
5d00: 61 6d 70 3b 23 31 31 36 3b 26 61 6d 70 3b 23 31  amp;#116;&amp;#1
5d10: 30 31 3b 26 61 6d 70 3b 23 31 31 38 3b 26 61 6d  01;&amp;#118;&am
5d20: 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 30 39 38  p;#101;&amp;#098
5d30: 3b 26 61 6d 70 3b 23 30 36 34 3b 26 61 6d 70 3b  ;&amp;#064;&amp;
5d40: 23 31 31 39 3b 26 61 6d 70 3b 23 31 31 31 3b 26  #119;&amp;#111;&
5d50: 61 6d 70 3b 23 31 31 34 3b 26 61 6d 70 3b 23 31  amp;#114;&amp;#1
5d60: 30 37 3b 26 61 6d 70 3b 23 31 31 39 3b 26 61 6d  07;&amp;#119;&am
5d70: 70 3b 23 30 39 37 3b 26 61 6d 70 3b 23 31 31 34  p;#097;&amp;#114
5d80: 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b  ;&amp;#101;&amp;
5d90: 23 30 34 36 3b 26 61 6d 70 3b 23 31 31 30 3b 26  #046;&amp;#110;&
5da0: 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31  amp;#101;&amp;#1
5db0: 31 36 3b 26 61 6d 70 3b 23 30 34 36 3b 26 61 6d  16;&amp;#046;&am
5dc0: 70 3b 23 30 39 37 3b 26 61 6d 70 3b 23 31 31 37  p;#097;&amp;#117
5dd0: 3b 22 26 67 74 3b 26 61 6d 70 3b 23 31 31 35 3b  ;"&gt;&amp;#115;
5de0: 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d 70 3b 23  &amp;#116;&amp;#
5df0: 31 30 31 3b 26 61 6d 70 3b 23 31 31 38 3b 26 61  101;&amp;#118;&a
5e00: 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 30 39  mp;#101;&amp;#09
5e10: 38 3b 26 61 6d 70 3b 23 30 36 34 3b 26 61 6d 70  8;&amp;#064;&amp
5e20: 3b 23 31 31 39 3b 26 61 6d 70 3b 23 31 31 31 3b  ;#119;&amp;#111;
5e30: 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d 70 3b 23  &amp;#114;&amp;#
5e40: 31 30 37 3b 26 61 6d 70 3b 23 31 31 39 3b 26 61  107;&amp;#119;&a
5e50: 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b 23 31 31  mp;#097;&amp;#11
5e60: 34 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70  4;&amp;#101;&amp
5e70: 3b 23 30 34 36 3b 26 61 6d 70 3b 23 31 31 30 3b  ;#046;&amp;#110;
5e80: 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23  &amp;#101;&amp;#
5e90: 31 31 36 3b 26 61 6d 70 3b 23 30 34 36 3b 26 61  116;&amp;#046;&a
5ea0: 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b 23 31 31  mp;#097;&amp;#11
5eb0: 37 3b 26 6c 74 3b 2f 61 26 67 74 3b 29 26 6c 74  7;&lt;/a&gt;)&lt
5ec0: 3b 2f 70 26 67 74 3b 0a 3c 2f 63 6f 6e 74 65 6e  ;/p&gt;.</conten
5ed0: 74 3e 0a 20 20 3c 2f 65 6e 74 72 79 3e 0a 20 20  t>.  </entry>.  
5ee0: 3c 65 6e 74 72 79 3e 0a 20 20 20 20 3c 69 64 3e  <entry>.    <id>
5ef0: 74 61 67 3a 6a 69 6d 2e 62 65 72 6c 69 6f 73 2e  tag:jim.berlios.
5f00: 64 65 2c 32 30 31 31 2d 31 30 2d 30 36 3a 2f 61  de,2011-10-06:/a
5f10: 72 74 69 63 6c 65 73 2f 6a 69 6d 2d 72 65 6c 65  rticles/jim-rele
5f20: 61 73 65 2d 30 2d 37 32 2f 3c 2f 69 64 3e 0a 20  ase-0-72/</id>. 
5f30: 20 20 20 3c 74 69 74 6c 65 20 74 79 70 65 3d 22     <title type="
5f40: 68 74 6d 6c 22 3e 4a 69 6d 20 54 63 6c 20 76 65  html">Jim Tcl ve
5f50: 72 73 69 6f 6e 20 30 2e 37 32 3c 2f 74 69 74 6c  rsion 0.72</titl
5f60: 65 3e 0a 20 20 20 20 3c 70 75 62 6c 69 73 68 65  e>.    <publishe
5f70: 64 3e 32 30 31 31 2d 31 30 2d 30 35 54 31 34 3a  d>2011-10-05T14:
5f80: 30 30 3a 30 30 5a 3c 2f 70 75 62 6c 69 73 68 65  00:00Z</publishe
5f90: 64 3e 0a 20 20 20 20 3c 75 70 64 61 74 65 64 3e  d>.    <updated>
5fa0: 32 30 31 31 2d 31 30 2d 30 35 54 31 34 3a 30 30  2011-10-05T14:00
5fb0: 3a 30 30 5a 3c 2f 75 70 64 61 74 65 64 3e 0a 20  :00Z</updated>. 
5fc0: 20 20 20 3c 6c 69 6e 6b 20 72 65 6c 3d 22 61 6c     <link rel="al
5fd0: 74 65 72 6e 61 74 65 22 20 68 72 65 66 3d 22 68  ternate" href="h
5fe0: 74 74 70 3a 2f 2f 6a 69 6d 2e 62 65 72 6c 69 6f  ttp://jim.berlio
5ff0: 73 2e 64 65 2f 61 72 74 69 63 6c 65 73 2f 6a 69  s.de/articles/ji
6000: 6d 2d 72 65 6c 65 61 73 65 2d 30 2d 37 32 2f 22  m-release-0-72/"
6010: 2f 3e 0a 20 20 20 20 3c 63 6f 6e 74 65 6e 74 20  />.    <content 
6020: 74 79 70 65 3d 22 68 74 6d 6c 22 3e 26 6c 74 3b  type="html">&lt;
6030: 68 32 20 69 64 3d 22 61 6e 6e 6f 75 6e 63 65 2d  h2 id="announce-
6040: 6a 69 6d 2d 74 63 6c 2d 76 65 72 73 69 6f 6e 2d  jim-tcl-version-
6050: 30 37 32 22 26 67 74 3b 41 4e 4e 4f 55 4e 43 45  072"&gt;ANNOUNCE
6060: 3a 20 4a 69 6d 20 54 63 6c 20 76 65 72 73 69 6f  : Jim Tcl versio
6070: 6e 20 30 2e 37 32 26 6c 74 3b 2f 68 32 26 67 74  n 0.72&lt;/h2&gt
6080: 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 4a 69 6d 20  ;..&lt;p&gt;Jim 
6090: 54 63 6c 20 30 2e 37 32 20 68 61 73 20 62 65 65  Tcl 0.72 has bee
60a0: 6e 20 72 65 6c 65 61 73 65 64 20 61 6e 64 20 69  n released and i
60b0: 73 20 61 76 61 69 6c 61 62 6c 65 20 66 72 6f 6d  s available from
60c0: 3a 20 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c  : &lt;/p&gt;..&l
60d0: 74 3b 70 26 67 74 3b 26 6c 74 3b 61 20 68 72 65  t;p&gt;&lt;a hre
60e0: 66 3d 22 68 74 74 70 3a 2f 2f 72 65 70 6f 2e 6f  f="http://repo.o
60f0: 72 2e 63 7a 2f 77 2f 6a 69 6d 74 63 6c 2e 67 69  r.cz/w/jimtcl.gi
6100: 74 22 26 67 74 3b 68 74 74 70 3a 2f 2f 72 65 70  t"&gt;http://rep
6110: 6f 2e 6f 72 2e 63 7a 2f 77 2f 6a 69 6d 74 63 6c  o.or.cz/w/jimtcl
6120: 2e 67 69 74 26 6c 74 3b 2f 61 26 67 74 3b 20 6f  .git&lt;/a&gt; o
6130: 72 20 26 6c 74 3b 61 20 68 72 65 66 3d 22 68 74  r &lt;a href="ht
6140: 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d  tps://github.com
6150: 2f 6d 73 74 65 76 65 62 2f 6a 69 6d 74 63 6c 22  /msteveb/jimtcl"
6160: 26 67 74 3b 68 74 74 70 73 3a 2f 2f 67 69 74 68  &gt;https://gith
6170: 75 62 2e 63 6f 6d 2f 6d 73 74 65 76 65 62 2f 6a  ub.com/msteveb/j
6180: 69 6d 74 63 6c 26 6c 74 3b 2f 61 26 67 74 3b 26  imtcl&lt;/a&gt;&
6190: 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 68  lt;/p&gt;..&lt;h
61a0: 32 20 69 64 3d 22 63 68 61 6e 67 65 73 2d 73 69  2 id="changes-si
61b0: 6e 63 65 2d 76 65 72 73 69 6f 6e 2d 30 37 31 22  nce-version-071"
61c0: 26 67 74 3b 43 48 41 4e 47 45 53 20 53 49 4e 43  &gt;CHANGES SINC
61d0: 45 20 56 45 52 53 49 4f 4e 20 30 2e 37 31 26 6c  E VERSION 0.71&l
61e0: 74 3b 2f 68 32 26 67 74 3b 0a 0a 26 6c 74 3b 70  t;/h2&gt;..&lt;p
61f0: 26 67 74 3b 54 68 69 73 20 72 65 6c 65 61 73 65  &gt;This release
6200: 20 69 6e 63 6f 72 70 6f 72 61 74 65 73 20 62 75   incorporates bu
6210: 67 20 66 69 78 65 73 20 61 6e 64 20 6d 61 6e 79  g fixes and many
6220: 20 6e 65 77 20 66 65 61 74 75 72 65 73 2e 26 6c   new features.&l
6230: 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70 26  t;/p&gt;..&lt;p&
6240: 67 74 3b 26 6c 74 3b 73 74 72 6f 6e 67 26 67 74  gt;&lt;strong&gt
6250: 3b 42 75 67 73 20 66 69 78 65 64 20 69 6e 20 76  ;Bugs fixed in v
6260: 65 72 73 69 6f 6e 20 30 2e 37 32 26 6c 74 3b 2f  ersion 0.72&lt;/
6270: 73 74 72 6f 6e 67 26 67 74 3b 26 6c 74 3b 2f 70  strong&gt;&lt;/p
6280: 26 67 74 3b 0a 0a 26 6c 74 3b 75 6c 26 67 74 3b  &gt;..&lt;ul&gt;
6290: 0a 20 20 26 6c 74 3b 6c 69 26 67 74 3b 49 6d 70  .  &lt;li&gt;Imp
62a0: 72 6f 76 65 6d 65 6e 74 73 20 74 6f 20 63 6f 6e  rovements to con
62b0: 66 69 67 75 72 65 20 28 61 75 74 6f 73 65 74 75  figure (autosetu
62c0: 70 29 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20  p)&lt;/li&gt;.  
62d0: 26 6c 74 3b 6c 69 26 67 74 3b 46 69 78 20 6d 65  &lt;li&gt;Fix me
62e0: 6d 6f 72 79 20 6f 76 65 72 77 72 69 74 65 20 69  mory overwrite i
62f0: 6e 20 62 75 69 6c 74 2d 69 6e 20 72 65 67 65 78  n built-in regex
6300: 70 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26  p&lt;/li&gt;.  &
6310: 6c 74 3b 6c 69 26 67 74 3b 5b 72 65 67 65 78 70  lt;li&gt;[regexp
6320: 5d 2c 20 5b 72 65 67 73 75 62 5d 20 63 6f 75 6c  ], [regsub] coul
6330: 64 20 6c 65 61 6b 20 6f 62 6a 65 63 74 73 20 69  d leak objects i
6340: 6e 20 73 6f 6d 65 20 63 69 72 63 75 6d 73 74 61  n some circumsta
6350: 6e 63 65 73 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a  nces&lt;/li&gt;.
6360: 20 20 26 6c 74 3b 6c 69 26 67 74 3b 46 69 78 20    &lt;li&gt;Fix 
6370: 5b 66 69 6c 65 20 6a 6f 69 6e 5d 20 69 6e 20 73  [file join] in s
6380: 6f 6d 65 20 63 61 73 65 73 26 6c 74 3b 2f 6c 69  ome cases&lt;/li
6390: 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74  &gt;.  &lt;li&gt
63a0: 3b 5b 69 6e 66 6f 20 6e 61 6d 65 6f 66 65 78 65  ;[info nameofexe
63b0: 63 75 74 61 62 6c 65 5d 20 6e 6f 77 20 61 6c 77  cutable] now alw
63c0: 61 79 73 20 72 65 74 75 72 6e 73 20 61 6e 20 61  ays returns an a
63d0: 62 73 6f 6c 75 74 65 20 70 61 74 68 26 6c 74 3b  bsolute path&lt;
63e0: 2f 6c 69 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69  /li&gt;.  &lt;li
63f0: 26 67 74 3b 5b 63 61 74 63 68 5d 20 77 6f 72 6b  &gt;[catch] work
6400: 73 20 63 6f 72 72 65 63 74 6c 79 20 66 6f 72 20  s correctly for 
6410: 70 6c 61 74 66 6f 72 6d 73 20 77 69 74 68 6f 75  platforms withou
6420: 74 20 6c 6f 6e 67 20 6c 6f 6e 67 26 6c 74 3b 2f  t long long&lt;/
6430: 6c 69 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26  li&gt;.  &lt;li&
6440: 67 74 3b 5b 64 69 63 74 20 75 6e 73 65 74 5d 20  gt;[dict unset] 
6450: 6e 6f 20 6c 6f 6e 67 65 72 20 67 69 76 65 73 20  no longer gives 
6460: 61 6e 20 65 72 72 6f 72 20 6f 6e 20 6d 69 73 73  an error on miss
6470: 69 6e 67 20 6c 61 73 74 20 6b 65 79 26 6c 74 3b  ing last key&lt;
6480: 2f 6c 69 26 67 74 3b 0a 26 6c 74 3b 2f 75 6c 26  /li&gt;.&lt;/ul&
6490: 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 26 6c  gt;..&lt;p&gt;&l
64a0: 74 3b 73 74 72 6f 6e 67 26 67 74 3b 46 65 61 74  t;strong&gt;Feat
64b0: 75 72 65 73 20 61 64 64 65 64 20 69 6e 20 76 65  ures added in ve
64c0: 72 73 69 6f 6e 20 30 2e 37 32 26 6c 74 3b 2f 73  rsion 0.72&lt;/s
64d0: 74 72 6f 6e 67 26 67 74 3b 26 6c 74 3b 2f 70 26  trong&gt;&lt;/p&
64e0: 67 74 3b 0a 0a 26 6c 74 3b 75 6c 26 67 74 3b 0a  gt;..&lt;ul&gt;.
64f0: 20 20 26 6c 74 3b 6c 69 26 67 74 3b 5b 70 72 6f    &lt;li&gt;[pro
6500: 63 5d 20 6e 6f 77 20 61 63 63 65 70 74 73 20 6f  c] now accepts o
6510: 70 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65  ptional paramete
6520: 72 73 20 61 6e 64 20 26 61 6d 70 3b 6c 64 71 75  rs and &amp;ldqu
6530: 6f 3b 61 72 67 73 26 61 6d 70 3b 72 64 71 75 6f  o;args&amp;rdquo
6540: 3b 20 69 6e 20 61 6e 79 20 70 6f 73 69 74 69 6f  ; in any positio
6550: 6e 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26  n&lt;/li&gt;.  &
6560: 6c 74 3b 6c 69 26 67 74 3b 4d 75 63 68 20 69 6d  lt;li&gt;Much im
6570: 70 72 6f 76 65 64 20 73 75 70 70 6f 72 74 20 66  proved support f
6580: 6f 72 20 6d 69 6e 67 77 33 32 20 69 6e 63 6c 75  or mingw32 inclu
6590: 64 69 6e 67 20 36 34 2d 62 69 74 20 6d 69 6e 67  ding 64-bit ming
65a0: 77 0a 20 20 20 20 26 6c 74 3b 75 6c 26 67 74 3b  w.    &lt;ul&gt;
65b0: 0a 20 20 20 20 20 20 26 6c 74 3b 6c 69 26 67 74  .      &lt;li&gt
65c0: 3b 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c  ;tcl_platform(pl
65d0: 61 74 66 6f 72 6d 29 20 69 73 20 73 65 74 20 74  atform) is set t
65e0: 6f 20 26 61 6d 70 3b 6c 64 71 75 6f 3b 77 69 6e  o &amp;ldquo;win
65f0: 64 6f 77 73 26 61 6d 70 3b 72 64 71 75 6f 3b 26  dows&amp;rdquo;&
6600: 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 20 20 20  lt;/li&gt;.     
6610: 20 26 6c 74 3b 6c 69 26 67 74 3b 5b 66 69 6c 65   &lt;li&gt;[file
6620: 20 64 69 72 6e 61 6d 65 5d 20 68 61 6e 64 6c 65   dirname] handle
6630: 73 20 6c 65 61 64 69 6e 67 20 64 72 69 76 65 20  s leading drive 
6640: 28 65 2e 67 2e 20 63 3a 2f 29 26 6c 74 3b 2f 6c  (e.g. c:/)&lt;/l
6650: 69 26 67 74 3b 0a 20 20 20 20 20 20 26 6c 74 3b  i&gt;.      &lt;
6660: 6c 69 26 67 74 3b 5b 70 77 64 5d 20 72 65 74 75  li&gt;[pwd] retu
6670: 72 6e 73 20 61 20 70 61 74 68 20 63 6f 6e 74 61  rns a path conta
6680: 69 6e 69 6e 67 20 6f 6e 6c 79 20 66 6f 72 77 61  ining only forwa
6690: 72 64 20 73 6c 61 73 68 65 73 26 6c 74 3b 2f 6c  rd slashes&lt;/l
66a0: 69 26 67 74 3b 0a 20 20 20 20 20 20 26 6c 74 3b  i&gt;.      &lt;
66b0: 6c 69 26 67 74 3b 5b 67 6c 6f 62 5d 20 6e 6f 77  li&gt;[glob] now
66c0: 20 77 6f 72 6b 73 20 63 6f 72 72 65 63 74 6c 79   works correctly
66d0: 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 20 20  &lt;/li&gt;.    
66e0: 20 20 26 6c 74 3b 6c 69 26 67 74 3b 5b 65 78 65    &lt;li&gt;[exe
66f0: 63 5d 20 69 73 20 6e 6f 77 20 66 75 6c 6c 79 20  c] is now fully 
6700: 69 6d 70 6c 65 6d 65 6e 74 20 6f 6e 20 6d 69 6e  implement on min
6710: 67 77 33 32 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a  gw32&lt;/li&gt;.
6720: 20 20 20 20 20 20 26 6c 74 3b 6c 69 26 67 74 3b        &lt;li&gt;
6730: 43 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 65 64 69  Command line edi
6740: 74 69 6e 67 20 6e 6f 77 20 77 6f 72 6b 73 20 69  ting now works i
6750: 6e 20 74 68 65 20 77 69 6e 33 32 20 63 6f 6e 73  n the win32 cons
6760: 6f 6c 65 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20  ole&lt;/li&gt;. 
6770: 20 20 20 20 20 26 6c 74 3b 6c 69 26 67 74 3b 4e       &lt;li&gt;N
6780: 65 77 20 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28  ew tcl_platform(
6790: 70 61 74 68 53 65 70 61 72 61 74 6f 72 29 26 6c  pathSeparator)&l
67a0: 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 20 20 26 6c  t;/li&gt;.    &l
67b0: 74 3b 2f 75 6c 26 67 74 3b 0a 20 20 26 6c 74 3b  t;/ul&gt;.  &lt;
67c0: 2f 6c 69 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69  /li&gt;.  &lt;li
67d0: 26 67 74 3b 42 75 69 6c 74 69 6e 20 72 65 67 65  &gt;Builtin rege
67e0: 78 70 20 69 73 20 6d 6f 72 65 20 65 66 66 69 63  xp is more effic
67f0: 69 65 6e 74 2e 20 50 61 74 74 65 72 6e 73 20 61  ient. Patterns a
6800: 72 65 20 6f 6e 6c 79 20 63 6f 6d 70 69 6c 65 64  re only compiled
6810: 20 6f 6e 63 65 2e 26 6c 74 3b 2f 6c 69 26 67 74   once.&lt;/li&gt
6820: 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74 3b 41 64  ;.  &lt;li&gt;Ad
6830: 64 20 72 61 6e 64 28 29 2c 20 73 72 61 6e 64 28  d rand(), srand(
6840: 29 20 61 6e 64 20 70 6f 77 28 29 20 6d 61 74 68  ) and pow() math
6850: 20 66 75 6e 63 74 69 6f 6e 73 26 6c 74 3b 2f 6c   functions&lt;/l
6860: 69 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67  i&gt;.  &lt;li&g
6870: 74 3b 5b 66 69 6c 65 20 64 65 6c 65 74 65 5d 20  t;[file delete] 
6880: 6e 6f 77 20 73 75 70 70 6f 72 74 73 20 74 68 65  now supports the
6890: 20 2d 66 6f 72 63 65 20 6f 70 74 69 6f 6e 26 6c   -force option&l
68a0: 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26 6c 74 3b  t;/li&gt;.  &lt;
68b0: 6c 69 26 67 74 3b 5b 66 63 6f 6e 66 69 67 75 72  li&gt;[fconfigur
68c0: 65 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 5d 20  e -translation] 
68d0: 69 73 20 6e 6f 77 20 61 63 63 65 70 74 65 64 20  is now accepted 
68e0: 61 6e 64 20 69 67 6e 6f 72 65 64 20 66 6f 72 20  and ignored for 
68f0: 54 63 6c 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  Tcl compatibilit
6900: 79 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26  y&lt;/li&gt;.  &
6910: 6c 74 3b 6c 69 26 67 74 3b 49 6d 70 72 6f 76 65  lt;li&gt;Improve
6920: 64 20 64 69 61 67 6e 6f 73 74 69 63 73 20 77 68  d diagnostics wh
6930: 65 6e 20 73 6f 75 72 63 69 6e 67 20 61 20 73 63  en sourcing a sc
6940: 72 69 70 74 20 77 69 74 68 20 6d 69 73 73 69 6e  ript with missin
6950: 67 2f 6d 69 73 6d 61 74 63 68 65 73 20 62 72 61  g/mismatches bra
6960: 63 6b 65 74 73 2c 20 71 75 6f 74 65 73 2c 20 65  ckets, quotes, e
6970: 74 63 2e 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20  tc.&lt;/li&gt;. 
6980: 20 26 6c 74 3b 6c 69 26 67 74 3b 4a 69 6d 20 54   &lt;li&gt;Jim T
6990: 63 6c 20 6e 6f 77 20 62 75 69 6c 64 73 20 6f 6e  cl now builds on
69a0: 20 48 61 69 6b 75 20 28 42 65 4f 53 20 63 6c 6f   Haiku (BeOS clo
69b0: 6e 65 29 20 61 6e 64 20 53 6f 6c 61 72 69 73 26  ne) and Solaris&
69c0: 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26 6c 74  lt;/li&gt;.  &lt
69d0: 3b 6c 69 26 67 74 3b 42 75 69 6c 64 20 6e 6f 77  ;li&gt;Build now
69e0: 20 77 6f 72 6b 73 20 77 69 74 68 20 42 53 44 20   works with BSD 
69f0: 6d 61 6b 65 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a  make&lt;/li&gt;.
6a00: 20 20 26 6c 74 3b 6c 69 26 67 74 3b 5b 66 69 6c    &lt;li&gt;[fil
6a10: 65 20 6d 74 69 6d 65 5d 20 63 61 6e 20 6e 6f 77  e mtime] can now
6a20: 20 73 65 74 20 74 68 65 20 66 69 6c 65 20 74 69   set the file ti
6a30: 6d 65 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20  me&lt;/li&gt;.  
6a40: 26 6c 74 3b 6c 69 26 67 74 3b 4e 65 77 20 5b 61  &lt;li&gt;New [a
6a50: 69 6f 20 6c 69 73 74 65 6e 5d 20 74 6f 20 73 65  io listen] to se
6a60: 74 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  t the size of th
6a70: 65 20 6c 69 73 74 65 6e 20 71 75 65 75 65 20 6f  e listen queue o
6a80: 6e 20 73 65 72 76 65 72 20 73 6f 63 6b 65 74 73  n server sockets
6a90: 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26 6c  &lt;/li&gt;.  &l
6aa0: 74 3b 6c 69 26 67 74 3b 4a 69 6d 20 54 63 6c 20  t;li&gt;Jim Tcl 
6ab0: 4d 61 6e 75 61 6c 20 69 73 20 62 65 74 74 65 72  Manual is better
6ac0: 20 66 6f 72 6d 61 74 74 65 64 2c 20 63 6f 6d 6d   formatted, comm
6ad0: 61 6e 64 73 20 61 72 65 20 68 79 70 65 72 6c 69  ands are hyperli
6ae0: 6e 6b 65 64 20 61 6e 64 20 76 61 72 69 6f 75 73  nked and various
6af0: 20 63 6f 72 72 65 63 74 69 6f 6e 73 20 68 61 76   corrections hav
6b00: 65 20 62 65 65 6e 20 6d 61 64 65 26 6c 74 3b 2f  e been made&lt;/
6b10: 6c 69 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26  li&gt;.  &lt;li&
6b20: 67 74 3b 54 68 65 20 6f 6f 2c 20 74 72 65 65 2c  gt;The oo, tree,
6b30: 20 62 69 6e 61 72 79 20 61 6e 64 20 70 61 63 6b   binary and pack
6b40: 20 65 78 74 65 6e 73 69 6f 6e 73 20 61 72 65 20   extensions are 
6b50: 6e 6f 77 20 64 6f 63 75 6d 65 6e 74 65 64 26 6c  now documented&l
6b60: 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26 6c 74 3b  t;/li&gt;.  &lt;
6b70: 6c 69 26 67 74 3b 4e 65 77 20 6d 65 74 61 6b 69  li&gt;New metaki
6b80: 74 20 65 78 74 65 6e 73 69 6f 6e 26 6c 74 3b 2f  t extension&lt;/
6b90: 6c 69 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26  li&gt;.  &lt;li&
6ba0: 67 74 3b 54 68 65 20 53 44 4c 20 65 78 74 65 6e  gt;The SDL exten
6bb0: 73 69 6f 6e 20 6f 6e 63 65 20 61 67 61 69 6e 20  sion once again 
6bc0: 62 75 69 6c 64 73 20 61 6e 64 20 72 75 6e 73 26  builds and runs&
6bd0: 6c 74 3b 2f 6c 69 26 67 74 3b 0a 26 6c 74 3b 2f  lt;/li&gt;.&lt;/
6be0: 75 6c 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74  ul&gt;..&lt;p&gt
6bf0: 3b 53 74 65 76 65 20 42 65 6e 6e 65 74 74 20 28  ;Steve Bennett (
6c00: 26 6c 74 3b 61 20 68 72 65 66 3d 22 26 61 6d 70  &lt;a href="&amp
6c10: 3b 23 31 30 39 3b 26 61 6d 70 3b 23 30 39 37 3b  ;#109;&amp;#097;
6c20: 26 61 6d 70 3b 23 31 30 35 3b 26 61 6d 70 3b 23  &amp;#105;&amp;#
6c30: 31 30 38 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61  108;&amp;#116;&a
6c40: 6d 70 3b 23 31 31 31 3b 3a 26 61 6d 70 3b 23 31  mp;#111;:&amp;#1
6c50: 31 35 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d  15;&amp;#116;&am
6c60: 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31 31 38  p;#101;&amp;#118
6c70: 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b  ;&amp;#101;&amp;
6c80: 23 30 39 38 3b 26 61 6d 70 3b 23 30 36 34 3b 26  #098;&amp;#064;&
6c90: 61 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23 31  amp;#119;&amp;#1
6ca0: 31 31 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d  11;&amp;#114;&am
6cb0: 70 3b 23 31 30 37 3b 26 61 6d 70 3b 23 31 31 39  p;#107;&amp;#119
6cc0: 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b  ;&amp;#097;&amp;
6cd0: 23 31 31 34 3b 26 61 6d 70 3b 23 31 30 31 3b 26  #114;&amp;#101;&
6ce0: 61 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23 31  amp;#046;&amp;#1
6cf0: 31 30 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d  10;&amp;#101;&am
6d00: 70 3b 23 31 31 36 3b 26 61 6d 70 3b 23 30 34 36  p;#116;&amp;#046
6d10: 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b  ;&amp;#097;&amp;
6d20: 23 31 31 37 3b 22 26 67 74 3b 26 61 6d 70 3b 23  #117;"&gt;&amp;#
6d30: 31 31 35 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61  115;&amp;#116;&a
6d40: 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31 31  mp;#101;&amp;#11
6d50: 38 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70  8;&amp;#101;&amp
6d60: 3b 23 30 39 38 3b 26 61 6d 70 3b 23 30 36 34 3b  ;#098;&amp;#064;
6d70: 26 61 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23  &amp;#119;&amp;#
6d80: 31 31 31 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61  111;&amp;#114;&a
6d90: 6d 70 3b 23 31 30 37 3b 26 61 6d 70 3b 23 31 31  mp;#107;&amp;#11
6da0: 39 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70  9;&amp;#097;&amp
6db0: 3b 23 31 31 34 3b 26 61 6d 70 3b 23 31 30 31 3b  ;#114;&amp;#101;
6dc0: 26 61 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23  &amp;#046;&amp;#
6dd0: 31 31 30 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61  110;&amp;#101;&a
6de0: 6d 70 3b 23 31 31 36 3b 26 61 6d 70 3b 23 30 34  mp;#116;&amp;#04
6df0: 36 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70  6;&amp;#097;&amp
6e00: 3b 23 31 31 37 3b 26 6c 74 3b 2f 61 26 67 74 3b  ;#117;&lt;/a&gt;
6e10: 29 26 6c 74 3b 2f 70 26 67 74 3b 0a 3c 2f 63 6f  )&lt;/p&gt;.</co
6e20: 6e 74 65 6e 74 3e 0a 20 20 3c 2f 65 6e 74 72 79  ntent>.  </entry
6e30: 3e 0a 20 20 3c 65 6e 74 72 79 3e 0a 20 20 20 20  >.  <entry>.    
6e40: 3c 69 64 3e 74 61 67 3a 6a 69 6d 2e 62 65 72 6c  <id>tag:jim.berl
6e50: 69 6f 73 2e 64 65 2c 32 30 31 31 2d 31 30 2d 30  ios.de,2011-10-0
6e60: 34 3a 2f 61 72 74 69 63 6c 65 73 2f 6a 69 6d 2d  4:/articles/jim-
6e70: 73 71 6c 69 74 65 2d 73 68 65 6c 6c 2f 3c 2f 69  sqlite-shell/</i
6e80: 64 3e 0a 20 20 20 20 3c 74 69 74 6c 65 20 74 79  d>.    <title ty
6e90: 70 65 3d 22 68 74 6d 6c 22 3e 6a 53 51 4c 73 68  pe="html">jSQLsh
6ea0: 20 2d 20 4a 69 6d 20 54 63 6c 20 53 51 4c 69 74   - Jim Tcl SQLit
6eb0: 65 20 53 68 65 6c 6c 3c 2f 74 69 74 6c 65 3e 0a  e Shell</title>.
6ec0: 20 20 20 20 3c 70 75 62 6c 69 73 68 65 64 3e 32      <published>2
6ed0: 30 31 31 2d 31 30 2d 30 33 54 31 34 3a 30 30 3a  011-10-03T14:00:
6ee0: 30 30 5a 3c 2f 70 75 62 6c 69 73 68 65 64 3e 0a  00Z</published>.
6ef0: 20 20 20 20 3c 75 70 64 61 74 65 64 3e 32 30 31      <updated>201
6f00: 31 2d 31 30 2d 30 33 54 31 34 3a 30 30 3a 30 30  1-10-03T14:00:00
6f10: 5a 3c 2f 75 70 64 61 74 65 64 3e 0a 20 20 20 20  Z</updated>.    
6f20: 3c 6c 69 6e 6b 20 72 65 6c 3d 22 61 6c 74 65 72  <link rel="alter
6f30: 6e 61 74 65 22 20 68 72 65 66 3d 22 68 74 74 70  nate" href="http
6f40: 3a 2f 2f 6a 69 6d 2e 62 65 72 6c 69 6f 73 2e 64  ://jim.berlios.d
6f50: 65 2f 61 72 74 69 63 6c 65 73 2f 6a 69 6d 2d 73  e/articles/jim-s
6f60: 71 6c 69 74 65 2d 73 68 65 6c 6c 2f 22 2f 3e 0a  qlite-shell/"/>.
6f70: 20 20 20 20 3c 63 6f 6e 74 65 6e 74 20 74 79 70      <content typ
6f80: 65 3d 22 68 74 6d 6c 22 3e 26 6c 74 3b 70 26 67  e="html">&lt;p&g
6f90: 74 3b 54 68 65 20 6a 53 51 4c 73 68 20 70 72 6f  t;The jSQLsh pro
6fa0: 6a 65 63 74 20 61 74 20 26 6c 74 3b 61 20 68 72  ject at &lt;a hr
6fb0: 65 66 3d 22 68 74 74 70 73 3a 2f 2f 67 69 74 68  ef="https://gith
6fc0: 75 62 2e 63 6f 6d 2f 4c 53 74 69 6e 73 6f 6e 2f  ub.com/LStinson/
6fd0: 6a 53 51 4c 73 68 22 26 67 74 3b 68 74 74 70 73  jSQLsh"&gt;https
6fe0: 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 4c 53  ://github.com/LS
6ff0: 74 69 6e 73 6f 6e 2f 6a 53 51 4c 73 68 26 6c 74  tinson/jSQLsh&lt
7000: 3b 2f 61 26 67 74 3b 20 70 72 6f 76 69 64 65 73  ;/a&gt; provides
7010: 0a 61 20 73 6d 61 6c 6c 20 62 75 74 20 70 6f 77  .a small but pow
7020: 65 72 66 75 6c 20 73 68 65 6c 6c 20 66 6f 72 20  erful shell for 
7030: 73 71 6c 69 74 65 2c 20 6d 6f 64 65 6c 6c 65 64  sqlite, modelled
7040: 20 61 66 74 65 72 0a 26 6c 74 3b 61 20 68 72 65   after.&lt;a hre
7050: 66 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 70 6f  f="http://www.po
7060: 73 74 67 72 65 73 71 6c 2e 6f 72 67 2f 64 6f 63  stgresql.org/doc
7070: 73 2f 39 2e 30 2f 73 74 61 74 69 63 2f 61 70 70  s/9.0/static/app
7080: 2d 70 73 71 6c 2e 68 74 6d 6c 22 26 67 74 3b 70  -psql.html"&gt;p
7090: 73 71 6c 26 6c 74 3b 2f 61 26 67 74 3b 26 6c 74  sql&lt;/a&gt;&lt
70a0: 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67  ;/p&gt;..&lt;p&g
70b0: 74 3b 54 68 65 20 63 72 65 61 74 6f 72 2c 20 4c  t;The creator, L
70c0: 6f 72 61 6e 63 65 20 53 74 69 6e 73 6f 6e 2c 20  orance Stinson, 
70d0: 77 61 6e 74 65 64 20 61 6e 20 73 71 6c 69 74 65  wanted an sqlite
70e0: 20 63 6f 6d 6d 61 6e 64 20 73 68 65 6c 6c 20 77   command shell w
70f0: 68 69 63 68 0a 61 64 64 72 65 73 73 65 64 20 73  hich.addressed s
7100: 6f 6d 65 20 6f 66 20 74 68 65 20 64 65 66 69 63  ome of the defic
7110: 69 65 6e 63 69 65 73 20 6f 66 20 74 68 65 20 6e  iencies of the n
7120: 61 74 69 76 65 20 73 71 6c 69 74 65 20 63 6f 6d  ative sqlite com
7130: 6d 61 6e 64 0a 73 68 65 6c 6c 2c 20 73 6f 20 68  mand.shell, so h
7140: 65 20 64 65 63 69 64 65 64 20 74 6f 20 63 72 65  e decided to cre
7150: 61 74 65 20 68 69 73 20 6f 77 6e 20 77 69 74 68  ate his own with
7160: 20 4a 69 6d 20 54 63 6c 2e 26 6c 74 3b 2f 70 26   Jim Tcl.&lt;/p&
7170: 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 54 6f  gt;..&lt;p&gt;To
7180: 20 72 75 6e 20 69 74 2c 20 79 6f 75 20 73 69 6d   run it, you sim
7190: 70 6c 79 20 6e 65 65 64 20 26 6c 74 3b 63 6f 64  ply need &lt;cod
71a0: 65 26 67 74 3b 6a 69 6d 73 68 26 6c 74 3b 2f 63  e&gt;jimsh&lt;/c
71b0: 6f 64 65 26 67 74 3b 20 62 75 69 6c 74 20 77 69  ode&gt; built wi
71c0: 74 68 20 26 6c 74 3b 65 6d 26 67 74 3b 73 71 6c  th &lt;em&gt;sql
71d0: 69 74 65 33 26 6c 74 3b 2f 65 6d 26 67 74 3b 20  ite3&lt;/em&gt; 
71e0: 61 6e 64 20 26 6c 74 3b 65 6d 26 67 74 3b 72 65  and &lt;em&gt;re
71f0: 61 64 6c 69 6e 65 26 6c 74 3b 2f 65 6d 26 67 74  adline&lt;/em&gt
7200: 3b 20 73 75 70 70 6f 72 74 2e 0a 46 6f 72 20 65  ; support..For e
7210: 78 61 6d 70 6c 65 2c 20 74 6f 20 62 75 69 6c 64  xample, to build
7220: 20 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 26 6c   a version of &l
7230: 74 3b 63 6f 64 65 26 67 74 3b 6a 69 6d 73 68 26  t;code&gt;jimsh&
7240: 6c 74 3b 2f 63 6f 64 65 26 67 74 3b 20 77 69 74  lt;/code&gt; wit
7250: 68 20 74 68 65 73 65 20 65 78 74 65 6e 73 69 6f  h these extensio
7260: 6e 73 20 69 6e 63 6c 75 64 65 64 20 73 74 61 74  ns included stat
7270: 69 63 61 6c 6c 79 3a 26 6c 74 3b 2f 70 26 67 74  ically:&lt;/p&gt
7280: 3b 0a 0a 26 6c 74 3b 70 72 65 20 63 6c 61 73 73  ;..&lt;pre class
7290: 3d 22 73 68 5f 75 6e 69 78 22 26 67 74 3b 0a 24  ="sh_unix"&gt;.$
72a0: 20 2e 2f 63 6f 6e 66 69 67 75 72 65 20 2d 2d 77   ./configure --w
72b0: 69 74 68 2d 65 78 74 3d 22 73 71 6c 69 74 65 33  ith-ext="sqlite3
72c0: 20 72 6c 70 72 6f 6d 70 74 22 0a 2e 2e 2e 0a 24   rlprompt".....$
72d0: 20 6d 61 6b 65 0a 2e 2e 2e 0a 26 6c 74 3b 2f 70   make.....&lt;/p
72e0: 72 65 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74  re&gt;..&lt;p&gt
72f0: 3b 41 6e 64 20 74 68 65 6e 20 74 72 79 20 69 74  ;And then try it
7300: 20 6f 75 74 3a 26 6c 74 3b 2f 70 26 67 74 3b 0a   out:&lt;/p&gt;.
7310: 0a 26 6c 74 3b 70 72 65 20 63 6c 61 73 73 3d 22  .&lt;pre class="
7320: 73 68 5f 75 6e 69 78 22 26 67 74 3b 0a 24 20 2e  sh_unix"&gt;.$ .
7330: 2f 6a 69 6d 73 68 20 6a 73 71 6c 73 68 0a 57 65  /jimsh jsqlsh.We
7340: 6c 63 6f 6d 65 20 74 6f 20 74 68 65 20 53 51 4c  lcome to the SQL
7350: 69 74 65 20 53 68 65 6c 6c 20 69 6e 20 4a 69 6d  ite Shell in Jim
7360: 20 54 43 4c 20 30 2e 37 32 2e 0a 4f 70 65 6e 69   TCL 0.72..Openi
7370: 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ng the database 
7380: 27 3a 6d 65 6d 6f 72 79 3a 27 2e 0a 54 6f 20 65  ':memory:'..To e
7390: 78 65 63 75 74 65 20 61 20 71 75 65 72 79 20 74  xecute a query t
73a0: 79 70 65 20 27 2f 27 2e 20 46 6f 72 20 68 65 6c  ype '/'. For hel
73b0: 70 20 74 79 70 65 20 27 2f 68 27 2e 0a 3a 6d 65  p type '/h'..:me
73c0: 6d 6f 72 79 3a 20 28 30 20 72 6f 77 73 2c 20 30  mory: (0 rows, 0
73d0: 20 63 68 61 6e 67 65 73 29 20 23 20 2f 68 0a 43   changes) # /h.C
73e0: 6f 6d 6d 61 6e 64 73 3a 0a 20 20 2f 41 28 55 54  ommands:.  /A(UT
73f0: 4f 29 20 20 20 20 20 54 6f 67 67 6c 65 20 74 68  O)     Toggle th
7400: 65 20 61 75 74 6f 20 6f 70 74 69 6f 6e 20 73 74  e auto option st
7410: 61 74 65 2e 0a 20 20 2f 63 28 6c 65 61 72 29 20  ate..  /c(lear) 
7420: 20 20 20 43 6c 65 61 72 20 74 68 65 20 71 75 65     Clear the que
7430: 72 79 20 62 75 66 66 65 72 0a 20 20 2f 44 28 45  ry buffer.  /D(E
7440: 42 55 47 29 20 20 20 20 54 6f 67 67 6c 65 20 74  BUG)    Toggle t
7450: 68 65 20 64 65 62 75 67 20 6f 70 74 69 6f 6e 20  he debug option 
7460: 73 74 61 74 65 2e 0a 20 20 2f 64 20 20 20 20 20  state..  /d     
7470: 20 20 20 20 20 44 69 73 70 6c 61 79 20 61 6c 6c       Display all
7480: 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20   objects in the 
7490: 64 61 74 61 62 61 73 65 2e 0a 20 20 2f 64 5b 69  database..  /d[i
74a0: 74 76 5d 20 20 20 20 20 44 69 73 70 6c 61 79 20  tv]     Display 
74b0: 61 6c 6c 20 69 6e 64 65 78 65 73 20 28 2f 64 69  all indexes (/di
74c0: 29 20 2f 20 74 61 62 6c 65 73 20 28 2f 64 74 29  ) / tables (/dt)
74d0: 20 2f 20 76 69 65 77 73 20 28 2f 64 76 29 2e 0a   / views (/dv)..
74e0: 20 20 2f 64 20 4f 42 4a 20 20 20 20 20 20 44 65    /d OBJ      De
74f0: 73 63 72 69 62 65 20 74 68 65 20 6f 62 6a 65 63  scribe the objec
7500: 74 20 4f 42 4a 2e 0a 20 20 2f 64 73 20 4f 42 4a  t OBJ..  /ds OBJ
7510: 20 20 20 20 20 44 69 73 70 6c 61 79 73 20 74 68       Displays th
7520: 65 20 73 63 68 65 6d 61 20 66 6f 72 20 74 68 65  e schema for the
7530: 20 6f 62 6a 65 63 74 20 4f 42 4a 2e 0a 20 20 2f   object OBJ..  /
7540: 65 28 64 69 74 29 20 20 20 20 20 45 64 69 74 20  e(dit)     Edit 
7550: 74 68 65 20 71 75 65 72 79 20 62 75 66 66 65 72  the query buffer
7560: 2e 0a 20 20 2f 67 6f 20 7c 20 2f 20 20 20 20 20  ..  /go | /     
7570: 45 78 65 63 75 74 65 20 74 68 65 20 71 75 65 72  Execute the quer
7580: 79 20 69 6e 20 74 68 65 20 71 75 65 72 79 20 62  y in the query b
7590: 75 66 66 65 72 2e 0a 20 20 2f 68 28 65 6c 70 29  uffer..  /h(elp)
75a0: 20 20 20 20 20 50 72 69 6e 74 20 74 68 69 73 20       Print this 
75b0: 68 65 6c 70 20 74 65 78 74 2e 0a 20 20 2f 6f 28  help text..  /o(
75c0: 70 65 6e 29 20 20 20 20 20 4f 70 65 6e 20 61 20  pen)     Open a 
75d0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20 63  database file, c
75e0: 68 61 6e 67 65 20 64 69 72 65 63 74 6f 72 69 65  hange directorie
75f0: 73 20 61 6e 64 20 6c 69 73 74 20 66 69 6c 65 73  s and list files
7600: 2e 0a 20 20 2f 50 28 41 47 45 52 29 20 20 20 20  ..  /P(AGER)    
7610: 54 6f 67 67 6c 65 20 74 68 65 20 70 61 67 65 20  Toggle the page 
7620: 6f 70 74 69 6f 6e 20 73 74 61 74 65 2e 0a 20 20  option state..  
7630: 2f 70 28 72 69 6e 74 29 20 20 20 20 50 72 69 6e  /p(rint)    Prin
7640: 74 20 74 68 65 20 71 75 65 72 79 20 62 75 66 66  t the query buff
7650: 65 72 2e 0a 20 20 2f 73 28 65 74 29 20 20 20 20  er..  /s(et)    
7660: 20 20 53 65 74 2f 4c 69 73 74 20 63 6f 6e 66 69    Set/List confi
7670: 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73  guration options
7680: 2e 20 27 2f 73 20 4f 50 54 49 4f 4e 20 56 41 4c  . '/s OPTION VAL
7690: 55 45 27 0a 20 20 20 20 20 20 20 20 20 20 20 20  UE'.            
76a0: 20 20 56 61 6c 75 65 73 20 61 72 65 20 74 72 65    Values are tre
76b0: 61 74 65 64 20 61 73 20 54 43 4c 20 73 74 72 69  ated as TCL stri
76c0: 6e 67 73 20 61 6e 64 20 63 61 6e 20 62 65 20 71  ngs and can be q
76d0: 75 6f 74 65 64 2e 0a 20 20 2f 51 28 75 69 65 74  uoted..  /Q(uiet
76e0: 29 20 20 20 20 54 6f 67 67 6c 65 20 74 68 65 20  )    Toggle the 
76f0: 71 75 69 65 74 20 6f 70 74 69 6f 6e 20 73 74 61  quiet option sta
7700: 74 65 2e 0a 20 20 2f 71 28 75 69 74 29 20 20 20  te..  /q(uit)   
7710: 20 20 51 75 69 74 20 20 28 41 6c 73 6f 20 43 74    Quit  (Also Ct
7720: 72 6c 2d 44 29 0a 20 20 2f 75 28 73 65 72 29 20  rl-D).  /u(ser) 
7730: 20 20 20 20 44 69 73 70 6c 61 79 20 74 68 65 20      Display the 
7740: 75 73 65 72 20 6d 61 63 72 6f 73 2e 0a 20 20 2f  user macros..  /
7750: 75 28 73 65 72 29 23 20 20 20 20 43 6f 70 79 20  u(ser)#    Copy 
7760: 75 73 65 72 20 6d 61 63 72 6f 20 23 20 69 6e 74  user macro # int
7770: 6f 20 74 68 65 20 71 75 65 72 79 20 62 75 66 66  o the query buff
7780: 65 72 2e 0a 20 20 2f 75 28 73 65 72 29 23 20 2d  er..  /u(ser)# -
7790: 20 20 43 6f 70 79 20 74 68 65 20 71 75 65 72 79    Copy the query
77a0: 20 62 75 66 66 65 72 2c 20 6f 72 20 73 75 70 70   buffer, or supp
77b0: 6c 69 65 64 20 74 65 78 74 2c 20 69 6e 74 6f 20  lied text, into 
77c0: 6d 61 63 72 6f 20 23 2e 0a 3a 6d 65 6d 6f 72 79  macro #..:memory
77d0: 3a 20 28 30 20 72 6f 77 73 2c 20 30 20 63 68 61  : (0 rows, 0 cha
77e0: 6e 67 65 73 29 20 23 20 0a 26 6c 74 3b 2f 70 72  nges) # .&lt;/pr
77f0: 65 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b  e&gt;..&lt;p&gt;
7800: 53 74 65 76 65 20 42 65 6e 6e 65 74 74 20 28 26  Steve Bennett (&
7810: 6c 74 3b 61 20 68 72 65 66 3d 22 26 61 6d 70 3b  lt;a href="&amp;
7820: 23 31 30 39 3b 26 61 6d 70 3b 23 30 39 37 3b 26  #109;&amp;#097;&
7830: 61 6d 70 3b 23 31 30 35 3b 26 61 6d 70 3b 23 31  amp;#105;&amp;#1
7840: 30 38 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d  08;&amp;#116;&am
7850: 70 3b 23 31 31 31 3b 3a 26 61 6d 70 3b 23 31 31  p;#111;:&amp;#11
7860: 35 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d 70  5;&amp;#116;&amp
7870: 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31 31 38 3b  ;#101;&amp;#118;
7880: 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23  &amp;#101;&amp;#
7890: 30 39 38 3b 26 61 6d 70 3b 23 30 36 34 3b 26 61  098;&amp;#064;&a
78a0: 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23 31 31  mp;#119;&amp;#11
78b0: 31 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d 70  1;&amp;#114;&amp
78c0: 3b 23 31 30 37 3b 26 61 6d 70 3b 23 31 31 39 3b  ;#107;&amp;#119;
78d0: 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b 23  &amp;#097;&amp;#
78e0: 31 31 34 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61  114;&amp;#101;&a
78f0: 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23 31 31  mp;#046;&amp;#11
7900: 30 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70  0;&amp;#101;&amp
7910: 3b 23 31 31 36 3b 26 61 6d 70 3b 23 30 34 36 3b  ;#116;&amp;#046;
7920: 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b 23  &amp;#097;&amp;#
7930: 31 31 37 3b 22 26 67 74 3b 26 61 6d 70 3b 23 31  117;"&gt;&amp;#1
7940: 31 35 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d  15;&amp;#116;&am
7950: 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31 31 38  p;#101;&amp;#118
7960: 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b  ;&amp;#101;&amp;
7970: 23 30 39 38 3b 26 61 6d 70 3b 23 30 36 34 3b 26  #098;&amp;#064;&
7980: 61 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23 31  amp;#119;&amp;#1
7990: 31 31 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d  11;&amp;#114;&am
79a0: 70 3b 23 31 30 37 3b 26 61 6d 70 3b 23 31 31 39  p;#107;&amp;#119
79b0: 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b  ;&amp;#097;&amp;
79c0: 23 31 31 34 3b 26 61 6d 70 3b 23 31 30 31 3b 26  #114;&amp;#101;&
79d0: 61 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23 31  amp;#046;&amp;#1
79e0: 31 30 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d  10;&amp;#101;&am
79f0: 70 3b 23 31 31 36 3b 26 61 6d 70 3b 23 30 34 36  p;#116;&amp;#046
7a00: 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b  ;&amp;#097;&amp;
7a10: 23 31 31 37 3b 26 6c 74 3b 2f 61 26 67 74 3b 29  #117;&lt;/a&gt;)
7a20: 26 6c 74 3b 2f 70 26 67 74 3b 0a 3c 2f 63 6f 6e  &lt;/p&gt;.</con
7a30: 74 65 6e 74 3e 0a 20 20 3c 2f 65 6e 74 72 79 3e  tent>.  </entry>
7a40: 0a 20 20 3c 65 6e 74 72 79 3e 0a 20 20 20 20 3c  .  <entry>.    <
7a50: 69 64 3e 74 61 67 3a 6a 69 6d 2e 62 65 72 6c 69  id>tag:jim.berli
7a60: 6f 73 2e 64 65 2c 32 30 31 31 2d 30 39 2d 30 36  os.de,2011-09-06
7a70: 3a 2f 61 72 74 69 63 6c 65 73 2f 6d 65 74 61 6b  :/articles/metak
7a80: 69 74 2d 65 78 74 65 6e 73 69 6f 6e 2f 3c 2f 69  it-extension/</i
7a90: 64 3e 0a 20 20 20 20 3c 74 69 74 6c 65 20 74 79  d>.    <title ty
7aa0: 70 65 3d 22 68 74 6d 6c 22 3e 4e 65 77 20 4d 65  pe="html">New Me
7ab0: 74 61 6b 69 74 20 45 78 74 65 6e 73 69 6f 6e 3c  takit Extension<
7ac0: 2f 74 69 74 6c 65 3e 0a 20 20 20 20 3c 70 75 62  /title>.    <pub
7ad0: 6c 69 73 68 65 64 3e 32 30 31 31 2d 30 39 2d 30  lished>2011-09-0
7ae0: 35 54 31 34 3a 30 30 3a 30 30 5a 3c 2f 70 75 62  5T14:00:00Z</pub
7af0: 6c 69 73 68 65 64 3e 0a 20 20 20 20 3c 75 70 64  lished>.    <upd
7b00: 61 74 65 64 3e 32 30 31 31 2d 30 39 2d 30 35 54  ated>2011-09-05T
7b10: 31 34 3a 30 30 3a 30 30 5a 3c 2f 75 70 64 61 74  14:00:00Z</updat
7b20: 65 64 3e 0a 20 20 20 20 3c 6c 69 6e 6b 20 72 65  ed>.    <link re
7b30: 6c 3d 22 61 6c 74 65 72 6e 61 74 65 22 20 68 72  l="alternate" hr
7b40: 65 66 3d 22 68 74 74 70 3a 2f 2f 6a 69 6d 2e 62  ef="http://jim.b
7b50: 65 72 6c 69 6f 73 2e 64 65 2f 61 72 74 69 63 6c  erlios.de/articl
7b60: 65 73 2f 6d 65 74 61 6b 69 74 2d 65 78 74 65 6e  es/metakit-exten
7b70: 73 69 6f 6e 2f 22 2f 3e 0a 20 20 20 20 3c 63 6f  sion/"/>.    <co
7b80: 6e 74 65 6e 74 20 74 79 70 65 3d 22 68 74 6d 6c  ntent type="html
7b90: 22 3e 26 6c 74 3b 70 26 67 74 3b 41 6c 65 78 61  ">&lt;p&gt;Alexa
7ba0: 6e 64 65 72 20 53 68 70 69 6c 6b 69 6e 20 68 61  nder Shpilkin ha
7bb0: 73 20 63 6f 6e 74 72 69 62 75 74 65 64 20 74 68  s contributed th
7bc0: 65 20 6d 65 74 61 6b 69 74 20 65 78 74 65 6e 73  e metakit extens
7bd0: 69 6f 6e 20 74 6f 20 4a 69 6d 20 54 63 6c 2e 26  ion to Jim Tcl.&
7be0: 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70  lt;/p&gt;..&lt;p
7bf0: 26 67 74 3b 4d 65 74 61 6b 69 74 20 28 26 6c 74  &gt;Metakit (&lt
7c00: 3b 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f  ;a href="http://
7c10: 65 71 75 69 34 2e 63 6f 6d 2f 6d 65 74 61 6b 69  equi4.com/metaki
7c20: 74 2f 22 26 67 74 3b 68 74 74 70 3a 2f 2f 65 71  t/"&gt;http://eq
7c30: 75 69 34 2e 63 6f 6d 2f 6d 65 74 61 6b 69 74 2f  ui4.com/metakit/
7c40: 26 6c 74 3b 2f 61 26 67 74 3b 29 20 69 73 20 61  &lt;/a&gt;) is a
7c50: 6e 20 65 6d 62 65 64 64 61 62 6c 65 20 6e 6f 6e  n embeddable non
7c60: 2d 53 51 4c 0a 64 61 74 61 62 61 73 65 20 77 69  -SQL.database wi
7c70: 74 68 20 61 64 76 61 6e 63 65 64 20 64 61 74 61  th advanced data
7c80: 20 6d 61 6e 69 70 75 6c 61 74 69 6f 6e 20 66 65   manipulation fe
7c90: 61 74 75 72 65 73 20 74 68 72 6f 75 67 68 20 74  atures through t
7ca0: 68 65 20 75 73 65 20 6f 66 20 76 69 65 77 73 2e  he use of views.
7cb0: 0a 55 73 69 6e 67 20 6d 65 74 61 6b 69 74 20 63  .Using metakit c
7cc0: 61 6e 20 62 65 20 61 6e 20 61 6c 74 65 72 6e 61  an be an alterna
7cd0: 74 69 76 65 20 74 6f 20 73 71 6c 69 74 65 2e 26  tive to sqlite.&
7ce0: 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70  lt;/p&gt;..&lt;p
7cf0: 26 67 74 3b 54 68 65 20 4a 69 6d 20 54 63 6c 20  &gt;The Jim Tcl 
7d00: 6d 65 74 61 6b 69 74 20 69 6e 74 65 72 66 61 63  metakit interfac
7d10: 65 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66  e is different f
7d20: 72 6f 6d 20 74 68 65 20 54 63 6c 20 6d 65 74 61  rom the Tcl meta
7d30: 6b 69 74 20 69 6e 74 65 72 66 61 63 65 20 61 73  kit interface as
7d40: 20 69 74 0a 6d 61 6b 65 73 20 75 73 65 20 6f 66   it.makes use of
7d50: 20 75 6e 69 71 75 65 20 4a 69 6d 20 54 63 6c 20   unique Jim Tcl 
7d60: 66 65 61 74 75 72 65 73 20 73 75 63 68 20 61 73  features such as
7d70: 20 72 65 66 65 72 65 6e 63 65 73 2e 20 54 68 65   references. The
7d80: 20 26 6c 74 3b 61 20 68 72 65 66 3d 22 2f 64 6f   &lt;a href="/do
7d90: 63 75 6d 65 6e 74 61 74 69 6f 6e 2f 6d 65 74 61  cumentation/meta
7da0: 6b 69 74 2f 22 26 67 74 3b 6d 65 74 61 6b 69 74  kit/"&gt;metakit
7db0: 20 65 78 74 65 6e 73 69 6f 6e 26 6c 74 3b 2f 61   extension&lt;/a
7dc0: 26 67 74 3b 0a 64 6f 63 75 6d 65 6e 74 61 74 69  &gt;.documentati
7dd0: 6f 6e 20 66 75 6c 6c 79 20 65 78 70 6c 61 69 6e  on fully explain
7de0: 73 20 74 68 65 20 41 50 49 2e 26 6c 74 3b 2f 70  s the API.&lt;/p
7df0: 26 67 74 3b 0a 0a 26 6c 74 3b 68 32 20 69 64 3d  &gt;..&lt;h2 id=
7e00: 22 62 75 69 6c 64 69 6e 67 2d 74 68 65 2d 6d 65  "building-the-me
7e10: 74 61 6b 69 74 2d 65 78 74 65 6e 73 69 6f 6e 22  takit-extension"
7e20: 26 67 74 3b 42 75 69 6c 64 69 6e 67 20 74 68 65  &gt;Building the
7e30: 20 4d 65 74 61 6b 69 74 20 45 78 74 65 6e 73 69   Metakit Extensi
7e40: 6f 6e 26 6c 74 3b 2f 68 32 26 67 74 3b 0a 0a 26  on&lt;/h2&gt;..&
7e50: 6c 74 3b 70 26 67 74 3b 42 75 69 6c 64 69 6e 67  lt;p&gt;Building
7e60: 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 72   the extension r
7e70: 65 71 75 69 72 65 73 20 74 68 65 20 6d 65 74 61  equires the meta
7e80: 6b 69 74 20 68 65 61 64 65 72 73 20 61 6e 64 20  kit headers and 
7e90: 6c 69 62 72 61 72 79 20 74 6f 20 62 65 0a 61 76  library to be.av
7ea0: 61 69 6c 61 62 6c 65 2e 20 48 65 72 65 20 69 73  ailable. Here is
7eb0: 20 6f 6e 65 20 77 61 79 20 74 6f 20 73 74 61 74   one way to stat
7ec0: 69 63 61 6c 6c 79 20 62 75 69 6c 64 20 74 68 65  ically build the
7ed0: 20 6d 65 74 61 6b 69 74 20 65 78 74 65 6e 73 69   metakit extensi
7ee0: 6f 6e 20 69 6e 74 6f 20 6a 69 6d 73 68 2e 26 6c  on into jimsh.&l
7ef0: 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70 72  t;/p&gt;..&lt;pr
7f00: 65 20 63 6c 61 73 73 3d 22 73 68 5f 75 6e 69 78  e class="sh_unix
7f10: 22 26 67 74 3b 0a 24 20 63 64 20 6a 69 6d 74 63  "&gt;.$ cd jimtc
7f20: 6c 0a 24 20 73 76 6e 20 63 6f 20 73 76 6e 3a 2f  l.$ svn co svn:/
7f30: 2f 73 76 6e 2e 65 71 75 69 34 2e 63 6f 6d 2f 6d  /svn.equi4.com/m
7f40: 65 74 61 6b 69 74 2f 74 72 75 6e 6b 20 6d 65 74  etakit/trunk met
7f50: 61 6b 69 74 0a 24 20 63 64 20 6d 65 74 61 6b 69  akit.$ cd metaki
7f60: 74 2f 75 6e 69 78 0a 24 20 2e 2f 63 6f 6e 66 69  t/unix.$ ./confi
7f70: 67 75 72 65 20 2d 2d 77 69 74 68 6f 75 74 2d 74  gure --without-t
7f80: 63 6c 20 2d 2d 77 69 74 68 6f 75 74 2d 70 79 74  cl --without-pyt
7f90: 68 6f 6e 20 2d 2d 64 69 73 61 62 6c 65 2d 73 68  hon --disable-sh
7fa0: 61 72 65 64 0a 24 20 6d 61 6b 65 0a 24 20 63 64  ared.$ make.$ cd
7fb0: 20 2e 2e 2f 2e 2e 0a 24 20 2e 2f 63 6f 6e 66 69   ../...$ ./confi
7fc0: 67 75 72 65 20 2d 2d 77 69 74 68 2d 65 78 74 3d  gure --with-ext=
7fd0: 6d 6b 20 43 46 4c 41 47 53 3d 22 2d 49 6d 65 74  mk CFLAGS="-Imet
7fe0: 61 6b 69 74 2f 69 6e 63 6c 75 64 65 20 2d 4c 6d  akit/include -Lm
7ff0: 65 74 61 6b 69 74 2f 75 6e 69 78 22 0a 24 20 6d  etakit/unix".$ m
8000: 61 6b 65 0a 24 20 2e 2f 6a 69 6d 73 68 20 65 78  ake.$ ./jimsh ex
8010: 61 6d 70 6c 65 73 2f 6d 65 74 61 6b 69 74 2e 74  amples/metakit.t
8020: 63 6c 0a 20 20 2e 2e 2e 0a 26 6c 74 3b 2f 70 72  cl.  ....&lt;/pr
8030: 65 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b  e&gt;..&lt;p&gt;
8040: 53 74 65 76 65 20 42 65 6e 6e 65 74 74 20 28 26  Steve Bennett (&
8050: 6c 74 3b 61 20 68 72 65 66 3d 22 26 61 6d 70 3b  lt;a href="&amp;
8060: 23 31 30 39 3b 26 61 6d 70 3b 23 30 39 37 3b 26  #109;&amp;#097;&
8070: 61 6d 70 3b 23 31 30 35 3b 26 61 6d 70 3b 23 31  amp;#105;&amp;#1
8080: 30 38 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d  08;&amp;#116;&am
8090: 70 3b 23 31 31 31 3b 3a 26 61 6d 70 3b 23 31 31  p;#111;:&amp;#11
80a0: 35 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d 70  5;&amp;#116;&amp
80b0: 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31 31 38 3b  ;#101;&amp;#118;
80c0: 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23  &amp;#101;&amp;#
80d0: 30 39 38 3b 26 61 6d 70 3b 23 30 36 34 3b 26 61  098;&amp;#064;&a
80e0: 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23 31 31  mp;#119;&amp;#11
80f0: 31 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d 70  1;&amp;#114;&amp
8100: 3b 23 31 30 37 3b 26 61 6d 70 3b 23 31 31 39 3b  ;#107;&amp;#119;
8110: 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b 23  &amp;#097;&amp;#
8120: 31 31 34 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61  114;&amp;#101;&a
8130: 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23 31 31  mp;#046;&amp;#11
8140: 30 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70  0;&amp;#101;&amp
8150: 3b 23 31 31 36 3b 26 61 6d 70 3b 23 30 34 36 3b  ;#116;&amp;#046;
8160: 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b 23  &amp;#097;&amp;#
8170: 31 31 37 3b 22 26 67 74 3b 26 61 6d 70 3b 23 31  117;"&gt;&amp;#1
8180: 31 35 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d  15;&amp;#116;&am
8190: 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31 31 38  p;#101;&amp;#118
81a0: 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b  ;&amp;#101;&amp;
81b0: 23 30 39 38 3b 26 61 6d 70 3b 23 30 36 34 3b 26  #098;&amp;#064;&
81c0: 61 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23 31  amp;#119;&amp;#1
81d0: 31 31 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d  11;&amp;#114;&am
81e0: 70 3b 23 31 30 37 3b 26 61 6d 70 3b 23 31 31 39  p;#107;&amp;#119
81f0: 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b  ;&amp;#097;&amp;
8200: 23 31 31 34 3b 26 61 6d 70 3b 23 31 30 31 3b 26  #114;&amp;#101;&
8210: 61 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23 31  amp;#046;&amp;#1
8220: 31 30 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d  10;&amp;#101;&am
8230: 70 3b 23 31 31 36 3b 26 61 6d 70 3b 23 30 34 36  p;#116;&amp;#046
8240: 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b  ;&amp;#097;&amp;
8250: 23 31 31 37 3b 26 6c 74 3b 2f 61 26 67 74 3b 29  #117;&lt;/a&gt;)
8260: 26 6c 74 3b 2f 70 26 67 74 3b 0a 3c 2f 63 6f 6e  &lt;/p&gt;.</con
8270: 74 65 6e 74 3e 0a 20 20 3c 2f 65 6e 74 72 79 3e  tent>.  </entry>
8280: 0a 20 20 3c 65 6e 74 72 79 3e 0a 20 20 20 20 3c  .  <entry>.    <
8290: 69 64 3e 74 61 67 3a 6a 69 6d 2e 62 65 72 6c 69  id>tag:jim.berli
82a0: 6f 73 2e 64 65 2c 32 30 31 31 2d 30 36 2d 32 34  os.de,2011-06-24
82b0: 3a 2f 61 72 74 69 63 6c 65 73 2f 6a 69 6d 2d 72  :/articles/jim-r
82c0: 65 6c 65 61 73 65 2d 30 2d 37 31 2f 3c 2f 69 64  elease-0-71/</id
82d0: 3e 0a 20 20 20 20 3c 74 69 74 6c 65 20 74 79 70  >.    <title typ
82e0: 65 3d 22 68 74 6d 6c 22 3e 4a 69 6d 20 54 63 6c  e="html">Jim Tcl
82f0: 20 76 65 72 73 69 6f 6e 20 30 2e 37 31 3c 2f 74   version 0.71</t
8300: 69 74 6c 65 3e 0a 20 20 20 20 3c 70 75 62 6c 69  itle>.    <publi
8310: 73 68 65 64 3e 32 30 31 31 2d 30 36 2d 32 33 54  shed>2011-06-23T
8320: 31 34 3a 30 30 3a 30 30 5a 3c 2f 70 75 62 6c 69  14:00:00Z</publi
8330: 73 68 65 64 3e 0a 20 20 20 20 3c 75 70 64 61 74  shed>.    <updat
8340: 65 64 3e 32 30 31 31 2d 30 36 2d 32 33 54 31 34  ed>2011-06-23T14
8350: 3a 30 30 3a 30 30 5a 3c 2f 75 70 64 61 74 65 64  :00:00Z</updated
8360: 3e 0a 20 20 20 20 3c 6c 69 6e 6b 20 72 65 6c 3d  >.    <link rel=
8370: 22 61 6c 74 65 72 6e 61 74 65 22 20 68 72 65 66  "alternate" href
8380: 3d 22 68 74 74 70 3a 2f 2f 6a 69 6d 2e 62 65 72  ="http://jim.ber
8390: 6c 69 6f 73 2e 64 65 2f 61 72 74 69 63 6c 65 73  lios.de/articles
83a0: 2f 6a 69 6d 2d 72 65 6c 65 61 73 65 2d 30 2d 37  /jim-release-0-7
83b0: 31 2f 22 2f 3e 0a 20 20 20 20 3c 63 6f 6e 74 65  1/"/>.    <conte
83c0: 6e 74 20 74 79 70 65 3d 22 68 74 6d 6c 22 3e 26  nt type="html">&
83d0: 6c 74 3b 68 32 20 69 64 3d 22 61 6e 6e 6f 75 6e  lt;h2 id="announ
83e0: 63 65 2d 6a 69 6d 2d 74 63 6c 2d 76 65 72 73 69  ce-jim-tcl-versi
83f0: 6f 6e 2d 30 37 31 22 26 67 74 3b 41 4e 4e 4f 55  on-071"&gt;ANNOU
8400: 4e 43 45 3a 20 4a 69 6d 20 54 63 6c 20 76 65 72  NCE: Jim Tcl ver
8410: 73 69 6f 6e 20 30 2e 37 31 26 6c 74 3b 2f 68 32  sion 0.71&lt;/h2
8420: 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 4a  &gt;..&lt;p&gt;J
8430: 69 6d 20 54 63 6c 20 30 2e 37 31 20 68 61 73 20  im Tcl 0.71 has 
8440: 62 65 65 6e 20 72 65 6c 65 61 73 65 64 20 61 6e  been released an
8450: 64 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 66  d is available f
8460: 72 6f 6d 3a 20 26 6c 74 3b 2f 70 26 67 74 3b 0a  rom: &lt;/p&gt;.
8470: 0a 26 6c 74 3b 70 26 67 74 3b 26 6c 74 3b 61 20  .&lt;p&gt;&lt;a 
8480: 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 72 65 70  href="http://rep
8490: 6f 2e 6f 72 2e 63 7a 2f 77 2f 6a 69 6d 74 63 6c  o.or.cz/w/jimtcl
84a0: 2e 67 69 74 22 26 67 74 3b 68 74 74 70 3a 2f 2f  .git"&gt;http://
84b0: 72 65 70 6f 2e 6f 72 2e 63 7a 2f 77 2f 6a 69 6d  repo.or.cz/w/jim
84c0: 74 63 6c 2e 67 69 74 26 6c 74 3b 2f 61 26 67 74  tcl.git&lt;/a&gt
84d0: 3b 20 6f 72 20 26 6c 74 3b 61 20 68 72 65 66 3d  ; or &lt;a href=
84e0: 22 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e  "https://github.
84f0: 63 6f 6d 2f 6d 73 74 65 76 65 62 2f 6a 69 6d 74  com/msteveb/jimt
8500: 63 6c 22 26 67 74 3b 68 74 74 70 73 3a 2f 2f 67  cl"&gt;https://g
8510: 69 74 68 75 62 2e 63 6f 6d 2f 6d 73 74 65 76 65  ithub.com/msteve
8520: 62 2f 6a 69 6d 74 63 6c 26 6c 74 3b 2f 61 26 67  b/jimtcl&lt;/a&g
8530: 74 3b 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c  t;&lt;/p&gt;..&l
8540: 74 3b 68 32 20 69 64 3d 22 63 68 61 6e 67 65 73  t;h2 id="changes
8550: 2d 73 69 6e 63 65 2d 76 65 72 73 69 6f 6e 2d 30  -since-version-0
8560: 37 30 22 26 67 74 3b 43 48 41 4e 47 45 53 20 53  70"&gt;CHANGES S
8570: 49 4e 43 45 20 56 45 52 53 49 4f 4e 20 30 2e 37  INCE VERSION 0.7
8580: 30 26 6c 74 3b 2f 68 32 26 67 74 3b 0a 0a 26 6c  0&lt;/h2&gt;..&l
8590: 74 3b 70 26 67 74 3b 54 68 69 73 20 72 65 6c 65  t;p&gt;This rele
85a0: 61 73 65 20 69 6e 63 6f 72 70 6f 72 61 74 65 73  ase incorporates
85b0: 20 62 75 67 20 66 69 78 65 73 20 61 6e 64 0a 73   bug fixes and.s
85c0: 65 76 65 72 61 6c 20 6e 65 77 20 66 65 61 74 75  everal new featu
85d0: 72 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 3a 26  res, including:&
85e0: 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70  lt;/p&gt;..&lt;p
85f0: 26 67 74 3b 42 75 67 73 20 66 69 78 65 64 26 6c  &gt;Bugs fixed&l
8600: 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 75 6c  t;/p&gt;..&lt;ul
8610: 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74  &gt;.  &lt;li&gt
8620: 3b 4c 69 6e 65 20 65 64 69 74 69 6e 67 20 77 6f  ;Line editing wo
8630: 72 6b 73 20 62 65 74 74 65 72 20 6f 6e 20 73 65  rks better on se
8640: 72 69 61 6c 20 63 6f 6e 73 6f 6c 65 73 26 6c 74  rial consoles&lt
8650: 3b 2f 6c 69 26 67 74 3b 0a 20 20 26 6c 74 3b 6c  ;/li&gt;.  &lt;l
8660: 69 26 67 74 3b 46 69 78 20 76 61 72 69 6f 75 73  i&gt;Fix various
8670: 20 70 61 72 73 69 6e 67 20 62 75 67 73 20 61 6e   parsing bugs an
8680: 64 20 63 72 61 73 68 65 73 20 69 6e 20 75 6e 75  d crashes in unu
8690: 73 75 61 6c 20 63 61 73 65 73 26 6c 74 3b 2f 6c  sual cases&lt;/l
86a0: 69 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67  i&gt;.  &lt;li&g
86b0: 74 3b 70 61 63 6b 61 67 65 20 72 65 71 75 69 72  t;package requir
86c0: 65 20 6e 6f 77 20 6c 6f 61 64 73 20 70 61 63 6b  e now loads pack
86d0: 61 67 65 73 20 61 74 20 74 68 65 20 67 6c 6f 62  ages at the glob
86e0: 61 6c 20 6c 65 76 65 6c 26 6c 74 3b 2f 6c 69 26  al level&lt;/li&
86f0: 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74 3b  gt;.  &lt;li&gt;
8700: 73 74 72 69 6e 67 20 74 72 69 6d 2a 20 61 6e 64  string trim* and
8710: 20 73 74 72 69 6e 67 20 6c 61 73 74 20 61 72 65   string last are
8720: 20 6e 6f 77 20 38 2d 62 69 74 20 63 6c 65 61 6e   now 8-bit clean
8730: 20 61 6e 64 20 66 61 73 74 65 72 26 6c 74 3b 2f   and faster&lt;/
8740: 6c 69 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26  li&gt;.  &lt;li&
8750: 67 74 3b 65 78 65 63 20 63 68 69 6c 64 20 70 72  gt;exec child pr
8760: 6f 63 65 73 73 65 73 20 61 72 65 20 6e 6f 77 20  ocesses are now 
8770: 72 65 61 70 65 64 26 6c 74 3b 2f 6c 69 26 67 74  reaped&lt;/li&gt
8780: 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74 3b 46 44  ;.  &lt;li&gt;FD
8790: 5f 43 4c 4f 45 58 45 43 20 69 73 20 6e 6f 77 20  _CLOEXEC is now 
87a0: 73 65 74 20 6f 6e 20 6f 70 65 6e 65 64 20 66 69  set on opened fi
87b0: 6c 65 68 61 6e 64 6c 65 73 26 6c 74 3b 2f 6c 69  lehandles&lt;/li
87c0: 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74  &gt;.  &lt;li&gt
87d0: 3b 64 6c 6f 70 65 6e 28 29 20 68 61 6e 64 6c 65  ;dlopen() handle
87e0: 73 20 61 72 65 20 6e 6f 77 20 66 72 65 65 64 20  s are now freed 
87f0: 6f 6e 20 66 72 65 65 69 6e 67 20 69 6e 74 65 72  on freeing inter
8800: 70 72 65 74 65 72 26 6c 74 3b 2f 6c 69 26 67 74  preter&lt;/li&gt
8810: 3b 0a 26 6c 74 3b 2f 75 6c 26 67 74 3b 0a 0a 26  ;.&lt;/ul&gt;..&
8820: 6c 74 3b 70 26 67 74 3b 46 65 61 74 75 72 65 73  lt;p&gt;Features
8830: 20 61 64 64 65 64 26 6c 74 3b 2f 70 26 67 74 3b   added&lt;/p&gt;
8840: 0a 0a 26 6c 74 3b 75 6c 26 67 74 3b 0a 20 20 26  ..&lt;ul&gt;.  &
8850: 6c 74 3b 6c 69 26 67 74 3b 41 64 64 20 6f 70 74  lt;li&gt;Add opt
8860: 69 6f 6e 61 6c 20 73 75 70 70 6f 72 74 20 66 6f  ional support fo
8870: 72 20 74 68 65 20 62 69 6e 61 72 79 20 63 6f 6d  r the binary com
8880: 6d 61 6e 64 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a  mand&lt;/li&gt;.
8890: 20 20 26 6c 74 3b 6c 69 26 67 74 3b 54 65 73 74    &lt;li&gt;Test
88a0: 20 73 75 69 74 65 20 69 73 20 6e 6f 77 20 74 63   suite is now tc
88b0: 6c 74 65 73 74 73 20 76 32 20 63 6f 6d 70 61 74  ltests v2 compat
88c0: 69 62 6c 65 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a  ible&lt;/li&gt;.
88d0: 20 20 26 6c 74 3b 6c 69 26 67 74 3b 70 72 6f 63    &lt;li&gt;proc
88e0: 20 26 61 6d 70 3b 6c 73 71 75 6f 3b 61 72 67 73   &amp;lsquo;args
88f0: 26 61 6d 70 3b 72 73 71 75 6f 3b 20 63 61 6e 20  &amp;rsquo; can 
8900: 6e 6f 77 20 62 65 20 72 65 6e 61 6d 65 64 26 6c  now be renamed&l
8910: 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26 6c 74 3b  t;/li&gt;.  &lt;
8920: 6c 69 26 67 74 3b 41 75 74 6f 6d 61 74 69 63 20  li&gt;Automatic 
8930: 70 72 6f 63 20 75 70 72 65 66 20 61 72 67 73 20  proc upref args 
8940: 61 72 65 20 6e 6f 77 20 73 75 70 70 6f 72 74 65  are now supporte
8950: 64 20 77 69 74 68 20 26 61 6d 70 3b 61 6d 70 3b  d with &amp;amp;
8960: 76 61 72 6e 61 6d 65 26 6c 74 3b 2f 6c 69 26 67  varname&lt;/li&g
8970: 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74 3b 65  t;.  &lt;li&gt;e
8980: 78 70 72 20 73 68 6f 72 74 68 61 6e 64 20 73 79  xpr shorthand sy
8990: 6e 74 61 78 20 77 69 74 68 20 24 28 26 61 6d 70  ntax with $(&amp
89a0: 3b 68 65 6c 6c 69 70 3b 29 26 6c 74 3b 2f 6c 69  ;hellip;)&lt;/li
89b0: 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74  &gt;.  &lt;li&gt
89c0: 3b 50 72 65 76 69 6f 75 73 20 70 72 6f 63 20 64  ;Previous proc d
89d0: 65 66 69 6e 69 74 69 6f 6e 73 20 63 61 6e 20 62  efinitions can b
89e0: 65 20 73 61 76 65 64 20 77 69 74 68 20 6c 6f 63  e saved with loc
89f0: 61 6c 20 61 6e 64 20 69 6e 76 6f 6b 65 64 20 77  al and invoked w
8a00: 69 74 68 20 75 70 63 61 6c 6c 26 6c 74 3b 2f 6c  ith upcall&lt;/l
8a10: 69 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67  i&gt;.  &lt;li&g
8a20: 74 3b 4e 6f 6e 2d 67 72 65 65 64 79 20 72 65 67  t;Non-greedy reg
8a30: 65 78 70 2f 72 65 67 73 75 62 20 73 75 70 70 6f  exp/regsub suppo
8a40: 72 74 20 77 69 74 68 20 74 68 65 20 62 75 69 6c  rt with the buil
8a50: 74 2d 69 6e 20 72 65 67 65 78 70 20 69 6d 70 6c  t-in regexp impl
8a60: 65 6d 65 6e 74 61 74 69 6f 6e 26 6c 74 3b 2f 6c  ementation&lt;/l
8a70: 69 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67  i&gt;.  &lt;li&g
8a80: 74 3b 4d 69 6e 69 6d 61 6c 20 65 78 65 63 20 69  t;Minimal exec i
8a90: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73  mplementation is
8aa0: 20 73 75 70 70 6f 72 74 65 64 20 65 76 65 6e 20   supported even 
8ab0: 77 69 74 68 6f 75 74 20 76 66 6f 72 6b 2f 77 61  without vfork/wa
8ac0: 69 74 70 69 64 26 6c 74 3b 2f 6c 69 26 67 74 3b  itpid&lt;/li&gt;
8ad0: 0a 20 20 26 6c 74 3b 6c 69 26 67 74 3b 63 6f 6e  .  &lt;li&gt;con
8ae0: 66 69 67 75 72 65 20 69 73 20 6e 6f 77 20 66 61  figure is now fa
8af0: 73 74 65 72 20 61 6e 64 20 73 69 6d 70 6c 65 72  ster and simpler
8b00: 20 77 69 74 68 20 61 75 74 6f 73 65 74 75 70 20   with autosetup 
8b10: 28 26 6c 74 3b 61 20 68 72 65 66 3d 22 68 74 74  (&lt;a href="htt
8b20: 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f  ps://github.com/
8b30: 6d 73 74 65 76 65 62 2f 61 75 74 6f 73 65 74 75  msteveb/autosetu
8b40: 70 22 26 67 74 3b 68 74 74 70 73 3a 2f 2f 67 69  p"&gt;https://gi
8b50: 74 68 75 62 2e 63 6f 6d 2f 6d 73 74 65 76 65 62  thub.com/msteveb
8b60: 2f 61 75 74 6f 73 65 74 75 70 26 6c 74 3b 2f 61  /autosetup&lt;/a
8b70: 26 67 74 3b 29 26 6c 74 3b 2f 6c 69 26 67 74 3b  &gt;)&lt;/li&gt;
8b80: 0a 20 20 26 6c 74 3b 6c 69 26 67 74 3b 41 64 64  .  &lt;li&gt;Add
8b90: 20 73 74 72 69 6e 67 20 62 79 74 65 72 61 6e 67   string byterang
8ba0: 65 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26  e&lt;/li&gt;.  &
8bb0: 6c 74 3b 6c 69 26 67 74 3b 41 62 69 6c 69 74 79  lt;li&gt;Ability
8bc0: 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 69 6e   to create a sin
8bd0: 67 6c 65 20 73 6f 75 72 63 65 20 66 69 6c 65 20  gle source file 
8be0: 62 6f 6f 74 73 74 72 61 70 20 6a 69 6d 73 68 26  bootstrap jimsh&
8bf0: 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26 6c 74  lt;/li&gt;.  &lt
8c00: 3b 6c 69 26 67 74 3b 41 64 64 65 64 20 64 65 62  ;li&gt;Added deb
8c10: 69 61 6e 20 70 61 63 6b 61 67 69 6e 67 20 73 75  ian packaging su
8c20: 70 70 6f 72 74 26 6c 74 3b 2f 6c 69 26 67 74 3b  pport&lt;/li&gt;
8c30: 0a 26 6c 74 3b 2f 75 6c 26 67 74 3b 0a 0a 26 6c  .&lt;/ul&gt;..&l
8c40: 74 3b 70 26 67 74 3b 53 74 65 76 65 20 42 65 6e  t;p&gt;Steve Ben
8c50: 6e 65 74 74 20 28 26 6c 74 3b 61 20 68 72 65 66  nett (&lt;a href
8c60: 3d 22 26 61 6d 70 3b 23 31 30 39 3b 26 61 6d 70  ="&amp;#109;&amp
8c70: 3b 23 30 39 37 3b 26 61 6d 70 3b 23 31 30 35 3b  ;#097;&amp;#105;
8c80: 26 61 6d 70 3b 23 31 30 38 3b 26 61 6d 70 3b 23  &amp;#108;&amp;#
8c90: 31 31 36 3b 26 61 6d 70 3b 23 31 31 31 3b 3a 26  116;&amp;#111;:&
8ca0: 61 6d 70 3b 23 31 31 35 3b 26 61 6d 70 3b 23 31  amp;#115;&amp;#1
8cb0: 31 36 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d  16;&amp;#101;&am
8cc0: 70 3b 23 31 31 38 3b 26 61 6d 70 3b 23 31 30 31  p;#118;&amp;#101
8cd0: 3b 26 61 6d 70 3b 23 30 39 38 3b 26 61 6d 70 3b  ;&amp;#098;&amp;
8ce0: 23 30 36 34 3b 26 61 6d 70 3b 23 31 31 39 3b 26  #064;&amp;#119;&
8cf0: 61 6d 70 3b 23 31 31 31 3b 26 61 6d 70 3b 23 31  amp;#111;&amp;#1
8d00: 31 34 3b 26 61 6d 70 3b 23 31 30 37 3b 26 61 6d  14;&amp;#107;&am
8d10: 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23 30 39 37  p;#119;&amp;#097
8d20: 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d 70 3b  ;&amp;#114;&amp;
8d30: 23 31 30 31 3b 26 61 6d 70 3b 23 30 34 36 3b 26  #101;&amp;#046;&
8d40: 61 6d 70 3b 23 31 31 30 3b 26 61 6d 70 3b 23 31  amp;#110;&amp;#1
8d50: 30 31 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d  01;&amp;#116;&am
8d60: 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23 30 39 37  p;#046;&amp;#097
8d70: 3b 26 61 6d 70 3b 23 31 31 37 3b 22 26 67 74 3b  ;&amp;#117;"&gt;
8d80: 26 61 6d 70 3b 23 31 31 35 3b 26 61 6d 70 3b 23  &amp;#115;&amp;#
8d90: 31 31 36 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61  116;&amp;#101;&a
8da0: 6d 70 3b 23 31 31 38 3b 26 61 6d 70 3b 23 31 30  mp;#118;&amp;#10
8db0: 31 3b 26 61 6d 70 3b 23 30 39 38 3b 26 61 6d 70  1;&amp;#098;&amp
8dc0: 3b 23 30 36 34 3b 26 61 6d 70 3b 23 31 31 39 3b  ;#064;&amp;#119;
8dd0: 26 61 6d 70 3b 23 31 31 31 3b 26 61 6d 70 3b 23  &amp;#111;&amp;#
8de0: 31 31 34 3b 26 61 6d 70 3b 23 31 30 37 3b 26 61  114;&amp;#107;&a
8df0: 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23 30 39  mp;#119;&amp;#09
8e00: 37 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d 70  7;&amp;#114;&amp
8e10: 3b 23 31 30 31 3b 26 61 6d 70 3b 23 30 34 36 3b  ;#101;&amp;#046;
8e20: 26 61 6d 70 3b 23 31 31 30 3b 26 61 6d 70 3b 23  &amp;#110;&amp;#
8e30: 31 30 31 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61  101;&amp;#116;&a
8e40: 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23 30 39  mp;#046;&amp;#09
8e50: 37 3b 26 61 6d 70 3b 23 31 31 37 3b 26 6c 74 3b  7;&amp;#117;&lt;
8e60: 2f 61 26 67 74 3b 29 26 6c 74 3b 2f 70 26 67 74  /a&gt;)&lt;/p&gt
8e70: 3b 0a 3c 2f 63 6f 6e 74 65 6e 74 3e 0a 20 20 3c  ;.</content>.  <
8e80: 2f 65 6e 74 72 79 3e 0a 20 20 3c 65 6e 74 72 79  /entry>.  <entry
8e90: 3e 0a 20 20 20 20 3c 69 64 3e 74 61 67 3a 6a 69  >.    <id>tag:ji
8ea0: 6d 2e 62 65 72 6c 69 6f 73 2e 64 65 2c 32 30 31  m.berlios.de,201
8eb0: 31 2d 30 36 2d 31 30 3a 2f 61 72 74 69 63 6c 65  1-06-10:/article
8ec0: 73 2f 6e 65 77 2d 63 6f 6d 6d 65 6e 74 2d 73 79  s/new-comment-sy
8ed0: 73 74 65 6d 2f 3c 2f 69 64 3e 0a 20 20 20 20 3c  stem/</id>.    <
8ee0: 74 69 74 6c 65 20 74 79 70 65 3d 22 68 74 6d 6c  title type="html
8ef0: 22 3e 4e 65 77 20 43 6f 6d 6d 65 6e 74 20 53 79  ">New Comment Sy
8f00: 73 74 65 6d 3c 2f 74 69 74 6c 65 3e 0a 20 20 20  stem</title>.   
8f10: 20 3c 70 75 62 6c 69 73 68 65 64 3e 32 30 31 31   <published>2011
8f20: 2d 30 36 2d 30 39 54 31 34 3a 30 30 3a 30 30 5a  -06-09T14:00:00Z
8f30: 3c 2f 70 75 62 6c 69 73 68 65 64 3e 0a 20 20 20  </published>.   
8f40: 20 3c 75 70 64 61 74 65 64 3e 32 30 31 31 2d 30   <updated>2011-0
8f50: 36 2d 30 39 54 31 34 3a 30 30 3a 30 30 5a 3c 2f  6-09T14:00:00Z</
8f60: 75 70 64 61 74 65 64 3e 0a 20 20 20 20 3c 6c 69  updated>.    <li
8f70: 6e 6b 20 72 65 6c 3d 22 61 6c 74 65 72 6e 61 74  nk rel="alternat
8f80: 65 22 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f  e" href="http://
8f90: 6a 69 6d 2e 62 65 72 6c 69 6f 73 2e 64 65 2f 61  jim.berlios.de/a
8fa0: 72 74 69 63 6c 65 73 2f 6e 65 77 2d 63 6f 6d 6d  rticles/new-comm
8fb0: 65 6e 74 2d 73 79 73 74 65 6d 2f 22 2f 3e 0a 20  ent-system/"/>. 
8fc0: 20 20 20 3c 63 6f 6e 74 65 6e 74 20 74 79 70 65     <content type
8fd0: 3d 22 68 74 6d 6c 22 3e 26 6c 74 3b 70 26 67 74  ="html">&lt;p&gt
8fe0: 3b 49 20 68 61 76 65 20 61 64 64 65 64 20 61 20  ;I have added a 
8ff0: 63 6f 6d 6d 65 6e 74 20 73 79 73 74 65 6d 20 74  comment system t
9000: 6f 20 74 68 65 20 4a 69 6d 20 54 63 6c 20 77 65  o the Jim Tcl we
9010: 62 73 69 74 65 2e 0a 4c 65 74 20 6d 65 20 6b 6e  bsite..Let me kn
9020: 6f 77 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ow if there are 
9030: 61 6e 79 20 70 72 6f 62 6c 65 6d 73 20 77 69 74  any problems wit
9040: 68 20 69 74 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a  h it.&lt;/p&gt;.
9050: 0a 26 6c 74 3b 70 26 67 74 3b 53 74 65 76 65 20  .&lt;p&gt;Steve 
9060: 42 65 6e 6e 65 74 74 20 28 26 6c 74 3b 61 20 68  Bennett (&lt;a h
9070: 72 65 66 3d 22 26 61 6d 70 3b 23 31 30 39 3b 26  ref="&amp;#109;&
9080: 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b 23 31  amp;#097;&amp;#1
9090: 30 35 3b 26 61 6d 70 3b 23 31 30 38 3b 26 61 6d  05;&amp;#108;&am
90a0: 70 3b 23 31 31 36 3b 26 61 6d 70 3b 23 31 31 31  p;#116;&amp;#111
90b0: 3b 3a 26 61 6d 70 3b 23 31 31 35 3b 26 61 6d 70  ;:&amp;#115;&amp
90c0: 3b 23 31 31 36 3b 26 61 6d 70 3b 23 31 30 31 3b  ;#116;&amp;#101;
90d0: 26 61 6d 70 3b 23 31 31 38 3b 26 61 6d 70 3b 23  &amp;#118;&amp;#
90e0: 31 30 31 3b 26 61 6d 70 3b 23 30 39 38 3b 26 61  101;&amp;#098;&a
90f0: 6d 70 3b 23 30 36 34 3b 26 61 6d 70 3b 23 31 31  mp;#064;&amp;#11
9100: 39 3b 26 61 6d 70 3b 23 31 31 31 3b 26 61 6d 70  9;&amp;#111;&amp
9110: 3b 23 31 31 34 3b 26 61 6d 70 3b 23 31 30 37 3b  ;#114;&amp;#107;
9120: 26 61 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23  &amp;#119;&amp;#
9130: 30 39 37 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61  097;&amp;#114;&a
9140: 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 30 34  mp;#101;&amp;#04
9150: 36 3b 26 61 6d 70 3b 23 31 31 30 3b 26 61 6d 70  6;&amp;#110;&amp
9160: 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31 31 36 3b  ;#101;&amp;#116;
9170: 26 61 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23  &amp;#046;&amp;#
9180: 30 39 37 3b 26 61 6d 70 3b 23 31 31 37 3b 22 26  097;&amp;#117;"&
9190: 67 74 3b 26 61 6d 70 3b 23 31 31 35 3b 26 61 6d  gt;&amp;#115;&am
91a0: 70 3b 23 31 31 36 3b 26 61 6d 70 3b 23 31 30 31  p;#116;&amp;#101
91b0: 3b 26 61 6d 70 3b 23 31 31 38 3b 26 61 6d 70 3b  ;&amp;#118;&amp;
91c0: 23 31 30 31 3b 26 61 6d 70 3b 23 30 39 38 3b 26  #101;&amp;#098;&
91d0: 61 6d 70 3b 23 30 36 34 3b 26 61 6d 70 3b 23 31  amp;#064;&amp;#1
91e0: 31 39 3b 26 61 6d 70 3b 23 31 31 31 3b 26 61 6d  19;&amp;#111;&am
91f0: 70 3b 23 31 31 34 3b 26 61 6d 70 3b 23 31 30 37  p;#114;&amp;#107
9200: 3b 26 61 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b  ;&amp;#119;&amp;
9210: 23 30 39 37 3b 26 61 6d 70 3b 23 31 31 34 3b 26  #097;&amp;#114;&
9220: 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 30  amp;#101;&amp;#0
9230: 34 36 3b 26 61 6d 70 3b 23 31 31 30 3b 26 61 6d  46;&amp;#110;&am
9240: 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31 31 36  p;#101;&amp;#116
9250: 3b 26 61 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b  ;&amp;#046;&amp;
9260: 23 30 39 37 3b 26 61 6d 70 3b 23 31 31 37 3b 26  #097;&amp;#117;&
9270: 6c 74 3b 2f 61 26 67 74 3b 29 26 6c 74 3b 2f 70  lt;/a&gt;)&lt;/p
9280: 26 67 74 3b 0a 3c 2f 63 6f 6e 74 65 6e 74 3e 0a  &gt;.</content>.
9290: 20 20 3c 2f 65 6e 74 72 79 3e 0a 20 20 3c 65 6e    </entry>.  <en
92a0: 74 72 79 3e 0a 20 20 20 20 3c 69 64 3e 74 61 67  try>.    <id>tag
92b0: 3a 6a 69 6d 2e 62 65 72 6c 69 6f 73 2e 64 65 2c  :jim.berlios.de,
92c0: 32 30 31 31 2d 30 36 2d 30 39 3a 2f 61 72 74 69  2011-06-09:/arti
92d0: 63 6c 65 73 2f 62 6f 6f 74 73 74 72 61 70 2d 6a  cles/bootstrap-j
92e0: 69 6d 73 68 2f 3c 2f 69 64 3e 0a 20 20 20 20 3c  imsh/</id>.    <
92f0: 74 69 74 6c 65 20 74 79 70 65 3d 22 68 74 6d 6c  title type="html
9300: 22 3e 42 6f 6f 74 73 74 72 61 70 20 6a 69 6d 73  ">Bootstrap jims
9310: 68 3c 2f 74 69 74 6c 65 3e 0a 20 20 20 20 3c 70  h</title>.    <p
9320: 75 62 6c 69 73 68 65 64 3e 32 30 31 31 2d 30 36  ublished>2011-06
9330: 2d 30 38 54 31 34 3a 30 30 3a 30 30 5a 3c 2f 70  -08T14:00:00Z</p
9340: 75 62 6c 69 73 68 65 64 3e 0a 20 20 20 20 3c 75  ublished>.    <u
9350: 70 64 61 74 65 64 3e 32 30 31 31 2d 30 36 2d 30  pdated>2011-06-0
9360: 38 54 31 34 3a 30 30 3a 30 30 5a 3c 2f 75 70 64  8T14:00:00Z</upd
9370: 61 74 65 64 3e 0a 20 20 20 20 3c 6c 69 6e 6b 20  ated>.    <link 
9380: 72 65 6c 3d 22 61 6c 74 65 72 6e 61 74 65 22 20  rel="alternate" 
9390: 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 6a 69 6d  href="http://jim
93a0: 2e 62 65 72 6c 69 6f 73 2e 64 65 2f 61 72 74 69  .berlios.de/arti
93b0: 63 6c 65 73 2f 62 6f 6f 74 73 74 72 61 70 2d 6a  cles/bootstrap-j
93c0: 69 6d 73 68 2f 22 2f 3e 0a 20 20 20 20 3c 63 6f  imsh/"/>.    <co
93d0: 6e 74 65 6e 74 20 74 79 70 65 3d 22 68 74 6d 6c  ntent type="html
93e0: 22 3e 26 6c 74 3b 70 26 67 74 3b 54 68 65 20 4a  ">&lt;p&gt;The J
93f0: 69 6d 20 69 6e 74 65 72 70 72 65 74 65 72 20 69  im interpreter i
9400: 73 20 73 6d 61 6c 6c 2c 20 70 6f 72 74 61 62 6c  s small, portabl
9410: 65 20 61 6e 64 20 66 75 6c 6c 2d 66 65 61 74 75  e and full-featu
9420: 72 65 64 2e 20 54 68 69 73 20 6d 61 6b 65 73 0a  red. This makes.
9430: 26 6c 74 3b 63 6f 64 65 26 67 74 3b 6a 69 6d 73  &lt;code&gt;jims
9440: 68 26 6c 74 3b 2f 63 6f 64 65 26 67 74 3b 20 61  h&lt;/code&gt; a
9450: 6e 20 69 64 65 61 6c 20 74 6f 6f 6c 20 74 6f 20  n ideal tool to 
9460: 62 6f 6f 74 73 74 72 61 70 20 61 20 64 65 76 65  bootstrap a deve
9470: 6c 6f 70 6d 65 6e 74 20 73 79 73 74 65 6d 20 74  lopment system t
9480: 68 61 74 0a 72 65 71 75 69 72 65 73 20 61 6e 20  hat.requires an 
9490: 69 6e 74 65 72 70 72 65 74 65 72 2e 26 6c 74 3b  interpreter.&lt;
94a0: 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74  /p&gt;..&lt;p&gt
94b0: 3b 43 6f 6e 73 69 64 65 72 20 74 68 65 20 63 61  ;Consider the ca
94c0: 73 65 20 6f 66 20 61 20 64 65 76 65 6c 6f 70 6d  se of a developm
94d0: 65 6e 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ent configuratio
94e0: 6e 20 73 79 73 74 65 6d 20 73 75 63 68 20 61 73  n system such as
94f0: 0a 26 6c 74 3b 61 20 68 72 65 66 3d 22 68 74 74  .&lt;a href="htt
9500: 70 3a 2f 2f 77 77 77 2e 67 6e 75 2e 6f 72 67 2f  p://www.gnu.org/
9510: 73 6f 66 74 77 61 72 65 2f 61 75 74 6f 63 6f 6e  software/autocon
9520: 66 2f 22 26 67 74 3b 47 4e 55 20 61 75 74 6f 74  f/"&gt;GNU autot
9530: 6f 6f 6c 73 26 6c 74 3b 2f 61 26 67 74 3b 2e 20  ools&lt;/a&gt;. 
9540: 20 48 65 72 65 20 69 74 0a 69 73 20 6e 65 63 65   Here it.is nece
9550: 73 73 61 72 79 20 74 6f 20 72 75 6e 20 66 61 69  ssary to run fai
9560: 72 6c 79 20 63 6f 6d 70 6c 65 78 20 73 63 72 69  rly complex scri
9570: 70 74 73 20 74 68 61 74 20 69 6e 76 6f 6b 65 20  pts that invoke 
9580: 65 78 74 65 72 6e 61 6c 0a 70 72 6f 67 72 61 6d  external.program
9590: 73 20 28 73 75 63 68 20 61 73 20 74 68 65 20 63  s (such as the c
95a0: 6f 6d 70 69 6c 65 72 29 20 61 6e 64 20 70 65 72  ompiler) and per
95b0: 66 6f 72 6d 20 69 6e 74 65 6e 73 69 76 65 20 73  form intensive s
95c0: 74 72 69 6e 67 0a 70 72 6f 63 65 73 73 69 6e 67  tring.processing
95d0: 2e 20 54 68 65 20 61 75 74 6f 74 6f 6f 6c 73 20  . The autotools 
95e0: 73 6f 6c 75 74 69 6f 6e 20 75 73 65 73 20 61 20  solution uses a 
95f0: 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 26  combination of &
9600: 6c 74 3b 61 20 68 72 65 66 3d 22 68 74 74 70 3a  lt;a href="http:
9610: 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
9620: 72 67 2f 77 69 6b 69 2f 42 6f 75 72 6e 65 5f 73  rg/wiki/Bourne_s
9630: 68 65 6c 6c 22 26 67 74 3b 42 6f 75 72 6e 65 0a  hell"&gt;Bourne.
9640: 53 68 65 6c 6c 26 6c 74 3b 2f 61 26 67 74 3b 2c  Shell&lt;/a&gt;,
9650: 20 74 68 65 20 26 6c 74 3b 61 20 68 72 65 66 3d   the &lt;a href=
9660: 22 68 74 74 70 3a 2f 2f 77 77 77 2e 67 6e 75 2e  "http://www.gnu.
9670: 6f 72 67 2f 73 6f 66 74 77 61 72 65 2f 6d 34 2f  org/software/m4/
9680: 22 26 67 74 3b 6d 34 20 4d 61 63 72 6f 0a 50 72  "&gt;m4 Macro.Pr
9690: 6f 63 65 73 73 6f 72 26 6c 74 3b 2f 61 26 67 74  ocessor&lt;/a&gt
96a0: 3b 20 61 6e 64 20 76 61 72 69 6f 75 73 20 65 78  ; and various ex
96b0: 74 65 72 6e 61 6c 0a 74 6f 6f 6c 73 20 73 75 63  ternal.tools suc
96c0: 68 20 61 73 20 26 6c 74 3b 63 6f 64 65 26 67 74  h as &lt;code&gt
96d0: 3b 73 65 64 26 6c 74 3b 2f 63 6f 64 65 26 67 74  ;sed&lt;/code&gt
96e0: 3b 2e 20 53 69 6e 63 65 20 74 68 69 73 20 6e 65  ;. Since this ne
96f0: 65 64 73 20 74 6f 20 77 6f 72 6b 20 61 63 72 6f  eds to work acro
9700: 73 73 20 61 20 77 69 64 65 20 72 61 6e 67 65 0a  ss a wide range.
9710: 6f 66 20 73 79 73 74 65 6d 73 2c 20 65 76 65 6e  of systems, even
9720: 20 74 68 6f 73 65 20 77 69 74 68 20 62 75 67 67   those with bugg
9730: 79 20 73 68 65 6c 6c 73 20 6f 72 20 65 78 74 65  y shells or exte
9740: 72 6e 61 6c 20 74 6f 6f 6c 73 2c 20 6d 61 6e 79  rnal tools, many
9750: 0a 63 6f 6e 74 6f 72 74 69 6f 6e 73 20 61 72 65  .contortions are
9760: 20 72 65 71 75 69 72 65 64 2e 20 20 54 68 65 20   required.  The 
9770: 72 65 73 75 6c 74 69 6e 67 20 73 79 73 74 65 6d  resulting system
9780: 20 69 73 0a 26 6c 74 3b 61 20 68 72 65 66 3d 22   is.&lt;a href="
9790: 68 74 74 70 3a 2f 2f 66 72 65 73 68 6d 65 61 74  http://freshmeat
97a0: 2e 6e 65 74 2f 61 72 74 69 63 6c 65 73 2f 73 74  .net/articles/st
97b0: 6f 70 2d 74 68 65 2d 61 75 74 6f 63 6f 6e 66 2d  op-the-autoconf-
97c0: 69 6e 73 61 6e 69 74 79 2d 77 68 79 2d 77 65 2d  insanity-why-we-
97d0: 6e 65 65 64 2d 61 2d 6e 65 77 2d 62 75 69 6c 64  need-a-new-build
97e0: 2d 73 79 73 74 65 6d 22 26 67 74 3b 73 6c 6f 77  -system"&gt;slow
97f0: 2c 20 63 75 6d 62 65 72 73 6f 6d 65 20 61 6e 64  , cumbersome and
9800: 20 63 6f 6d 70 6c 65 78 26 6c 74 3b 2f 61 26 67   complex&lt;/a&g
9810: 74 3b 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26  t;.&lt;/p&gt;..&
9820: 6c 74 3b 70 26 67 74 3b 4e 6f 77 20 63 6f 6e 73  lt;p&gt;Now cons
9830: 69 64 65 72 20 74 68 65 20 64 69 66 66 65 72 65  ider the differe
9840: 6e 74 20 61 70 70 72 6f 61 63 68 20 74 61 6b 65  nt approach take
9850: 6e 20 62 79 0a 26 6c 74 3b 61 20 68 72 65 66 3d  n by.&lt;a href=
9860: 22 68 74 74 70 3a 2f 2f 6d 73 74 65 76 65 62 2e  "http://msteveb.
9870: 67 69 74 68 75 62 2e 63 6f 6d 2f 61 75 74 6f 73  github.com/autos
9880: 65 74 75 70 2f 22 26 67 74 3b 61 75 74 6f 73 65  etup/"&gt;autose
9890: 74 75 70 26 6c 74 3b 2f 61 26 67 74 3b 2e 20 20  tup&lt;/a&gt;.  
98a0: 48 65 72 65 20 61 20 73 63 72 69 70 74 69 6e 67  Here a scripting
98b0: 0a 6c 61 6e 67 75 61 67 65 20 69 73 20 75 73 65  .language is use
98c0: 64 20 74 68 61 74 20 68 61 73 20 65 78 63 65 6c  d that has excel
98d0: 6c 65 6e 74 20 73 75 70 70 6f 72 74 20 66 6f 72  lent support for
98e0: 20 73 74 72 69 6e 67 20 70 72 6f 63 65 73 73 69   string processi
98f0: 6e 67 2c 0a 64 61 74 61 20 73 74 72 75 63 74 75  ng,.data structu
9900: 72 65 73 20 28 61 72 72 61 79 73 2f 64 69 63 74  res (arrays/dict
9910: 73 20 61 6e 64 20 6c 69 73 74 73 29 20 61 6e 64  s and lists) and
9920: 20 72 75 6e 6e 69 6e 67 20 65 78 74 65 72 6e 61   running externa
9930: 6c 0a 70 72 6f 67 72 61 6d 73 20 26 61 6d 70 3b  l.programs &amp;
9940: 6d 64 61 73 68 3b 20 54 63 6c 2e 20 54 68 65 20  mdash; Tcl. The 
9950: 6f 6e 6c 79 20 70 72 6f 62 6c 65 6d 20 69 73 20  only problem is 
9960: 62 6f 6f 74 73 74 72 61 70 2e 20 57 68 61 74 20  bootstrap. What 
9970: 69 66 20 74 68 65 20 74 61 72 67 65 74 0a 73 79  if the target.sy
9980: 73 74 65 6d 20 64 6f 65 73 6e 26 61 6d 70 3b 72  stem doesn&amp;r
9990: 73 71 75 6f 3b 74 20 68 61 76 65 20 61 20 73 75  squo;t have a su
99a0: 69 74 61 62 6c 65 20 54 63 6c 20 69 6e 74 65 72  itable Tcl inter
99b0: 70 72 65 74 65 72 20 61 76 61 69 6c 61 62 6c 65  preter available
99c0: 3f 20 20 54 68 65 0a 73 6f 6c 75 74 69 6f 6e 20  ?  The.solution 
99d0: 69 73 20 61 20 62 6f 6f 74 73 74 72 61 70 20 76  is a bootstrap v
99e0: 65 72 73 69 6f 6e 20 6f 66 20 4a 69 6d 20 54 63  ersion of Jim Tc
99f0: 6c 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e  l is included in
9a00: 20 74 68 65 0a 64 69 73 74 72 69 62 75 74 69 6f   the.distributio
9a10: 6e 20 61 73 20 61 20 26 6c 74 3b 73 74 72 6f 6e  n as a &lt;stron
9a20: 67 26 67 74 3b 73 69 6e 67 6c 65 20 73 6f 75 72  g&gt;single sour
9a30: 63 65 20 66 69 6c 65 26 6c 74 3b 2f 73 74 72 6f  ce file&lt;/stro
9a40: 6e 67 26 67 74 3b 20 61 6e 64 20 73 69 6d 70 6c  ng&gt; and simpl
9a50: 79 20 72 65 71 75 69 72 65 73 20 61 20 43 20 63  y requires a C c
9a60: 6f 6d 70 69 6c 65 72 0a 74 6f 20 63 72 65 61 74  ompiler.to creat
9a70: 65 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65  e the interprete
9a80: 72 2e 20 20 49 6e 20 66 61 63 74 2c 20 61 75 74  r.  In fact, aut
9a90: 6f 73 65 74 75 70 20 61 75 74 6f 6d 61 74 69 63  osetup automatic
9aa0: 61 6c 6c 79 0a 64 65 74 65 72 6d 69 6e 65 73 20  ally.determines 
9ab0: 69 66 20 6e 6f 20 73 75 69 74 61 62 6c 65 20 61  if no suitable a
9ac0: 6e 64 20 69 6e 74 65 72 70 72 65 74 65 72 20 69  nd interpreter i
9ad0: 73 20 61 76 61 69 6c 61 62 6c 65 20 61 6e 64 20  s available and 
9ae0: 73 65 61 6d 6c 65 73 73 6c 79 0a 62 75 69 6c 64  seamlessly.build
9af0: 73 20 61 6e 64 20 72 75 6e 73 20 74 68 65 20 62  s and runs the b
9b00: 6f 6f 74 73 74 72 61 70 20 69 6e 74 65 72 70 72  ootstrap interpr
9b10: 65 74 65 72 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a  eter.&lt;/p&gt;.
9b20: 0a 26 6c 74 3b 70 72 65 20 63 6c 61 73 73 3d 22  .&lt;pre class="
9b30: 73 68 5f 75 6e 69 78 22 26 67 74 3b 0a 24 20 2e  sh_unix"&gt;.$ .
9b40: 2f 63 6f 6e 66 69 67 75 72 65 20 0a 4e 6f 20 69  /configure .No i
9b50: 6e 73 74 61 6c 6c 65 64 20 6a 69 6d 73 68 20 6f  nstalled jimsh o
9b60: 72 20 74 63 6c 73 68 2c 20 62 75 69 6c 64 69 6e  r tclsh, buildin
9b70: 67 20 6c 6f 63 61 6c 20 62 6f 6f 74 73 74 72 61  g local bootstra
9b80: 70 20 6a 69 6d 73 68 30 0a 48 6f 73 74 20 53 79  p jimsh0.Host Sy
9b90: 73 74 65 6d 2e 2e 2e 78 38 36 5f 36 34 2d 61 70  stem...x86_64-ap
9ba0: 70 6c 65 2d 64 61 72 77 69 6e 31 30 2e 37 2e 30  ple-darwin10.7.0
9bb0: 0a 42 75 69 6c 64 20 53 79 73 74 65 6d 2e 2e 2e  .Build System...
9bc0: 78 38 36 5f 36 34 2d 61 70 70 6c 65 2d 64 61 72  x86_64-apple-dar
9bd0: 77 69 6e 31 30 2e 37 2e 30 0a 43 20 63 6f 6d 70  win10.7.0.C comp
9be0: 69 6c 65 72 2e 2e 2e 63 63 61 63 68 65 20 63 63  iler...ccache cc
9bf0: 20 2d 67 20 2d 4f 32 0a 43 2b 2b 20 63 6f 6d 70   -g -O2.C++ comp
9c00: 69 6c 65 72 2e 2e 2e 63 63 61 63 68 65 20 63 2b  iler...ccache c+
9c10: 2b 20 2d 67 20 2d 4f 32 0a 43 68 65 63 6b 69 6e  + -g -O2.Checkin
9c20: 67 20 66 6f 72 20 73 74 64 6c 69 62 2e 68 2e 2e  g for stdlib.h..
9c30: 2e 6f 6b 0a 2e 2e 2e 0a 26 6c 74 3b 2f 70 72 65  .ok.....&lt;/pre
9c40: 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 41  &gt;..&lt;p&gt;A
9c50: 20 73 63 72 69 70 74 20 74 6f 20 63 72 65 61 74   script to creat
9c60: 65 20 74 68 65 20 62 6f 6f 74 73 74 72 61 70 20  e the bootstrap 
9c70: 69 6e 74 65 72 70 72 65 74 65 72 20 73 6f 75 72  interpreter sour
9c80: 63 65 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69  ce is included i
9c90: 6e 20 74 68 65 0a 26 6c 74 3b 61 20 68 72 65 66  n the.&lt;a href
9ca0: 3d 22 68 74 74 70 3a 2f 2f 72 65 70 6f 2e 6f 72  ="http://repo.or
9cb0: 2e 63 7a 2f 77 2f 6a 69 6d 74 63 6c 2e 67 69 74  .cz/w/jimtcl.git
9cc0: 2f 62 6c 6f 62 2f 48 45 41 44 3a 2f 6d 61 6b 65  /blob/HEAD:/make
9cd0: 2d 62 6f 6f 74 73 74 72 61 70 2d 6a 69 6d 22 26  -bootstrap-jim"&
9ce0: 67 74 3b 6a 69 6d 74 63 6c 20 67 69 74 20 72 65  gt;jimtcl git re
9cf0: 70 6f 73 69 74 6f 72 79 26 6c 74 3b 2f 61 26 67  pository&lt;/a&g
9d00: 74 3b 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c  t;&lt;/p&gt;..&l
9d10: 74 3b 70 72 65 20 63 6c 61 73 73 3d 22 73 68 5f  t;pre class="sh_
9d20: 75 6e 69 78 22 26 67 74 3b 0a 24 20 73 68 20 6d  unix"&gt;.$ sh m
9d30: 61 6b 65 2d 62 6f 6f 74 73 74 72 61 70 2d 6a 69  ake-bootstrap-ji
9d40: 6d 20 26 61 6d 70 3b 67 74 3b 6a 69 6d 73 68 30  m &amp;gt;jimsh0
9d50: 2e 63 0a 24 20 74 69 6d 65 20 63 63 20 2d 6f 20  .c.$ time cc -o 
9d60: 6a 69 6d 73 68 30 20 6a 69 6d 73 68 30 2e 63 0a  jimsh0 jimsh0.c.
9d70: 72 65 61 6c 20 20 20 30 6d 31 2e 33 33 39 73 0a  real   0m1.339s.
9d80: 75 73 65 72 20 20 20 30 6d 31 2e 31 32 31 73 0a  user   0m1.121s.
9d90: 73 79 73 20 20 20 20 30 6d 30 2e 31 30 39 73 0a  sys    0m0.109s.
9da0: 24 20 2e 2f 6a 69 6d 73 68 30 0a 57 65 6c 63 6f  $ ./jimsh0.Welco
9db0: 6d 65 20 74 6f 20 4a 69 6d 20 76 65 72 73 69 6f  me to Jim versio
9dc0: 6e 20 30 2e 37 31 0a 2e 20 0a 26 6c 74 3b 2f 70  n 0.71.. .&lt;/p
9dd0: 72 65 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74  re&gt;..&lt;p&gt
9de0: 3b 53 74 65 76 65 20 42 65 6e 6e 65 74 74 20 28  ;Steve Bennett (
9df0: 26 6c 74 3b 61 20 68 72 65 66 3d 22 26 61 6d 70  &lt;a href="&amp
9e00: 3b 23 31 30 39 3b 26 61 6d 70 3b 23 30 39 37 3b  ;#109;&amp;#097;
9e10: 26 61 6d 70 3b 23 31 30 35 3b 26 61 6d 70 3b 23  &amp;#105;&amp;#
9e20: 31 30 38 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61  108;&amp;#116;&a
9e30: 6d 70 3b 23 31 31 31 3b 3a 26 61 6d 70 3b 23 31  mp;#111;:&amp;#1
9e40: 31 35 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d  15;&amp;#116;&am
9e50: 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31 31 38  p;#101;&amp;#118
9e60: 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b  ;&amp;#101;&amp;
9e70: 23 30 39 38 3b 26 61 6d 70 3b 23 30 36 34 3b 26  #098;&amp;#064;&
9e80: 61 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23 31  amp;#119;&amp;#1
9e90: 31 31 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d  11;&amp;#114;&am
9ea0: 70 3b 23 31 30 37 3b 26 61 6d 70 3b 23 31 31 39  p;#107;&amp;#119
9eb0: 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b  ;&amp;#097;&amp;
9ec0: 23 31 31 34 3b 26 61 6d 70 3b 23 31 30 31 3b 26  #114;&amp;#101;&
9ed0: 61 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23 31  amp;#046;&amp;#1
9ee0: 31 30 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d  10;&amp;#101;&am
9ef0: 70 3b 23 31 31 36 3b 26 61 6d 70 3b 23 30 34 36  p;#116;&amp;#046
9f00: 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b  ;&amp;#097;&amp;
9f10: 23 31 31 37 3b 22 26 67 74 3b 26 61 6d 70 3b 23  #117;"&gt;&amp;#
9f20: 31 31 35 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61  115;&amp;#116;&a
9f30: 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31 31  mp;#101;&amp;#11
9f40: 38 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70  8;&amp;#101;&amp
9f50: 3b 23 30 39 38 3b 26 61 6d 70 3b 23 30 36 34 3b  ;#098;&amp;#064;
9f60: 26 61 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23  &amp;#119;&amp;#
9f70: 31 31 31 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61  111;&amp;#114;&a
9f80: 6d 70 3b 23 31 30 37 3b 26 61 6d 70 3b 23 31 31  mp;#107;&amp;#11
9f90: 39 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70  9;&amp;#097;&amp
9fa0: 3b 23 31 31 34 3b 26 61 6d 70 3b 23 31 30 31 3b  ;#114;&amp;#101;
9fb0: 26 61 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23  &amp;#046;&amp;#
9fc0: 31 31 30 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61  110;&amp;#101;&a
9fd0: 6d 70 3b 23 31 31 36 3b 26 61 6d 70 3b 23 30 34  mp;#116;&amp;#04
9fe0: 36 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70  6;&amp;#097;&amp
9ff0: 3b 23 31 31 37 3b 26 6c 74 3b 2f 61 26 67 74 3b  ;#117;&lt;/a&gt;
a000: 29 26 6c 74 3b 2f 70 26 67 74 3b 0a 3c 2f 63 6f  )&lt;/p&gt;.</co
a010: 6e 74 65 6e 74 3e 0a 20 20 3c 2f 65 6e 74 72 79  ntent>.  </entry
a020: 3e 0a 20 20 3c 65 6e 74 72 79 3e 0a 20 20 20 20  >.  <entry>.    
a030: 3c 69 64 3e 74 61 67 3a 6a 69 6d 2e 62 65 72 6c  <id>tag:jim.berl
a040: 69 6f 73 2e 64 65 2c 32 30 31 31 2d 30 35 2d 32  ios.de,2011-05-2
a050: 36 3a 2f 61 72 74 69 63 6c 65 73 2f 6e 6f 2d 6e  6:/articles/no-n
a060: 61 6d 65 73 70 61 63 65 73 2f 3c 2f 69 64 3e 0a  amespaces/</id>.
a070: 20 20 20 20 3c 74 69 74 6c 65 20 74 79 70 65 3d      <title type=
a080: 22 68 74 6d 6c 22 3e 43 6f 70 69 6e 67 20 77 69  "html">Coping wi
a090: 74 68 6f 75 74 20 4e 61 6d 65 73 70 61 63 65 73  thout Namespaces
a0a0: 3c 2f 74 69 74 6c 65 3e 0a 20 20 20 20 3c 70 75  </title>.    <pu
a0b0: 62 6c 69 73 68 65 64 3e 32 30 31 31 2d 30 35 2d  blished>2011-05-
a0c0: 32 35 54 31 34 3a 30 30 3a 30 30 5a 3c 2f 70 75  25T14:00:00Z</pu
a0d0: 62 6c 69 73 68 65 64 3e 0a 20 20 20 20 3c 75 70  blished>.    <up
a0e0: 64 61 74 65 64 3e 32 30 31 31 2d 30 35 2d 32 35  dated>2011-05-25
a0f0: 54 31 34 3a 30 30 3a 30 30 5a 3c 2f 75 70 64 61  T14:00:00Z</upda
a100: 74 65 64 3e 0a 20 20 20 20 3c 6c 69 6e 6b 20 72  ted>.    <link r
a110: 65 6c 3d 22 61 6c 74 65 72 6e 61 74 65 22 20 68  el="alternate" h
a120: 72 65 66 3d 22 68 74 74 70 3a 2f 2f 6a 69 6d 2e  ref="http://jim.
a130: 62 65 72 6c 69 6f 73 2e 64 65 2f 61 72 74 69 63  berlios.de/artic
a140: 6c 65 73 2f 6e 6f 2d 6e 61 6d 65 73 70 61 63 65  les/no-namespace
a150: 73 2f 22 2f 3e 0a 20 20 20 20 3c 63 6f 6e 74 65  s/"/>.    <conte
a160: 6e 74 20 74 79 70 65 3d 22 68 74 6d 6c 22 3e 26  nt type="html">&
a170: 6c 74 3b 70 26 67 74 3b 4f 6e 65 20 6f 66 20 74  lt;p&gt;One of t
a180: 68 65 20 66 65 61 74 75 72 65 73 20 6f 66 20 54  he features of T
a190: 63 6c 20 77 68 69 63 68 20 4a 69 6d 20 6c 61 63  cl which Jim lac
a1a0: 6b 73 20 69 73 20 73 75 70 70 6f 72 74 20 66 6f  ks is support fo
a1b0: 72 0a 26 6c 74 3b 61 20 68 72 65 66 3d 22 68 74  r.&lt;a href="ht
a1c0: 74 70 3a 2f 2f 77 77 77 2e 74 63 6c 2e 74 6b 2f  tp://www.tcl.tk/
a1d0: 6d 61 6e 2f 74 63 6c 38 2e 35 2f 54 63 6c 43 6d  man/tcl8.5/TclCm
a1e0: 64 2f 6e 61 6d 65 73 70 61 63 65 2e 68 74 6d 22  d/namespace.htm"
a1f0: 26 67 74 3b 6e 61 6d 65 73 70 61 63 65 73 26 6c  &gt;namespaces&l
a200: 74 3b 2f 61 26 67 74 3b 2e 26 6c 74 3b 2f 70 26  t;/a&gt;.&lt;/p&
a210: 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 54 68  gt;..&lt;p&gt;Th
a220: 65 20 6c 61 63 6b 20 6f 66 20 6e 61 6d 65 73 70  e lack of namesp
a230: 61 63 65 73 20 69 6e 20 4a 69 6d 20 69 73 20 67  aces in Jim is g
a240: 65 6e 65 72 61 6c 6c 79 20 6e 6f 74 20 61 20 70  enerally not a p
a250: 72 6f 62 6c 65 6d 20 69 6e 20 74 68 65 0a 73 6d  roblem in the.sm
a260: 61 6c 6c 2c 20 65 6d 62 65 64 64 65 64 20 61 70  all, embedded ap
a270: 70 6c 69 63 61 74 69 6f 6e 73 20 66 6f 72 20 77  plications for w
a280: 68 69 63 68 20 4a 69 6d 20 69 73 20 6d 6f 73 74  hich Jim is most
a290: 20 73 75 69 74 65 64 2e 20 48 6f 77 65 76 65 72   suited. However
a2a0: 0a 6f 63 63 61 73 69 6f 6e 61 6c 6c 79 20 69 74  .occasionally it
a2b0: 20 75 73 65 66 75 6c 20 74 6f 20 62 65 20 61 62   useful to be ab
a2c0: 6c 65 20 74 6f 20 70 6f 72 74 20 54 63 6c 20 63  le to port Tcl c
a2d0: 6f 64 65 20 77 68 69 63 68 20 75 73 65 73 0a 6e  ode which uses.n
a2e0: 61 6d 65 73 70 61 63 65 2e 20 20 46 6f 72 20 65  amespace.  For e
a2f0: 78 61 6d 70 6c 65 2c 20 26 6c 74 3b 61 20 68 72  xample, &lt;a hr
a300: 65 66 3d 22 68 74 74 70 3a 2f 2f 74 63 6c 6c 69  ef="http://tclli
a310: 62 2e 73 6f 75 72 63 65 66 6f 72 67 65 2e 6e 65  b.sourceforge.ne
a320: 74 2f 22 26 67 74 3b 74 63 6c 6c 69 62 26 6c 74  t/"&gt;tcllib&lt
a330: 3b 2f 61 26 67 74 3b 0a 6d 61 6b 65 73 20 68 65  ;/a&gt;.makes he
a340: 61 76 79 20 75 73 65 20 6f 66 20 6e 61 6d 65 73  avy use of names
a350: 70 61 63 65 73 2e 20 54 68 69 73 20 61 72 74 69  paces. This arti
a360: 63 6c 65 20 64 65 73 63 72 69 62 65 73 20 6f 6e  cle describes on
a370: 65 20 61 70 70 72 6f 61 63 68 0a 74 6f 20 65 61  e approach.to ea
a380: 73 69 6c 79 20 70 6f 72 74 69 6e 67 20 74 68 69  sily porting thi
a390: 73 20 63 6f 64 65 20 74 6f 20 4a 69 6d 2e 26 6c  s code to Jim.&l
a3a0: 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70 26  t;/p&gt;..&lt;p&
a3b0: 67 74 3b 46 6f 72 20 74 68 69 73 20 65 78 61 6d  gt;For this exam
a3c0: 70 6c 65 2c 20 77 65 20 77 69 6c 6c 20 70 6f 72  ple, we will por
a3d0: 74 20 26 6c 74 3b 61 20 68 72 65 66 3d 22 68 74  t &lt;a href="ht
a3e0: 74 70 3a 2f 2f 74 63 6c 6c 69 62 2e 63 76 73 2e  tp://tcllib.cvs.
a3f0: 73 6f 75 72 63 65 66 6f 72 67 65 2e 6e 65 74 2f  sourceforge.net/
a400: 76 69 65 77 76 63 2f 74 63 6c 6c 69 62 2f 74 63  viewvc/tcllib/tc
a410: 6c 6c 69 62 2f 6d 6f 64 75 6c 65 73 2f 64 6e 73  llib/modules/dns
a420: 2f 64 6e 73 2e 74 63 6c 22 26 67 74 3b 64 6e 73  /dns.tcl"&gt;dns
a430: 2e 74 63 6c 26 6c 74 3b 2f 61 26 67 74 3b 20 74  .tcl&lt;/a&gt; t
a440: 6f 20 4a 69 6d 2e 26 6c 74 3b 2f 70 26 67 74 3b  o Jim.&lt;/p&gt;
a450: 0a 0a 26 6c 74 3b 70 26 67 74 3b 54 68 65 20 67  ..&lt;p&gt;The g
a460: 65 6e 65 72 61 6c 20 61 70 70 72 6f 61 63 68 20  eneral approach 
a470: 69 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65  is to modify the
a480: 20 63 6f 64 65 20 66 72 6f 6d 20 75 73 69 6e 67   code from using
a490: 20 69 6d 70 6c 69 63 69 74 20 73 63 6f 70 69 6e   implicit scopin
a4a0: 67 20 74 6f 20 65 78 70 6c 69 63 69 74 20 73 63  g to explicit sc
a4b0: 6f 70 69 6e 67 2e 0a 43 6f 6e 73 69 64 65 72 20  oping..Consider 
a4c0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  the following co
a4d0: 64 65 20 77 68 69 63 68 20 75 73 65 73 20 6e 61  de which uses na
a4e0: 6d 65 73 70 61 63 65 73 20 74 6f 20 64 65 63 6c  mespaces to decl
a4f0: 61 72 65 20 61 20 70 72 6f 63 20 61 6e 64 20 61  are a proc and a
a500: 20 76 61 72 69 61 62 6c 65 20 77 69 74 68 69 6e   variable within
a510: 20 61 20 6e 61 6d 65 73 70 61 63 65 2e 26 6c 74   a namespace.&lt
a520: 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70 72 65  ;/p&gt;..&lt;pre
a530: 20 63 6c 61 73 73 3d 22 73 68 5f 74 63 6c 22 26   class="sh_tcl"&
a540: 67 74 3b 0a 6e 61 6d 65 73 70 61 63 65 20 65 76  gt;.namespace ev
a550: 61 6c 20 64 6e 73 20 7b 0a 09 76 61 72 69 61 62  al dns {..variab
a560: 6c 65 20 74 69 6d 65 6f 75 74 20 31 30 20 0a 09  le timeout 10 ..
a570: 70 72 6f 63 20 63 6f 6e 66 69 67 75 72 65 20 7b  proc configure {
a580: 6e 65 77 7d 20 7b 0a 09 09 76 61 72 69 61 62 6c  new} {...variabl
a590: 65 20 74 69 6d 65 6f 75 74 0a 09 09 73 65 74 20  e timeout...set 
a5a0: 74 69 6d 65 6f 75 74 20 24 6e 65 77 0a 09 7d 0a  timeout $new..}.
a5b0: 7d 0a 26 6c 74 3b 2f 70 72 65 26 67 74 3b 0a 0a  }.&lt;/pre&gt;..
a5c0: 26 6c 74 3b 70 26 67 74 3b 54 68 69 73 20 63 6f  &lt;p&gt;This co
a5d0: 64 65 20 63 72 65 61 74 65 20 61 20 76 61 72 69  de create a vari
a5e0: 61 62 6c 65 20 26 6c 74 3b 63 6f 64 65 26 67 74  able &lt;code&gt
a5f0: 3b 3a 3a 64 6e 73 3a 3a 74 69 6d 65 6f 75 74 26  ;::dns::timeout&
a600: 6c 74 3b 2f 63 6f 64 65 26 67 74 3b 20 61 6e 64  lt;/code&gt; and
a610: 20 61 20 70 72 6f 63 20 26 6c 74 3b 63 6f 64 65   a proc &lt;code
a620: 26 67 74 3b 3a 3a 64 6e 73 3a 3a 63 6f 6e 66 69  &gt;::dns::confi
a630: 67 75 72 65 26 6c 74 3b 2f 63 6f 64 65 26 67 74  gure&lt;/code&gt
a640: 3b 2e 20 57 65 20 63 61 6e 20 64 6f 20 74 68 65  ;. We can do the
a650: 20 73 61 6d 65 0a 65 78 70 6c 69 63 69 74 6c 79   same.explicitly
a660: 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74  .&lt;/p&gt;..&lt
a670: 3b 70 72 65 20 63 6c 61 73 73 3d 22 73 68 5f 74  ;pre class="sh_t
a680: 63 6c 22 26 67 74 3b 0a 73 65 74 20 64 6e 73 3a  cl"&gt;.set dns:
a690: 3a 74 69 6d 65 6f 75 74 20 31 30 0a 0a 70 72 6f  :timeout 10..pro
a6a0: 63 20 64 6e 73 3a 3a 63 6f 6e 66 69 67 75 72 65  c dns::configure
a6b0: 20 7b 6e 65 77 7d 20 7b 0a 09 67 6c 6f 62 61 6c   {new} {..global
a6c0: 20 64 6e 73 3a 3a 74 69 6d 65 6f 75 74 0a 09 73   dns::timeout..s
a6d0: 65 74 20 64 6e 73 3a 3a 74 69 6d 65 6f 75 74 20  et dns::timeout 
a6e0: 24 6e 65 77 0a 7d 0a 26 6c 74 3b 2f 70 72 65 26  $new.}.&lt;/pre&
a6f0: 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 54 68  gt;..&lt;p&gt;Th
a700: 65 20 6d 61 69 6e 20 64 69 66 66 65 72 65 6e 63  e main differenc
a710: 65 73 20 62 65 74 77 65 65 6e 20 74 68 69 73 20  es between this 
a720: 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6e 61 6d  code and the nam
a730: 65 73 70 61 63 65 20 63 6f 64 65 20 61 72 65 3a  espace code are:
a740: 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b  &lt;/p&gt;..&lt;
a750: 75 6c 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26  ul&gt;.  &lt;li&
a760: 67 74 3b 41 6c 6c 20 76 61 72 69 61 62 6c 65 73  gt;All variables
a770: 20 61 6e 64 20 70 72 6f 63 73 20 61 72 65 20 76   and procs are v
a780: 69 73 69 62 6c 65 2c 20 65 76 65 6e 20 69 66 20  isible, even if 
a790: 6e 6f 74 20 26 6c 74 3b 65 6d 26 67 74 3b 65 78  not &lt;em&gt;ex
a7a0: 70 6f 72 74 65 64 26 6c 74 3b 2f 65 6d 26 67 74  ported&lt;/em&gt
a7b0: 3b 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26  ;&lt;/li&gt;.  &
a7c0: 6c 74 3b 6c 69 26 67 74 3b 4e 61 6d 65 73 70 61  lt;li&gt;Namespa
a7d0: 63 65 20 70 72 6f 63 73 20 6e 65 65 64 20 74 6f  ce procs need to
a7e0: 20 62 65 20 72 65 66 65 72 65 6e 63 65 64 20 77   be referenced w
a7f0: 69 74 68 20 61 20 66 75 6c 6c 79 20 71 75 61 6c  ith a fully qual
a800: 69 66 69 65 64 20 6e 61 6d 65 26 6c 74 3b 2f 6c  ified name&lt;/l
a810: 69 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67  i&gt;.  &lt;li&g
a820: 74 3b 4e 61 6d 65 73 70 61 63 65 20 76 61 72 69  t;Namespace vari
a830: 61 62 6c 65 73 20 6e 65 65 64 20 74 6f 20 62 65  ables need to be
a840: 20 72 65 66 65 72 65 6e 63 65 64 20 77 69 74 68   referenced with
a850: 20 61 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69   a fully qualifi
a860: 65 64 20 6e 61 6d 65 26 6c 74 3b 2f 6c 69 26 67  ed name&lt;/li&g
a870: 74 3b 0a 26 6c 74 3b 2f 75 6c 26 67 74 3b 0a 0a  t;.&lt;/ul&gt;..
a880: 26 6c 74 3b 70 26 67 74 3b 57 65 20 63 61 6e 20  &lt;p&gt;We can 
a890: 6d 69 74 69 67 61 74 65 20 74 68 69 73 20 6c 61  mitigate this la
a8a0: 73 74 20 64 69 66 66 65 72 65 6e 63 65 20 77 69  st difference wi
a8b0: 74 68 20 6f 6e 65 20 73 6d 61 6c 6c 20 63 68 61  th one small cha
a8c0: 6e 67 65 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a  nge.&lt;/p&gt;..
a8d0: 26 6c 74 3b 70 72 65 20 63 6c 61 73 73 3d 22 73  &lt;pre class="s
a8e0: 68 5f 74 63 6c 22 26 67 74 3b 0a 23 20 50 6f 6f  h_tcl"&gt;.# Poo
a8f0: 72 20 6d 61 6e 27 73 20 76 61 72 69 61 62 6c 65  r man's variable
a900: 20 66 6f 72 20 4a 69 6d 20 54 63 6c 0a 23 20 4c   for Jim Tcl.# L
a910: 69 6e 6b 73 20 61 20 67 6c 6f 62 61 6c 20 76 61  inks a global va
a920: 72 69 61 62 6c 65 2c 20 3a 3a 6e 73 3a 3a 76 61  riable, ::ns::va
a930: 72 20 74 6f 20 61 20 6c 6f 63 61 6c 20 76 61 72  r to a local var
a940: 69 61 62 6c 65 2c 20 76 61 72 0a 70 72 6f 63 20  iable, var.proc 
a950: 76 61 72 69 61 62 6c 65 20 7b 6e 73 20 76 61 72  variable {ns var
a960: 7d 20 7b 0a 20 20 20 20 75 70 6c 65 76 65 6c 20  } {.    uplevel 
a970: 31 20 5b 6c 69 73 74 20 75 70 76 61 72 20 23 30  1 [list upvar #0
a980: 20 24 7b 6e 73 7d 3a 3a 24 76 61 72 20 24 76 61   ${ns}::$var $va
a990: 72 5d 0a 7d 0a 0a 73 65 74 20 64 6e 73 3a 3a 74  r].}..set dns::t
a9a0: 69 6d 65 6f 75 74 20 31 30 0a 0a 70 72 6f 63 20  imeout 10..proc 
a9b0: 64 6e 73 3a 3a 63 6f 6e 66 69 67 75 72 65 20 7b  dns::configure {
a9c0: 6e 65 77 7d 20 7b 0a 09 76 61 72 69 61 62 6c 65  new} {..variable
a9d0: 20 64 6e 73 20 74 69 6d 65 6f 75 74 0a 09 73 65   dns timeout..se
a9e0: 74 20 74 69 6d 65 6f 75 74 20 24 6e 65 77 0a 7d  t timeout $new.}
a9f0: 0a 26 6c 74 3b 2f 70 72 65 26 67 74 3b 0a 0a 26  .&lt;/pre&gt;..&
aa00: 6c 74 3b 70 26 67 74 3b 57 69 74 68 20 74 68 69  lt;p&gt;With thi
aa10: 73 20 63 68 61 6e 67 65 2c 20 63 6f 64 65 20 63  s change, code c
aa20: 61 6e 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  an refer to the 
aa30: 75 6e 71 75 61 6c 69 66 69 65 64 20 76 61 72 69  unqualified vari
aa40: 61 62 6c 65 20 6e 61 6d 65 0a 77 68 69 63 68 20  able name.which 
aa50: 69 73 20 6c 69 6e 6b 65 64 20 74 6f 20 74 68 65  is linked to the
aa60: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64   fully qualified
aa70: 20 6e 61 6d 65 2e 26 6c 74 3b 2f 70 26 67 74 3b   name.&lt;/p&gt;
aa80: 0a 0a 26 6c 74 3b 70 26 67 74 3b 59 6f 75 20 63  ..&lt;p&gt;You c
aa90: 61 6e 20 73 65 65 20 74 68 65 20 66 75 6c 6c 79  an see the fully
aaa0: 20 63 6f 6e 76 65 72 74 65 64 20 76 65 72 73 69   converted versi
aab0: 6f 6e 20 6f 66 20 26 6c 74 3b 61 20 68 72 65 66  on of &lt;a href
aac0: 3d 22 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62  ="https://github
aad0: 2e 63 6f 6d 2f 6d 73 74 65 76 65 62 2f 6a 69 6d  .com/msteveb/jim
aae0: 74 63 6c 2f 62 6c 6f 62 2f 30 2e 37 33 2f 65 78  tcl/blob/0.73/ex
aaf0: 61 6d 70 6c 65 73 2f 64 6e 73 2e 74 63 6c 22 26  amples/dns.tcl"&
ab00: 67 74 3b 64 6e 73 2e 74 63 6c 20 66 6f 72 20 4a  gt;dns.tcl for J
ab10: 69 6d 26 6c 74 3b 2f 61 26 67 74 3b 26 6c 74 3b  im&lt;/a&gt;&lt;
ab20: 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74  /p&gt;..&lt;p&gt
ab30: 3b 54 6f 20 73 75 6d 6d 61 72 69 73 65 3a 26 6c  ;To summarise:&l
ab40: 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 75 6c  t;/p&gt;..&lt;ul
ab50: 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74  &gt;.  &lt;li&gt
ab60: 3b 52 65 6d 6f 76 65 20 26 6c 74 3b 63 6f 64 65  ;Remove &lt;code
ab70: 26 67 74 3b 6e 61 6d 65 73 70 61 63 65 20 65 76  &gt;namespace ev
ab80: 61 6c 26 6c 74 3b 2f 63 6f 64 65 26 67 74 3b 26  al&lt;/code&gt;&
ab90: 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26 6c 74  lt;/li&gt;.  &lt
aba0: 3b 6c 69 26 67 74 3b 49 6e 69 74 69 61 6c 69 73  ;li&gt;Initialis
abb0: 65 20 76 61 72 69 61 62 6c 65 73 20 77 69 74 68  e variables with
abc0: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64   fully qualified
abd0: 20 6e 61 6d 65 73 3a 20 26 6c 74 3b 63 6f 64 65   names: &lt;code
abe0: 26 67 74 3b 73 65 74 20 6e 73 3a 3a 76 61 72 20  &gt;set ns::var 
abf0: 76 61 6c 75 65 26 6c 74 3b 2f 63 6f 64 65 26 67  value&lt;/code&g
ac00: 74 3b 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20  t;&lt;/li&gt;.  
ac10: 26 6c 74 3b 6c 69 26 67 74 3b 45 6e 73 75 72 65  &lt;li&gt;Ensure
ac20: 20 70 72 6f 63 73 20 61 72 65 20 64 65 63 6c 61   procs are decla
ac30: 72 65 64 20 77 69 74 68 20 66 75 6c 6c 79 20 71  red with fully q
ac40: 75 61 6c 69 74 79 20 6e 61 6d 65 73 3a 20 26 6c  uality names: &l
ac50: 74 3b 63 6f 64 65 26 67 74 3b 70 72 6f 63 20 6e  t;code&gt;proc n
ac60: 73 3a 3a 70 72 6f 63 6e 61 6d 65 20 7b 20 2e 2e  s::procname { ..
ac70: 2e 20 7d 26 6c 74 3b 2f 63 6f 64 65 26 67 74 3b  . }&lt;/code&gt;
ac80: 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26 6c  &lt;/li&gt;.  &l
ac90: 74 3b 6c 69 26 67 74 3b 55 73 65 20 66 75 6c 6c  t;li&gt;Use full
aca0: 79 20 71 75 61 6c 69 66 69 65 64 20 6e 61 6d 65  y qualified name
acb0: 73 20 77 68 65 6e 20 69 6e 76 6f 6b 69 6e 67 20  s when invoking 
acc0: 70 72 6f 63 73 20 77 69 74 68 69 6e 20 74 68 65  procs within the
acd0: 20 6e 61 6d 65 73 70 61 63 65 2e 26 6c 74 3b 2f   namespace.&lt;/
ace0: 6c 69 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26  li&gt;.  &lt;li&
acf0: 67 74 3b 52 65 70 6c 61 63 65 20 74 68 65 20 75  gt;Replace the u
ad00: 73 65 20 6f 66 20 26 6c 74 3b 63 6f 64 65 26 67  se of &lt;code&g
ad10: 74 3b 6e 61 6d 65 73 70 61 63 65 20 63 75 72 72  t;namespace curr
ad20: 65 6e 74 26 6c 74 3b 2f 63 6f 64 65 26 67 74 3b  ent&lt;/code&gt;
ad30: 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65 73 70   with the namesp
ad40: 61 63 65 20 6e 61 6d 65 26 6c 74 3b 2f 6c 69 26  ace name&lt;/li&
ad50: 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74 3b  gt;.  &lt;li&gt;
ad60: 52 65 70 6c 61 63 65 20 74 68 65 20 75 73 65 20  Replace the use 
ad70: 6f 66 20 26 6c 74 3b 63 6f 64 65 26 67 74 3b 6e  of &lt;code&gt;n
ad80: 61 6d 65 73 70 61 63 65 20 6f 72 69 67 69 6e 26  amespace origin&
ad90: 6c 74 3b 2f 63 6f 64 65 26 67 74 3b 20 77 69 74  lt;/code&gt; wit
ada0: 68 20 74 68 65 20 6e 61 6d 65 73 70 61 63 65 20  h the namespace 
adb0: 6e 61 6d 65 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a  name&lt;/li&gt;.
adc0: 20 20 26 6c 74 3b 6c 69 26 67 74 3b 55 73 65 20    &lt;li&gt;Use 
add0: 74 68 65 20 26 6c 74 3b 63 6f 64 65 26 67 74 3b  the &lt;code&gt;
ade0: 76 61 72 69 61 62 6c 65 26 6c 74 3b 2f 63 6f 64  variable&lt;/cod
adf0: 65 26 67 74 3b 20 70 72 6f 63 20 74 6f 20 64 65  e&gt; proc to de
ae00: 63 6c 61 72 65 20 76 61 72 69 61 62 6c 65 73 20  clare variables 
ae10: 77 69 74 68 69 6e 20 70 72 6f 63 73 26 6c 74 3b  within procs&lt;
ae20: 2f 6c 69 26 67 74 3b 0a 26 6c 74 3b 2f 75 6c 26  /li&gt;.&lt;/ul&
ae30: 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 53 74  gt;..&lt;p&gt;St
ae40: 65 76 65 20 42 65 6e 6e 65 74 74 20 28 26 6c 74  eve Bennett (&lt
ae50: 3b 61 20 68 72 65 66 3d 22 26 61 6d 70 3b 23 31  ;a href="&amp;#1
ae60: 30 39 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d  09;&amp;#097;&am
ae70: 70 3b 23 31 30 35 3b 26 61 6d 70 3b 23 31 30 38  p;#105;&amp;#108
ae80: 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d 70 3b  ;&amp;#116;&amp;
ae90: 23 31 31 31 3b 3a 26 61 6d 70 3b 23 31 31 35 3b  #111;:&amp;#115;
aea0: 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d 70 3b 23  &amp;#116;&amp;#
aeb0: 31 30 31 3b 26 61 6d 70 3b 23 31 31 38 3b 26 61  101;&amp;#118;&a
aec0: 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 30 39  mp;#101;&amp;#09
aed0: 38 3b 26 61 6d 70 3b 23 30 36 34 3b 26 61 6d 70  8;&amp;#064;&amp
aee0: 3b 23 31 31 39 3b 26 61 6d 70 3b 23 31 31 31 3b  ;#119;&amp;#111;
aef0: 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d 70 3b 23  &amp;#114;&amp;#
af00: 31 30 37 3b 26 61 6d 70 3b 23 31 31 39 3b 26 61  107;&amp;#119;&a
af10: 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b 23 31 31  mp;#097;&amp;#11
af20: 34 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70  4;&amp;#101;&amp
af30: 3b 23 30 34 36 3b 26 61 6d 70 3b 23 31 31 30 3b  ;#046;&amp;#110;
af40: 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23  &amp;#101;&amp;#
af50: 31 31 36 3b 26 61 6d 70 3b 23 30 34 36 3b 26 61  116;&amp;#046;&a
af60: 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b 23 31 31  mp;#097;&amp;#11
af70: 37 3b 22 26 67 74 3b 26 61 6d 70 3b 23 31 31 35  7;"&gt;&amp;#115
af80: 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d 70 3b  ;&amp;#116;&amp;
af90: 23 31 30 31 3b 26 61 6d 70 3b 23 31 31 38 3b 26  #101;&amp;#118;&
afa0: 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 30  amp;#101;&amp;#0
afb0: 39 38 3b 26 61 6d 70 3b 23 30 36 34 3b 26 61 6d  98;&amp;#064;&am
afc0: 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23 31 31 31  p;#119;&amp;#111
afd0: 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d 70 3b  ;&amp;#114;&amp;
afe0: 23 31 30 37 3b 26 61 6d 70 3b 23 31 31 39 3b 26  #107;&amp;#119;&
aff0: 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b 23 31  amp;#097;&amp;#1
b000: 31 34 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d  14;&amp;#101;&am
b010: 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23 31 31 30  p;#046;&amp;#110
b020: 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b  ;&amp;#101;&amp;
b030: 23 31 31 36 3b 26 61 6d 70 3b 23 30 34 36 3b 26  #116;&amp;#046;&
b040: 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b 23 31  amp;#097;&amp;#1
b050: 31 37 3b 26 6c 74 3b 2f 61 26 67 74 3b 29 26 6c  17;&lt;/a&gt;)&l
b060: 74 3b 2f 70 26 67 74 3b 0a 3c 2f 63 6f 6e 74 65  t;/p&gt;.</conte
b070: 6e 74 3e 0a 20 20 3c 2f 65 6e 74 72 79 3e 0a 20  nt>.  </entry>. 
b080: 20 3c 65 6e 74 72 79 3e 0a 20 20 20 20 3c 69 64   <entry>.    <id
b090: 3e 74 61 67 3a 6a 69 6d 2e 62 65 72 6c 69 6f 73  >tag:jim.berlios
b0a0: 2e 64 65 2c 32 30 31 31 2d 30 35 2d 32 35 3a 2f  .de,2011-05-25:/
b0b0: 61 72 74 69 63 6c 65 73 2f 6a 69 6d 2d 69 73 2d  articles/jim-is-
b0c0: 6d 6f 64 75 6c 61 72 2f 3c 2f 69 64 3e 0a 20 20  modular/</id>.  
b0d0: 20 20 3c 74 69 74 6c 65 20 74 79 70 65 3d 22 68    <title type="h
b0e0: 74 6d 6c 22 3e 4a 69 6d 20 49 73 20 4d 6f 64 75  tml">Jim Is Modu
b0f0: 6c 61 72 3c 2f 74 69 74 6c 65 3e 0a 20 20 20 20  lar</title>.    
b100: 3c 70 75 62 6c 69 73 68 65 64 3e 32 30 31 31 2d  <published>2011-
b110: 30 35 2d 32 34 54 31 34 3a 30 30 3a 30 30 5a 3c  05-24T14:00:00Z<
b120: 2f 70 75 62 6c 69 73 68 65 64 3e 0a 20 20 20 20  /published>.    
b130: 3c 75 70 64 61 74 65 64 3e 32 30 31 31 2d 30 35  <updated>2011-05
b140: 2d 32 34 54 31 34 3a 30 30 3a 30 30 5a 3c 2f 75  -24T14:00:00Z</u
b150: 70 64 61 74 65 64 3e 0a 20 20 20 20 3c 6c 69 6e  pdated>.    <lin
b160: 6b 20 72 65 6c 3d 22 61 6c 74 65 72 6e 61 74 65  k rel="alternate
b170: 22 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 6a  " href="http://j
b180: 69 6d 2e 62 65 72 6c 69 6f 73 2e 64 65 2f 61 72  im.berlios.de/ar
b190: 74 69 63 6c 65 73 2f 6a 69 6d 2d 69 73 2d 6d 6f  ticles/jim-is-mo
b1a0: 64 75 6c 61 72 2f 22 2f 3e 0a 20 20 20 20 3c 63  dular/"/>.    <c
b1b0: 6f 6e 74 65 6e 74 20 74 79 70 65 3d 22 68 74 6d  ontent type="htm
b1c0: 6c 22 3e 26 6c 74 3b 70 26 67 74 3b 4f 6e 65 20  l">&lt;p&gt;One 
b1d0: 6f 66 20 74 68 65 20 61 64 76 61 6e 74 61 67 65  of the advantage
b1e0: 73 20 6f 66 20 4a 69 6d 20 54 63 6c 20 69 73 20  s of Jim Tcl is 
b1f0: 74 68 61 74 20 74 68 65 20 63 6f 72 65 20 69 6e  that the core in
b200: 74 65 72 70 72 65 74 65 72 0a 63 6f 6e 74 61 69  terpreter.contai
b210: 6e 73 20 6f 6e 6c 79 20 74 68 65 20 62 61 72 65  ns only the bare
b220: 20 65 73 73 65 6e 74 69 61 6c 73 2e 20 4d 61 6e   essentials. Man
b230: 79 20 54 63 6c 20 73 74 61 6e 64 61 72 64 20 63  y Tcl standard c
b240: 6f 6d 6d 61 6e 64 73 20 61 72 65 20 70 72 6f 76  ommands are prov
b250: 69 64 65 64 20 62 79 0a 6f 70 74 69 6f 6e 61 6c  ided by.optional
b260: 20 65 78 74 65 6e 73 69 6f 6e 73 20 77 68 69 63   extensions whic
b270: 68 20 63 61 6e 20 62 65 20 64 69 73 61 62 6c 65  h can be disable
b280: 20 6f 72 20 62 75 69 6c 74 20 61 73 20 6c 6f 61   or built as loa
b290: 64 61 62 6c 65 20 6d 6f 64 75 6c 65 73 20 69 66  dable modules if
b2a0: 20 72 65 71 75 69 72 65 64 2e 26 6c 74 3b 2f 70   required.&lt;/p
b2b0: 26 67 74 3b 0a 0a 26 6c 74 3b 64 6c 26 67 74 3b  &gt;..&lt;dl&gt;
b2c0: 0a 20 20 26 6c 74 3b 64 74 26 67 74 3b 63 6f 72  .  &lt;dt&gt;cor
b2d0: 65 20 63 6f 6d 6d 61 6e 64 73 26 6c 74 3b 2f 64  e commands&lt;/d
b2e0: 74 26 67 74 3b 0a 20 20 26 6c 74 3b 64 64 26 67  t&gt;.  &lt;dd&g
b2f0: 74 3b 2a 2c 20 2b 2c 20 2d 2c 20 2f 2c 20 61 6c  t;*, +, -, /, al
b300: 69 61 73 2c 20 61 70 70 65 6e 64 2c 20 62 72 65  ias, append, bre
b310: 61 6b 2c 20 63 61 74 63 68 2c 20 63 6f 6c 6c 65  ak, catch, colle
b320: 63 74 2c 20 63 6f 6e 63 61 74 2c 0a 63 6f 6e 74  ct, concat,.cont
b330: 69 6e 75 65 2c 20 63 75 72 72 79 2c 20 64 69 63  inue, curry, dic
b340: 74 2c 20 65 6e 76 2c 20 65 72 72 6f 72 2c 20 65  t, env, error, e
b350: 72 72 6f 72 49 6e 66 6f 2c 20 65 76 61 6c 2c 20  rrorInfo, eval, 
b360: 65 78 69 73 74 73 2c 20 65 78 69 74 2c 0a 65 78  exists, exit,.ex
b370: 70 72 2c 20 66 69 6e 61 6c 69 7a 65 2c 20 66 6f  pr, finalize, fo
b380: 72 2c 20 66 6f 72 65 61 63 68 2c 20 66 6f 72 6d  r, foreach, form
b390: 61 74 2c 20 67 65 74 72 65 66 2c 20 67 6c 6f 62  at, getref, glob
b3a0: 61 6c 2c 20 69 66 2c 20 69 6e 63 72 2c 0a 69 6e  al, if, incr,.in
b3b0: 66 6f 2c 20 6a 6f 69 6e 2c 20 6c 61 6d 62 64 61  fo, join, lambda
b3c0: 2c 20 6c 61 70 70 65 6e 64 2c 20 6c 61 73 73 69  , lappend, lassi
b3d0: 67 6e 2c 20 6c 69 6e 64 65 78 2c 20 6c 69 6e 73  gn, lindex, lins
b3e0: 65 72 74 2c 20 6c 69 73 74 2c 20 6c 6c 65 6e 67  ert, list, lleng
b3f0: 74 68 2c 0a 6c 6d 61 70 2c 20 6c 6f 63 61 6c 2c  th,.lmap, local,
b400: 20 6c 72 61 6e 67 65 2c 20 6c 72 65 70 65 61 74   lrange, lrepeat
b410: 2c 20 6c 72 65 70 6c 61 63 65 2c 20 6c 72 65 76  , lreplace, lrev
b420: 65 72 73 65 2c 20 6c 73 65 61 72 63 68 2c 20 6c  erse, lsearch, l
b430: 73 65 74 2c 0a 6c 73 6f 72 74 2c 20 70 72 6f 63  set,.lsort, proc
b440: 2c 20 72 61 6e 64 2c 20 72 61 6e 67 65 2c 20 72  , rand, range, r
b450: 65 66 2c 20 72 65 6e 61 6d 65 2c 20 72 65 74 75  ef, rename, retu
b460: 72 6e 2c 20 73 63 61 6e 2c 20 73 65 74 2c 20 73  rn, scan, set, s
b470: 65 74 72 65 66 2c 0a 73 6f 75 72 63 65 2c 20 73  etref,.source, s
b480: 70 6c 69 74 2c 20 73 74 61 63 6b 64 75 6d 70 2c  plit, stackdump,
b490: 20 73 74 61 63 6b 74 72 61 63 65 2c 20 73 74 72   stacktrace, str
b4a0: 69 6e 67 2c 20 73 75 62 73 74 2c 20 73 77 69 74  ing, subst, swit
b4b0: 63 68 2c 20 74 61 69 6c 63 61 6c 6c 2c 0a 74 65  ch, tailcall,.te
b4c0: 6c 6c 2c 20 74 68 72 6f 77 2c 20 74 69 6d 65 2c  ll, throw, time,
b4d0: 20 75 6e 73 65 74 2c 20 75 70 6c 65 76 65 6c 2c   unset, uplevel,
b4e0: 20 75 70 76 61 72 2c 20 77 68 69 6c 65 26 6c 74   upvar, while&lt
b4f0: 3b 2f 64 64 26 67 74 3b 0a 20 20 26 6c 74 3b 64  ;/dd&gt;.  &lt;d
b500: 74 26 67 74 3b 61 69 6f 20 65 78 74 65 6e 73 69  t&gt;aio extensi
b510: 6f 6e 26 6c 74 3b 2f 64 74 26 67 74 3b 0a 20 20  on&lt;/dt&gt;.  
b520: 26 6c 74 3b 64 64 26 67 74 3b 6f 70 65 6e 2c 20  &lt;dd&gt;open, 
b530: 73 6f 63 6b 65 74 26 6c 74 3b 2f 64 64 26 67 74  socket&lt;/dd&gt
b540: 3b 0a 20 20 26 6c 74 3b 64 74 26 67 74 3b 65 76  ;.  &lt;dt&gt;ev
b550: 65 6e 74 6c 6f 6f 70 20 65 78 74 65 6e 73 69 6f  entloop extensio
b560: 6e 26 6c 74 3b 2f 64 74 26 67 74 3b 0a 20 20 26  n&lt;/dt&gt;.  &
b570: 6c 74 3b 64 64 26 67 74 3b 76 77 61 69 74 2c 20  lt;dd&gt;vwait, 
b580: 75 70 64 61 74 65 2c 20 61 66 74 65 72 26 6c 74  update, after&lt
b590: 3b 2f 64 64 26 67 74 3b 0a 20 20 26 6c 74 3b 64  ;/dd&gt;.  &lt;d
b5a0: 74 26 67 74 3b 74 63 6c 63 6f 6d 70 61 74 20 65  t&gt;tclcompat e
b5b0: 78 74 65 6e 73 69 6f 6e 26 6c 74 3b 2f 64 74 26  xtension&lt;/dt&
b5c0: 67 74 3b 0a 20 20 26 6c 74 3b 64 64 26 67 74 3b  gt;.  &lt;dd&gt;
b5d0: 70 75 74 73 2c 20 67 65 74 73 2c 20 72 65 61 64  puts, gets, read
b5e0: 2c 20 63 6c 6f 73 65 2c 20 74 65 6c 6c 2c 20 73  , close, tell, s
b5f0: 65 65 6b 2c 20 65 6f 66 2c 20 66 6c 75 73 68 2c  eek, eof, flush,
b600: 20 70 61 72 72 61 79 2c 20 74 72 79 2c 20 74 68   parray, try, th
b610: 72 6f 77 2c 20 63 61 73 65 26 6c 74 3b 2f 64 64  row, case&lt;/dd
b620: 26 67 74 3b 0a 20 20 26 6c 74 3b 64 74 26 67 74  &gt;.  &lt;dt&gt
b630: 3b 61 72 72 61 79 20 65 78 74 65 6e 73 69 6f 6e  ;array extension
b640: 26 6c 74 3b 2f 64 74 26 67 74 3b 0a 20 20 26 6c  &lt;/dt&gt;.  &l
b650: 74 3b 64 64 26 67 74 3b 61 72 72 61 79 26 6c 74  t;dd&gt;array&lt
b660: 3b 2f 64 64 26 67 74 3b 0a 20 20 26 6c 74 3b 64  ;/dd&gt;.  &lt;d
b670: 74 26 67 74 3b 63 6c 6f 63 6b 20 65 78 74 65 6e  t&gt;clock exten
b680: 73 69 6f 6e 26 6c 74 3b 2f 64 74 26 67 74 3b 0a  sion&lt;/dt&gt;.
b690: 20 20 26 6c 74 3b 64 64 26 67 74 3b 63 6c 6f 63    &lt;dd&gt;cloc
b6a0: 6b 26 6c 74 3b 2f 64 64 26 67 74 3b 0a 20 20 26  k&lt;/dd&gt;.  &
b6b0: 6c 74 3b 64 74 26 67 74 3b 66 69 6c 65 20 65 78  lt;dt&gt;file ex
b6c0: 74 65 6e 73 69 6f 6e 26 6c 74 3b 2f 64 74 26 67  tension&lt;/dt&g
b6d0: 74 3b 0a 20 20 26 6c 74 3b 64 64 26 67 74 3b 66  t;.  &lt;dd&gt;f
b6e0: 69 6c 65 2c 20 63 64 2c 20 70 77 64 26 6c 74 3b  ile, cd, pwd&lt;
b6f0: 2f 64 64 26 67 74 3b 0a 20 20 26 6c 74 3b 64 74  /dd&gt;.  &lt;dt
b700: 26 67 74 3b 65 78 65 63 20 65 78 74 65 6e 73 69  &gt;exec extensi
b710: 6f 6e 26 6c 74 3b 2f 64 74 26 67 74 3b 0a 20 20  on&lt;/dt&gt;.  
b720: 26 6c 74 3b 64 64 26 67 74 3b 65 78 65 63 26 6c  &lt;dd&gt;exec&l
b730: 74 3b 2f 64 64 26 67 74 3b 0a 20 20 26 6c 74 3b  t;/dd&gt;.  &lt;
b740: 64 74 26 67 74 3b 6c 6f 61 64 20 65 78 74 65 6e  dt&gt;load exten
b750: 73 69 6f 6e 26 6c 74 3b 2f 64 74 26 67 74 3b 0a  sion&lt;/dt&gt;.
b760: 20 20 26 6c 74 3b 64 64 26 67 74 3b 6c 6f 61 64    &lt;dd&gt;load
b770: 26 6c 74 3b 2f 64 64 26 67 74 3b 0a 20 20 26 6c  &lt;/dd&gt;.  &l
b780: 74 3b 64 74 26 67 74 3b 70 61 63 6b 61 67 65 20  t;dt&gt;package 
b790: 65 78 74 65 6e 73 69 6f 6e 26 6c 74 3b 2f 64 74  extension&lt;/dt
b7a0: 26 67 74 3b 0a 20 20 26 6c 74 3b 64 64 26 67 74  &gt;.  &lt;dd&gt
b7b0: 3b 70 61 63 6b 61 67 65 26 6c 74 3b 2f 64 64 26  ;package&lt;/dd&
b7c0: 67 74 3b 0a 20 20 26 6c 74 3b 64 74 26 67 74 3b  gt;.  &lt;dt&gt;
b7d0: 70 6f 73 69 78 20 65 78 74 65 6e 73 69 6f 6e 26  posix extension&
b7e0: 6c 74 3b 2f 64 74 26 67 74 3b 0a 20 20 26 6c 74  lt;/dt&gt;.  &lt
b7f0: 3b 64 64 26 67 74 3b 6f 73 2e 66 6f 72 6b 2c 20  ;dd&gt;os.fork, 
b800: 6f 73 2e 77 61 69 74 2c 20 6f 73 2e 67 65 74 69  os.wait, os.geti
b810: 64 73 2c 20 6f 73 2e 67 65 74 68 6f 73 74 6e 61  ds, os.gethostna
b820: 6d 65 2c 20 6f 73 2e 75 70 74 69 6d 65 2c 20 70  me, os.uptime, p
b830: 69 64 26 6c 74 3b 2f 64 64 26 67 74 3b 0a 20 20  id&lt;/dd&gt;.  
b840: 26 6c 74 3b 64 74 26 67 74 3b 67 6c 6f 62 2c 20  &lt;dt&gt;glob, 
b850: 72 65 61 64 64 69 72 20 65 78 74 65 6e 73 69 6f  readdir extensio
b860: 6e 73 26 6c 74 3b 2f 64 74 26 67 74 3b 0a 20 20  ns&lt;/dt&gt;.  
b870: 26 6c 74 3b 64 64 26 67 74 3b 67 6c 6f 62 2c 20  &lt;dd&gt;glob, 
b880: 72 65 61 64 64 69 72 26 6c 74 3b 2f 64 64 26 67  readdir&lt;/dd&g
b890: 74 3b 0a 20 20 26 6c 74 3b 64 74 26 67 74 3b 72  t;.  &lt;dt&gt;r
b8a0: 65 67 65 78 70 20 65 78 74 65 6e 73 69 6f 6e 26  egexp extension&
b8b0: 6c 74 3b 2f 64 74 26 67 74 3b 0a 20 20 26 6c 74  lt;/dt&gt;.  &lt
b8c0: 3b 64 64 26 67 74 3b 72 65 67 65 78 70 2c 20 72  ;dd&gt;regexp, r
b8d0: 65 67 73 75 62 26 6c 74 3b 2f 64 64 26 67 74 3b  egsub&lt;/dd&gt;
b8e0: 0a 20 20 26 6c 74 3b 64 74 26 67 74 3b 73 69 67  .  &lt;dt&gt;sig
b8f0: 6e 61 6c 20 65 78 74 65 6e 73 69 6f 6e 26 6c 74  nal extension&lt
b900: 3b 2f 64 74 26 67 74 3b 0a 20 20 26 6c 74 3b 64  ;/dt&gt;.  &lt;d
b910: 64 26 67 74 3b 73 69 67 6e 61 6c 2c 20 61 6c 61  d&gt;signal, ala
b920: 72 6d 2c 20 6b 69 6c 6c 2c 20 73 6c 65 65 70 26  rm, kill, sleep&
b930: 6c 74 3b 2f 64 64 26 67 74 3b 0a 26 6c 74 3b 2f  lt;/dd&gt;.&lt;/
b940: 64 6c 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74  dl&gt;..&lt;p&gt
b950: 3b 49 6e 20 61 64 64 69 74 69 6f 6e 2c 20 66 65  ;In addition, fe
b960: 61 74 75 72 65 73 20 69 6e 63 6c 75 64 69 6e 67  atures including
b970: 20 72 65 66 65 72 65 6e 63 65 73 2c 20 55 54 46   references, UTF
b980: 2d 38 20 73 75 70 70 6f 72 74 2c 20 49 50 76 36  -8 support, IPv6
b990: 20 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   and command lin
b9a0: 65 20 65 64 69 74 69 6e 67 0a 63 61 6e 20 62 65  e editing.can be
b9b0: 20 64 69 73 61 62 6c 65 64 20 77 69 74 68 20 26   disabled with &
b9c0: 6c 74 3b 63 6f 64 65 26 67 74 3b 63 6f 6e 66 69  lt;code&gt;confi
b9d0: 67 75 72 65 26 6c 74 3b 2f 63 6f 64 65 26 67 74  gure&lt;/code&gt
b9e0: 3b 2e 20 53 65 65 20 26 6c 74 3b 63 6f 64 65 26  ;. See &lt;code&
b9f0: 67 74 3b 63 6f 6e 66 69 67 75 72 65 20 2d 2d 68  gt;configure --h
ba00: 65 6c 70 26 6c 74 3b 2f 63 6f 64 65 26 67 74 3b  elp&lt;/code&gt;
ba10: 20 66 6f 72 20 66 75 6c 6c 20 64 65 74 61 69 6c   for full detail
ba20: 73 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c  s.&lt;/p&gt;..&l
ba30: 74 3b 70 26 67 74 3b 53 74 65 76 65 20 42 65 6e  t;p&gt;Steve Ben
ba40: 6e 65 74 74 20 28 26 6c 74 3b 61 20 68 72 65 66  nett (&lt;a href
ba50: 3d 22 26 61 6d 70 3b 23 31 30 39 3b 26 61 6d 70  ="&amp;#109;&amp
ba60: 3b 23 30 39 37 3b 26 61 6d 70 3b 23 31 30 35 3b  ;#097;&amp;#105;
ba70: 26 61 6d 70 3b 23 31 30 38 3b 26 61 6d 70 3b 23  &amp;#108;&amp;#
ba80: 31 31 36 3b 26 61 6d 70 3b 23 31 31 31 3b 3a 26  116;&amp;#111;:&
ba90: 61 6d 70 3b 23 31 31 35 3b 26 61 6d 70 3b 23 31  amp;#115;&amp;#1
baa0: 31 36 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d  16;&amp;#101;&am
bab0: 70 3b 23 31 31 38 3b 26 61 6d 70 3b 23 31 30 31  p;#118;&amp;#101
bac0: 3b 26 61 6d 70 3b 23 30 39 38 3b 26 61 6d 70 3b  ;&amp;#098;&amp;
bad0: 23 30 36 34 3b 26 61 6d 70 3b 23 31 31 39 3b 26  #064;&amp;#119;&
bae0: 61 6d 70 3b 23 31 31 31 3b 26 61 6d 70 3b 23 31  amp;#111;&amp;#1
baf0: 31 34 3b 26 61 6d 70 3b 23 31 30 37 3b 26 61 6d  14;&amp;#107;&am
bb00: 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23 30 39 37  p;#119;&amp;#097
bb10: 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d 70 3b  ;&amp;#114;&amp;
bb20: 23 31 30 31 3b 26 61 6d 70 3b 23 30 34 36 3b 26  #101;&amp;#046;&
bb30: 61 6d 70 3b 23 31 31 30 3b 26 61 6d 70 3b 23 31  amp;#110;&amp;#1
bb40: 30 31 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d  01;&amp;#116;&am
bb50: 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23 30 39 37  p;#046;&amp;#097
bb60: 3b 26 61 6d 70 3b 23 31 31 37 3b 22 26 67 74 3b  ;&amp;#117;"&gt;
bb70: 26 61 6d 70 3b 23 31 31 35 3b 26 61 6d 70 3b 23  &amp;#115;&amp;#
bb80: 31 31 36 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61  116;&amp;#101;&a
bb90: 6d 70 3b 23 31 31 38 3b 26 61 6d 70 3b 23 31 30  mp;#118;&amp;#10
bba0: 31 3b 26 61 6d 70 3b 23 30 39 38 3b 26 61 6d 70  1;&amp;#098;&amp
bbb0: 3b 23 30 36 34 3b 26 61 6d 70 3b 23 31 31 39 3b  ;#064;&amp;#119;
bbc0: 26 61 6d 70 3b 23 31 31 31 3b 26 61 6d 70 3b 23  &amp;#111;&amp;#
bbd0: 31 31 34 3b 26 61 6d 70 3b 23 31 30 37 3b 26 61  114;&amp;#107;&a
bbe0: 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23 30 39  mp;#119;&amp;#09
bbf0: 37 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d 70  7;&amp;#114;&amp
bc00: 3b 23 31 30 31 3b 26 61 6d 70 3b 23 30 34 36 3b  ;#101;&amp;#046;
bc10: 26 61 6d 70 3b 23 31 31 30 3b 26 61 6d 70 3b 23  &amp;#110;&amp;#
bc20: 31 30 31 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61  101;&amp;#116;&a
bc30: 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23 30 39  mp;#046;&amp;#09
bc40: 37 3b 26 61 6d 70 3b 23 31 31 37 3b 26 6c 74 3b  7;&amp;#117;&lt;
bc50: 2f 61 26 67 74 3b 29 26 6c 74 3b 2f 70 26 67 74  /a&gt;)&lt;/p&gt
bc60: 3b 0a 3c 2f 63 6f 6e 74 65 6e 74 3e 0a 20 20 3c  ;.</content>.  <
bc70: 2f 65 6e 74 72 79 3e 0a 20 20 3c 65 6e 74 72 79  /entry>.  <entry
bc80: 3e 0a 20 20 20 20 3c 69 64 3e 74 61 67 3a 6a 69  >.    <id>tag:ji
bc90: 6d 2e 62 65 72 6c 69 6f 73 2e 64 65 2c 32 30 31  m.berlios.de,201
bca0: 31 2d 30 34 2d 32 34 3a 2f 61 72 74 69 63 6c 65  1-04-24:/article
bcb0: 73 2f 32 30 31 31 2d 30 34 2d 32 34 2f 3c 2f 69  s/2011-04-24/</i
bcc0: 64 3e 0a 20 20 20 20 3c 74 69 74 6c 65 20 74 79  d>.    <title ty
bcd0: 70 65 3d 22 68 74 6d 6c 22 3e 4e 65 77 20 57 65  pe="html">New We
bce0: 62 73 69 74 65 20 4c 61 75 6e 63 68 65 64 3c 2f  bsite Launched</
bcf0: 74 69 74 6c 65 3e 0a 20 20 20 20 3c 70 75 62 6c  title>.    <publ
bd00: 69 73 68 65 64 3e 32 30 31 31 2d 30 34 2d 32 33  ished>2011-04-23
bd10: 54 31 34 3a 30 30 3a 30 30 5a 3c 2f 70 75 62 6c  T14:00:00Z</publ
bd20: 69 73 68 65 64 3e 0a 20 20 20 20 3c 75 70 64 61  ished>.    <upda
bd30: 74 65 64 3e 32 30 31 31 2d 30 34 2d 32 33 54 31  ted>2011-04-23T1
bd40: 34 3a 30 30 3a 30 30 5a 3c 2f 75 70 64 61 74 65  4:00:00Z</update
bd50: 64 3e 0a 20 20 20 20 3c 6c 69 6e 6b 20 72 65 6c  d>.    <link rel
bd60: 3d 22 61 6c 74 65 72 6e 61 74 65 22 20 68 72 65  ="alternate" hre
bd70: 66 3d 22 68 74 74 70 3a 2f 2f 6a 69 6d 2e 62 65  f="http://jim.be
bd80: 72 6c 69 6f 73 2e 64 65 2f 61 72 74 69 63 6c 65  rlios.de/article
bd90: 73 2f 32 30 31 31 2d 30 34 2d 32 34 2f 22 2f 3e  s/2011-04-24/"/>
bda0: 0a 20 20 20 20 3c 63 6f 6e 74 65 6e 74 20 74 79  .    <content ty
bdb0: 70 65 3d 22 68 74 6d 6c 22 3e 26 6c 74 3b 70 26  pe="html">&lt;p&
bdc0: 67 74 3b 4a 69 6d 20 54 63 6c 20 64 65 76 65 6c  gt;Jim Tcl devel
bdd0: 6f 70 6d 65 6e 74 20 68 61 73 20 62 65 65 6e 20  opment has been 
bde0: 70 72 6f 63 65 65 64 69 6e 67 20 61 70 61 63 65  proceeding apace
bdf0: 2c 20 62 75 74 20 74 68 65 20 26 6c 74 3b 61 20  , but the &lt;a 
be00: 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 6a 69 6d  href="http://jim
be10: 2e 62 65 72 6c 69 6f 73 2e 64 65 2f 22 26 67 74  .berlios.de/"&gt
be20: 3b 77 65 62 73 69 74 65 26 6c 74 3b 2f 61 26 67  ;website&lt;/a&g
be30: 74 3b 0a 68 61 64 20 6e 6f 74 20 62 65 65 6e 20  t;.had not been 
be40: 75 70 64 61 74 65 64 20 66 6f 72 20 73 65 76 65  updated for seve
be50: 72 61 6c 20 79 65 61 72 73 2e 20 49 6e 20 6f 72  ral years. In or
be60: 64 65 72 20 74 6f 20 6d 61 6b 65 20 4a 69 6d 20  der to make Jim 
be70: 54 63 6c 0a 6d 6f 72 65 20 61 70 70 72 6f 61 63  Tcl.more approac
be80: 68 61 62 6c 65 2c 20 77 65 20 68 61 76 65 20 67  hable, we have g
be90: 69 76 65 6e 20 74 68 65 20 77 65 62 73 69 74 65  iven the website
bea0: 20 61 6e 64 20 75 70 64 61 74 65 64 20 74 68 65   and updated the
beb0: 20 63 6f 6e 74 65 6e 74 0a 74 6f 20 72 65 66 6c   content.to refl
bec0: 65 63 74 20 63 75 72 72 65 6e 74 20 72 65 61 6c  ect current real
bed0: 69 74 79 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a  ity.&lt;/p&gt;..
bee0: 26 6c 74 3b 70 26 67 74 3b 53 74 65 76 65 20 42  &lt;p&gt;Steve B
bef0: 65 6e 6e 65 74 74 20 28 26 6c 74 3b 61 20 68 72  ennett (&lt;a hr
bf00: 65 66 3d 22 26 61 6d 70 3b 23 31 30 39 3b 26 61  ef="&amp;#109;&a
bf10: 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b 23 31 30  mp;#097;&amp;#10
bf20: 35 3b 26 61 6d 70 3b 23 31 30 38 3b 26 61 6d 70  5;&amp;#108;&amp
bf30: 3b 23 31 31 36 3b 26 61 6d 70 3b 23 31 31 31 3b  ;#116;&amp;#111;
bf40: 3a 26 61 6d 70 3b 23 31 31 35 3b 26 61 6d 70 3b  :&amp;#115;&amp;
bf50: 23 31 31 36 3b 26 61 6d 70 3b 23 31 30 31 3b 26  #116;&amp;#101;&
bf60: 61 6d 70 3b 23 31 31 38 3b 26 61 6d 70 3b 23 31  amp;#118;&amp;#1
bf70: 30 31 3b 26 61 6d 70 3b 23 30 39 38 3b 26 61 6d  01;&amp;#098;&am
bf80: 70 3b 23 30 36 34 3b 26 61 6d 70 3b 23 31 31 39  p;#064;&amp;#119
bf90: 3b 26 61 6d 70 3b 23 31 31 31 3b 26 61 6d 70 3b  ;&amp;#111;&amp;
bfa0: 23 31 31 34 3b 26 61 6d 70 3b 23 31 30 37 3b 26  #114;&amp;#107;&
bfb0: 61 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23 30  amp;#119;&amp;#0
bfc0: 39 37 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d  97;&amp;#114;&am
bfd0: 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 30 34 36  p;#101;&amp;#046
bfe0: 3b 26 61 6d 70 3b 23 31 31 30 3b 26 61 6d 70 3b  ;&amp;#110;&amp;
bff0: 23 31 30 31 3b 26 61 6d 70 3b 23 31 31 36 3b 26  #101;&amp;#116;&
c000: 61 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23 30  amp;#046;&amp;#0
c010: 39 37 3b 26 61 6d 70 3b 23 31 31 37 3b 22 26 67  97;&amp;#117;"&g
c020: 74 3b 26 61 6d 70 3b 23 31 31 35 3b 26 61 6d 70  t;&amp;#115;&amp
c030: 3b 23 31 31 36 3b 26 61 6d 70 3b 23 31 30 31 3b  ;#116;&amp;#101;
c040: 26 61 6d 70 3b 23 31 31 38 3b 26 61 6d 70 3b 23  &amp;#118;&amp;#
c050: 31 30 31 3b 26 61 6d 70 3b 23 30 39 38 3b 26 61  101;&amp;#098;&a
c060: 6d 70 3b 23 30 36 34 3b 26 61 6d 70 3b 23 31 31  mp;#064;&amp;#11
c070: 39 3b 26 61 6d 70 3b 23 31 31 31 3b 26 61 6d 70  9;&amp;#111;&amp
c080: 3b 23 31 31 34 3b 26 61 6d 70 3b 23 31 30 37 3b  ;#114;&amp;#107;
c090: 26 61 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23  &amp;#119;&amp;#
c0a0: 30 39 37 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61  097;&amp;#114;&a
c0b0: 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 30 34  mp;#101;&amp;#04
c0c0: 36 3b 26 61 6d 70 3b 23 31 31 30 3b 26 61 6d 70  6;&amp;#110;&amp
c0d0: 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31 31 36 3b  ;#101;&amp;#116;
c0e0: 26 61 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23  &amp;#046;&amp;#
c0f0: 30 39 37 3b 26 61 6d 70 3b 23 31 31 37 3b 26 6c  097;&amp;#117;&l
c100: 74 3b 2f 61 26 67 74 3b 29 26 6c 74 3b 2f 70 26  t;/a&gt;)&lt;/p&
c110: 67 74 3b 0a 3c 2f 63 6f 6e 74 65 6e 74 3e 0a 20  gt;.</content>. 
c120: 20 3c 2f 65 6e 74 72 79 3e 0a 20 20 3c 65 6e 74   </entry>.  <ent
c130: 72 79 3e 0a 20 20 20 20 3c 69 64 3e 74 61 67 3a  ry>.    <id>tag:
c140: 6a 69 6d 2e 62 65 72 6c 69 6f 73 2e 64 65 2c 32  jim.berlios.de,2
c150: 30 31 31 2d 30 34 2d 32 32 3a 2f 61 72 74 69 63  011-04-22:/artic
c160: 6c 65 73 2f 32 30 31 31 2d 30 34 2d 32 32 2f 3c  les/2011-04-22/<
c170: 2f 69 64 3e 0a 20 20 20 20 3c 74 69 74 6c 65 20  /id>.    <title 
c180: 74 79 70 65 3d 22 68 74 6d 6c 22 3e 52 6f 61 64  type="html">Road
c190: 6d 61 70 20 66 6f 72 20 4a 69 6d 20 54 63 6c 3c  map for Jim Tcl<
c1a0: 2f 74 69 74 6c 65 3e 0a 20 20 20 20 3c 70 75 62  /title>.    <pub
c1b0: 6c 69 73 68 65 64 3e 32 30 31 31 2d 30 34 2d 32  lished>2011-04-2
c1c0: 31 54 31 34 3a 30 30 3a 30 30 5a 3c 2f 70 75 62  1T14:00:00Z</pub
c1d0: 6c 69 73 68 65 64 3e 0a 20 20 20 20 3c 75 70 64  lished>.    <upd
c1e0: 61 74 65 64 3e 32 30 31 31 2d 30 34 2d 32 31 54  ated>2011-04-21T
c1f0: 31 34 3a 30 30 3a 30 30 5a 3c 2f 75 70 64 61 74  14:00:00Z</updat
c200: 65 64 3e 0a 20 20 20 20 3c 6c 69 6e 6b 20 72 65  ed>.    <link re
c210: 6c 3d 22 61 6c 74 65 72 6e 61 74 65 22 20 68 72  l="alternate" hr
c220: 65 66 3d 22 68 74 74 70 3a 2f 2f 6a 69 6d 2e 62  ef="http://jim.b
c230: 65 72 6c 69 6f 73 2e 64 65 2f 61 72 74 69 63 6c  erlios.de/articl
c240: 65 73 2f 32 30 31 31 2d 30 34 2d 32 32 2f 22 2f  es/2011-04-22/"/
c250: 3e 0a 20 20 20 20 3c 63 6f 6e 74 65 6e 74 20 74  >.    <content t
c260: 79 70 65 3d 22 68 74 6d 6c 22 3e 26 6c 74 3b 70  ype="html">&lt;p
c270: 26 67 74 3b 49 20 68 61 76 65 20 61 20 66 65 77  &gt;I have a few
c280: 20 74 68 69 6e 67 73 20 6f 6e 20 6d 79 20 6c 69   things on my li
c290: 73 74 20 74 68 61 74 20 49 20 77 6f 75 6c 64 20  st that I would 
c2a0: 6c 69 6b 65 20 74 6f 20 73 65 65 20 67 6f 20 69  like to see go i
c2b0: 6e 74 6f 20 74 68 65 0a 6e 65 78 74 20 72 65 6c  nto the.next rel
c2c0: 65 61 73 65 20 6f 66 20 4a 69 6d 20 54 63 6c 2e  ease of Jim Tcl.
c2d0: 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b  &lt;/p&gt;..&lt;
c2e0: 68 32 20 69 64 3d 22 62 6f 72 69 6e 67 2d 73 74  h2 id="boring-st
c2f0: 75 66 66 22 26 67 74 3b 42 6f 72 69 6e 67 20 53  uff"&gt;Boring S
c300: 74 75 66 66 26 6c 74 3b 2f 68 32 26 67 74 3b 0a  tuff&lt;/h2&gt;.
c310: 26 6c 74 3b 75 6c 26 67 74 3b 0a 20 20 26 6c 74  &lt;ul&gt;.  &lt
c320: 3b 6c 69 26 67 74 3b 42 75 67 20 66 69 78 65 73  ;li&gt;Bug fixes
c330: 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26 6c  &lt;/li&gt;.  &l
c340: 74 3b 6c 69 26 67 74 3b 50 65 72 66 6f 72 6d 61  t;li&gt;Performa
c350: 6e 63 65 20 69 6d 70 72 6f 76 65 6d 65 6e 74 73  nce improvements
c360: 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26 6c  &lt;/li&gt;.  &l
c370: 74 3b 6c 69 26 67 74 3b 53 69 7a 65 20 72 65 64  t;li&gt;Size red
c380: 75 63 74 69 6f 6e 26 6c 74 3b 2f 6c 69 26 67 74  uction&lt;/li&gt
c390: 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74 3b 43 6c  ;.  &lt;li&gt;Cl
c3a0: 65 61 6e 20 75 70 20 64 6c 6f 70 65 6e 28 29 20  ean up dlopen() 
c3b0: 68 61 6e 64 6c 65 73 20 6f 6e 20 69 6e 74 65 72  handles on inter
c3c0: 70 72 65 74 65 72 20 64 65 6c 65 74 69 6f 6e 26  preter deletion&
c3d0: 6c 74 3b 2f 6c 69 26 67 74 3b 0a 26 6c 74 3b 2f  lt;/li&gt;.&lt;/
c3e0: 75 6c 26 67 74 3b 0a 0a 26 6c 74 3b 68 32 20 69  ul&gt;..&lt;h2 i
c3f0: 64 3d 22 74 63 6c 2d 38 78 2d 66 65 61 74 75 72  d="tcl-8x-featur
c400: 65 73 22 26 67 74 3b 54 63 6c 20 38 2e 78 20 46  es"&gt;Tcl 8.x F
c410: 65 61 74 75 72 65 73 26 6c 74 3b 2f 68 32 26 67  eatures&lt;/h2&g
c420: 74 3b 0a 26 6c 74 3b 75 6c 26 67 74 3b 0a 20 20  t;.&lt;ul&gt;.  
c430: 26 6c 74 3b 6c 69 26 67 74 3b 41 64 64 20 73 75  &lt;li&gt;Add su
c440: 70 70 6f 72 74 20 66 6f 72 20 74 68 65 20 5b 62  pport for the [b
c450: 69 6e 61 72 79 5d 20 63 6f 6d 6d 61 6e 64 26 6c  inary] command&l
c460: 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26 6c 74 3b  t;/li&gt;.  &lt;
c470: 6c 69 26 67 74 3b 53 75 70 70 6f 72 74 20 66 6f  li&gt;Support fo
c480: 72 20 6e 6f 6e 2d 67 72 65 65 64 79 20 71 75 61  r non-greedy qua
c490: 6e 74 69 66 69 65 72 73 20 69 6e 20 5b 72 65 67  ntifiers in [reg
c4a0: 65 78 70 5d 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a  exp]&lt;/li&gt;.
c4b0: 26 6c 74 3b 2f 75 6c 26 67 74 3b 0a 0a 26 6c 74  &lt;/ul&gt;..&lt
c4c0: 3b 68 32 20 69 64 3d 22 74 63 6c 78 2d 66 65 61  ;h2 id="tclx-fea
c4d0: 74 75 72 65 73 22 26 67 74 3b 54 63 6c 58 20 46  tures"&gt;TclX F
c4e0: 65 61 74 75 72 65 73 26 6c 74 3b 2f 68 32 26 67  eatures&lt;/h2&g
c4f0: 74 3b 0a 26 6c 74 3b 75 6c 26 67 74 3b 0a 20 20  t;.&lt;ul&gt;.  
c500: 26 6c 74 3b 6c 69 26 67 74 3b 41 64 64 20 74 68  &lt;li&gt;Add th
c510: 65 20 5b 6c 6f 6f 70 5d 20 63 6f 6d 6d 61 6e 64  e [loop] command
c520: 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 26 6c 74 3b  &lt;/li&gt;.&lt;
c530: 2f 75 6c 26 67 74 3b 0a 0a 26 6c 74 3b 68 32 20  /ul&gt;..&lt;h2 
c540: 69 64 3d 22 74 63 6c 2d 39 2d 70 72 6f 70 6f 73  id="tcl-9-propos
c550: 65 64 2d 66 65 61 74 75 72 65 73 22 26 67 74 3b  ed-features"&gt;
c560: 54 63 6c 20 39 20 28 50 72 6f 70 6f 73 65 64 29  Tcl 9 (Proposed)
c570: 20 46 65 61 74 75 72 65 73 26 6c 74 3b 2f 68 32   Features&lt;/h2
c580: 26 67 74 3b 0a 26 6c 74 3b 75 6c 26 67 74 3b 0a  &gt;.&lt;ul&gt;.
c590: 20 20 26 6c 74 3b 6c 69 26 67 74 3b 5b 65 78 70    &lt;li&gt;[exp
c5a0: 72 5d 20 73 68 6f 72 74 68 61 6e 64 20 73 79 6e  r] shorthand syn
c5b0: 74 61 78 3a 20 24 28 26 61 6d 70 3b 68 65 6c 6c  tax: $(&amp;hell
c5c0: 69 70 3b 29 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a  ip;)&lt;/li&gt;.
c5d0: 20 20 26 6c 74 3b 6c 69 26 67 74 3b 41 75 74 6f    &lt;li&gt;Auto
c5e0: 6d 61 74 69 63 20 75 70 76 61 72 73 20 69 6e 20  matic upvars in 
c5f0: 70 72 6f 67 20 61 72 67 73 3a 20 26 61 6d 70 3b  prog args: &amp;
c600: 61 6d 70 3b 76 61 72 6e 61 6d 65 26 6c 74 3b 2f  amp;varname&lt;/
c610: 6c 69 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26  li&gt;.  &lt;li&
c620: 67 74 3b 41 6c 6c 6f 77 20 70 72 6f 63 20 26 61  gt;Allow proc &a
c630: 6d 70 3b 6c 73 71 75 6f 3b 61 72 67 73 26 61 6d  mp;lsquo;args&am
c640: 70 3b 72 73 71 75 6f 3b 20 74 6f 20 62 65 20 72  p;rsquo; to be r
c650: 65 6e 61 6d 65 64 26 6c 74 3b 2f 6c 69 26 67 74  enamed&lt;/li&gt
c660: 3b 0a 26 6c 74 3b 2f 75 6c 26 67 74 3b 0a 0a 26  ;.&lt;/ul&gt;..&
c670: 6c 74 3b 68 32 20 69 64 3d 22 62 75 69 6c 64 2d  lt;h2 id="build-
c680: 73 79 73 74 65 6d 22 26 67 74 3b 42 75 69 6c 64  system"&gt;Build
c690: 20 53 79 73 74 65 6d 26 6c 74 3b 2f 68 32 26 67   System&lt;/h2&g
c6a0: 74 3b 0a 26 6c 74 3b 75 6c 26 67 74 3b 0a 20 20  t;.&lt;ul&gt;.  
c6b0: 26 6c 74 3b 6c 69 26 67 74 3b 52 65 70 6c 61 63  &lt;li&gt;Replac
c6c0: 65 20 61 75 74 6f 63 6f 6e 66 20 77 69 74 68 20  e autoconf with 
c6d0: 54 63 6c 2d 62 61 73 65 64 20 61 75 74 6f 73 65  Tcl-based autose
c6e0: 74 75 70 20 28 26 6c 74 3b 61 20 68 72 65 66 3d  tup (&lt;a href=
c6f0: 22 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e  "https://github.
c700: 63 6f 6d 2f 6d 73 74 65 76 65 62 2f 61 75 74 6f  com/msteveb/auto
c710: 73 65 74 75 70 22 26 67 74 3b 68 74 74 70 73 3a  setup"&gt;https:
c720: 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 6d 73 74  //github.com/mst
c730: 65 76 65 62 2f 61 75 74 6f 73 65 74 75 70 26 6c  eveb/autosetup&l
c740: 74 3b 2f 61 26 67 74 3b 29 26 6c 74 3b 2f 6c 69  t;/a&gt;)&lt;/li
c750: 26 67 74 3b 0a 26 6c 74 3b 2f 75 6c 26 67 74 3b  &gt;.&lt;/ul&gt;
c760: 0a 0a 26 6c 74 3b 68 32 20 69 64 3d 22 6f 74 68  ..&lt;h2 id="oth
c770: 65 72 2d 65 6e 68 61 6e 63 65 6d 65 6e 74 73 22  er-enhancements"
c780: 26 67 74 3b 4f 74 68 65 72 20 45 6e 68 61 6e 63  &gt;Other Enhanc
c790: 65 6d 65 6e 74 73 26 6c 74 3b 2f 68 32 26 67 74  ements&lt;/h2&gt
c7a0: 3b 0a 26 6c 74 3b 75 6c 26 67 74 3b 0a 20 20 26  ;.&lt;ul&gt;.  &
c7b0: 6c 74 3b 6c 69 26 67 74 3b 41 62 69 6c 69 74 79  lt;li&gt;Ability
c7c0: 20 74 6f 20 26 61 6d 70 3b 6c 64 71 75 6f 3b 70   to &amp;ldquo;p
c7d0: 75 73 68 26 61 6d 70 3b 72 64 71 75 6f 3b 20 61  ush&amp;rdquo; a
c7e0: 20 70 72 6f 63 20 6f 76 65 72 20 74 68 65 20 74   proc over the t
c7f0: 6f 70 20 6f 66 20 61 6e 20 65 78 69 73 74 69 6e  op of an existin
c800: 67 20 70 72 6f 63 20 74 6f 20 65 61 73 69 6c 79  g proc to easily
c810: 20 63 72 65 61 74 65 20 61 0a 77 72 61 70 70 65   create a.wrappe
c820: 72 20 70 72 6f 63 2c 20 69 6e 63 6c 75 64 69 6e  r proc, includin
c830: 67 20 74 68 65 20 61 62 69 6c 69 74 79 20 74 6f  g the ability to
c840: 20 26 61 6d 70 3b 6c 64 71 75 6f 3b 75 70 63 61   &amp;ldquo;upca
c850: 6c 6c 26 61 6d 70 3b 72 64 71 75 6f 3b 20 74 68  ll&amp;rdquo; th
c860: 65 20 6f 72 69 67 69 6e 61 6c 20 70 72 6f 63 2e  e original proc.
c870: 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 26 6c 74 3b  &lt;/li&gt;.&lt;
c880: 2f 75 6c 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67  /ul&gt;..&lt;p&g
c890: 74 3b 53 74 65 76 65 20 42 65 6e 6e 65 74 74 20  t;Steve Bennett 
c8a0: 28 26 6c 74 3b 61 20 68 72 65 66 3d 22 26 61 6d  (&lt;a href="&am
c8b0: 70 3b 23 31 30 39 3b 26 61 6d 70 3b 23 30 39 37  p;#109;&amp;#097
c8c0: 3b 26 61 6d 70 3b 23 31 30 35 3b 26 61 6d 70 3b  ;&amp;#105;&amp;
c8d0: 23 31 30 38 3b 26 61 6d 70 3b 23 31 31 36 3b 26  #108;&amp;#116;&
c8e0: 61 6d 70 3b 23 31 31 31 3b 3a 26 61 6d 70 3b 23  amp;#111;:&amp;#
c8f0: 31 31 35 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61  115;&amp;#116;&a
c900: 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31 31  mp;#101;&amp;#11
c910: 38 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70  8;&amp;#101;&amp
c920: 3b 23 30 39 38 3b 26 61 6d 70 3b 23 30 36 34 3b  ;#098;&amp;#064;
c930: 26 61 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23  &amp;#119;&amp;#
c940: 31 31 31 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61  111;&amp;#114;&a
c950: 6d 70 3b 23 31 30 37 3b 26 61 6d 70 3b 23 31 31  mp;#107;&amp;#11
c960: 39 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70  9;&amp;#097;&amp
c970: 3b 23 31 31 34 3b 26 61 6d 70 3b 23 31 30 31 3b  ;#114;&amp;#101;
c980: 26 61 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23  &amp;#046;&amp;#
c990: 31 31 30 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61  110;&amp;#101;&a
c9a0: 6d 70 3b 23 31 31 36 3b 26 61 6d 70 3b 23 30 34  mp;#116;&amp;#04
c9b0: 36 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70  6;&amp;#097;&amp
c9c0: 3b 23 31 31 37 3b 22 26 67 74 3b 26 61 6d 70 3b  ;#117;"&gt;&amp;
c9d0: 23 31 31 35 3b 26 61 6d 70 3b 23 31 31 36 3b 26  #115;&amp;#116;&
c9e0: 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31  amp;#101;&amp;#1
c9f0: 31 38 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d  18;&amp;#101;&am
ca00: 70 3b 23 30 39 38 3b 26 61 6d 70 3b 23 30 36 34  p;#098;&amp;#064
ca10: 3b 26 61 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b  ;&amp;#119;&amp;
ca20: 23 31 31 31 3b 26 61 6d 70 3b 23 31 31 34 3b 26  #111;&amp;#114;&
ca30: 61 6d 70 3b 23 31 30 37 3b 26 61 6d 70 3b 23 31  amp;#107;&amp;#1
ca40: 31 39 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d  19;&amp;#097;&am
ca50: 70 3b 23 31 31 34 3b 26 61 6d 70 3b 23 31 30 31  p;#114;&amp;#101
ca60: 3b 26 61 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b  ;&amp;#046;&amp;
ca70: 23 31 31 30 3b 26 61 6d 70 3b 23 31 30 31 3b 26  #110;&amp;#101;&
ca80: 61 6d 70 3b 23 31 31 36 3b 26 61 6d 70 3b 23 30  amp;#116;&amp;#0
ca90: 34 36 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d  46;&amp;#097;&am
caa0: 70 3b 23 31 31 37 3b 26 6c 74 3b 2f 61 26 67 74  p;#117;&lt;/a&gt
cab0: 3b 29 26 6c 74 3b 2f 70 26 67 74 3b 0a 3c 2f 63  ;)&lt;/p&gt;.</c
cac0: 6f 6e 74 65 6e 74 3e 0a 20 20 3c 2f 65 6e 74 72  ontent>.  </entr
cad0: 79 3e 0a 20 20 3c 65 6e 74 72 79 3e 0a 20 20 20  y>.  <entry>.   
cae0: 20 3c 69 64 3e 74 61 67 3a 6a 69 6d 2e 62 65 72   <id>tag:jim.ber
caf0: 6c 69 6f 73 2e 64 65 2c 32 30 31 31 2d 30 34 2d  lios.de,2011-04-
cb00: 31 34 3a 2f 61 72 74 69 63 6c 65 73 2f 32 30 31  14:/articles/201
cb10: 31 2d 30 34 2d 31 34 2f 3c 2f 69 64 3e 0a 20 20  1-04-14/</id>.  
cb20: 20 20 3c 74 69 74 6c 65 20 74 79 70 65 3d 22 68    <title type="h
cb30: 74 6d 6c 22 3e 41 6e 6e 6f 75 6e 63 69 6e 67 20  tml">Announcing 
cb40: 4a 69 6d 20 54 63 6c 20 76 65 72 73 69 6f 6e 20  Jim Tcl version 
cb50: 30 2e 37 30 3c 2f 74 69 74 6c 65 3e 0a 20 20 20  0.70</title>.   
cb60: 20 3c 70 75 62 6c 69 73 68 65 64 3e 32 30 31 31   <published>2011
cb70: 2d 30 34 2d 31 33 54 31 34 3a 30 30 3a 30 30 5a  -04-13T14:00:00Z
cb80: 3c 2f 70 75 62 6c 69 73 68 65 64 3e 0a 20 20 20  </published>.   
cb90: 20 3c 75 70 64 61 74 65 64 3e 32 30 31 31 2d 30   <updated>2011-0
cba0: 34 2d 31 33 54 31 34 3a 30 30 3a 30 30 5a 3c 2f  4-13T14:00:00Z</
cbb0: 75 70 64 61 74 65 64 3e 0a 20 20 20 20 3c 6c 69  updated>.    <li
cbc0: 6e 6b 20 72 65 6c 3d 22 61 6c 74 65 72 6e 61 74  nk rel="alternat
cbd0: 65 22 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f  e" href="http://
cbe0: 6a 69 6d 2e 62 65 72 6c 69 6f 73 2e 64 65 2f 61  jim.berlios.de/a
cbf0: 72 74 69 63 6c 65 73 2f 32 30 31 31 2d 30 34 2d  rticles/2011-04-
cc00: 31 34 2f 22 2f 3e 0a 20 20 20 20 3c 63 6f 6e 74  14/"/>.    <cont
cc10: 65 6e 74 20 74 79 70 65 3d 22 68 74 6d 6c 22 3e  ent type="html">
cc20: 26 6c 74 3b 70 26 67 74 3b 4a 69 6d 20 54 63 6c  &lt;p&gt;Jim Tcl
cc30: 20 30 2e 37 30 20 68 61 73 20 62 65 65 6e 20 72   0.70 has been r
cc40: 65 6c 65 61 73 65 64 20 61 6e 64 20 69 73 20 61  eleased and is a
cc50: 76 61 69 6c 61 62 6c 65 20 66 72 6f 6d 3a 20 26  vailable from: &
cc60: 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70  lt;/p&gt;..&lt;p
cc70: 26 67 74 3b 26 6c 74 3b 61 20 68 72 65 66 3d 22  &gt;&lt;a href="
cc80: 68 74 74 70 3a 2f 2f 72 65 70 6f 2e 6f 72 2e 63  http://repo.or.c
cc90: 7a 2f 77 2f 6a 69 6d 74 63 6c 2e 67 69 74 22 26  z/w/jimtcl.git"&
cca0: 67 74 3b 68 74 74 70 3a 2f 2f 72 65 70 6f 2e 6f  gt;http://repo.o
ccb0: 72 2e 63 7a 2f 77 2f 6a 69 6d 74 63 6c 2e 67 69  r.cz/w/jimtcl.gi
ccc0: 74 26 6c 74 3b 2f 61 26 67 74 3b 0a 6f 72 20 26  t&lt;/a&gt;.or &
ccd0: 6c 74 3b 61 20 68 72 65 66 3d 22 68 74 74 70 73  lt;a href="https
cce0: 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 6d 73  ://github.com/ms
ccf0: 74 65 76 65 62 2f 6a 69 6d 74 63 6c 22 26 67 74  teveb/jimtcl"&gt
cd00: 3b 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e  ;https://github.
cd10: 63 6f 6d 2f 6d 73 74 65 76 65 62 2f 6a 69 6d 74  com/msteveb/jimt
cd20: 63 6c 26 6c 74 3b 2f 61 26 67 74 3b 26 6c 74 3b  cl&lt;/a&gt;&lt;
cd30: 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 68 32 20 69  /p&gt;..&lt;h2 i
cd40: 64 3d 22 63 68 61 6e 67 65 73 2d 73 69 6e 63 65  d="changes-since
cd50: 2d 76 65 72 73 69 6f 6e 2d 30 36 33 22 26 67 74  -version-063"&gt
cd60: 3b 43 48 41 4e 47 45 53 20 53 49 4e 43 45 20 56  ;CHANGES SINCE V
cd70: 45 52 53 49 4f 4e 20 30 2e 36 33 26 6c 74 3b 2f  ERSION 0.63&lt;/
cd80: 68 32 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74  h2&gt;..&lt;p&gt
cd90: 3b 54 68 69 73 20 69 73 20 61 20 6d 61 6a 6f 72  ;This is a major
cda0: 20 75 70 64 61 74 65 20 77 68 69 63 68 20 69 6e   update which in
cdb0: 63 6f 72 70 6f 72 61 74 65 73 20 6d 61 6e 79 20  corporates many 
cdc0: 62 75 67 20 66 69 78 65 73 20 61 6e 64 0a 73 65  bug fixes and.se
cdd0: 76 65 72 61 6c 20 6e 65 77 20 66 65 61 74 75 72  veral new featur
cde0: 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 3a 26 6c  es, including:&l
cdf0: 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 75 6c  t;/p&gt;..&lt;ul
ce00: 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74  &gt;.  &lt;li&gt
ce10: 3b 4f 70 74 69 6f 6e 61 6c 20 55 54 46 2d 38 20  ;Optional UTF-8 
ce20: 73 75 70 70 6f 72 74 26 6c 74 3b 2f 6c 69 26 67  support&lt;/li&g
ce30: 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74 3b 4f  t;.  &lt;li&gt;O
ce40: 70 74 69 6f 6e 61 6c 20 62 75 69 6c 74 2d 69 6e  ptional built-in
ce50: 20 72 65 67 65 78 70 20 65 6e 67 69 6e 65 73 20   regexp engines 
ce60: 66 6f 72 20 62 65 74 74 65 72 20 54 63 6c 20 63  for better Tcl c
ce70: 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 61 6e 64  ompatibility and
ce80: 20 55 54 46 2d 38 20 73 75 70 70 6f 72 74 26 6c   UTF-8 support&l
ce90: 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26 6c 74 3b  t;/li&gt;.  &lt;
cea0: 6c 69 26 67 74 3b 43 6f 6d 6d 61 6e 64 20 6c 69  li&gt;Command li
ceb0: 6e 65 20 65 64 69 74 69 6e 67 20 77 69 74 68 20  ne editing with 
cec0: 6c 69 6e 65 6e 6f 69 73 65 26 6c 74 3b 2f 6c 69  linenoise&lt;/li
ced0: 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74  &gt;.  &lt;li&gt
cee0: 3b 50 75 72 65 2d 54 63 6c 20 4f 4f 20 65 78 74  ;Pure-Tcl OO ext
cef0: 65 6e 73 69 6f 6e 20 26 6c 74 3b 2f 6c 69 26 67  ension &lt;/li&g
cf00: 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74 3b 65  t;.  &lt;li&gt;e
cf10: 78 65 63 20 75 73 65 73 20 6f 6e 6c 79 20 76 66  xec uses only vf
cf20: 6f 72 6b 28 29 20 66 6f 72 20 66 75 6c 6c 20 66  ork() for full f
cf30: 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 6f 6e 20  unctionality on 
cf40: 6e 6f 2d 6d 6d 75 20 75 43 6c 69 6e 75 78 26 6c  no-mmu uClinux&l
cf50: 74 3b 2f 6c 69 26 67 74 3b 0a 26 6c 74 3b 2f 75  t;/li&gt;.&lt;/u
cf60: 6c 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b  l&gt;..&lt;p&gt;
cf70: 53 74 65 76 65 20 42 65 6e 6e 65 74 74 20 28 26  Steve Bennett (&
cf80: 6c 74 3b 61 20 68 72 65 66 3d 22 26 61 6d 70 3b  lt;a href="&amp;
cf90: 23 31 30 39 3b 26 61 6d 70 3b 23 30 39 37 3b 26  #109;&amp;#097;&
cfa0: 61 6d 70 3b 23 31 30 35 3b 26 61 6d 70 3b 23 31  amp;#105;&amp;#1
cfb0: 30 38 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d  08;&amp;#116;&am
cfc0: 70 3b 23 31 31 31 3b 3a 26 61 6d 70 3b 23 31 31  p;#111;:&amp;#11
cfd0: 35 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d 70  5;&amp;#116;&amp
cfe0: 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31 31 38 3b  ;#101;&amp;#118;
cff0: 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23  &amp;#101;&amp;#
d000: 30 39 38 3b 26 61 6d 70 3b 23 30 36 34 3b 26 61  098;&amp;#064;&a
d010: 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23 31 31  mp;#119;&amp;#11
d020: 31 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d 70  1;&amp;#114;&amp
d030: 3b 23 31 30 37 3b 26 61 6d 70 3b 23 31 31 39 3b  ;#107;&amp;#119;
d040: 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b 23  &amp;#097;&amp;#
d050: 31 31 34 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61  114;&amp;#101;&a
d060: 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23 31 31  mp;#046;&amp;#11
d070: 30 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70  0;&amp;#101;&amp
d080: 3b 23 31 31 36 3b 26 61 6d 70 3b 23 30 34 36 3b  ;#116;&amp;#046;
d090: 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b 23  &amp;#097;&amp;#
d0a0: 31 31 37 3b 22 26 67 74 3b 26 61 6d 70 3b 23 31  117;"&gt;&amp;#1
d0b0: 31 35 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d  15;&amp;#116;&am
d0c0: 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31 31 38  p;#101;&amp;#118
d0d0: 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b  ;&amp;#101;&amp;
d0e0: 23 30 39 38 3b 26 61 6d 70 3b 23 30 36 34 3b 26  #098;&amp;#064;&
d0f0: 61 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23 31  amp;#119;&amp;#1
d100: 31 31 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d  11;&amp;#114;&am
d110: 70 3b 23 31 30 37 3b 26 61 6d 70 3b 23 31 31 39  p;#107;&amp;#119
d120: 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b  ;&amp;#097;&amp;
d130: 23 31 31 34 3b 26 61 6d 70 3b 23 31 30 31 3b 26  #114;&amp;#101;&
d140: 61 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23 31  amp;#046;&amp;#1
d150: 31 30 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d  10;&amp;#101;&am
d160: 70 3b 23 31 31 36 3b 26 61 6d 70 3b 23 30 34 36  p;#116;&amp;#046
d170: 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b  ;&amp;#097;&amp;
d180: 23 31 31 37 3b 26 6c 74 3b 2f 61 26 67 74 3b 29  #117;&lt;/a&gt;)
d190: 26 6c 74 3b 2f 70 26 67 74 3b 0a 3c 2f 63 6f 6e  &lt;/p&gt;.</con
d1a0: 74 65 6e 74 3e 0a 20 20 3c 2f 65 6e 74 72 79 3e  tent>.  </entry>
d1b0: 0a 20 20 3c 65 6e 74 72 79 3e 0a 20 20 20 20 3c  .  <entry>.    <
d1c0: 69 64 3e 74 61 67 3a 6a 69 6d 2e 62 65 72 6c 69  id>tag:jim.berli
d1d0: 6f 73 2e 64 65 2c 32 30 31 30 2d 31 31 2d 32 34  os.de,2010-11-24
d1e0: 3a 2f 61 72 74 69 63 6c 65 73 2f 32 30 31 30 2d  :/articles/2010-
d1f0: 31 31 2d 32 34 2f 3c 2f 69 64 3e 0a 20 20 20 20  11-24/</id>.    
d200: 3c 74 69 74 6c 65 20 74 79 70 65 3d 22 68 74 6d  <title type="htm
d210: 6c 22 3e 41 20 48 69 73 74 6f 72 79 20 6f 66 20  l">A History of 
d220: 4a 69 6d 3c 2f 74 69 74 6c 65 3e 0a 20 20 20 20  Jim</title>.    
d230: 3c 70 75 62 6c 69 73 68 65 64 3e 32 30 31 30 2d  <published>2010-
d240: 31 31 2d 32 33 54 31 34 3a 30 30 3a 30 30 5a 3c  11-23T14:00:00Z<
d250: 2f 70 75 62 6c 69 73 68 65 64 3e 0a 20 20 20 20  /published>.    
d260: 3c 75 70 64 61 74 65 64 3e 32 30 31 30 2d 31 31  <updated>2010-11
d270: 2d 32 33 54 31 34 3a 30 30 3a 30 30 5a 3c 2f 75  -23T14:00:00Z</u
d280: 70 64 61 74 65 64 3e 0a 20 20 20 20 3c 6c 69 6e  pdated>.    <lin
d290: 6b 20 72 65 6c 3d 22 61 6c 74 65 72 6e 61 74 65  k rel="alternate
d2a0: 22 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 6a  " href="http://j
d2b0: 69 6d 2e 62 65 72 6c 69 6f 73 2e 64 65 2f 61 72  im.berlios.de/ar
d2c0: 74 69 63 6c 65 73 2f 32 30 31 30 2d 31 31 2d 32  ticles/2010-11-2
d2d0: 34 2f 22 2f 3e 0a 20 20 20 20 3c 63 6f 6e 74 65  4/"/>.    <conte
d2e0: 6e 74 20 74 79 70 65 3d 22 68 74 6d 6c 22 3e 26  nt type="html">&
d2f0: 6c 74 3b 70 26 67 74 3b 26 6c 74 3b 61 20 68 72  lt;p&gt;&lt;a hr
d300: 65 66 3d 22 2f 69 6d 67 2f 6a 69 6d 2d 68 69 73  ef="/img/jim-his
d310: 74 6f 72 79 2d 63 68 61 72 74 2e 70 64 66 22 26  tory-chart.pdf"&
d320: 67 74 3b 26 6c 74 3b 69 6d 67 20 73 72 63 3d 22  gt;&lt;img src="
d330: 2f 69 6d 67 2f 6a 69 6d 2d 68 69 73 74 6f 72 79  /img/jim-history
d340: 2d 74 68 75 6d 62 2e 70 6e 67 22 20 2f 26 67 74  -thumb.png" /&gt
d350: 3b 26 6c 74 3b 2f 61 26 67 74 3b 26 6c 74 3b 2f  ;&lt;/a&gt;&lt;/
d360: 70 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b  p&gt;..&lt;p&gt;
d370: 49 20 69 6e 74 65 6e 64 20 74 6f 20 61 6e 61 6c  I intend to anal
d380: 79 73 65 20 74 68 65 20 68 69 73 74 6f 72 79 20  yse the history 
d390: 6f 66 20 4a 69 6d 20 69 6e 20 6d 6f 72 65 20 64  of Jim in more d
d3a0: 65 74 61 69 6c 20 61 74 20 73 6f 6d 65 20 70 6f  etail at some po
d3b0: 69 6e 74 2e 0a 4e 6f 6e 65 74 68 65 6c 65 73 73  int..Nonetheless
d3c0: 2c 20 74 68 69 73 20 69 73 20 69 6e 74 65 72 65  , this is intere
d3d0: 73 74 69 6e 67 2e 20 46 6f 72 20 74 68 69 73 20  sting. For this 
d3e0: 65 78 65 72 63 69 73 65 20 49 20 61 74 74 65 6d  exercise I attem
d3f0: 70 74 65 64 20 74 6f 0a 62 75 69 6c 64 20 61 6e  pted to.build an
d400: 64 20 72 75 6e 20 62 65 6e 63 68 6d 61 72 6b 73  d run benchmarks
d410: 20 66 6f 72 20 65 76 65 72 79 2c 20 73 69 6e 67   for every, sing
d420: 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 4a 69  le version of Ji
d430: 6d 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c  m.&lt;/p&gt;..&l
d440: 74 3b 70 26 67 74 3b 26 6c 74 3b 73 74 72 6f 6e  t;p&gt;&lt;stron
d450: 67 26 67 74 3b 43 6c 69 63 6b 20 6f 6e 20 74 68  g&gt;Click on th
d460: 65 20 69 6d 61 67 65 20 66 6f 72 20 61 20 6c 61  e image for a la
d470: 72 67 65 72 20 76 65 72 73 69 6f 6e 2e 26 6c 74  rger version.&lt
d480: 3b 2f 73 74 72 6f 6e 67 26 67 74 3b 26 6c 74 3b  ;/strong&gt;&lt;
d490: 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74  /p&gt;..&lt;p&gt
d4a0: 3b 53 74 65 76 65 20 42 65 6e 6e 65 74 74 20 28  ;Steve Bennett (
d4b0: 26 6c 74 3b 61 20 68 72 65 66 3d 22 26 61 6d 70  &lt;a href="&amp
d4c0: 3b 23 31 30 39 3b 26 61 6d 70 3b 23 30 39 37 3b  ;#109;&amp;#097;
d4d0: 26 61 6d 70 3b 23 31 30 35 3b 26 61 6d 70 3b 23  &amp;#105;&amp;#
d4e0: 31 30 38 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61  108;&amp;#116;&a
d4f0: 6d 70 3b 23 31 31 31 3b 3a 26 61 6d 70 3b 23 31  mp;#111;:&amp;#1
d500: 31 35 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d  15;&amp;#116;&am
d510: 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31 31 38  p;#101;&amp;#118
d520: 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b  ;&amp;#101;&amp;
d530: 23 30 39 38 3b 26 61 6d 70 3b 23 30 36 34 3b 26  #098;&amp;#064;&
d540: 61 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23 31  amp;#119;&amp;#1
d550: 31 31 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d  11;&amp;#114;&am
d560: 70 3b 23 31 30 37 3b 26 61 6d 70 3b 23 31 31 39  p;#107;&amp;#119
d570: 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b  ;&amp;#097;&amp;
d580: 23 31 31 34 3b 26 61 6d 70 3b 23 31 30 31 3b 26  #114;&amp;#101;&
d590: 61 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23 31  amp;#046;&amp;#1
d5a0: 31 30 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d  10;&amp;#101;&am
d5b0: 70 3b 23 31 31 36 3b 26 61 6d 70 3b 23 30 34 36  p;#116;&amp;#046
d5c0: 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b  ;&amp;#097;&amp;
d5d0: 23 31 31 37 3b 22 26 67 74 3b 26 61 6d 70 3b 23  #117;"&gt;&amp;#
d5e0: 31 31 35 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61  115;&amp;#116;&a
d5f0: 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31 31  mp;#101;&amp;#11
d600: 38 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70  8;&amp;#101;&amp
d610: 3b 23 30 39 38 3b 26 61 6d 70 3b 23 30 36 34 3b  ;#098;&amp;#064;
d620: 26 61 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23  &amp;#119;&amp;#
d630: 31 31 31 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61  111;&amp;#114;&a
d640: 6d 70 3b 23 31 30 37 3b 26 61 6d 70 3b 23 31 31  mp;#107;&amp;#11
d650: 39 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70  9;&amp;#097;&amp
d660: 3b 23 31 31 34 3b 26 61 6d 70 3b 23 31 30 31 3b  ;#114;&amp;#101;
d670: 26 61 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23  &amp;#046;&amp;#
d680: 31 31 30 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61  110;&amp;#101;&a
d690: 6d 70 3b 23 31 31 36 3b 26 61 6d 70 3b 23 30 34  mp;#116;&amp;#04
d6a0: 36 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70  6;&amp;#097;&amp
d6b0: 3b 23 31 31 37 3b 26 6c 74 3b 2f 61 26 67 74 3b  ;#117;&lt;/a&gt;
d6c0: 29 26 6c 74 3b 2f 70 26 67 74 3b 0a 3c 2f 63 6f  )&lt;/p&gt;.</co
d6d0: 6e 74 65 6e 74 3e 0a 20 20 3c 2f 65 6e 74 72 79  ntent>.  </entry
d6e0: 3e 0a 20 20 3c 65 6e 74 72 79 3e 0a 20 20 20 20  >.  <entry>.    
d6f0: 3c 69 64 3e 74 61 67 3a 6a 69 6d 2e 62 65 72 6c  <id>tag:jim.berl
d700: 69 6f 73 2e 64 65 2c 32 30 31 30 2d 31 31 2d 31  ios.de,2010-11-1
d710: 35 3a 2f 61 72 74 69 63 6c 65 73 2f 32 30 31 30  5:/articles/2010
d720: 2d 31 31 2d 31 35 2f 3c 2f 69 64 3e 0a 20 20 20  -11-15/</id>.   
d730: 20 3c 74 69 74 6c 65 20 74 79 70 65 3d 22 68 74   <title type="ht
d740: 6d 6c 22 3e 49 50 76 36 20 53 75 70 70 6f 72 74  ml">IPv6 Support
d750: 3c 2f 74 69 74 6c 65 3e 0a 20 20 20 20 3c 70 75  </title>.    <pu
d760: 62 6c 69 73 68 65 64 3e 32 30 31 30 2d 31 31 2d  blished>2010-11-
d770: 31 34 54 31 34 3a 30 30 3a 30 30 5a 3c 2f 70 75  14T14:00:00Z</pu
d780: 62 6c 69 73 68 65 64 3e 0a 20 20 20 20 3c 75 70  blished>.    <up
d790: 64 61 74 65 64 3e 32 30 31 30 2d 31 31 2d 31 34  dated>2010-11-14
d7a0: 54 31 34 3a 30 30 3a 30 30 5a 3c 2f 75 70 64 61  T14:00:00Z</upda
d7b0: 74 65 64 3e 0a 20 20 20 20 3c 6c 69 6e 6b 20 72  ted>.    <link r
d7c0: 65 6c 3d 22 61 6c 74 65 72 6e 61 74 65 22 20 68  el="alternate" h
d7d0: 72 65 66 3d 22 68 74 74 70 3a 2f 2f 6a 69 6d 2e  ref="http://jim.
d7e0: 62 65 72 6c 69 6f 73 2e 64 65 2f 61 72 74 69 63  berlios.de/artic
d7f0: 6c 65 73 2f 32 30 31 30 2d 31 31 2d 31 35 2f 22  les/2010-11-15/"
d800: 2f 3e 0a 20 20 20 20 3c 63 6f 6e 74 65 6e 74 20  />.    <content 
d810: 74 79 70 65 3d 22 68 74 6d 6c 22 3e 26 6c 74 3b  type="html">&lt;
d820: 70 26 67 74 3b 4a 69 6d 20 54 63 6c 20 68 61 73  p&gt;Jim Tcl has
d830: 20 68 61 64 20 69 70 76 36 20 73 75 70 70 6f 72   had ipv6 suppor
d840: 74 20 65 76 65 72 20 73 69 6e 63 65 20 74 68 65  t ever since the
d850: 20 57 6f 72 6b 57 61 72 65 20 66 6f 72 6b 20 77   WorkWare fork w
d860: 61 73 20 6d 65 72 67 65 64 0a 62 61 63 6b 20 69  as merged.back i
d870: 6e 74 6f 20 6d 61 69 6e 6c 69 6e 65 2e 26 6c 74  nto mainline.&lt
d880: 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67  ;/p&gt;..&lt;p&g
d890: 74 3b 59 6f 75 20 63 61 6e 20 72 65 61 64 20 6d  t;You can read m
d8a0: 6f 72 65 20 61 62 6f 75 74 20 69 74 20 69 6e 20  ore about it in 
d8b0: 74 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  the documentatio
d8c0: 6e 20 61 74 3a 0a 26 6c 74 3b 61 20 68 72 65 66  n at:.&lt;a href
d8d0: 3d 22 68 74 74 70 3a 2f 2f 72 65 70 6f 2e 6f 72  ="http://repo.or
d8e0: 2e 63 7a 2f 77 2f 6a 69 6d 74 63 6c 2e 67 69 74  .cz/w/jimtcl.git
d8f0: 2f 62 6c 6f 62 5f 70 6c 61 69 6e 2f 6d 61 73 74  /blob_plain/mast
d900: 65 72 3a 2f 54 63 6c 5f 73 68 69 70 70 65 64 2e  er:/Tcl_shipped.
d910: 68 74 6d 6c 23 5f 73 6f 63 6b 65 74 22 26 67 74  html#_socket"&gt
d920: 3b 73 6f 63 6b 65 74 26 6c 74 3b 2f 61 26 67 74  ;socket&lt;/a&gt
d930: 3b 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74  ;&lt;/p&gt;..&lt
d940: 3b 70 26 67 74 3b 42 61 73 69 63 61 6c 6c 79 20  ;p&gt;Basically 
d950: 69 74 20 69 73 20 61 20 6d 61 74 74 65 72 20 6f  it is a matter o
d960: 66 20 73 70 65 63 69 66 79 69 6e 67 20 26 6c 74  f specifying &lt
d970: 3b 63 6f 64 65 26 67 74 3b 2d 69 70 76 36 26 6c  ;code&gt;-ipv6&l
d980: 74 3b 2f 63 6f 64 65 26 67 74 3b 20 77 68 65 6e  t;/code&gt; when
d990: 20 63 72 65 61 74 69 6e 67 20 74 68 65 0a 73 6f   creating the.so
d9a0: 63 6b 65 74 20 61 6e 64 20 67 69 76 69 6e 67 20  cket and giving 
d9b0: 61 6e 20 49 50 76 36 20 61 64 64 72 65 73 73 2e  an IPv6 address.
d9c0: 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 26 6c 74   For example:&lt
d9d0: 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70 72 65  ;/p&gt;..&lt;pre
d9e0: 20 63 6c 61 73 73 3d 22 73 68 5f 74 63 6c 22 26   class="sh_tcl"&
d9f0: 67 74 3b 0a 73 65 74 20 73 20 5b 73 6f 63 6b 65  gt;.set s [socke
da00: 74 20 2d 69 70 76 36 20 73 74 72 65 61 6d 2e 73  t -ipv6 stream.s
da10: 65 72 76 65 72 20 7b 5b 3a 3a 5d 3a 32 30 30 30  erver {[::]:2000
da20: 7d 5d 0a 26 6c 74 3b 2f 70 72 65 26 67 74 3b 0a  }].&lt;/pre&gt;.
da30: 0a 26 6c 74 3b 70 26 67 74 3b 4e 6f 74 65 20 74  .&lt;p&gt;Note t
da40: 68 61 74 20 49 50 76 36 20 61 64 64 72 65 73 73  hat IPv6 address
da50: 65 73 20 61 72 65 20 65 6e 63 6c 6f 73 65 64 20  es are enclosed 
da60: 69 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b 65  in square bracke
da70: 74 73 2e 20 54 68 69 73 20 69 73 0a 74 68 65 20  ts. This is.the 
da80: 73 61 6d 65 20 6e 6f 74 61 74 69 6f 6e 20 75 73  same notation us
da90: 65 64 20 66 6f 72 20 49 50 76 36 20 55 52 4c 73  ed for IPv6 URLs
daa0: 20 61 6e 64 20 6d 61 6b 65 73 20 69 74 20 65 61   and makes it ea
dab0: 73 79 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 61  sy to keep the.a
dac0: 64 64 72 65 73 73 3a 70 6f 72 74 20 73 79 6e 74  ddress:port synt
dad0: 61 78 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26  ax.&lt;/p&gt;..&
dae0: 6c 74 3b 70 26 67 74 3b 54 68 65 20 61 64 64 72  lt;p&gt;The addr
daf0: 65 73 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  ess returned by 
db00: 26 6c 74 3b 63 6f 64 65 26 67 74 3b 72 65 63 76  &lt;code&gt;recv
db10: 66 72 6f 6d 26 6c 74 3b 2f 63 6f 64 65 26 67 74  from&lt;/code&gt
db20: 3b 20 77 69 6c 6c 20 62 65 20 66 6f 72 6d 61 74  ; will be format
db30: 74 65 64 20 61 70 70 72 6f 70 72 69 61 74 65 6c  ted appropriatel
db40: 79 2c 20 73 6f 20 69 74 20 63 61 6e 20 62 65 20  y, so it can be 
db50: 75 73 65 64 20 64 69 72 65 63 74 6c 79 20 62 79  used directly by
db60: 20 26 6c 74 3b 63 6f 64 65 26 67 74 3b 73 65 6e   &lt;code&gt;sen
db70: 64 74 6f 26 6c 74 3b 2f 63 6f 64 65 26 67 74 3b  dto&lt;/code&gt;
db80: 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74  .&lt;/p&gt;..&lt
db90: 3b 70 26 67 74 3b 53 6f 6d 65 20 73 69 6d 70 6c  ;p&gt;Some simpl
dba0: 65 20 49 50 76 36 20 65 78 61 6d 70 6c 65 73 20  e IPv6 examples 
dbb0: 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69 6e 20  are included in 
dbc0: 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79 2e 20  the repository. 
dbd0: 46 6f 72 20 65 78 61 6d 70 6c 65 3a 20 26 6c 74  For example: &lt
dbe0: 3b 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f  ;a href="http://
dbf0: 72 65 70 6f 2e 6f 72 2e 63 7a 2f 77 2f 6a 69 6d  repo.or.cz/w/jim
dc00: 74 63 6c 2e 67 69 74 2f 62 6c 6f 62 5f 70 6c 61  tcl.git/blob_pla
dc10: 69 6e 2f 6d 61 73 74 65 72 3a 2f 65 78 61 6d 70  in/master:/examp
dc20: 6c 65 73 2f 75 64 70 36 2e 73 65 72 76 65 72 22  les/udp6.server"
dc30: 26 67 74 3b 75 64 70 36 2e 73 65 72 76 65 72 26  &gt;udp6.server&
dc40: 6c 74 3b 2f 61 26 67 74 3b 26 6c 74 3b 2f 70 26  lt;/a&gt;&lt;/p&
dc50: 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 4e 6f  gt;..&lt;p&gt;No
dc60: 74 65 20 74 68 61 74 20 6f 6e 20 61 6c 6c 20 68  te that on all h
dc70: 6f 73 74 73 20 49 20 68 61 76 65 20 74 72 69 65  osts I have trie
dc80: 64 2c 20 6c 69 73 74 65 6e 69 6e 67 20 6f 6e 20  d, listening on 
dc90: 61 6e 20 49 50 76 36 20 73 6f 63 6b 65 74 0a 77  an IPv6 socket.w
dca0: 69 6c 6c 20 61 6c 73 6f 20 6c 69 73 74 65 6e 20  ill also listen 
dcb0: 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  on the correspon
dcc0: 64 69 6e 67 20 49 50 76 34 20 73 6f 63 6b 65 74  ding IPv4 socket
dcd0: 2e 20 59 6f 75 20 63 61 6e 20 74 72 79 20 74 68  . You can try th
dce0: 69 73 0a 62 79 20 72 75 6e 6e 69 6e 67 20 75 64  is.by running ud
dcf0: 70 36 2e 73 65 72 76 65 72 20 61 6e 64 20 63 6f  p6.server and co
dd00: 6e 6e 65 63 74 69 6e 67 20 77 69 74 68 20 62 6f  nnecting with bo
dd10: 74 68 20 75 64 70 36 2e 63 6c 69 65 6e 74 20 61  th udp6.client a
dd20: 6e 64 0a 75 64 70 2e 63 6c 69 65 6e 74 26 6c 74  nd.udp.client&lt
dd30: 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67  ;/p&gt;..&lt;p&g
dd40: 74 3b 53 74 65 76 65 20 42 65 6e 6e 65 74 74 20  t;Steve Bennett 
dd50: 28 26 6c 74 3b 61 20 68 72 65 66 3d 22 26 61 6d  (&lt;a href="&am
dd60: 70 3b 23 31 30 39 3b 26 61 6d 70 3b 23 30 39 37  p;#109;&amp;#097
dd70: 3b 26 61 6d 70 3b 23 31 30 35 3b 26 61 6d 70 3b  ;&amp;#105;&amp;
dd80: 23 31 30 38 3b 26 61 6d 70 3b 23 31 31 36 3b 26  #108;&amp;#116;&
dd90: 61 6d 70 3b 23 31 31 31 3b 3a 26 61 6d 70 3b 23  amp;#111;:&amp;#
dda0: 31 31 35 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61  115;&amp;#116;&a
ddb0: 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31 31  mp;#101;&amp;#11
ddc0: 38 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70  8;&amp;#101;&amp
ddd0: 3b 23 30 39 38 3b 26 61 6d 70 3b 23 30 36 34 3b  ;#098;&amp;#064;
dde0: 26 61 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23  &amp;#119;&amp;#
ddf0: 31 31 31 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61  111;&amp;#114;&a
de00: 6d 70 3b 23 31 30 37 3b 26 61 6d 70 3b 23 31 31  mp;#107;&amp;#11
de10: 39 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70  9;&amp;#097;&amp
de20: 3b 23 31 31 34 3b 26 61 6d 70 3b 23 31 30 31 3b  ;#114;&amp;#101;
de30: 26 61 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23  &amp;#046;&amp;#
de40: 31 31 30 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61  110;&amp;#101;&a
de50: 6d 70 3b 23 31 31 36 3b 26 61 6d 70 3b 23 30 34  mp;#116;&amp;#04
de60: 36 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70  6;&amp;#097;&amp
de70: 3b 23 31 31 37 3b 22 26 67 74 3b 26 61 6d 70 3b  ;#117;"&gt;&amp;
de80: 23 31 31 35 3b 26 61 6d 70 3b 23 31 31 36 3b 26  #115;&amp;#116;&
de90: 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31  amp;#101;&amp;#1
dea0: 31 38 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d  18;&amp;#101;&am
deb0: 70 3b 23 30 39 38 3b 26 61 6d 70 3b 23 30 36 34  p;#098;&amp;#064
dec0: 3b 26 61 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b  ;&amp;#119;&amp;
ded0: 23 31 31 31 3b 26 61 6d 70 3b 23 31 31 34 3b 26  #111;&amp;#114;&
dee0: 61 6d 70 3b 23 31 30 37 3b 26 61 6d 70 3b 23 31  amp;#107;&amp;#1
def0: 31 39 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d  19;&amp;#097;&am
df00: 70 3b 23 31 31 34 3b 26 61 6d 70 3b 23 31 30 31  p;#114;&amp;#101
df10: 3b 26 61 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b  ;&amp;#046;&amp;
df20: 23 31 31 30 3b 26 61 6d 70 3b 23 31 30 31 3b 26  #110;&amp;#101;&
df30: 61 6d 70 3b 23 31 31 36 3b 26 61 6d 70 3b 23 30  amp;#116;&amp;#0
df40: 34 36 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d  46;&amp;#097;&am
df50: 70 3b 23 31 31 37 3b 26 6c 74 3b 2f 61 26 67 74  p;#117;&lt;/a&gt
df60: 3b 29 26 6c 74 3b 2f 70 26 67 74 3b 0a 3c 2f 63  ;)&lt;/p&gt;.</c
df70: 6f 6e 74 65 6e 74 3e 0a 20 20 3c 2f 65 6e 74 72  ontent>.  </entr
df80: 79 3e 0a 20 20 3c 65 6e 74 72 79 3e 0a 20 20 20  y>.  <entry>.   
df90: 20 3c 69 64 3e 74 61 67 3a 6a 69 6d 2e 62 65 72   <id>tag:jim.ber
dfa0: 6c 69 6f 73 2e 64 65 2c 32 30 31 30 2d 31 31 2d  lios.de,2010-11-
dfb0: 30 33 3a 2f 61 72 74 69 63 6c 65 73 2f 32 30 31  03:/articles/201
dfc0: 30 2d 31 31 2d 30 33 2f 3c 2f 69 64 3e 0a 20 20  0-11-03/</id>.  
dfd0: 20 20 3c 74 69 74 6c 65 20 74 79 70 65 3d 22 68    <title type="h
dfe0: 74 6d 6c 22 3e 65 78 70 72 20 73 68 6f 72 74 68  tml">expr shorth
dff0: 61 6e 64 20 73 79 6e 74 61 78 3c 2f 74 69 74 6c  and syntax</titl
e000: 65 3e 0a 20 20 20 20 3c 70 75 62 6c 69 73 68 65  e>.    <publishe
e010: 64 3e 32 30 31 30 2d 31 31 2d 30 32 54 31 34 3a  d>2010-11-02T14:
e020: 30 30 3a 30 30 5a 3c 2f 70 75 62 6c 69 73 68 65  00:00Z</publishe
e030: 64 3e 0a 20 20 20 20 3c 75 70 64 61 74 65 64 3e  d>.    <updated>
e040: 32 30 31 30 2d 31 31 2d 30 32 54 31 34 3a 30 30  2010-11-02T14:00
e050: 3a 30 30 5a 3c 2f 75 70 64 61 74 65 64 3e 0a 20  :00Z</updated>. 
e060: 20 20 20 3c 6c 69 6e 6b 20 72 65 6c 3d 22 61 6c     <link rel="al
e070: 74 65 72 6e 61 74 65 22 20 68 72 65 66 3d 22 68  ternate" href="h
e080: 74 74 70 3a 2f 2f 6a 69 6d 2e 62 65 72 6c 69 6f  ttp://jim.berlio
e090: 73 2e 64 65 2f 61 72 74 69 63 6c 65 73 2f 32 30  s.de/articles/20
e0a0: 31 30 2d 31 31 2d 30 33 2f 22 2f 3e 0a 20 20 20  10-11-03/"/>.   
e0b0: 20 3c 63 6f 6e 74 65 6e 74 20 74 79 70 65 3d 22   <content type="
e0c0: 68 74 6d 6c 22 3e 26 6c 74 3b 70 26 67 74 3b 4f  html">&lt;p&gt;O
e0d0: 6e 65 20 6f 66 20 74 68 65 20 62 69 67 67 65 73  ne of the bigges
e0e0: 74 20 63 6f 6d 70 6c 61 69 6e 74 73 20 61 62 6f  t complaints abo
e0f0: 75 74 20 54 63 6c 20 69 73 20 69 74 26 23 38 32  ut Tcl is it&#82
e100: 31 37 3b 73 20 76 65 72 62 6f 73 69 74 79 20 66  17;s verbosity f
e110: 6f 72 20 63 6f 6d 6d 6f 6e 20 65 78 70 72 65 73  or common expres
e120: 73 69 6f 6e 73 2e 20 43 6f 6e 73 69 64 65 72 3a  sions. Consider:
e130: 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b  &lt;/p&gt;..&lt;
e140: 70 72 65 20 63 6c 61 73 73 3d 22 73 68 5f 74 63  pre class="sh_tc
e150: 6c 22 26 67 74 3b 0a 73 65 74 20 73 75 62 6c 69  l"&gt;.set subli
e160: 73 74 20 5b 6c 72 61 6e 67 65 20 24 6c 69 73 74  st [lrange $list
e170: 20 5b 65 78 70 72 20 7b 24 61 20 2b 20 31 7d 5d   [expr {$a + 1}]
e180: 20 5b 65 78 70 72 20 7b 24 62 20 2d 20 31 7d 5d   [expr {$b - 1}]
e190: 5d 0a 26 6c 74 3b 2f 70 72 65 26 67 74 3b 0a 0a  ].&lt;/pre&gt;..
e1a0: 26 6c 74 3b 70 26 67 74 3b 54 68 69 73 20 69 73  &lt;p&gt;This is
e1b0: 20 6d 69 74 69 67 61 74 65 64 20 73 6f 6d 65 77   mitigated somew
e1c0: 68 61 74 20 69 6e 20 6c 69 73 74 20 61 6e 64 20  hat in list and 
e1d0: 73 74 72 69 6e 67 20 69 6e 64 65 78 20 61 6e 64  string index and
e1e0: 20 72 61 6e 67 65 73 0a 65 78 70 72 65 73 73 69   ranges.expressi
e1f0: 6f 6e 20 77 68 69 63 68 20 73 75 70 70 6f 72 74  on which support
e200: 20 74 68 65 20 6e 6f 74 61 74 69 6f 6e 20 26 6c   the notation &l
e210: 74 3b 63 6f 64 65 26 67 74 3b 69 6e 74 2b 69 6e  t;code&gt;int+in
e220: 74 26 6c 74 3b 2f 63 6f 64 65 26 67 74 3b 20 6f  t&lt;/code&gt; o
e230: 72 20 26 6c 74 3b 63 6f 64 65 26 67 74 3b 69 6e  r &lt;code&gt;in
e240: 74 2d 69 6e 74 26 6c 74 3b 2f 63 6f 64 65 26 67  t-int&lt;/code&g
e250: 74 3b 2e 20 48 6f 77 65 76 65 72 2c 0a 6d 61 6e  t;. However,.man
e260: 79 20 73 69 6d 70 6c 65 2c 20 63 6f 6d 6d 6f 6e  y simple, common
e270: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65   expressions are
e280: 20 73 74 69 6c 6c 20 63 75 6d 62 65 72 73 6f 6d   still cumbersom
e290: 65 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c  e.&lt;/p&gt;..&l
e2a0: 74 3b 70 26 67 74 3b 54 68 65 72 65 20 68 61 73  t;p&gt;There has
e2b0: 20 62 65 65 6e 20 6d 75 63 68 20 26 6c 74 3b 61   been much &lt;a
e2c0: 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 77 69   href="http://wi
e2d0: 6b 69 2e 74 63 6c 2e 74 6b 2f 38 33 38 39 22 26  ki.tcl.tk/8389"&
e2e0: 67 74 3b 64 69 73 63 75 73 73 69 6f 6e 26 6c 74  gt;discussion&lt
e2f0: 3b 2f 61 26 67 74 3b 20 61 62 6f 75 74 0a 73 68  ;/a&gt; about.sh
e300: 6f 72 74 68 61 6e 64 20 6e 6f 74 61 74 69 6f 6e  orthand notation
e310: 20 66 6f 72 20 65 78 70 72 2c 20 68 6f 77 65 76   for expr, howev
e320: 65 72 20 61 73 20 66 6f 72 20 6d 61 6e 79 20 74  er as for many t
e330: 68 69 6e 67 73 20 77 69 74 68 20 54 63 6c 2c 0a  hings with Tcl,.
e340: 70 72 6f 67 72 65 73 73 20 69 73 20 73 6c 6f 77  progress is slow
e350: 20 6f 72 20 6e 6f 6e 2d 65 78 69 73 74 65 6e 74   or non-existent
e360: 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74  .&lt;/p&gt;..&lt
e370: 3b 70 26 67 74 3b 54 68 65 72 65 20 69 73 20 6e  ;p&gt;There is n
e380: 6f 20 6e 65 65 64 20 74 6f 20 73 75 66 66 65 72  o need to suffer
e390: 20 74 68 65 20 73 61 6d 65 20 66 61 74 65 20 66   the same fate f
e3a0: 6f 72 20 4a 69 6d 2c 20 74 68 6f 75 67 68 2e 20  or Jim, though. 
e3b0: 53 6f 20 49 0a 69 6d 70 6c 65 6d 65 6e 74 65 64  So I.implemented
e3c0: 20 61 20 74 72 69 76 69 61 6c 20 70 61 74 63 68   a trivial patch
e3d0: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
e3e0: 73 79 6e 74 61 78 20 26 6c 74 3b 63 6f 64 65 26  syntax &lt;code&
e3f0: 67 74 3b 24 28 2e 2e 2e 29 26 6c 74 3b 2f 63 6f  gt;$(...)&lt;/co
e400: 64 65 26 67 74 3b 20 61 73 20 61 0a 73 68 6f 72  de&gt; as a.shor
e410: 74 68 61 6e 64 20 66 6f 72 20 65 78 70 72 2e 20  thand for expr. 
e420: 20 4c 65 74 26 23 38 32 31 37 3b 73 20 73 65 65   Let&#8217;s see
e430: 20 68 6f 77 20 69 74 20 6c 6f 6f 6b 73 3a 26 6c   how it looks:&l
e440: 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70 72  t;/p&gt;..&lt;pr
e450: 65 20 63 6c 61 73 73 3d 22 73 68 5f 74 63 6c 22  e class="sh_tcl"
e460: 26 67 74 3b 0a 2e 20 73 65 74 20 78 20 24 28 33  &gt;.. set x $(3
e470: 20 2b 20 34 29 0a 37 0a 2e 20 69 6e 63 72 20 79   + 4).7.. incr y
e480: 20 24 28 37 20 2a 20 5b 69 6e 63 72 20 78 5d 29   $(7 * [incr x])
e490: 0a 35 36 0a 2e 20 73 65 74 20 7a 20 24 28 22 62  .56.. set z $("b
e4a0: 62 22 20 69 6e 20 7b 61 61 20 62 62 20 63 63 7d  b" in {aa bb cc}
e4b0: 29 0a 31 0a 26 6c 74 3b 2f 70 72 65 26 67 74 3b  ).1.&lt;/pre&gt;
e4c0: 0a 0a 26 6c 74 3b 70 26 67 74 3b 41 20 6c 6f 74  ..&lt;p&gt;A lot
e4d0: 20 62 65 74 74 65 72 21 20 45 73 73 65 6e 74 69   better! Essenti
e4e0: 61 6c 6c 79 20 61 76 6f 69 64 69 6e 67 20 6f 6e  ally avoiding on
e4f0: 65 20 73 65 74 20 6f 66 20 62 72 61 63 6b 65 74  e set of bracket
e500: 73 20 70 6c 75 73 20 74 68 65 0a 63 6f 6d 6d 61  s plus the.comma
e510: 6e 64 20 6e 61 6d 65 2e 20 43 75 72 72 65 6e 74  nd name. Current
e520: 6c 79 20 69 6e 20 54 63 6c 2c 20 26 6c 74 3b 63  ly in Tcl, &lt;c
e530: 6f 64 65 26 67 74 3b 24 28 2e 2e 2e 29 26 6c 74  ode&gt;$(...)&lt
e540: 3b 2f 63 6f 64 65 26 67 74 3b 20 69 73 20 61 6e  ;/code&gt; is an
e550: 20 61 63 63 69 64 65 6e 74 61 6c 20 76 61 6c 69   accidental vali
e560: 64 0a 65 78 70 72 65 73 73 69 6f 6e 2c 20 61 63  d.expression, ac
e570: 63 65 73 73 69 6e 67 20 61 6e 20 61 72 72 61 79  cessing an array
e580: 20 6e 61 6d 65 64 20 77 69 74 68 20 74 68 65 20   named with the 
e590: 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 20 47 69  empty string. Gi
e5a0: 76 69 6e 67 0a 75 70 20 74 68 69 73 20 69 73 20  ving.up this is 
e5b0: 61 20 76 65 72 79 20 73 6d 61 6c 6c 20 70 72 69  a very small pri
e5c0: 63 65 20 74 6f 20 70 61 79 20 66 6f 72 20 74 68  ce to pay for th
e5d0: 69 73 20 6d 6f 72 65 20 61 63 63 65 73 73 69 62  is more accessib
e5e0: 6c 65 20 73 79 6e 74 61 78 2e 0a 50 65 72 68 61  le syntax..Perha
e5f0: 70 73 20 61 73 20 54 63 6c 20 67 72 69 6e 64 73  ps as Tcl grinds
e600: 20 69 74 26 23 38 32 31 37 3b 73 20 77 61 79 20   it&#8217;s way 
e610: 74 6f 77 61 72 64 73 20 76 65 72 73 69 6f 6e 20  towards version 
e620: 39 2e 30 2c 20 69 74 20 63 6f 75 6c 64 20 67 69  9.0, it could gi
e630: 76 65 0a 75 70 20 61 20 74 69 6e 79 20 62 69 74  ve.up a tiny bit
e640: 20 6f 66 20 62 61 63 6b 77 61 72 64 20 63 6f 6d   of backward com
e650: 70 61 74 69 62 69 6c 69 74 79 20 66 6f 72 20 65  patibility for e
e660: 61 73 79 20 6f 66 20 75 73 65 2e 26 6c 74 3b 2f  asy of use.&lt;/
e670: 70 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b  p&gt;..&lt;p&gt;
e680: 53 74 65 76 65 20 42 65 6e 6e 65 74 74 20 28 26  Steve Bennett (&
e690: 6c 74 3b 61 20 68 72 65 66 3d 22 26 61 6d 70 3b  lt;a href="&amp;
e6a0: 23 31 30 39 3b 26 61 6d 70 3b 23 30 39 37 3b 26  #109;&amp;#097;&
e6b0: 61 6d 70 3b 23 31 30 35 3b 26 61 6d 70 3b 23 31  amp;#105;&amp;#1
e6c0: 30 38 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d  08;&amp;#116;&am
e6d0: 70 3b 23 31 31 31 3b 3a 26 61 6d 70 3b 23 31 31  p;#111;:&amp;#11
e6e0: 35 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d 70  5;&amp;#116;&amp
e6f0: 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31 31 38 3b  ;#101;&amp;#118;
e700: 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23  &amp;#101;&amp;#
e710: 30 39 38 3b 26 61 6d 70 3b 23 30 36 34 3b 26 61  098;&amp;#064;&a
e720: 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23 31 31  mp;#119;&amp;#11
e730: 31 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d 70  1;&amp;#114;&amp
e740: 3b 23 31 30 37 3b 26 61 6d 70 3b 23 31 31 39 3b  ;#107;&amp;#119;
e750: 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b 23  &amp;#097;&amp;#
e760: 31 31 34 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61  114;&amp;#101;&a
e770: 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23 31 31  mp;#046;&amp;#11
e780: 30 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70  0;&amp;#101;&amp
e790: 3b 23 31 31 36 3b 26 61 6d 70 3b 23 30 34 36 3b  ;#116;&amp;#046;
e7a0: 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b 23  &amp;#097;&amp;#
e7b0: 31 31 37 3b 22 26 67 74 3b 26 61 6d 70 3b 23 31  117;"&gt;&amp;#1
e7c0: 31 35 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d  15;&amp;#116;&am
e7d0: 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31 31 38  p;#101;&amp;#118
e7e0: 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b  ;&amp;#101;&amp;
e7f0: 23 30 39 38 3b 26 61 6d 70 3b 23 30 36 34 3b 26  #098;&amp;#064;&
e800: 61 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23 31  amp;#119;&amp;#1
e810: 31 31 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d  11;&amp;#114;&am
e820: 70 3b 23 31 30 37 3b 26 61 6d 70 3b 23 31 31 39  p;#107;&amp;#119
e830: 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b  ;&amp;#097;&amp;
e840: 23 31 31 34 3b 26 61 6d 70 3b 23 31 30 31 3b 26  #114;&amp;#101;&
e850: 61 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23 31  amp;#046;&amp;#1
e860: 31 30 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d  10;&amp;#101;&am
e870: 70 3b 23 31 31 36 3b 26 61 6d 70 3b 23 30 34 36  p;#116;&amp;#046
e880: 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b  ;&amp;#097;&amp;
e890: 23 31 31 37 3b 26 6c 74 3b 2f 61 26 67 74 3b 29  #117;&lt;/a&gt;)
e8a0: 26 6c 74 3b 2f 70 26 67 74 3b 0a 3c 2f 63 6f 6e  &lt;/p&gt;.</con
e8b0: 74 65 6e 74 3e 0a 20 20 3c 2f 65 6e 74 72 79 3e  tent>.  </entry>
e8c0: 0a 20 20 3c 65 6e 74 72 79 3e 0a 20 20 20 20 3c  .  <entry>.    <
e8d0: 69 64 3e 74 61 67 3a 6a 69 6d 2e 62 65 72 6c 69  id>tag:jim.berli
e8e0: 6f 73 2e 64 65 2c 32 30 31 30 2d 31 30 2d 32 39  os.de,2010-10-29
e8f0: 3a 2f 61 72 74 69 63 6c 65 73 2f 32 30 31 30 2d  :/articles/2010-
e900: 31 30 2d 32 39 2f 3c 2f 69 64 3e 0a 20 20 20 20  10-29/</id>.    
e910: 3c 74 69 74 6c 65 20 74 79 70 65 3d 22 68 74 6d  <title type="htm
e920: 6c 22 3e 41 6e 6e 6f 75 6e 63 69 6e 67 20 4a 69  l">Announcing Ji
e930: 6d 20 54 63 6c 20 76 65 72 73 69 6f 6e 20 30 2e  m Tcl version 0.
e940: 36 33 3c 2f 74 69 74 6c 65 3e 0a 20 20 20 20 3c  63</title>.    <
e950: 70 75 62 6c 69 73 68 65 64 3e 32 30 31 30 2d 31  published>2010-1
e960: 30 2d 32 38 54 31 34 3a 30 30 3a 30 30 5a 3c 2f  0-28T14:00:00Z</
e970: 70 75 62 6c 69 73 68 65 64 3e 0a 20 20 20 20 3c  published>.    <
e980: 75 70 64 61 74 65 64 3e 32 30 31 30 2d 31 30 2d  updated>2010-10-
e990: 32 38 54 31 34 3a 30 30 3a 30 30 5a 3c 2f 75 70  28T14:00:00Z</up
e9a0: 64 61 74 65 64 3e 0a 20 20 20 20 3c 6c 69 6e 6b  dated>.    <link
e9b0: 20 72 65 6c 3d 22 61 6c 74 65 72 6e 61 74 65 22   rel="alternate"
e9c0: 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 6a 69   href="http://ji
e9d0: 6d 2e 62 65 72 6c 69 6f 73 2e 64 65 2f 61 72 74  m.berlios.de/art
e9e0: 69 63 6c 65 73 2f 32 30 31 30 2d 31 30 2d 32 39  icles/2010-10-29
e9f0: 2f 22 2f 3e 0a 20 20 20 20 3c 63 6f 6e 74 65 6e  /"/>.    <conten
ea00: 74 20 74 79 70 65 3d 22 68 74 6d 6c 22 3e 26 6c  t type="html">&l
ea10: 74 3b 70 26 67 74 3b 4a 69 6d 20 54 63 6c 20 30  t;p&gt;Jim Tcl 0
ea20: 2e 36 33 20 68 61 73 20 62 65 65 6e 20 72 65 6c  .63 has been rel
ea30: 65 61 73 65 64 20 61 6e 64 20 69 73 20 61 76 61  eased and is ava
ea40: 69 6c 61 62 6c 65 20 66 72 6f 6d 3a 20 26 6c 74  ilable from: &lt
ea50: 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67  ;/p&gt;..&lt;p&g
ea60: 74 3b 26 6c 74 3b 61 20 68 72 65 66 3d 22 68 74  t;&lt;a href="ht
ea70: 74 70 3a 2f 2f 72 65 70 6f 2e 6f 72 2e 63 7a 2f  tp://repo.or.cz/
ea80: 77 2f 6a 69 6d 74 63 6c 2e 67 69 74 22 26 67 74  w/jimtcl.git"&gt
ea90: 3b 68 74 74 70 3a 2f 2f 72 65 70 6f 2e 6f 72 2e  ;http://repo.or.
eaa0: 63 7a 2f 77 2f 6a 69 6d 74 63 6c 2e 67 69 74 26  cz/w/jimtcl.git&
eab0: 6c 74 3b 2f 61 26 67 74 3b 26 6c 74 3b 2f 70 26  lt;/a&gt;&lt;/p&
eac0: 67 74 3b 0a 0a 26 6c 74 3b 68 32 20 69 64 3d 22  gt;..&lt;h2 id="
ead0: 63 68 61 6e 67 65 73 2d 73 69 6e 63 65 2d 76 65  changes-since-ve
eae0: 72 73 69 6f 6e 2d 30 35 31 22 26 67 74 3b 43 48  rsion-051"&gt;CH
eaf0: 41 4e 47 45 53 20 53 49 4e 43 45 20 56 45 52 53  ANGES SINCE VERS
eb00: 49 4f 4e 20 30 2e 35 31 26 6c 74 3b 2f 68 32 26  ION 0.51&lt;/h2&
eb10: 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 54 68  gt;..&lt;p&gt;Th
eb20: 69 73 20 69 73 20 61 20 6d 61 6a 6f 72 20 75 70  is is a major up
eb30: 64 61 74 65 20 77 68 69 63 68 20 69 6e 63 6f 72  date which incor
eb40: 70 6f 72 61 74 65 73 20 6d 61 6e 79 20 62 75 67  porates many bug
eb50: 20 66 69 78 65 73 20 61 6e 64 20 6e 65 77 20 66   fixes and new f
eb60: 65 61 74 75 72 65 73 2e 26 6c 74 3b 2f 70 26 67  eatures.&lt;/p&g
eb70: 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 53 6f 6d  t;..&lt;p&gt;Som
eb80: 65 20 6f 66 20 74 68 65 20 6e 65 77 20 66 65 61  e of the new fea
eb90: 74 75 72 65 73 20 6f 76 65 72 20 4a 69 6d 20 30  tures over Jim 0
eba0: 2e 35 31 20 69 6e 63 6c 75 64 65 3a 26 6c 74 3b  .51 include:&lt;
ebb0: 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 75 6c 26 67  /p&gt;..&lt;ul&g
ebc0: 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74 3b 4e  t;.  &lt;li&gt;N
ebd0: 6f 77 20 69 6e 63 6c 75 64 65 73 20 63 6f 6d 70  ow includes comp
ebe0: 72 65 68 65 6e 73 69 76 65 20 64 6f 63 75 6d 65  rehensive docume
ebf0: 6e 74 61 74 69 6f 6e 0a 53 65 65 3a 20 26 6c 74  ntation.See: &lt
ec00: 3b 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f  ;a href="http://
ec10: 72 65 70 6f 2e 6f 72 2e 63 7a 2f 77 2f 6a 69 6d  repo.or.cz/w/jim
ec20: 74 63 6c 2e 67 69 74 2f 62 6c 6f 62 5f 70 6c 61  tcl.git/blob_pla
ec30: 69 6e 2f 48 45 41 44 3a 2f 54 63 6c 5f 73 68 69  in/HEAD:/Tcl_shi
ec40: 70 70 65 64 2e 68 74 6d 6c 22 26 67 74 3b 54 63  pped.html"&gt;Tc
ec50: 6c 5f 53 68 69 70 70 65 64 2e 68 74 6d 6c 26 6c  l_Shipped.html&l
ec60: 74 3b 2f 61 26 67 74 3b 26 6c 74 3b 2f 6c 69 26  t;/a&gt;&lt;/li&
ec70: 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74 3b  gt;.  &lt;li&gt;
ec80: 4e 6f 77 20 69 6e 63 6c 75 64 65 73 20 65 78 74  Now includes ext
ec90: 65 6e 73 69 76 65 20 75 6e 69 74 20 74 65 73 74  ensive unit test
eca0: 73 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26  s&lt;/li&gt;.  &
ecb0: 6c 74 3b 6c 69 26 67 74 3b 46 61 72 20 62 65 74  lt;li&gt;Far bet
ecc0: 74 65 72 20 74 72 61 63 6b 69 6e 67 20 6f 66 20  ter tracking of 
ecd0: 73 6f 75 72 63 65 20 6c 6f 63 61 74 69 6f 6e 2c  source location,
ece0: 20 69 6e 63 6c 75 64 69 6e 67 20 26 61 6d 70 3b   including &amp;
ecf0: 6c 73 71 75 6f 3b 69 6e 66 6f 20 73 6f 75 72 63  lsquo;info sourc
ed00: 65 26 61 6d 70 3b 72 73 71 75 6f 3b 2c 20 26 61  e&amp;rsquo;, &a
ed10: 6d 70 3b 6c 73 71 75 6f 3b 73 74 61 63 6b 74 72  mp;lsquo;stacktr
ed20: 61 63 65 26 61 6d 70 3b 72 73 71 75 6f 3b 20 61  ace&amp;rsquo; a
ed30: 6e 64 20 26 61 6d 70 3b 6c 73 71 75 6f 3b 73 74  nd &amp;lsquo;st
ed40: 61 63 6b 64 75 6d 70 26 61 6d 70 3b 72 73 71 75  ackdump&amp;rsqu
ed50: 6f 3b 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20  o;&lt;/li&gt;.  
ed60: 26 6c 74 3b 6c 69 26 67 74 3b 4e 65 74 77 6f 72  &lt;li&gt;Networ
ed70: 6b 69 6e 67 20 73 75 70 70 6f 72 74 20 69 6e 63  king support inc
ed80: 6c 75 64 65 73 20 49 50 76 36 2c 20 77 6f 72 6b  ludes IPv6, work
ed90: 69 6e 67 20 55 44 50 20 73 75 70 70 6f 72 74 2c  ing UDP support,
eda0: 20 26 61 6d 70 3b 6c 73 71 75 6f 3b 73 6f 63 6b   &amp;lsquo;sock
edb0: 65 74 20 70 69 70 65 26 61 6d 70 3b 72 73 71 75  et pipe&amp;rsqu
edc0: 6f 3b 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20  o;&lt;/li&gt;.  
edd0: 26 6c 74 3b 6c 69 26 67 74 3b 4d 61 6e 79 20 62  &lt;li&gt;Many b
ede0: 75 67 20 66 69 78 65 73 20 61 6e 64 20 69 6d 70  ug fixes and imp
edf0: 72 6f 76 65 6d 65 6e 74 73 20 69 6e 20 26 61 6d  rovements in &am
ee00: 70 3b 6c 73 71 75 6f 3b 65 78 70 72 26 61 6d 70  p;lsquo;expr&amp
ee10: 3b 72 73 71 75 6f 3b 26 6c 74 3b 2f 6c 69 26 67  ;rsquo;&lt;/li&g
ee20: 74 3b 0a 20 20 26 6c 74 3b 6c 69 26 67 74 3b 26  t;.  &lt;li&gt;&
ee30: 61 6d 70 3b 6c 73 71 75 6f 3b 65 78 65 63 26 61  amp;lsquo;exec&a
ee40: 6d 70 3b 72 73 71 75 6f 3b 20 69 6d 70 72 6f 76  mp;rsquo; improv
ee50: 65 6d 65 6e 74 73 20 69 6e 63 6c 75 64 69 6e 67  ements including
ee60: 20 72 65 64 69 72 65 63 74 69 6f 6e 20 6f 70 74   redirection opt
ee70: 69 6f 6e 73 20 61 6e 64 20 72 65 73 70 65 63 74  ions and respect
ee80: 20 66 6f 72 20 24 3a 3a 65 6e 76 26 6c 74 3b 2f   for $::env&lt;/
ee90: 6c 69 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69 26  li&gt;.  &lt;li&
eea0: 67 74 3b 46 75 6c 6c 20 26 61 6d 70 3b 6c 73 71  gt;Full &amp;lsq
eeb0: 75 6f 3b 63 6f 6e 66 69 67 75 72 65 26 61 6d 70  uo;configure&amp
eec0: 3b 72 73 71 75 6f 3b 20 73 75 70 70 6f 72 74 20  ;rsquo; support 
eed0: 66 6f 72 20 73 74 61 74 69 63 20 65 78 74 65 6e  for static exten
eee0: 73 69 6f 6e 73 26 6c 74 3b 2f 6c 69 26 67 74 3b  sions&lt;/li&gt;
eef0: 0a 26 6c 74 3b 2f 75 6c 26 67 74 3b 0a 0a 26 6c  .&lt;/ul&gt;..&l
ef00: 74 3b 70 26 67 74 3b 53 6f 6d 65 20 6e 6f 74 61  t;p&gt;Some nota
ef10: 62 6c 65 20 64 69 66 66 65 72 65 6e 63 65 73 20  ble differences 
ef20: 69 6e 63 6c 75 64 65 3a 26 6c 74 3b 2f 70 26 67  include:&lt;/p&g
ef30: 74 3b 0a 0a 26 6c 74 3b 75 6c 26 67 74 3b 0a 20  t;..&lt;ul&gt;. 
ef40: 20 26 6c 74 3b 6c 69 26 67 74 3b 61 69 6f 2e 6f   &lt;li&gt;aio.o
ef50: 70 65 6e 20 61 6e 64 20 61 69 6f 2e 73 6f 63 6b  pen and aio.sock
ef60: 65 74 20 61 72 65 20 6e 6f 77 20 70 6c 61 69 6e  et are now plain
ef70: 20 26 61 6d 70 3b 6c 73 71 75 6f 3b 6f 70 65 6e   &amp;lsquo;open
ef80: 26 61 6d 70 3b 72 73 71 75 6f 3b 20 61 6e 64 20  &amp;rsquo; and 
ef90: 26 61 6d 70 3b 6c 73 71 75 6f 3b 73 6f 63 6b 65  &amp;lsquo;socke
efa0: 74 26 61 6d 70 3b 72 73 71 75 6f 3b 26 6c 74 3b  t&amp;rsquo;&lt;
efb0: 2f 6c 69 26 67 74 3b 0a 20 20 26 6c 74 3b 6c 69  /li&gt;.  &lt;li
efc0: 26 67 74 3b 26 61 6d 70 3b 6c 73 71 75 6f 3b 70  &gt;&amp;lsquo;p
efd0: 72 6f 63 26 61 6d 70 3b 72 73 71 75 6f 3b 20 6e  roc&amp;rsquo; n
efe0: 6f 77 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e  ow returns the n
eff0: 61 6d 65 20 6f 66 20 74 68 65 20 70 72 6f 63 65  ame of the proce
f000: 64 75 72 65 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a  dure&lt;/li&gt;.
f010: 20 20 26 6c 74 3b 6c 69 26 67 74 3b 43 68 61 6e    &lt;li&gt;Chan
f020: 67 65 73 20 74 6f 20 74 68 65 20 70 61 63 6b 61  ges to the packa
f030: 67 65 20 73 79 73 74 65 6d 20 61 6e 64 20 65 78  ge system and ex
f040: 74 65 6e 73 69 6f 6e 20 69 6e 74 65 72 66 61 63  tension interfac
f050: 65 26 6c 74 3b 2f 6c 69 26 67 74 3b 0a 20 20 26  e&lt;/li&gt;.  &
f060: 6c 74 3b 6c 69 26 67 74 3b 26 61 6d 70 3b 6c 73  lt;li&gt;&amp;ls
f070: 71 75 6f 3b 6a 69 6d 26 61 6d 70 3b 72 73 71 75  quo;jim&amp;rsqu
f080: 6f 3b 20 69 73 20 6e 6f 77 20 26 61 6d 70 3b 6c  o; is now &amp;l
f090: 73 71 75 6f 3b 6a 69 6d 73 68 26 61 6d 70 3b 72  squo;jimsh&amp;r
f0a0: 73 71 75 6f 3b 26 6c 74 3b 2f 6c 69 26 67 74 3b  squo;&lt;/li&gt;
f0b0: 0a 26 6c 74 3b 2f 75 6c 26 67 74 3b 0a 0a 26 6c  .&lt;/ul&gt;..&l
f0c0: 74 3b 70 26 67 74 3b 53 74 65 76 65 20 42 65 6e  t;p&gt;Steve Ben
f0d0: 6e 65 74 74 20 28 26 6c 74 3b 61 20 68 72 65 66  nett (&lt;a href
f0e0: 3d 22 26 61 6d 70 3b 23 31 30 39 3b 26 61 6d 70  ="&amp;#109;&amp
f0f0: 3b 23 30 39 37 3b 26 61 6d 70 3b 23 31 30 35 3b  ;#097;&amp;#105;
f100: 26 61 6d 70 3b 23 31 30 38 3b 26 61 6d 70 3b 23  &amp;#108;&amp;#
f110: 31 31 36 3b 26 61 6d 70 3b 23 31 31 31 3b 3a 26  116;&amp;#111;:&
f120: 61 6d 70 3b 23 31 31 35 3b 26 61 6d 70 3b 23 31  amp;#115;&amp;#1
f130: 31 36 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d  16;&amp;#101;&am
f140: 70 3b 23 31 31 38 3b 26 61 6d 70 3b 23 31 30 31  p;#118;&amp;#101
f150: 3b 26 61 6d 70 3b 23 30 39 38 3b 26 61 6d 70 3b  ;&amp;#098;&amp;
f160: 23 30 36 34 3b 26 61 6d 70 3b 23 31 31 39 3b 26  #064;&amp;#119;&
f170: 61 6d 70 3b 23 31 31 31 3b 26 61 6d 70 3b 23 31  amp;#111;&amp;#1
f180: 31 34 3b 26 61 6d 70 3b 23 31 30 37 3b 26 61 6d  14;&amp;#107;&am
f190: 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23 30 39 37  p;#119;&amp;#097
f1a0: 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d 70 3b  ;&amp;#114;&amp;
f1b0: 23 31 30 31 3b 26 61 6d 70 3b 23 30 34 36 3b 26  #101;&amp;#046;&
f1c0: 61 6d 70 3b 23 31 31 30 3b 26 61 6d 70 3b 23 31  amp;#110;&amp;#1
f1d0: 30 31 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d  01;&amp;#116;&am
f1e0: 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23 30 39 37  p;#046;&amp;#097
f1f0: 3b 26 61 6d 70 3b 23 31 31 37 3b 22 26 67 74 3b  ;&amp;#117;"&gt;
f200: 26 61 6d 70 3b 23 31 31 35 3b 26 61 6d 70 3b 23  &amp;#115;&amp;#
f210: 31 31 36 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61  116;&amp;#101;&a
f220: 6d 70 3b 23 31 31 38 3b 26 61 6d 70 3b 23 31 30  mp;#118;&amp;#10
f230: 31 3b 26 61 6d 70 3b 23 30 39 38 3b 26 61 6d 70  1;&amp;#098;&amp
f240: 3b 23 30 36 34 3b 26 61 6d 70 3b 23 31 31 39 3b  ;#064;&amp;#119;
f250: 26 61 6d 70 3b 23 31 31 31 3b 26 61 6d 70 3b 23  &amp;#111;&amp;#
f260: 31 31 34 3b 26 61 6d 70 3b 23 31 30 37 3b 26 61  114;&amp;#107;&a
f270: 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23 30 39  mp;#119;&amp;#09
f280: 37 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d 70  7;&amp;#114;&amp
f290: 3b 23 31 30 31 3b 26 61 6d 70 3b 23 30 34 36 3b  ;#101;&amp;#046;
f2a0: 26 61 6d 70 3b 23 31 31 30 3b 26 61 6d 70 3b 23  &amp;#110;&amp;#
f2b0: 31 30 31 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61  101;&amp;#116;&a
f2c0: 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23 30 39  mp;#046;&amp;#09
f2d0: 37 3b 26 61 6d 70 3b 23 31 31 37 3b 26 6c 74 3b  7;&amp;#117;&lt;
f2e0: 2f 61 26 67 74 3b 29 26 6c 74 3b 2f 70 26 67 74  /a&gt;)&lt;/p&gt
f2f0: 3b 0a 3c 2f 63 6f 6e 74 65 6e 74 3e 0a 20 20 3c  ;.</content>.  <
f300: 2f 65 6e 74 72 79 3e 0a 20 20 3c 65 6e 74 72 79  /entry>.  <entry
f310: 3e 0a 20 20 20 20 3c 69 64 3e 74 61 67 3a 6a 69  >.    <id>tag:ji
f320: 6d 2e 62 65 72 6c 69 6f 73 2e 64 65 2c 32 30 31  m.berlios.de,201
f330: 30 2d 30 39 2d 30 39 3a 2f 61 72 74 69 63 6c 65  0-09-09:/article
f340: 73 2f 32 30 31 30 2d 30 39 2d 30 39 2f 3c 2f 69  s/2010-09-09/</i
f350: 64 3e 0a 20 20 20 20 3c 74 69 74 6c 65 20 74 79  d>.    <title ty
f360: 70 65 3d 22 68 74 6d 6c 22 3e 53 4d 54 50 20 4d  pe="html">SMTP M
f370: 61 69 6c 20 77 69 74 68 20 4a 69 6d 3c 2f 74 69  ail with Jim</ti
f380: 74 6c 65 3e 0a 20 20 20 20 3c 70 75 62 6c 69 73  tle>.    <publis
f390: 68 65 64 3e 32 30 31 30 2d 30 39 2d 30 38 54 31  hed>2010-09-08T1
f3a0: 34 3a 30 30 3a 30 30 5a 3c 2f 70 75 62 6c 69 73  4:00:00Z</publis
f3b0: 68 65 64 3e 0a 20 20 20 20 3c 75 70 64 61 74 65  hed>.    <update
f3c0: 64 3e 32 30 31 30 2d 30 39 2d 30 38 54 31 34 3a  d>2010-09-08T14:
f3d0: 30 30 3a 30 30 5a 3c 2f 75 70 64 61 74 65 64 3e  00:00Z</updated>
f3e0: 0a 20 20 20 20 3c 6c 69 6e 6b 20 72 65 6c 3d 22  .    <link rel="
f3f0: 61 6c 74 65 72 6e 61 74 65 22 20 68 72 65 66 3d  alternate" href=
f400: 22 68 74 74 70 3a 2f 2f 6a 69 6d 2e 62 65 72 6c  "http://jim.berl
f410: 69 6f 73 2e 64 65 2f 61 72 74 69 63 6c 65 73 2f  ios.de/articles/
f420: 32 30 31 30 2d 30 39 2d 30 39 2f 22 2f 3e 0a 20  2010-09-09/"/>. 
f430: 20 20 20 3c 63 6f 6e 74 65 6e 74 20 74 79 70 65     <content type
f440: 3d 22 68 74 6d 6c 22 3e 26 6c 74 3b 70 26 67 74  ="html">&lt;p&gt
f450: 3b 49 20 72 65 63 65 6e 74 6c 79 20 68 61 64 20  ;I recently had 
f460: 74 68 65 20 6e 65 65 64 20 74 6f 20 73 65 6e 64  the need to send
f470: 20 65 6d 61 69 6c 20 66 72 6f 6d 20 6d 79 20 4a   email from my J
f480: 69 6d 2d 65 6e 61 62 6c 65 64 20 65 6d 62 65 64  im-enabled embed
f490: 64 65 64 0a 77 65 62 20 61 70 70 6c 69 63 61 74  ded.web applicat
f4a0: 69 6f 6e 2e 20 54 68 65 72 65 20 61 72 65 20 6d  ion. There are m
f4b0: 61 6e 79 20 77 61 79 73 20 74 6f 20 61 63 68 69  any ways to achi
f4c0: 65 76 65 20 74 68 69 73 2c 20 69 6e 63 6c 75 64  eve this, includ
f4d0: 69 6e 67 20 76 69 61 0a 61 20 63 6f 6d 6d 61 6e  ing via.a comman
f4e0: 64 20 6c 69 6e 65 20 61 70 70 6c 69 63 61 74 69  d line applicati
f4f0: 6f 6e 2c 20 62 75 74 20 49 20 63 68 6f 73 65 20  on, but I chose 
f500: 74 6f 20 75 73 65 20 74 68 65 20 6e 65 74 77 6f  to use the netwo
f510: 72 6b 69 6e 67 0a 63 61 70 61 62 69 6c 69 74 69  rking.capabiliti
f520: 65 73 20 6f 66 20 4a 69 6d 20 74 6f 20 73 65 6e  es of Jim to sen
f530: 64 20 65 6d 61 69 6c 20 64 69 72 65 63 74 6c 79  d email directly
f540: 20 76 69 61 20 53 4d 54 50 2e 20 49 74 20 74 75   via SMTP. It tu
f550: 72 6e 65 64 20 6f 75 74 0a 74 6f 20 62 65 20 72  rned out.to be r
f560: 65 6d 61 72 6b 61 62 6c 79 20 65 61 73 79 2e 26  emarkably easy.&
f570: 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74 3b 70  lt;/p&gt;..&lt;p
f580: 26 67 74 3b 46 69 72 73 74 20 74 68 65 20 74 65  &gt;First the te
f590: 73 74 20 63 6f 64 65 3a 26 6c 74 3b 2f 70 26 67  st code:&lt;/p&g
f5a0: 74 3b 0a 0a 26 6c 74 3b 70 72 65 20 63 6c 61 73  t;..&lt;pre clas
f5b0: 73 3d 22 73 68 5f 74 63 6c 22 26 67 74 3b 0a 23  s="sh_tcl"&gt;.#
f5c0: 20 54 65 73 74 20 74 68 65 20 73 6d 74 70 20 70   Test the smtp p
f5d0: 61 63 6b 61 67 65 0a 0a 70 61 63 6b 61 67 65 20  ackage..package 
f5e0: 72 65 71 75 69 72 65 20 73 6d 74 70 0a 0a 23 20  require smtp..# 
f5f0: 53 75 62 63 6c 61 73 73 20 73 6d 74 70 20 74 6f  Subclass smtp to
f600: 20 70 72 6f 76 69 64 65 20 61 20 63 75 73 74 6f   provide a custo
f610: 6d 20 6c 6f 67 20 6d 65 74 68 6f 64 0a 63 6c 61  m log method.cla
f620: 73 73 20 73 6d 74 70 5f 6c 6f 67 20 73 6d 74 70  ss smtp_log smtp
f630: 20 7b 7d 0a 0a 73 6d 74 70 5f 6c 6f 67 20 6d 65   {}..smtp_log me
f640: 74 68 6f 64 20 6c 6f 67 20 7b 6d 73 67 7d 20 7b  thod log {msg} {
f650: 0a 20 20 20 20 70 75 74 73 20 24 6d 73 67 0a 7d  .    puts $msg.}
f660: 0a 0a 23 20 43 72 65 61 74 65 20 61 6e 20 69 6e  ..# Create an in
f670: 73 74 61 6e 63 65 20 74 6f 20 73 65 6e 64 20 6f  stance to send o
f680: 75 72 20 6d 65 73 73 61 67 65 0a 73 65 74 20 73  ur message.set s
f690: 20 5b 73 6d 74 70 5f 6c 6f 67 20 6e 65 77 20 7b   [smtp_log new {
f6a0: 73 65 72 76 65 72 20 6d 61 69 6c 2e 77 6f 72 6b  server mail.work
f6b0: 77 61 72 65 2e 6e 65 74 2e 61 75 7d 5d 0a 0a 23  ware.net.au}]..#
f6c0: 20 41 6e 64 20 73 65 6e 64 20 69 74 0a 73 65 74   And send it.set
f6d0: 20 72 65 73 75 6c 74 20 5b 24 73 20 73 65 6e 64   result [$s send
f6e0: 20 7b 0a 20 20 20 20 74 6f 20 73 74 65 76 65 62   {.    to steveb
f6f0: 40 77 6f 72 6b 77 61 72 65 2e 6e 65 74 2e 61 75  @workware.net.au
f700: 0a 20 20 20 20 66 72 6f 6d 20 73 74 65 76 65 62  .    from steveb
f710: 40 77 6f 72 6b 77 61 72 65 2e 6e 65 74 2e 61 75  @workware.net.au
f720: 0a 20 20 20 20 73 75 62 6a 65 63 74 20 22 54 65  .    subject "Te
f730: 73 74 20 6d 65 73 73 61 67 65 22 0a 20 20 20 20  st message".    
f740: 62 6f 64 79 20 22 68 65 6c 6c 6f 20 66 72 6f 6d  body "hello from
f750: 20 73 74 65 76 65 22 0a 7d 5d 0a 69 66 20 7b 24   steve".}].if {$
f760: 72 65 73 75 6c 74 20 6e 65 20 22 22 7d 20 7b 0a  result ne ""} {.
f770: 20 20 20 20 70 75 74 73 20 22 52 65 73 75 6c 74      puts "Result
f780: 20 69 73 20 24 72 65 73 75 6c 74 22 0a 7d 0a 26   is $result".}.&
f790: 6c 74 3b 2f 70 72 65 26 67 74 3b 0a 0a 26 6c 74  lt;/pre&gt;..&lt
f7a0: 3b 70 26 67 74 3b 41 6e 64 20 74 68 65 20 72 65  ;p&gt;And the re
f7b0: 73 75 6c 74 20 6f 66 20 72 75 6e 6e 69 6e 67 20  sult of running 
f7c0: 69 74 3a 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26  it:&lt;/p&gt;..&
f7d0: 6c 74 3b 70 72 65 26 67 74 3b 26 6c 74 3b 63 6f  lt;pre&gt;&lt;co
f7e0: 64 65 26 67 74 3b 26 61 6d 70 3b 6c 74 3b 26 61  de&gt;&amp;lt;&a
f7f0: 6d 70 3b 6c 74 3b 26 61 6d 70 3b 6c 74 3b 20 32  mp;lt;&amp;lt; 2
f800: 32 30 20 6d 61 69 6c 2e 77 6f 72 6b 77 61 72 65  20 mail.workware
f810: 2e 6e 65 74 2e 61 75 20 45 53 4d 54 50 20 50 6f  .net.au ESMTP Po
f820: 73 74 66 69 78 0a 26 61 6d 70 3b 67 74 3b 26 61  stfix.&amp;gt;&a
f830: 6d 70 3b 67 74 3b 26 61 6d 70 3b 67 74 3b 20 48  mp;gt;&amp;gt; H
f840: 45 4c 4f 20 73 74 65 76 65 62 6d 61 63 2e 69 6e  ELO stevebmac.in
f850: 74 65 72 6e 61 6c 2e 77 6f 72 6b 77 61 72 65 2e  ternal.workware.
f860: 6e 65 74 2e 61 75 0a 26 61 6d 70 3b 6c 74 3b 26  net.au.&amp;lt;&
f870: 61 6d 70 3b 6c 74 3b 26 61 6d 70 3b 6c 74 3b 20  amp;lt;&amp;lt; 
f880: 32 35 30 20 6d 61 69 6c 2e 77 6f 72 6b 77 61 72  250 mail.workwar
f890: 65 2e 6e 65 74 2e 61 75 0a 26 61 6d 70 3b 67 74  e.net.au.&amp;gt
f8a0: 3b 26 61 6d 70 3b 67 74 3b 26 61 6d 70 3b 67 74  ;&amp;gt;&amp;gt
f8b0: 3b 20 4d 41 49 4c 20 46 52 4f 4d 3a 20 6a 69 6d  ; MAIL FROM: jim
f8c0: 40 77 6f 72 6b 77 61 72 65 2e 6e 65 74 2e 61 75  @workware.net.au
f8d0: 0a 26 61 6d 70 3b 6c 74 3b 26 61 6d 70 3b 6c 74  .&amp;lt;&amp;lt
f8e0: 3b 26 61 6d 70 3b 6c 74 3b 20 32 35 30 20 32 2e  ;&amp;lt; 250 2.
f8f0: 31 2e 30 20 4f 6b 0a 26 61 6d 70 3b 67 74 3b 26  1.0 Ok.&amp;gt;&
f900: 61 6d 70 3b 67 74 3b 26 61 6d 70 3b 67 74 3b 20  amp;gt;&amp;gt; 
f910: 52 43 50 54 20 54 4f 3a 20 73 74 65 76 65 62 40  RCPT TO: steveb@
f920: 77 6f 72 6b 77 61 72 65 2e 6e 65 74 2e 61 75 0a  workware.net.au.
f930: 26 61 6d 70 3b 6c 74 3b 26 61 6d 70 3b 6c 74 3b  &amp;lt;&amp;lt;
f940: 26 61 6d 70 3b 6c 74 3b 20 32 35 30 20 32 2e 31  &amp;lt; 250 2.1
f950: 2e 35 20 4f 6b 0a 26 61 6d 70 3b 67 74 3b 26 61  .5 Ok.&amp;gt;&a
f960: 6d 70 3b 67 74 3b 26 61 6d 70 3b 67 74 3b 20 44  mp;gt;&amp;gt; D
f970: 41 54 41 0a 26 61 6d 70 3b 6c 74 3b 26 61 6d 70  ATA.&amp;lt;&amp
f980: 3b 6c 74 3b 26 61 6d 70 3b 6c 74 3b 20 33 35 34  ;lt;&amp;lt; 354
f990: 20 45 6e 64 20 64 61 74 61 20 77 69 74 68 20 26   End data with &
f9a0: 61 6d 70 3b 6c 74 3b 43 52 26 61 6d 70 3b 67 74  amp;lt;CR&amp;gt
f9b0: 3b 26 61 6d 70 3b 6c 74 3b 4c 46 26 61 6d 70 3b  ;&amp;lt;LF&amp;
f9c0: 67 74 3b 2e 26 61 6d 70 3b 6c 74 3b 43 52 26 61  gt;.&amp;lt;CR&a
f9d0: 6d 70 3b 67 74 3b 26 61 6d 70 3b 6c 74 3b 4c 46  mp;gt;&amp;lt;LF
f9e0: 26 61 6d 70 3b 67 74 3b 0a 26 61 6d 70 3b 67 74  &amp;gt;.&amp;gt
f9f0: 3b 26 61 6d 70 3b 67 74 3b 26 61 6d 70 3b 67 74  ;&amp;gt;&amp;gt
fa00: 3b 20 54 6f 3a 20 73 74 65 76 65 62 40 77 6f 72  ; To: steveb@wor
fa10: 6b 77 61 72 65 2e 6e 65 74 2e 61 75 0a 26 61 6d  kware.net.au.&am
fa20: 70 3b 67 74 3b 26 61 6d 70 3b 67 74 3b 26 61 6d  p;gt;&amp;gt;&am
fa30: 70 3b 67 74 3b 20 46 72 6f 6d 3a 20 22 4a 69 6d  p;gt; From: "Jim
fa40: 20 54 63 6c 22 20 26 61 6d 70 3b 6c 74 3b 6a 69   Tcl" &amp;lt;ji
fa50: 6d 40 77 6f 72 6b 77 61 72 65 2e 6e 65 74 2e 61  m@workware.net.a
fa60: 75 26 61 6d 70 3b 67 74 3b 0a 26 61 6d 70 3b 67  u&amp;gt;.&amp;g
fa70: 74 3b 26 61 6d 70 3b 67 74 3b 26 61 6d 70 3b 67  t;&amp;gt;&amp;g
fa80: 74 3b 20 44 61 74 65 3a 20 46 72 69 2c 20 31 30  t; Date: Fri, 10
fa90: 20 53 65 70 20 30 39 20 32 30 31 30 20 31 34 3a   Sep 09 2010 14:
faa0: 30 37 3a 34 39 20 2b 31 30 30 30 0a 26 61 6d 70  07:49 +1000.&amp
fab0: 3b 67 74 3b 26 61 6d 70 3b 67 74 3b 26 61 6d 70  ;gt;&amp;gt;&amp
fac0: 3b 67 74 3b 20 53 75 62 6a 65 63 74 3a 20 54 68  ;gt; Subject: Th
fad0: 69 73 20 69 73 20 61 20 74 65 73 74 20 65 6d 61  is is a test ema
fae0: 69 6c 0a 26 61 6d 70 3b 67 74 3b 26 61 6d 70 3b  il.&amp;gt;&amp;
faf0: 67 74 3b 26 61 6d 70 3b 67 74 3b 20 0a 3d 3d 3d  gt;&amp;gt; .===
fb00: 20 73 65 6e 64 69 6e 67 20 62 6f 64 79 0a 26 61   sending body.&a
fb10: 6d 70 3b 67 74 3b 26 61 6d 70 3b 67 74 3b 26 61  mp;gt;&amp;gt;&a
fb20: 6d 70 3b 67 74 3b 20 2e 0a 26 61 6d 70 3b 6c 74  mp;gt; ..&amp;lt
fb30: 3b 26 61 6d 70 3b 6c 74 3b 26 61 6d 70 3b 6c 74  ;&amp;lt;&amp;lt
fb40: 3b 20 32 35 30 20 32 2e 30 2e 30 20 4f 6b 3a 20  ; 250 2.0.0 Ok: 
fb50: 71 75 65 75 65 64 20 61 73 20 31 44 42 34 39 31  queued as 1DB491
fb60: 45 36 39 35 33 38 41 0a 26 61 6d 70 3b 67 74 3b  E69538A.&amp;gt;
fb70: 26 61 6d 70 3b 67 74 3b 26 61 6d 70 3b 67 74 3b  &amp;gt;&amp;gt;
fb80: 20 51 55 49 54 0a 26 61 6d 70 3b 6c 74 3b 26 61   QUIT.&amp;lt;&a
fb90: 6d 70 3b 6c 74 3b 26 61 6d 70 3b 6c 74 3b 20 32  mp;lt;&amp;lt; 2
fba0: 32 31 20 32 2e 30 2e 30 20 42 79 65 0a 3a 3a 3a  21 2.0.0 Bye.:::
fbb0: 20 6f 6b 0a 26 6c 74 3b 2f 63 6f 64 65 26 67 74   ok.&lt;/code&gt
fbc0: 3b 26 6c 74 3b 2f 70 72 65 26 67 74 3b 0a 0a 26  ;&lt;/pre&gt;..&
fbd0: 6c 74 3b 70 26 67 74 3b 41 6e 64 20 68 65 72 65  lt;p&gt;And here
fbe0: 20 69 73 20 74 68 65 20 73 6d 74 70 20 70 61 63   is the smtp pac
fbf0: 6b 61 67 65 20 28 26 6c 74 3b 63 6f 64 65 26 67  kage (&lt;code&g
fc00: 74 3b 73 6d 74 70 2e 74 63 6c 26 6c 74 3b 2f 63  t;smtp.tcl&lt;/c
fc10: 6f 64 65 26 67 74 3b 29 2e 20 4e 6f 74 65 20 74  ode&gt;). Note t
fc20: 68 65 20 75 73 65 20 6f 66 0a 26 6c 74 3b 63 6f  he use of.&lt;co
fc30: 64 65 26 67 74 3b 61 6c 61 72 6d 2f 73 69 67 6e  de&gt;alarm/sign
fc40: 61 6c 2f 63 61 74 63 68 20 2d 73 69 67 6e 61 6c  al/catch -signal
fc50: 26 6c 74 3b 2f 63 6f 64 65 26 67 74 3b 20 74 6f  &lt;/code&gt; to
fc60: 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 74   implement the t
fc70: 69 6d 65 6f 75 74 2e 26 6c 74 3b 2f 70 26 67 74  imeout.&lt;/p&gt
fc80: 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 54 68 69 73  ;..&lt;p&gt;This
fc90: 20 70 61 63 6b 61 67 65 20 69 73 20 62 75 69 6c   package is buil
fca0: 74 20 61 73 20 61 6e 20 4f 4f 20 63 6c 61 73 73  t as an OO class
fcb0: 2e 26 6c 74 3b 2f 70 26 67 74 3b 0a 0a 26 6c 74  .&lt;/p&gt;..&lt
fcc0: 3b 70 72 65 20 63 6c 61 73 73 3d 22 73 68 5f 74  ;pre class="sh_t
fcd0: 63 6c 22 26 67 74 3b 0a 23 20 50 61 63 6b 61 67  cl"&gt;.# Packag
fce0: 65 20 73 75 70 70 6f 72 74 69 6e 67 20 73 65 6e  e supporting sen
fcf0: 64 69 6e 67 20 65 6d 61 69 6c 20 76 69 61 20 64  ding email via d
fd00: 69 72 65 63 74 20 53 4d 54 50 0a 0a 70 61 63 6b  irect SMTP..pack
fd10: 61 67 65 20 72 65 71 75 69 72 65 20 6f 6f 0a 0a  age require oo..
fd20: 23 20 63 6c 61 73 73 20 74 6f 20 73 65 6e 64 20  # class to send 
fd30: 65 6d 61 69 6c 73 20 76 69 61 20 53 4d 54 50 0a  emails via SMTP.
fd40: 23 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  #.# The followin
fd50: 67 20 63 6c 61 73 73 20 76 61 72 69 61 62 6c 65  g class variable
fd60: 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 0a  s are supported.
fd70: 23 0a 23 20 73 65 72 76 65 72 20 20 20 2d 20 54  #.# server   - T
fd80: 68 65 20 68 6f 73 74 6e 61 6d 65 20 6f 72 20 49  he hostname or I
fd90: 50 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65  P address of the
fda0: 20 74 61 72 67 65 74 20 53 4d 54 50 20 73 65 72   target SMTP ser
fdb0: 76 65 72 0a 23 0a 23 20 41 6e 64 20 6f 70 74 69  ver.#.# And opti
fdc0: 6f 6e 61 6c 6c 79 3a 0a 23 20 70 6f 72 74 20 20  onally:.# port  
fdd0: 20 20 20 2d 20 54 68 65 20 70 6f 72 74 20 74 6f     - The port to
fde0: 20 73 65 6e 74 20 74 6f 20 28 64 65 66 61 75 6c   sent to (defaul
fdf0: 74 73 20 74 6f 20 32 35 29 0a 23 20 74 69 6d 65  ts to 25).# time
fe00: 6f 75 74 20 20 2d 20 50 72 6f 74 6f 63 6f 6c 20  out  - Protocol 
fe10: 74 69 6d 65 6f 75 74 20 69 6e 20 73 65 63 6f 6e  timeout in secon
fe20: 64 73 20 28 64 65 66 61 75 6c 74 73 20 74 6f 20  ds (defaults to 
fe30: 31 30 29 0a 0a 63 6c 61 73 73 20 73 6d 74 70 20  10)..class smtp 
fe40: 7b 73 65 72 76 65 72 20 7b 7d 20 70 6f 72 74 20  {server {} port 
fe50: 32 35 20 74 69 6d 65 6f 75 74 20 31 30 20 73 6f  25 timeout 10 so
fe60: 63 6b 20 7b 7d 7d 0a 0a 23 20 54 68 69 73 20 6c  ck {}}..# This l
fe70: 6f 67 20 6d 65 74 68 6f 64 20 63 61 6e 20 62 65  og method can be
fe80: 20 6f 76 65 72 72 69 64 64 65 6e 20 65 69 74 68   overridden eith
fe90: 65 72 20 62 79 0a 23 20 63 72 65 61 74 69 6e 67  er by.# creating
fea0: 20 61 20 73 75 62 63 6c 61 73 73 2c 20 6f 72 20   a subclass, or 
feb0: 6a 75 73 74 20 6f 76 65 72 77 72 69 74 69 6e 67  just overwriting
fec0: 20 74 68 69 73 20 6d 65 74 68 6f 64 0a 73 6d 74   this method.smt
fed0: 70 20 6d 65 74 68 6f 64 20 6c 6f 67 20 7b 6d 73  p method log {ms
fee0: 67 7d 20 7b 7d 0a 0a 23 20 53 65 6e 64 20 61 6e  g} {}..# Send an
fef0: 20 65 6d 61 69 6c 0a 23 0a 23 20 24 69 6e 66 6f   email.#.# $info
ff00: 20 69 73 20 61 20 64 69 63 74 69 6f 6e 61 72 79   is a dictionary
ff10: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
ff20: 66 6f 6c 6c 6f 77 69 6e 67 20 28 72 65 71 75 69  following (requi
ff30: 72 65 64 29 20 65 6c 65 6d 65 6e 74 73 0a 23 0a  red) elements.#.
ff40: 23 20 73 75 62 6a 65 63 74 20 20 2d 20 54 68 65  # subject  - The
ff50: 20 65 6d 61 69 6c 20 73 75 62 6a 65 63 74 0a 23   email subject.#
ff60: 20 74 6f 20 20 20 20 20 20 20 2d 20 45 69 74 68   to       - Eith
ff70: 65 72 20 61 20 73 69 6d 70 6c 65 20 65 6d 61 69  er a simple emai
ff80: 6c 20 61 64 64 72 65 73 73 2c 20 6f 72 20 61 20  l address, or a 
ff90: 6c 69 73 74 20 6f 66 20 7b 65 6d 61 69 6c 61 64  list of {emailad
ffa0: 64 72 20 6e 61 6d 65 7d 0a 23 20 66 72 6f 6d 20  dr name}.# from 
ffb0: 20 20 20 20 2d 20 45 69 74 68 65 72 20 61 20 73      - Either a s
ffc0: 69 6d 70 6c 65 20 65 6d 61 69 6c 20 61 64 64 72  imple email addr
ffd0: 65 73 73 2c 20 6f 72 20 61 20 6c 69 73 74 20 6f  ess, or a list o
ffe0: 66 20 7b 65 6d 61 69 6c 61 64 64 72 20 6e 61 6d  f {emailaddr nam
fff0: 65 7d 0a 23 20 62 6f 64 79 20 20 20 20 20 2d 20  e}.# body     - 
10000 54 68 65 20 6e 65 77 6c 69 6e 65 2d 73 65 70 61  The newline-sepa
10010 72 61 74 65 64 20 65 6d 61 69 6c 20 62 6f 64 79  rated email body
10020 0a 23 0a 73 6d 74 70 20 6d 65 74 68 6f 64 20 73  .#.smtp method s
10030 65 6e 64 20 7b 69 6e 66 6f 7d 20 7b 0a 20 20 20  end {info} {.   
10040 20 69 66 20 7b 24 73 65 72 76 65 72 20 65 71 20   if {$server eq 
10050 22 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65  ""} {.        re
10060 74 75 72 6e 20 22 73 6d 74 70 20 73 65 6e 64 3a  turn "smtp send:
10070 20 6e 6f 20 73 65 72 76 65 72 20 73 70 65 63 69   no server speci
10080 66 69 65 64 22 0a 20 20 20 20 7d 0a 0a 20 20 20  fied".    }..   
10090 20 66 6f 72 65 61 63 68 20 72 65 71 20 7b 73 75   foreach req {su
100a0 62 6a 65 63 74 20 74 6f 20 66 72 6f 6d 20 62 6f  bject to from bo
100b0 64 79 7d 20 7b 0a 20 20 20 20 20 20 20 20 69 66  dy} {.        if
100c0 20 7b 21 5b 65 78 69 73 74 73 20 69 6e 66 6f 28   {![exists info(
100d0 24 72 65 71 29 5d 7d 20 7b 0a 20 20 20 20 20 20  $req)]} {.      
100e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 73 6d        return "sm
100f0 74 70 20 73 65 6e 64 3a 20 6d 69 73 73 69 6e 67  tp send: missing
10100 20 24 72 65 71 22 0a 20 20 20 20 20 20 20 20 7d   $req".        }
10110 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6c 6f 63 61  .    }..    loca
10120 6c 20 70 72 6f 63 20 73 6d 74 70 2e 66 6f 72 6d  l proc smtp.form
10130 61 74 5f 61 64 64 72 20 7b 61 64 64 72 20 7b 6e  at_addr {addr {n
10140 61 6d 65 20 7b 7d 7d 7d 20 7b 0a 20 20 20 20 20  ame {}}} {.     
10150 20 20 20 69 66 20 7b 24 6e 61 6d 65 20 65 71 20     if {$name eq 
10160 22 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ""} {.          
10170 20 20 72 65 74 75 72 6e 20 24 61 64 64 72 0a 20    return $addr. 
10180 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
10190 20 72 65 74 75 72 6e 20 22 5c 22 24 6e 61 6d 65   return "\"$name
101a0 5c 22 20 26 61 6d 70 3b 6c 74 3b 24 61 64 64 72  \" &amp;lt;$addr
101b0 26 61 6d 70 3b 67 74 3b 22 0a 20 20 20 20 7d 0a  &amp;gt;".    }.
101c0 0a 20 20 20 20 73 69 67 6e 61 6c 20 68 61 6e 64  .    signal hand
101d0 6c 65 20 53 49 47 41 4c 52 4d 0a 0a 20 20 20 20  le SIGALRM..    
101e0 23 20 52 75 6e 20 74 68 65 20 70 72 6f 74 6f 63  # Run the protoc
101f0 6f 6c 0a 20 20 20 20 73 65 74 20 72 63 20 5b 63  ol.    set rc [c
10200 61 74 63 68 20 2d 73 69 67 6e 61 6c 20 7b 0a 20  atch -signal {. 
10210 20 20 20 20 20 20 20 61 6c 61 72 6d 20 24 74 69         alarm $ti
10220 6d 65 6f 75 74 0a 20 20 20 20 20 20 20 20 73 65  meout.        se
10230 74 20 73 6f 63 6b 20 5b 73 6f 63 6b 65 74 20 73  t sock [socket s
10240 74 72 65 61 6d 20 24 73 65 72 76 65 72 3a 24 70  tream $server:$p
10250 6f 72 74 5d 0a 0a 20 20 20 20 20 20 20 20 24 73  ort]..        $s
10260 65 6c 66 20 77 68 65 6e 6f 6b 20 32 32 30 20 7b  elf whenok 220 {
10270 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 73 65  .            $se
10280 6c 66 20 70 75 74 73 20 22 48 45 4c 4f 20 5b 69  lf puts "HELO [i
10290 6e 66 6f 20 68 6f 73 74 6e 61 6d 65 5d 22 0a 20  nfo hostname]". 
102a0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
102b0 20 24 73 65 6c 66 20 77 68 65 6e 6f 6b 20 32 35   $self whenok 25
102c0 30 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0 {.            
102d0 24 73 65 6c 66 20 70 75 74 73 20 22 4d 41 49 4c  $self puts "MAIL
102e0 20 46 52 4f 4d 3a 20 5b 6c 69 6e 64 65 78 20 24   FROM: [lindex $
102f0 69 6e 66 6f 28 66 72 6f 6d 29 20 30 5d 22 0a 20  info(from) 0]". 
10300 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
10310 20 24 73 65 6c 66 20 77 68 65 6e 6f 6b 20 32 35   $self whenok 25
10320 30 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0 {.            
10330 24 73 65 6c 66 20 70 75 74 73 20 22 52 43 50 54  $self puts "RCPT
10340 20 54 4f 3a 20 5b 6c 69 6e 64 65 78 20 24 69 6e   TO: [lindex $in
10350 66 6f 28 74 6f 29 20 30 5d 22 0a 20 20 20 20 20  fo(to) 0]".     
10360 20 20 20 7d 0a 20 20 20 20 20 20 20 20 24 73 65     }.        $se
10370 6c 66 20 77 68 65 6e 6f 6b 20 32 35 30 20 7b 0a  lf whenok 250 {.
10380 20 20 20 20 20 20 20 20 20 20 20 20 24 73 65 6c              $sel
10390 66 20 70 75 74 73 20 22 44 41 54 41 22 0a 20 20  f puts "DATA".  
103a0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
103b0 24 73 65 6c 66 20 77 68 65 6e 6f 6b 20 33 35 34  $self whenok 354
103c0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24   {.            $
103d0 73 65 6c 66 20 70 75 74 73 20 22 54 6f 3a 20 5b  self puts "To: [
103e0 73 6d 74 70 2e 66 6f 72 6d 61 74 5f 61 64 64 72  smtp.format_addr
103f0 20 7b 2a 7d 24 69 6e 66 6f 28 74 6f 29 5d 22 0a   {*}$info(to)]".
10400 20 20 20 20 20 20 20 20 20 20 20 20 24 73 65 6c              $sel
10410 66 20 70 75 74 73 20 22 46 72 6f 6d 3a 20 5b 73  f puts "From: [s
10420 6d 74 70 2e 66 6f 72 6d 61 74 5f 61 64 64 72 20  mtp.format_addr 
10430 7b 2a 7d 24 69 6e 66 6f 28 66 72 6f 6d 29 5d 22  {*}$info(from)]"
10440 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
10450 20 52 46 43 38 32 32 20 7b 25 61 2c 20 25 64 20   RFC822 {%a, %d 
10460 25 62 20 25 6d 20 25 59 20 25 48 3a 25 4d 3a 25  %b %m %Y %H:%M:%
10470 53 20 25 7a 7d 0a 20 20 20 20 20 20 20 20 20 20  S %z}.          
10480 20 20 24 73 65 6c 66 20 70 75 74 73 20 22 44 61    $self puts "Da
10490 74 65 3a 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61  te: [clock forma
104a0 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73  t [clock seconds
104b0 5d 20 2d 66 6f 72 6d 61 74 20 24 52 46 43 38 32  ] -format $RFC82
104c0 32 5d 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  2]".            
104d0 24 73 65 6c 66 20 70 75 74 73 20 22 53 75 62 6a  $self puts "Subj
104e0 65 63 74 3a 20 24 69 6e 66 6f 28 73 75 62 6a 65  ect: $info(subje
104f0 63 74 29 22 0a 20 20 20 20 20 20 20 20 20 20 20  ct)".           
10500 20 24 73 65 6c 66 20 70 75 74 73 20 22 22 0a 20   $self puts "". 
10510 20 20 20 20 20 20 20 20 20 20 20 24 73 65 6c 66             $self
10520 20 6c 6f 67 20 22 3d 3d 3d 20 73 65 6e 64 69 6e   log "=== sendin
10530 67 20 62 6f 64 79 22 0a 20 20 20 20 20 20 20 20  g body".        
10540 20 20 20 20 66 6f 72 65 61 63 68 20 6c 69 6e 65      foreach line
10550 20 5b 73 70 6c 69 74 20 24 69 6e 66 6f 28 62 6f   [split $info(bo
10560 64 79 29 20 5c 6e 5d 20 7b 0a 20 20 20 20 20 20  dy) \n] {.      
10570 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73            if {[s
10580 74 72 69 6e 67 20 69 6e 64 65 78 20 24 6c 69 6e  tring index $lin
10590 65 20 30 5d 20 65 71 20 22 2e 22 7d 20 7b 0a 20  e 0] eq "."} {. 
105a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105b0 20 20 20 24 73 6f 63 6b 20 70 75 74 73 20 2d 6e     $sock puts -n
105c0 6f 6e 65 77 6c 69 6e 65 20 22 2e 22 0a 20 20 20  onewline ".".   
105d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
105e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $
105f0 73 6f 63 6b 20 70 75 74 73 20 24 6c 69 6e 65 5c  sock puts $line\
10600 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  r.            }.
10610 20 20 20 20 20 20 20 20 20 20 20 20 24 73 65 6c              $sel
10620 66 20 70 75 74 73 20 22 2e 22 0a 20 20 20 20 20  f puts ".".     
10630 20 20 20 7d 0a 20 20 20 20 20 20 20 20 24 73 65     }.        $se
10640 6c 66 20 77 68 65 6e 6f 6b 20 32 35 30 20 7b 0a  lf whenok 250 {.
10650 20 20 20 20 20 20 20 20 20 20 20 20 24 73 65 6c              $sel
10660 66 20 70 75 74 73 20 22 51 55 49 54 22 0a 20 20  f puts "QUIT".  
10670 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
10680 24 73 65 6c 66 20 77 68 65 6e 6f 6b 20 32 32 31  $self whenok 221
10690 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24   {.            $
106a0 73 65 6c 66 20 6c 6f 67 20 22 3a 3a 3a 20 6f 6b  self log "::: ok
106b0 22 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ".        }.    
106c0 7d 20 65 72 72 6f 72 20 6f 70 74 73 5d 0a 20 20  } error opts].  
106d0 20 20 61 6c 61 72 6d 20 30 0a 0a 20 20 20 20 63    alarm 0..    c
106e0 61 74 63 68 20 7b 20 24 73 6f 63 6b 20 63 6c 6f  atch { $sock clo
106f0 73 65 20 7d 0a 0a 20 20 20 20 69 66 20 7b 24 72  se }..    if {$r
10700 63 7d 20 7b 0a 20 20 20 20 20 20 20 20 24 73 65  c} {.        $se
10710 6c 66 20 6c 6f 67 20 22 21 21 21 20 24 65 72 72  lf log "!!! $err
10720 6f 72 22 0a 20 20 20 20 20 20 20 20 72 65 74 75  or".        retu
10730 72 6e 20 24 65 72 72 6f 72 0a 20 20 20 20 7d 0a  rn $error.    }.
10740 7d 0a 0a 23 20 57 72 69 74 65 20 74 6f 20 74 68  }..# Write to th
10750 65 20 73 6f 63 6b 65 74 20 61 6e 64 20 61 6c 73  e socket and als
10760 6f 20 6c 6f 67 0a 73 6d 74 70 20 6d 65 74 68 6f  o log.smtp metho
10770 64 20 70 75 74 73 20 7b 6d 73 67 7d 20 7b 0a 20  d puts {msg} {. 
10780 20 20 20 24 73 65 6c 66 20 6c 6f 67 20 22 26 61     $self log "&a
10790 6d 70 3b 67 74 3b 26 61 6d 70 3b 67 74 3b 26 61  mp;gt;&amp;gt;&a
107a0 6d 70 3b 67 74 3b 20 24 6d 73 67 22 0a 20 20 20  mp;gt; $msg".   
107b0 20 24 73 6f 63 6b 20 70 75 74 73 20 24 6d 73 67   $sock puts $msg
107c0 5c 72 0a 20 20 20 20 24 73 6f 63 6b 20 66 6c 75  \r.    $sock flu
107d0 73 68 0a 7d 0a 0a 23 20 49 6e 74 65 72 6e 61 6c  sh.}..# Internal
107e0 20 6d 65 74 68 6f 64 0a 23 0a 23 20 57 68 65 6e   method.#.# When
107f0 20 74 68 65 20 73 6f 63 6b 65 74 20 69 73 20 72   the socket is r
10800 65 61 64 61 62 6c 65 2c 20 0a 23 20 72 65 61 64  eadable, .# read
10810 73 20 74 68 65 20 72 65 73 70 6f 6e 73 65 20 61  s the response a
10820 6e 64 20 63 68 65 63 6b 73 20 74 68 65 20 63 6f  nd checks the co
10830 64 65 2c 20 61 6e 64 20 69 66 20 4f 4b 2c 20 65  de, and if OK, e
10840 78 65 63 75 74 65 20 74 68 65 20 24 73 63 72 69  xecute the $scri
10850 70 74 0a 23 20 49 66 20 6e 6f 74 20 4f 4b 2c 20  pt.# If not OK, 
10860 72 65 74 75 72 6e 73 20 77 69 74 68 20 61 20 27  returns with a '
10870 62 72 65 61 6b 27 20 72 65 74 75 72 6e 20 63 6f  break' return co
10880 64 65 20 61 6e 64 20 61 20 6d 65 73 73 61 67 65  de and a message
10890 0a 73 6d 74 70 20 6d 65 74 68 6f 64 20 77 68 65  .smtp method whe
108a0 6e 6f 6b 20 7b 63 6f 64 65 20 73 63 72 69 70 74  nok {code script
108b0 7d 20 7b 0a 20 20 20 20 61 6c 61 72 6d 20 24 74  } {.    alarm $t
108c0 69 6d 65 6f 75 74 0a 0a 20 20 20 20 69 66 20 7b  imeout..    if {
108d0 5b 24 73 6f 63 6b 20 67 65 74 73 20 62 75 66 5d  [$sock gets buf]
108e0 20 26 61 6d 70 3b 6c 74 3b 20 30 7d 20 7b 0a 20   &amp;lt; 0} {. 
108f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 63         return -c
10900 6f 64 65 20 62 72 65 61 6b 20 22 45 78 70 65 63  ode break "Expec
10910 74 65 64 20 24 63 6f 64 65 20 62 75 74 20 67 6f  ted $code but go
10920 74 20 45 4f 46 22 0a 20 20 20 20 7d 0a 20 20 20  t EOF".    }.   
10930 20 24 73 65 6c 66 20 6c 6f 67 20 22 26 61 6d 70   $self log "&amp
10940 3b 6c 74 3b 26 61 6d 70 3b 6c 74 3b 26 61 6d 70  ;lt;&amp;lt;&amp
10950 3b 6c 74 3b 20 24 62 75 66 22 0a 20 20 20 20 6c  ;lt; $buf".    l
10960 61 73 73 69 67 6e 20 24 62 75 66 20 72 65 63 76  assign $buf recv
10970 0a 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67  .    if {[string
10980 20 72 61 6e 67 65 20 24 72 65 63 76 20 30 20 32   range $recv 0 2
10990 5d 20 6e 65 20 24 63 6f 64 65 7d 20 7b 0a 20 20  ] ne $code} {.  
109a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 63 6f        return -co
109b0 64 65 20 62 72 65 61 6b 20 22 45 78 70 65 63 74  de break "Expect
109c0 65 64 20 24 63 6f 64 65 20 62 75 74 20 67 6f 74  ed $code but got
109d0 3a 20 24 62 75 66 22 0a 20 20 20 20 7d 0a 20 20  : $buf".    }.  
109e0 20 20 23 20 49 6e 76 6f 6b 65 20 74 68 65 20 73    # Invoke the s
109f0 63 72 69 70 74 20 69 6e 20 74 68 65 20 6f 72 69  cript in the ori
10a00 67 69 6e 61 6c 20 63 61 6c 6c 66 72 61 6d 65 0a  ginal callframe.
10a10 20 20 20 20 75 70 6c 65 76 65 6c 20 32 20 24 73      uplevel 2 $s
10a20 63 72 69 70 74 0a 7d 0a 26 6c 74 3b 2f 70 72 65  cript.}.&lt;/pre
10a30 26 67 74 3b 0a 0a 26 6c 74 3b 70 26 67 74 3b 53  &gt;..&lt;p&gt;S
10a40 74 65 76 65 20 42 65 6e 6e 65 74 74 20 28 26 6c  teve Bennett (&l
10a50 74 3b 61 20 68 72 65 66 3d 22 26 61 6d 70 3b 23  t;a href="&amp;#
10a60 31 30 39 3b 26 61 6d 70 3b 23 30 39 37 3b 26 61  109;&amp;#097;&a
10a70 6d 70 3b 23 31 30 35 3b 26 61 6d 70 3b 23 31 30  mp;#105;&amp;#10
10a80 38 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d 70  8;&amp;#116;&amp
10a90 3b 23 31 31 31 3b 3a 26 61 6d 70 3b 23 31 31 35  ;#111;:&amp;#115
10aa0 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d 70 3b  ;&amp;#116;&amp;
10ab0 23 31 30 31 3b 26 61 6d 70 3b 23 31 31 38 3b 26  #101;&amp;#118;&
10ac0 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23 30  amp;#101;&amp;#0
10ad0 39 38 3b 26 61 6d 70 3b 23 30 36 34 3b 26 61 6d  98;&amp;#064;&am
10ae0 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23 31 31 31  p;#119;&amp;#111
10af0 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d 70 3b  ;&amp;#114;&amp;
10b00 23 31 30 37 3b 26 61 6d 70 3b 23 31 31 39 3b 26  #107;&amp;#119;&
10b10 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b 23 31  amp;#097;&amp;#1
10b20 31 34 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d  14;&amp;#101;&am
10b30 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23 31 31 30  p;#046;&amp;#110
10b40 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b  ;&amp;#101;&amp;
10b50 23 31 31 36 3b 26 61 6d 70 3b 23 30 34 36 3b 26  #116;&amp;#046;&
10b60 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b 23 31  amp;#097;&amp;#1
10b70 31 37 3b 22 26 67 74 3b 26 61 6d 70 3b 23 31 31  17;"&gt;&amp;#11
10b80 35 3b 26 61 6d 70 3b 23 31 31 36 3b 26 61 6d 70  5;&amp;#116;&amp
10b90 3b 23 31 30 31 3b 26 61 6d 70 3b 23 31 31 38 3b  ;#101;&amp;#118;
10ba0 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70 3b 23  &amp;#101;&amp;#
10bb0 30 39 38 3b 26 61 6d 70 3b 23 30 36 34 3b 26 61  098;&amp;#064;&a
10bc0 6d 70 3b 23 31 31 39 3b 26 61 6d 70 3b 23 31 31  mp;#119;&amp;#11
10bd0 31 3b 26 61 6d 70 3b 23 31 31 34 3b 26 61 6d 70  1;&amp;#114;&amp
10be0 3b 23 31 30 37 3b 26 61 6d 70 3b 23 31 31 39 3b  ;#107;&amp;#119;
10bf0 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b 23  &amp;#097;&amp;#
10c00 31 31 34 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61  114;&amp;#101;&a
10c10 6d 70 3b 23 30 34 36 3b 26 61 6d 70 3b 23 31 31  mp;#046;&amp;#11
10c20 30 3b 26 61 6d 70 3b 23 31 30 31 3b 26 61 6d 70  0;&amp;#101;&amp
10c30 3b 23 31 31 36 3b 26 61 6d 70 3b 23 30 34 36 3b  ;#116;&amp;#046;
10c40 26 61 6d 70 3b 23 30 39 37 3b 26 61 6d 70 3b 23  &amp;#097;&amp;#
10c50 31 31 37 3b 26 6c 74 3b 2f 61 26 67 74 3b 29 26  117;&lt;/a&gt;)&
10c60 6c 74 3b 2f 70 26 67 74 3b 0a 3c 2f 63 6f 6e 74  lt;/p&gt;.</cont
10c70 65 6e 74 3e 0a 20 20 3c 2f 65 6e 74 72 79 3e 0a  ent>.  </entry>.
10c80 3c 2f 66 65 65 64 3e 0a                          </feed>.