Jim Tcl
Check-in [075597ef08]
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Release notes for 0.79
Timelines: family | ancestors | descendants | both | www
Files: files | file ages | folders
SHA1: 075597ef08c1486c6479c60c71ad5b677ed35221
User & Date: steveb 2019-11-20 01:29:16
Context
2020-02-09
00:50
Update website. Primary repo has moved to github check-in: 5db7a6f0b2 user: steveb tags: www
2019-11-20
01:29
Release notes for 0.79 check-in: 075597ef08 user: steveb tags: www
2018-07-01
00:55
Add release notes for v0.78 check-in: 1d37d7b8ed user: steveb tags: www
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Added www/Makefile.











>
>
>
>
>
1
2
3
4
5
all:
	@make -C .. all

%:
	@make -C .. $@

Changes to www/about/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - About Jim Tcl</title>
    <link rel="stylesheet" type="text/css" href="../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../css/sh_style.css" media="screen">
	
	<script src="../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
			
			<li class="stdlink"><a href="../extensions/">Extensions</a></li>
		
			
			<li class="stdlink"><a href="../license/">License</a></li>
		
			
			<li class="stdlink"><span class="active" title="You're here.">About</span></li>
		
      </ul>
      <h2>Community</h2>
      <ul>
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|











|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - About Jim Tcl</title>
    <link rel="stylesheet" type="text/css" href="../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../css/sh_style.css" media="screen">
	
	<script src="../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
			
			<li class="stdlink"><a href="../extensions/">Extensions</a></li>
		
			
			<li class="stdlink"><a href="../license/">License</a></li>
		
			
			<li class="stdlink"><span class="active">About</span></li>
		
      </ul>
      <h2>Community</h2>
      <ul>
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/2010-09-09/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
...
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
...
292
293
294
295
296
297
298
299
300

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - SMTP Mail with Jim</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
web application. There are many ways to achieve this, including via
a command line application, but I chose to use the networking
capabilities of Jim to send email directly via SMTP. It turned out
to be remarkably easy.</p>

<p>First the test code:</p>

<pre class="sh_tcl">
# Test the smtp package

package require smtp

# Subclass smtp to provide a custom log method
class smtp_log smtp {}

smtp_log method log {msg} {
................................................................................
</code></pre>

<p>And here is the smtp package (<code>smtp.tcl</code>). Note the use of
<code>alarm/signal/catch -signal</code> to implement the timeout.</p>

<p>This package is built as an OO class.</p>

<pre class="sh_tcl">
# Package supporting sending email via direct SMTP

package require oo

# class to send emails via SMTP
#
# The following class variables are supported
#
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







<
|







 







<
|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
49
50
51
52
53
54
55

56
57
58
59
60
61
62
63
...
104
105
106
107
108
109
110

111
112
113
114
115
116
117
118
...
287
288
289
290
291
292
293
294
295
296

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - SMTP Mail with Jim</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
web application. There are many ways to achieve this, including via
a command line application, but I chose to use the networking
capabilities of Jim to send email directly via SMTP. It turned out
to be remarkably easy.</p>

<p>First the test code:</p>


<pre class="sh_tcl"># Test the smtp package

package require smtp

# Subclass smtp to provide a custom log method
class smtp_log smtp {}

smtp_log method log {msg} {
................................................................................
</code></pre>

<p>And here is the smtp package (<code>smtp.tcl</code>). Note the use of
<code>alarm/signal/catch -signal</code> to implement the timeout.</p>

<p>This package is built as an OO class.</p>


<pre class="sh_tcl"># Package supporting sending email via direct SMTP

package require oo

# class to send emails via SMTP
#
# The following class variables are supported
#
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/2010-10-29/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
...
131
132
133
134
135
136
137
138
139

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Announcing Jim Tcl version 0.63</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		
		</div>
		<div class="main" id="main">
		
			<p class="articledate">Friday, 29 October 2010</p>
			<h2 class="news">Announcing Jim Tcl version 0.63</h2>
		
		<p>Jim Tcl 0.63 has been released and is available from: </p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a></p>

<h2 id="changes-since-version-051">CHANGES SINCE VERSION 0.51</h2>

<p>This is a major update which incorporates many bug fixes and new features.</p>

<p>Some of the new features over Jim 0.51 include:</p>

<ul>
  <li>Now includes comprehensive documentation
See: <a href="http://repo.or.cz/w/jimtcl.git/blob_plain/HEAD:/Tcl_shipped.html">Tcl_Shipped.html</a>
</li>
  <li>Now includes extensive unit tests</li>
  <li>Far better tracking of source location, including ‘info source’, ‘stacktrace’ and ‘stackdump’</li>
  <li>Networking support includes IPv6, working UDP support, ‘socket pipe’</li>
  <li>Many bug fixes and improvements in ‘expr’</li>
  <li>‘exec’ improvements including redirection options and respect for $::env</li>
  <li>Full ‘configure’ support for static extensions</li>
</ul>
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|











|
<







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60

61
62
63
64
65
66
67
...
127
128
129
130
131
132
133
134
135
136

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Announcing Jim Tcl version 0.63</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		
		</div>
		<div class="main" id="main">
		
			<p class="articledate">Friday, 29 October 2010</p>
			<h2 class="news">Announcing Jim Tcl version 0.63</h2>
		
		<p>Jim Tcl 0.63 has been released and is available from:</p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a></p>

<h2 id="changes-since-version-051">CHANGES SINCE VERSION 0.51</h2>

<p>This is a major update which incorporates many bug fixes and new features.</p>

<p>Some of the new features over Jim 0.51 include:</p>

<ul>
  <li>Now includes comprehensive documentation
See: <a href="http://repo.or.cz/w/jimtcl.git/blob_plain/HEAD:/Tcl_shipped.html">Tcl_Shipped.html</a></li>

  <li>Now includes extensive unit tests</li>
  <li>Far better tracking of source location, including ‘info source’, ‘stacktrace’ and ‘stackdump’</li>
  <li>Networking support includes IPv6, working UDP support, ‘socket pipe’</li>
  <li>Many bug fixes and improvements in ‘expr’</li>
  <li>‘exec’ improvements including redirection options and respect for $::env</li>
  <li>Full ‘configure’ support for static extensions</li>
</ul>
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/2010-11-03/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
..
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
...
134
135
136
137
138
139
140
141
142

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - expr shorthand syntax</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<div class="main" id="main">
		
			<p class="articledate">Wednesday, 03 November 2010</p>
			<h2 class="news">expr shorthand syntax</h2>
		
		<p>One of the biggest complaints about Tcl is it’s verbosity for common expressions. Consider:</p>

<pre class="sh_tcl">
set sublist [lrange $list [expr {$a + 1}] [expr {$b - 1}]]
</pre>

<p>This is mitigated somewhat in list and string index and ranges
expression which support the notation <code>int+int</code> or <code>int-int</code>. However,
many simple, common expressions are still cumbersome.</p>

<p>There has been much <a href="http://wiki.tcl.tk/8389">discussion</a> about
................................................................................
shorthand notation for expr, however as for many things with Tcl,
progress is slow or non-existent.</p>

<p>There is no need to suffer the same fate for Jim, though. So I
implemented a trivial patch to support the syntax <code>$(...)</code> as a
shorthand for expr.  Let’s see how it looks:</p>

<pre class="sh_tcl">
. set x $(3 + 4)
7
. incr y $(7 * [incr x])
56
. set z $("bb" in {aa bb cc})
1
</pre>

................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







<
|







 







|
<







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
43
44
45
46
47
48
49

50
51
52
53
54
55
56
57
..
58
59
60
61
62
63
64
65

66
67
68
69
70
71
72
...
129
130
131
132
133
134
135
136
137
138

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - expr shorthand syntax</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<div class="main" id="main">
		
			<p class="articledate">Wednesday, 03 November 2010</p>
			<h2 class="news">expr shorthand syntax</h2>
		
		<p>One of the biggest complaints about Tcl is it’s verbosity for common expressions. Consider:</p>


<pre class="sh_tcl">set sublist [lrange $list [expr {$a + 1}] [expr {$b - 1}]]
</pre>

<p>This is mitigated somewhat in list and string index and ranges
expression which support the notation <code>int+int</code> or <code>int-int</code>. However,
many simple, common expressions are still cumbersome.</p>

<p>There has been much <a href="http://wiki.tcl.tk/8389">discussion</a> about
................................................................................
shorthand notation for expr, however as for many things with Tcl,
progress is slow or non-existent.</p>

<p>There is no need to suffer the same fate for Jim, though. So I
implemented a trivial patch to support the syntax <code>$(...)</code> as a
shorthand for expr.  Let’s see how it looks:</p>

<pre class="sh_tcl">. set x $(3 + 4)

7
. incr y $(7 * [incr x])
56
. set z $("bb" in {aa bb cc})
1
</pre>

................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/2010-11-15/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
...
126
127
128
129
130
131
132
133
134

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - IPv6 Support</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................

<p>You can read more about it in the documentation at:
<a href="http://repo.or.cz/w/jimtcl.git/blob_plain/master:/Tcl_shipped.html#_socket">socket</a></p>

<p>Basically it is a matter of specifying <code>-ipv6</code> when creating the
socket and giving an IPv6 address. For example:</p>

<pre class="sh_tcl">
set s [socket -ipv6 stream.server {[::]:2000}]
</pre>

<p>Note that IPv6 addresses are enclosed in square brackets. This is
the same notation used for IPv6 URLs and makes it easy to keep the
address:port syntax.</p>

<p>The address returned by <code>recvfrom</code> will be formatted appropriately, so it can be used directly by <code>sendto</code>.</p>
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







<
|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
50
51
52
53
54
55
56

57
58
59
60
61
62
63
64
...
122
123
124
125
126
127
128
129
130
131

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - IPv6 Support</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................

<p>You can read more about it in the documentation at:
<a href="http://repo.or.cz/w/jimtcl.git/blob_plain/master:/Tcl_shipped.html#_socket">socket</a></p>

<p>Basically it is a matter of specifying <code>-ipv6</code> when creating the
socket and giving an IPv6 address. For example:</p>


<pre class="sh_tcl">set s [socket -ipv6 stream.server {[::]:2000}]
</pre>

<p>Note that IPv6 addresses are enclosed in square brackets. This is
the same notation used for IPv6 URLs and makes it easy to keep the
address:port syntax.</p>

<p>The address returned by <code>recvfrom</code> will be formatted appropriately, so it can be used directly by <code>sendto</code>.</p>
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/2010-11-24/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
...
108
109
110
111
112
113
114
115
116

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - A History of Jim</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
...
105
106
107
108
109
110
111
112
113
114

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - A History of Jim</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/2011-04-14/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
...
118
119
120
121
122
123
124
125
126

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Announcing Jim Tcl version 0.70</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		
		</div>
		<div class="main" id="main">
		
			<p class="articledate">Thursday, 14 April 2011</p>
			<h2 class="news">Announcing Jim Tcl version 0.70</h2>
		
		<p>Jim Tcl 0.70 has been released and is available from: </p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a>
or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<h2 id="changes-since-version-063">CHANGES SINCE VERSION 0.63</h2>

<p>This is a major update which incorporates many bug fixes and
several new features, including:</p>

<ul>
  <li>Optional UTF-8 support</li>
  <li>Optional built-in regexp engines for better Tcl compatibility and UTF-8 support</li>
  <li>Command line editing with linenoise</li>
  <li>Pure-Tcl OO extension </li>
  <li>exec uses only vfork() for full functionality on no-mmu uClinux</li>
</ul>

<p>Steve Bennett (<a href="mailto:steveb@workware.net.au">steveb@workware.net.au</a>)</p>

		
			<hr id="#comments">
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|













|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
...
115
116
117
118
119
120
121
122
123
124

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Announcing Jim Tcl version 0.70</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		
		</div>
		<div class="main" id="main">
		
			<p class="articledate">Thursday, 14 April 2011</p>
			<h2 class="news">Announcing Jim Tcl version 0.70</h2>
		
		<p>Jim Tcl 0.70 has been released and is available from:</p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a>
or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<h2 id="changes-since-version-063">CHANGES SINCE VERSION 0.63</h2>

<p>This is a major update which incorporates many bug fixes and
several new features, including:</p>

<ul>
  <li>Optional UTF-8 support</li>
  <li>Optional built-in regexp engines for better Tcl compatibility and UTF-8 support</li>
  <li>Command line editing with linenoise</li>
  <li>Pure-Tcl OO extension</li>
  <li>exec uses only vfork() for full functionality on no-mmu uClinux</li>
</ul>

<p>Steve Bennett (<a href="mailto:steveb@workware.net.au">steveb@workware.net.au</a>)</p>

		
			<hr id="#comments">
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/2011-04-22/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
...
140
141
142
143
144
145
146
147
148

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Roadmap for Jim Tcl</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
...
137
138
139
140
141
142
143
144
145
146

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Roadmap for Jim Tcl</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/2011-04-24/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
...
105
106
107
108
109
110
111
112
113

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - New Website Launched</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
...
102
103
104
105
106
107
108
109
110
111

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - New Website Launched</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/binary-cheatsheet/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
...
223
224
225
226
227
228
229
230
231

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Binary Cheatsheet</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
this cheatsheet a handy reference.</p>

<table>
  <tbody>
    <tr>
      <td><code> </code></td>
      <td><strong>Endian</strong></td>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
    <tr>
      <td><strong>Little</strong></td>
      <td><strong>Big</strong></td>
      <td><strong>Host</strong></td>
      <td><strong>Type</strong></td>
      <td><strong>Notes</strong></td>
    </tr>
    <tr>
      <td><code>a</code></td>
      <td> </td>
      <td> </td>
      <td>byte string</td>
      <td>format pads with nulls</td>
    </tr>
    <tr>
      <td><code>A</code></td>
      <td> </td>
      <td> </td>
      <td>byte string</td>
      <td>format pads with spaces, scan strips trailing spaces/nulls</td>
    </tr>
    <tr>
      <td><code>b</code></td>
      <td><code>B</code></td>
      <td> </td>
      <td>binary digits</td>
      <td> </td>
    </tr>
    <tr>
      <td><code>h</code></td>
      <td><code>H</code></td>
      <td> </td>
      <td>hex digits</td>
      <td> </td>
    </tr>
    <tr>
      <td><code>c</code></td>
      <td> </td>
      <td> </td>
      <td>8 bit integer list</td>
      <td>In other words, ASCII chars</td>
    </tr>
    <tr>
      <td><code>s</code></td>
      <td><code>S</code></td>
      <td><code>t</code></td>
      <td>16 bit integer list</td>
      <td> </td>
    </tr>
    <tr>
      <td><code>i</code></td>
      <td><code>I</code></td>
      <td><code>n</code></td>
      <td>32 bit integer list</td>
      <td> </td>
    </tr>
    <tr>
      <td><code>w</code></td>
      <td><code>W</code></td>
      <td><code>m</code></td>
      <td>64 bit integer list</td>
      <td> </td>
    </tr>
    <tr>
      <td><code>r</code></td>
      <td><code>R</code></td>
      <td><code>f</code></td>
      <td>single prec. float list</td>
      <td> </td>
    </tr>
    <tr>
      <td><code>q</code></td>
      <td><code>Q</code></td>
      <td><code>d</code></td>
      <td>double prec. float list</td>
      <td> </td>
    </tr>
    <tr>
      <td><code>x</code></td>
      <td> </td>
      <td> </td>
      <td>null bytes</td>
      <td>count is number of bytes</td>
    </tr>
    <tr>
      <td><code>X</code></td>
      <td> </td>
      <td> </td>
      <td>move cursor back</td>
      <td>count is number of bytes to back up</td>
    </tr>
    <tr>
      <td><code>@</code></td>
      <td> </td>
      <td> </td>
      <td>move cursor to location</td>
      <td>count is byte position, zero based</td>
    </tr>
  </tbody>
</table>

<p><strong>Examples</strong></p>

<pre class="sh_tcl">
set bin [binary format I2sH2a* {0x123 0x456} 17 ab "testing"]

# This returns 4 (number of conversions)
binary scan $bin I2sH2a* intlist intval hexval str
</pre>

<p>Steve Bennett (<a href="mailto:steveb@workware.net.au">steveb@workware.net.au</a>)</p>

................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|
|
|










|
|





|
|






|

|




|

|



|
|








|






|






|






|






|



|
|





|
|





|
|








<
|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163

164
165
166
167
168
169
170
171
...
219
220
221
222
223
224
225
226
227
228

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Binary Cheatsheet</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
this cheatsheet a handy reference.</p>

<table>
  <tbody>
    <tr>
      <td><code> </code></td>
      <td><strong>Endian</strong></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><strong>Little</strong></td>
      <td><strong>Big</strong></td>
      <td><strong>Host</strong></td>
      <td><strong>Type</strong></td>
      <td><strong>Notes</strong></td>
    </tr>
    <tr>
      <td><code>a</code></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>byte string</td>
      <td>format pads with nulls</td>
    </tr>
    <tr>
      <td><code>A</code></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>byte string</td>
      <td>format pads with spaces, scan strips trailing spaces/nulls</td>
    </tr>
    <tr>
      <td><code>b</code></td>
      <td><code>B</code></td>
      <td>&nbsp;</td>
      <td>binary digits</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><code>h</code></td>
      <td><code>H</code></td>
      <td>&nbsp;</td>
      <td>hex digits</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><code>c</code></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>8 bit integer list</td>
      <td>In other words, ASCII chars</td>
    </tr>
    <tr>
      <td><code>s</code></td>
      <td><code>S</code></td>
      <td><code>t</code></td>
      <td>16 bit integer list</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><code>i</code></td>
      <td><code>I</code></td>
      <td><code>n</code></td>
      <td>32 bit integer list</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><code>w</code></td>
      <td><code>W</code></td>
      <td><code>m</code></td>
      <td>64 bit integer list</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><code>r</code></td>
      <td><code>R</code></td>
      <td><code>f</code></td>
      <td>single prec. float list</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><code>q</code></td>
      <td><code>Q</code></td>
      <td><code>d</code></td>
      <td>double prec. float list</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><code>x</code></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>null bytes</td>
      <td>count is number of bytes</td>
    </tr>
    <tr>
      <td><code>X</code></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>move cursor back</td>
      <td>count is number of bytes to back up</td>
    </tr>
    <tr>
      <td><code>@</code></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>move cursor to location</td>
      <td>count is byte position, zero based</td>
    </tr>
  </tbody>
</table>

<p><strong>Examples</strong></p>


<pre class="sh_tcl">set bin [binary format I2sH2a* {0x123 0x456} 17 ab "testing"]

# This returns 4 (number of conversions)
binary scan $bin I2sH2a* intlist intval hexval str
</pre>

<p>Steve Bennett (<a href="mailto:steveb@workware.net.au">steveb@workware.net.au</a>)</p>

................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/bootstrap-jimsh/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
...
153
154
155
156
157
158
159
160
161

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Bootstrap jimsh</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
system doesn’t have a suitable Tcl interpreter available?  The
solution is a bootstrap version of Jim Tcl is included in the
distribution as a <strong>single source file</strong> and simply requires a C compiler
to create the interpreter.  In fact, autosetup automatically
determines if no suitable and interpreter is available and seamlessly
builds and runs the bootstrap interpreter.</p>

<pre class="sh_unix">
$ ./configure 
No installed jimsh or tclsh, building local bootstrap jimsh0
Host System...x86_64-apple-darwin10.7.0
Build System...x86_64-apple-darwin10.7.0
C compiler...ccache cc -g -O2
C++ compiler...ccache c++ -g -O2
Checking for stdlib.h...ok
...
</pre>

<p>A script to create the bootstrap interpreter source is included in the
<a href="http://repo.or.cz/w/jimtcl.git/blob/HEAD:/make-bootstrap-jim">jimtcl git repository</a></p>

<pre class="sh_unix">
$ sh make-bootstrap-jim &gt;jimsh0.c
$ time cc -o jimsh0 jimsh0.c
real   0m1.339s
user   0m1.121s
sys    0m0.109s
$ ./jimsh0
Welcome to Jim version 0.71
. 
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|
<












<
|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
69
70
71
72
73
74
75
76

77
78
79
80
81
82
83
84
85
86
87
88

89
90
91
92
93
94
95
96
...
148
149
150
151
152
153
154
155
156
157

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Bootstrap jimsh</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
system doesn’t have a suitable Tcl interpreter available?  The
solution is a bootstrap version of Jim Tcl is included in the
distribution as a <strong>single source file</strong> and simply requires a C compiler
to create the interpreter.  In fact, autosetup automatically
determines if no suitable and interpreter is available and seamlessly
builds and runs the bootstrap interpreter.</p>

<pre class="sh_unix">$ ./configure 

No installed jimsh or tclsh, building local bootstrap jimsh0
Host System...x86_64-apple-darwin10.7.0
Build System...x86_64-apple-darwin10.7.0
C compiler...ccache cc -g -O2
C++ compiler...ccache c++ -g -O2
Checking for stdlib.h...ok
...
</pre>

<p>A script to create the bootstrap interpreter source is included in the
<a href="http://repo.or.cz/w/jimtcl.git/blob/HEAD:/make-bootstrap-jim">jimtcl git repository</a></p>


<pre class="sh_unix">$ sh make-bootstrap-jim &gt;jimsh0.c
$ time cc -o jimsh0 jimsh0.c
real   0m1.339s
user   0m1.121s
sys    0m0.109s
$ ./jimsh0
Welcome to Jim version 0.71
. 
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
..
44
45
46
47
48
49
50



51
52
53
54
55
56
57
...
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
...
161
162
163
164
165
166
167
168
169

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - All News Articles</title>
    <link rel="stylesheet" type="text/css" href="../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../css/sh_style.css" media="screen">
	
	<link rel="alternate" type="application/rss+xml" title="News" href="../feed.xml">
	
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
			 
		
		</div>
		<div class="main" id="main">
		
		<h1 id="all-news-articles">All News Articles</h1>




<p class="articledate">Sunday, 01 July 2018</p>
<h2 class="news"><a href="jim-release-0-78/">Jim Tcl version 0.78</a></h2>

<p class="articledate">Sunday, 04 September 2016</p>
<h2 class="news"><a href="jim-release-0-77/">Jim Tcl version 0.77</a></h2>

<p class="articledate">Saturday, 31 January 2015</p>
................................................................................

<p class="articledate">Friday, 29 October 2010</p>
<h2 class="news"><a href="2010-10-29/">Announcing Jim Tcl version 0.63</a></h2>

<p class="articledate">Thursday, 09 September 2010</p>
<h2 class="news"><a href="2010-09-09/">SMTP Mail with Jim</a></h2>


		
		</div>
	</div>
    <div id="sidebar">
      <h2>About Jim Tcl</h2>
      <ul>
		
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







>
>
>







 







<







 







|
|
>

1


2
3
4
5
6
7
8
..
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
..
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
...
122
123
124
125
126
127
128

129
130
131
132
133
134
135
...
160
161
162
163
164
165
166
167
168
169

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - All News Articles</title>
    <link rel="stylesheet" type="text/css" href="../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../css/sh_style.css" media="screen">
	
	<link rel="alternate" type="application/rss+xml" title="News" href="../feed.xml">
	
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
			 
		
		</div>
		<div class="main" id="main">
		
		<h1 id="all-news-articles">All News Articles</h1>

<p class="articledate">Wednesday, 20 November 2019</p>
<h2 class="news"><a href="jim-release-0-79/">Jim Tcl version 0.79</a></h2>

<p class="articledate">Sunday, 01 July 2018</p>
<h2 class="news"><a href="jim-release-0-78/">Jim Tcl version 0.78</a></h2>

<p class="articledate">Sunday, 04 September 2016</p>
<h2 class="news"><a href="jim-release-0-77/">Jim Tcl version 0.77</a></h2>

<p class="articledate">Saturday, 31 January 2015</p>
................................................................................

<p class="articledate">Friday, 29 October 2010</p>
<h2 class="news"><a href="2010-10-29/">Announcing Jim Tcl version 0.63</a></h2>

<p class="articledate">Thursday, 09 September 2010</p>
<h2 class="news"><a href="2010-09-09/">SMTP Mail with Jim</a></h2>


		
		</div>
	</div>
    <div id="sidebar">
      <h2>About Jim Tcl</h2>
      <ul>
		
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/jim-is-modular/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
...
145
146
147
148
149
150
151
152
153

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Jim Is Modular</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
...
142
143
144
145
146
147
148
149
150
151

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Jim Is Modular</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/jim-release-0-71/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
...
140
141
142
143
144
145
146
147
148

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Jim Tcl version 0.71</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<div class="main" id="main">
		
			<p class="articledate">Friday, 24 June 2011</p>
			<h2 class="news">Jim Tcl version 0.71</h2>
		
		<h2 id="announce-jim-tcl-version-071">ANNOUNCE: Jim Tcl version 0.71</h2>

<p>Jim Tcl 0.71 has been released and is available from: </p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<h2 id="changes-since-version-070">CHANGES SINCE VERSION 0.70</h2>

<p>This release incorporates bug fixes and
several new features, including:</p>
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
...
137
138
139
140
141
142
143
144
145
146

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Jim Tcl version 0.71</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<div class="main" id="main">
		
			<p class="articledate">Friday, 24 June 2011</p>
			<h2 class="news">Jim Tcl version 0.71</h2>
		
		<h2 id="announce-jim-tcl-version-071">ANNOUNCE: Jim Tcl version 0.71</h2>

<p>Jim Tcl 0.71 has been released and is available from:</p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<h2 id="changes-since-version-070">CHANGES SINCE VERSION 0.70</h2>

<p>This release incorporates bug fixes and
several new features, including:</p>
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/jim-release-0-72/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
...
152
153
154
155
156
157
158
159
160

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Jim Tcl version 0.72</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<div class="main" id="main">
		
			<p class="articledate">Thursday, 06 October 2011</p>
			<h2 class="news">Jim Tcl version 0.72</h2>
		
		<h2 id="announce-jim-tcl-version-072">ANNOUNCE: Jim Tcl version 0.72</h2>

<p>Jim Tcl 0.72 has been released and is available from: </p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<h2 id="changes-since-version-071">CHANGES SINCE VERSION 0.71</h2>

<p>This release incorporates bug fixes and many new features.</p>

................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
...
149
150
151
152
153
154
155
156
157
158

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Jim Tcl version 0.72</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<div class="main" id="main">
		
			<p class="articledate">Thursday, 06 October 2011</p>
			<h2 class="news">Jim Tcl version 0.72</h2>
		
		<h2 id="announce-jim-tcl-version-072">ANNOUNCE: Jim Tcl version 0.72</h2>

<p>Jim Tcl 0.72 has been released and is available from:</p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<h2 id="changes-since-version-071">CHANGES SINCE VERSION 0.71</h2>

<p>This release incorporates bug fixes and many new features.</p>

................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/jim-release-0-73/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
...
156
157
158
159
160
161
162
163
164

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Jim Tcl version 0.73</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<div class="main" id="main">
		
			<p class="articledate">Thursday, 22 December 2011</p>
			<h2 class="news">Jim Tcl version 0.73</h2>
		
		<h2 id="announce-jim-tcl-version-073">ANNOUNCE: Jim Tcl version 0.73</h2>

<p>Jim Tcl 0.73 has been released and is available from: </p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<p>Find out all about Jim Tcl at <a href="http://jim.tcl.tk/">http://jim.tcl.tk/</a></p>

<h2 id="changes-since-version-072">CHANGES SINCE VERSION 0.72</h2>

<p>This release incorporates bug fixes and many new features.
A summary is below. See git for the full changelog.</p>

<p><strong>Bugs fixed in version 0.73</strong></p>

<ul>
  <li>
<code>exec</code> on cygwin now correctly passes $::env</li>
  <li>On mingw and cygwin, <code>--shared</code> creates libjim.dll rather than libjim.so</li>
  <li>UTF-8 case folding may change the encoded length</li>
  <li>Fix a <code>regexp</code> infinite loop on invalid UTF-8 strings</li>
  <li>Prevent infinite recursion in <code>eval</code>
</li>
  <li>Don’t allow <code>upvar</code> to a higher level</li>
  <li>
<code>regexp</code> counted matches may be wrong on subsequent use</li>
  <li>Form feed (\f) is a valid white space character</li>
  <li>Parsing bug for quoted orphan $</li>
  <li>Standard handles were not being kept open</li>
  <li>Fix edge cases with <code>tailcall</code>
</li>
</ul>

<p><strong>Features added in version 0.73</strong></p>

<ul>
  <li>Added support for namespaces and the <code>namespace</code> command</li>
  <li>The “full” sqlite3 extension is included in the repo</li>
  <li>Built-in regexp now support non-capturing parentheses: <code>(?:...)</code>
</li>
  <li>Added <code>string replace</code> and <code>string totitle</code>
</li>
  <li>Added <code>info statics</code> to access proc static variables</li>
  <li>Added <code>info alias</code> to access the target of an alias</li>
  <li>Added <code>build-jim-ext</code> for easy separate building of loadable modules (extensions)</li>
  <li>
<code>local</code> now works with any command, not just procs</li>
  <li>UTF-8 encoding past the basic multilingual plane (BMP) is supported</li>
  <li>Added <code>tcl::prefix</code>
</li>
  <li>Added the <code>history</code> command to access command line editing and history from scripts</li>
  <li>Added a Tcl-compatible <code>apply</code> command</li>
  <li>Most extensions are now enabled by default</li>
  <li>Jim Tcl now compiles with MSVC on Windows (but no build support)</li>
</ul>

<p>Steve Bennett (<a href="mailto:steveb@workware.net.au">steveb@workware.net.au</a>)</p>
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|













<
|



|
<

<
|



|
<







|
<
|
<



<
|

|
<







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

64
65
66
67
68

69

70
71
72
73
74

75
76
77
78
79
80
81
82

83

84
85
86

87
88
89

90
91
92
93
94
95
96
...
145
146
147
148
149
150
151
152
153
154

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Jim Tcl version 0.73</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<div class="main" id="main">
		
			<p class="articledate">Thursday, 22 December 2011</p>
			<h2 class="news">Jim Tcl version 0.73</h2>
		
		<h2 id="announce-jim-tcl-version-073">ANNOUNCE: Jim Tcl version 0.73</h2>

<p>Jim Tcl 0.73 has been released and is available from:</p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<p>Find out all about Jim Tcl at <a href="http://jim.tcl.tk/">http://jim.tcl.tk/</a></p>

<h2 id="changes-since-version-072">CHANGES SINCE VERSION 0.72</h2>

<p>This release incorporates bug fixes and many new features.
A summary is below. See git for the full changelog.</p>

<p><strong>Bugs fixed in version 0.73</strong></p>

<ul>

  <li><code>exec</code> on cygwin now correctly passes $::env</li>
  <li>On mingw and cygwin, <code>--shared</code> creates libjim.dll rather than libjim.so</li>
  <li>UTF-8 case folding may change the encoded length</li>
  <li>Fix a <code>regexp</code> infinite loop on invalid UTF-8 strings</li>
  <li>Prevent infinite recursion in <code>eval</code></li>

  <li>Don’t allow <code>upvar</code> to a higher level</li>

  <li><code>regexp</code> counted matches may be wrong on subsequent use</li>
  <li>Form feed (\f) is a valid white space character</li>
  <li>Parsing bug for quoted orphan $</li>
  <li>Standard handles were not being kept open</li>
  <li>Fix edge cases with <code>tailcall</code></li>

</ul>

<p><strong>Features added in version 0.73</strong></p>

<ul>
  <li>Added support for namespaces and the <code>namespace</code> command</li>
  <li>The “full” sqlite3 extension is included in the repo</li>
  <li>Built-in regexp now support non-capturing parentheses: <code>(?:...)</code></li>

  <li>Added <code>string replace</code> and <code>string totitle</code></li>

  <li>Added <code>info statics</code> to access proc static variables</li>
  <li>Added <code>info alias</code> to access the target of an alias</li>
  <li>Added <code>build-jim-ext</code> for easy separate building of loadable modules (extensions)</li>

  <li><code>local</code> now works with any command, not just procs</li>
  <li>UTF-8 encoding past the basic multilingual plane (BMP) is supported</li>
  <li>Added <code>tcl::prefix</code></li>

  <li>Added the <code>history</code> command to access command line editing and history from scripts</li>
  <li>Added a Tcl-compatible <code>apply</code> command</li>
  <li>Most extensions are now enabled by default</li>
  <li>Jim Tcl now compiles with MSVC on Windows (but no build support)</li>
</ul>

<p>Steve Bennett (<a href="mailto:steveb@workware.net.au">steveb@workware.net.au</a>)</p>
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/jim-release-0-74/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
..
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
...
187
188
189
190
191
192
193
194
195

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Jim Tcl version 0.74</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<div class="main" id="main">
		
			<p class="articledate">Thursday, 25 July 2013</p>
			<h2 class="news">Jim Tcl version 0.74</h2>
		
		<h2 id="announce-jim-tcl-version-074">ANNOUNCE: Jim Tcl version 0.74</h2>

<p>Jim Tcl 0.74 has been released and is available from: </p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<p>Find out all about Jim Tcl at <a href="http://jim.tcl.tk/">http://jim.tcl.tk/</a></p>

<h2 id="changes-since-version-073">CHANGES SINCE VERSION 0.73</h2>

................................................................................

<p><strong>Bugs fixed in version 0.74</strong></p>

<ul>
  <li>Space allocated for <code>exec</code> envenvironment may be one byte short</li>
  <li>Fix <code>glob</code> with patterns containing spaces, [ and ]</li>
  <li>Sense of <code>fconfigure -blocking</code> is reversed</li>
  <li>
<code>subst -noc</code> should substitute vars inside brackets</li>
  <li>Fix a reference counting bug</li>
  <li>Fix invalid memory reference during finalisers</li>
  <li>Fix an invalid memory reference in <code>info references</code>
</li>
  <li>Fix a buffer overflow in <code>info references</code>
</li>
  <li>Ensure that the full ref is passed to finalizer</li>
  <li>Fix conversion of numbers &gt;= 2^31</li>
  <li>Fix <code>binary scan</code> for too-few bytes.</li>
  <li>Fix bug that was causing the system <code>environ</code> variable to be freed</li>
  <li>Fix a linenoise bug when moving off the left</li>
  <li>Fix linenoise serial console window size for vt102</li>
  <li>Fix a bug in the <code>sqlite3</code> module (array index out of bounds)</li>
  <li>Fix <code>string replace</code> replacing a single char</li>
</ul>

<p><strong>Features added in version 0.74</strong></p>

<ul>
  <li>Add support for <code>aio isatty</code>
</li>
  <li>Remove octal literals with a leading 0 (<a href="TIP%20#114">http://www.tcl.tk/cgi-bin/tct/tip/114.html</a>)</li>
  <li>Add support for <code>glob -directory</code>
</li>
  <li>Allow abbreviations to <code>glob</code> options</li>
  <li>Ensure that signals can break <code>vwait</code>
</li>
  <li>Allow <code>aio copyto</code> and <code>aio read</code> to copy &gt;2GB</li>
  <li>
<code>aio seek</code> and <code>aio tell</code> should allow for 64 bit offsets</li>
  <li>Add support for <code>string equal -length</code> and <code>string compare -length</code>
</li>
</ul>

<p><strong>Performance Improvements</strong></p>

<p>Thanks in large part to Lauri Kasanen, performance of Jim Tcl has
improved by up to 20% in some areas compared to version 0.73.</p>

................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|







 







<
|


|
<
|
<













|
<
|
|
<

|
<

<
|
|
<







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
..
63
64
65
66
67
68
69

70
71
72
73

74

75
76
77
78
79
80
81
82
83
84
85
86
87
88

89
90

91
92

93

94
95

96
97
98
99
100
101
102
...
176
177
178
179
180
181
182
183
184
185

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Jim Tcl version 0.74</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<div class="main" id="main">
		
			<p class="articledate">Thursday, 25 July 2013</p>
			<h2 class="news">Jim Tcl version 0.74</h2>
		
		<h2 id="announce-jim-tcl-version-074">ANNOUNCE: Jim Tcl version 0.74</h2>

<p>Jim Tcl 0.74 has been released and is available from:</p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<p>Find out all about Jim Tcl at <a href="http://jim.tcl.tk/">http://jim.tcl.tk/</a></p>

<h2 id="changes-since-version-073">CHANGES SINCE VERSION 0.73</h2>

................................................................................

<p><strong>Bugs fixed in version 0.74</strong></p>

<ul>
  <li>Space allocated for <code>exec</code> envenvironment may be one byte short</li>
  <li>Fix <code>glob</code> with patterns containing spaces, [ and ]</li>
  <li>Sense of <code>fconfigure -blocking</code> is reversed</li>

  <li><code>subst -noc</code> should substitute vars inside brackets</li>
  <li>Fix a reference counting bug</li>
  <li>Fix invalid memory reference during finalisers</li>
  <li>Fix an invalid memory reference in <code>info references</code></li>

  <li>Fix a buffer overflow in <code>info references</code></li>

  <li>Ensure that the full ref is passed to finalizer</li>
  <li>Fix conversion of numbers &gt;= 2^31</li>
  <li>Fix <code>binary scan</code> for too-few bytes.</li>
  <li>Fix bug that was causing the system <code>environ</code> variable to be freed</li>
  <li>Fix a linenoise bug when moving off the left</li>
  <li>Fix linenoise serial console window size for vt102</li>
  <li>Fix a bug in the <code>sqlite3</code> module (array index out of bounds)</li>
  <li>Fix <code>string replace</code> replacing a single char</li>
</ul>

<p><strong>Features added in version 0.74</strong></p>

<ul>
  <li>Add support for <code>aio isatty</code></li>

  <li>Remove octal literals with a leading 0 (<a href="TIP #114">http://www.tcl.tk/cgi-bin/tct/tip/114.html</a>)</li>
  <li>Add support for <code>glob -directory</code></li>

  <li>Allow abbreviations to <code>glob</code> options</li>
  <li>Ensure that signals can break <code>vwait</code></li>

  <li>Allow <code>aio copyto</code> and <code>aio read</code> to copy &gt;2GB</li>

  <li><code>aio seek</code> and <code>aio tell</code> should allow for 64 bit offsets</li>
  <li>Add support for <code>string equal -length</code> and <code>string compare -length</code></li>

</ul>

<p><strong>Performance Improvements</strong></p>

<p>Thanks in large part to Lauri Kasanen, performance of Jim Tcl has
improved by up to 20% in some areas compared to version 0.73.</p>

................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/jim-release-0-75/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
..
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
...
173
174
175
176
177
178
179
180
181

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Jim Tcl version 0.75</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<div class="main" id="main">
		
			<p class="articledate">Thursday, 27 February 2014</p>
			<h2 class="news">Jim Tcl version 0.75</h2>
		
		<h2 id="announce-jim-tcl-version-075">ANNOUNCE: Jim Tcl version 0.75</h2>

<p>Jim Tcl 0.75 has been released and is available from: </p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<p>Find out all about Jim Tcl at <a href="http://jim.tcl.tk/">http://jim.tcl.tk/</a></p>

<h2 id="changes-since-version-074">CHANGES SINCE VERSION 0.74</h2>

................................................................................

<p><strong>Bugs fixed in version 0.75</strong></p>

<ul>
  <li>eventloop - Correct file handler should be deleted</li>
  <li>eventloop - Fix memory management of aio event handlers</li>
  <li>local - Requires at least one argument</li>
  <li>exec - Support nulls in <code>exec</code> immediate redirection </li>
  <li>binary - More compliant with Tcl</li>
  <li>aio - Fix aio recvfrom for non-inet socket</li>
  <li>Fix <code>string tolower</code> buffer overflow for non-utf8</li>
  <li>jimsh - consider scripts with trailing backslash as unfinished</li>
  <li>Properly respect backslashes in comments</li>
  <li>Avoid infinite recursion with namespace import</li>
  <li>Fix dict/list shimmering with embedded nulls</li>
  <li>Fix <code>aio close</code> from non-global namespace</li>
  <li>
<code>tailcall</code> should resolve command in current namespace</li>
  <li>errors caught by <code>catch</code> shouldn`t affect later stacktrace</li>
  <li>
<code>tailcall</code>: properly merge tailcall frames</li>
  <li>
<code>exec</code>: fix reaping of detached processes</li>
  <li>
<code>clock</code>: handle case of format string too long</li>
  <li>
<code>format</code>: fix format %hd on some platforms</li>
  <li>jim.c: fix some dict/list shimmering issues</li>
</ul>

<p><strong>Features added in version 0.75</strong></p>

<ul>
  <li>
<code>binary</code>, <code>pack</code> and <code>unpack</code> now support floating point</li>
  <li>
<code>file copy</code> <code>-force</code> handles source and target as the same file</li>
  <li>
<code>format</code> now supports <code>%b</code> for binary conversion</li>
  <li>
<code>lsort</code> now supports <code>-unique</code> and <code>-real</code>
</li>
  <li>Add support for half-close with <code>aio close ?r|w?</code>
</li>
  <li>Add <code>socket pair</code> for a bidirectional pipe</li>
  <li>Add –random-hash to randomise hash tables for greater security</li>
  <li>
<code>dict</code> now supports <code>for</code>, <code>values</code>, <code>incr</code>, <code>append</code>, <code>lappend</code>, <code>update</code>, <code>info</code> and <code>replace</code>
</li>
  <li>
<code>file stat</code> no longer requires the variable name</li>
</ul>

<p><strong>Compatiblity</strong></p>

<ul>
  <li>The deprecated <code>case</code> command has been removed</li>
</ul>
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|







 







|








<
|

<
|
<
|
<
|
<
|






<
|
<
|
<
|
<
|
<
|
<


<
|
<
<
|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
..
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77

78
79

80

81

82

83
84
85
86
87
88
89

90

91

92

93

94

95
96

97


98
99
100
101
102
103
104
105
...
156
157
158
159
160
161
162
163
164
165

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Jim Tcl version 0.75</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<div class="main" id="main">
		
			<p class="articledate">Thursday, 27 February 2014</p>
			<h2 class="news">Jim Tcl version 0.75</h2>
		
		<h2 id="announce-jim-tcl-version-075">ANNOUNCE: Jim Tcl version 0.75</h2>

<p>Jim Tcl 0.75 has been released and is available from:</p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<p>Find out all about Jim Tcl at <a href="http://jim.tcl.tk/">http://jim.tcl.tk/</a></p>

<h2 id="changes-since-version-074">CHANGES SINCE VERSION 0.74</h2>

................................................................................

<p><strong>Bugs fixed in version 0.75</strong></p>

<ul>
  <li>eventloop - Correct file handler should be deleted</li>
  <li>eventloop - Fix memory management of aio event handlers</li>
  <li>local - Requires at least one argument</li>
  <li>exec - Support nulls in <code>exec</code> immediate redirection</li>
  <li>binary - More compliant with Tcl</li>
  <li>aio - Fix aio recvfrom for non-inet socket</li>
  <li>Fix <code>string tolower</code> buffer overflow for non-utf8</li>
  <li>jimsh - consider scripts with trailing backslash as unfinished</li>
  <li>Properly respect backslashes in comments</li>
  <li>Avoid infinite recursion with namespace import</li>
  <li>Fix dict/list shimmering with embedded nulls</li>
  <li>Fix <code>aio close</code> from non-global namespace</li>

  <li><code>tailcall</code> should resolve command in current namespace</li>
  <li>errors caught by <code>catch</code> shouldn`t affect later stacktrace</li>

  <li><code>tailcall</code>: properly merge tailcall frames</li>

  <li><code>exec</code>: fix reaping of detached processes</li>

  <li><code>clock</code>: handle case of format string too long</li>

  <li><code>format</code>: fix format %hd on some platforms</li>
  <li>jim.c: fix some dict/list shimmering issues</li>
</ul>

<p><strong>Features added in version 0.75</strong></p>

<ul>

  <li><code>binary</code>, <code>pack</code> and <code>unpack</code> now support floating point</li>

  <li><code>file copy</code> <code>-force</code> handles source and target as the same file</li>

  <li><code>format</code> now supports <code>%b</code> for binary conversion</li>

  <li><code>lsort</code> now supports <code>-unique</code> and <code>-real</code></li>

  <li>Add support for half-close with <code>aio close ?r|w?</code></li>

  <li>Add <code>socket pair</code> for a bidirectional pipe</li>
  <li>Add –random-hash to randomise hash tables for greater security</li>

  <li><code>dict</code> now supports <code>for</code>, <code>values</code>, <code>incr</code>, <code>append</code>, <code>lappend</code>, <code>update</code>, <code>info</code> and <code>replace</code></li>


  <li><code>file stat</code> no longer requires the variable name</li>
</ul>

<p><strong>Compatiblity</strong></p>

<ul>
  <li>The deprecated <code>case</code> command has been removed</li>
</ul>
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/jim-release-0-76/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
..
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
...
168
169
170
171
172
173
174
175
176

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Jim Tcl version 0.76</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<div class="main" id="main">
		
			<p class="articledate">Saturday, 31 January 2015</p>
			<h2 class="news">Jim Tcl version 0.76</h2>
		
		<h2 id="announce-jim-tcl-version-076">ANNOUNCE: Jim Tcl version 0.76</h2>

<p>Jim Tcl 0.76 has been released and is available from: </p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<p>Find out all about Jim Tcl at <a href="http://jim.tcl.tk/">http://jim.tcl.tk/</a></p>

<h2 id="changes-since-version-075">CHANGES SINCE VERSION 0.75</h2>

................................................................................
A summary is below. See git for the full changelog.</p>

<p>Thanks to everyone who contributed to this release.</p>

<p><strong>Bugs fixed in version 0.76</strong></p>

<ul>
  <li>
<code>file</code> - fix stat file size for large files</li>
  <li>
<code>array</code> - avoid crash on unset variable</li>
  <li>
<code>exec</code>, file` - set umask before mkstemp</li>
  <li>
<code>file copy</code> - use binary mode when reading and writing files (Windows)</li>
  <li>
<code>glob</code> - work when intermediate dirs are not readable, and other fixes</li>
  <li>aio - fix conflict between onexception and writable</li>
  <li>
<code>namespace</code> - restore namespace import support</li>
  <li>
<code>alias</code> - don’t rely on internal list never shimmering</li>
  <li>Fix various minor problems reported by <a href="http://www.coverity.com">coverity</a>
</li>
  <li>Fix <code>info nameofexecutable</code> after <code>cd</code>
</li>
</ul>

<p><strong>Features added in version 0.76</strong></p>

<ul>
  <li>
<code>exec</code>, file - respect $TMPDIR</li>
  <li>
<code>aio</code> - optional argument addrvar for accept.</li>
  <li>
<code>string</code> - implement <code>string cat</code> (<a href="http://www.tcl.tk/cgi-bin/tct/tip/429.html">TIP #429</a>)</li>
  <li>
<code>file</code> - add support for <code>file link</code>
</li>
  <li>
<code>info</code> - add support for <code>info source ?filename line?</code>
</li>
  <li>Better script validation (e.g. missing trailing brackets)</li>
  <li>Install tcltest compatibility package</li>
</ul>

<p><strong>Compatiblity</strong></p>

<ul>
  <li>Some invalid scripts will now throw an error rather than silently executing</li>
  <li>
<code>glob</code> is more Tcl-compatible with respect to <code>-directory</code> and <code>-tails</code>, so may affect some scripts</li>
  <li>The output of errorInfo has changed from <code>"Runtime Error: &lt;file&gt;:&lt;line&gt;: ..."</code> to <code>"&lt;file&gt;:&lt;line&gt;: Error: ..."</code>
</li>
</ul>

<p>Steve Bennett (<a href="mailto:steveb@workware.net.au">steveb@workware.net.au</a>)</p>

		
			<hr id="#comments">
<div id="disqus_thread"></div>
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|







 







<
|
<
|
<
|
<
|
<
|

<
|
<
|
|
<
|
<





<
|
<
|
<
|
<
|
<
<
|
<








<
|
|
<







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
..
59
60
61
62
63
64
65

66

67

68

69

70
71

72

73
74

75

76
77
78
79
80

81

82

83

84


85

86
87
88
89
90
91
92
93

94
95

96
97
98
99
100
101
102
...
147
148
149
150
151
152
153
154
155
156

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Jim Tcl version 0.76</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<div class="main" id="main">
		
			<p class="articledate">Saturday, 31 January 2015</p>
			<h2 class="news">Jim Tcl version 0.76</h2>
		
		<h2 id="announce-jim-tcl-version-076">ANNOUNCE: Jim Tcl version 0.76</h2>

<p>Jim Tcl 0.76 has been released and is available from:</p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<p>Find out all about Jim Tcl at <a href="http://jim.tcl.tk/">http://jim.tcl.tk/</a></p>

<h2 id="changes-since-version-075">CHANGES SINCE VERSION 0.75</h2>

................................................................................
A summary is below. See git for the full changelog.</p>

<p>Thanks to everyone who contributed to this release.</p>

<p><strong>Bugs fixed in version 0.76</strong></p>

<ul>

  <li><code>file</code> - fix stat file size for large files</li>

  <li><code>array</code> - avoid crash on unset variable</li>

  <li><code>exec</code>, file` - set umask before mkstemp</li>

  <li><code>file copy</code> - use binary mode when reading and writing files (Windows)</li>

  <li><code>glob</code> - work when intermediate dirs are not readable, and other fixes</li>
  <li>aio - fix conflict between onexception and writable</li>

  <li><code>namespace</code> - restore namespace import support</li>

  <li><code>alias</code> - don’t rely on internal list never shimmering</li>
  <li>Fix various minor problems reported by <a href="http://www.coverity.com">coverity</a></li>

  <li>Fix <code>info nameofexecutable</code> after <code>cd</code></li>

</ul>

<p><strong>Features added in version 0.76</strong></p>

<ul>

  <li><code>exec</code>, file - respect $TMPDIR</li>

  <li><code>aio</code> - optional argument addrvar for accept.</li>

  <li><code>string</code> - implement <code>string cat</code> (<a href="http://www.tcl.tk/cgi-bin/tct/tip/429.html">TIP #429</a>)</li>

  <li><code>file</code> - add support for <code>file link</code></li>


  <li><code>info</code> - add support for <code>info source ?filename line?</code></li>

  <li>Better script validation (e.g. missing trailing brackets)</li>
  <li>Install tcltest compatibility package</li>
</ul>

<p><strong>Compatiblity</strong></p>

<ul>
  <li>Some invalid scripts will now throw an error rather than silently executing</li>

  <li><code>glob</code> is more Tcl-compatible with respect to <code>-directory</code> and <code>-tails</code>, so may affect some scripts</li>
  <li>The output of errorInfo has changed from <code>"Runtime Error: &lt;file&gt;:&lt;line&gt;: ..."</code> to <code>"&lt;file&gt;:&lt;line&gt;: Error: ..."</code></li>

</ul>

<p>Steve Bennett (<a href="mailto:steveb@workware.net.au">steveb@workware.net.au</a>)</p>

		
			<hr id="#comments">
<div id="disqus_thread"></div>
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/jim-release-0-77/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
..
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
...
168
169
170
171
172
173
174
175
176

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Jim Tcl version 0.77</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<div class="main" id="main">
		
			<p class="articledate">Sunday, 04 September 2016</p>
			<h2 class="news">Jim Tcl version 0.77</h2>
		
		<h2 id="announce-jim-tcl-version-077">ANNOUNCE: Jim Tcl version 0.77</h2>

<p>Jim Tcl 0.77 has been released and is available from: </p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<p>Find out all about Jim Tcl at <a href="http://jim.tcl.tk/">http://jim.tcl.tk/</a></p>

<h2 id="changes-since-version-076">CHANGES SINCE VERSION 0.76</h2>

................................................................................
A summary is below. See git for the full changelog.</p>

<p>Thanks to everyone who contributed to this release.</p>

<p><strong>Bugs fixed in version 0.77</strong></p>

<ul>
  <li>
<code>exec</code> - better handline of pipeline abnormal termination</li>
  <li>
<code>exec</code> - fix append redirection on Windows</li>
  <li>
<code>regsub</code> - fix substitution with trailing backslash</li>
  <li>
<code>expr</code> - improved mathfunc handling and <code>pow/**</code>
</li>
  <li>chained tailcalls were not always being run</li>
</ul>

<p><strong>Features added in version 0.77</strong></p>

<ul>
  <li>Add support for <code>configure --docdir=...</code>
</li>
  <li>Add support for <code>jimsh --help</code>
</li>
  <li>Add support for booleans in <code>string is</code> and expressions (true, false, on, off, yes, no)</li>
  <li>
<code>aio</code> - add <code>sync</code>, openssl bindings, posix locking</li>
  <li>
<code>expr</code> - add support for atan2, hypot and fmod</li>
  <li>
<code>regexp</code>, <code>regsub</code>:
    <ul>
      <li>Add support for <code>\D</code>, <code>\W</code> and <code>\S</code>
</li>
      <li>Add partial support for <code>\A</code>, <code>\Z</code>
</li>
      <li>Add support for all character classes: <code>[[::blank:]], [[::xdigit::]]</code>, etc.</li>
    </ul>
  </li>
  <li>Update included sqlite3 to v3.14.1</li>
  <li>Add <code>$tcl_platform(engine)</code>
</li>
  <li>Add basic (optional) <code>zlib</code> support</li>
  <li>Add <code>interp</code> child interprester support</li>
  <li>
<code>oo</code>:
    <ul>
      <li>Add support for constructor, runs on new object creation</li>
      <li>Add support for <code>unknown</code> method</li>
    </ul>
  </li>
  <li>Add Travis and AppVeyor continuous integration support</li>
  <li>Use <code>pkg-config</code> in <code>configure</code> to find packages if possibe</li>
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|







 







<
|
<
|
<
|
<
|
<






|
<
|
<

<
|
<
|
<
|

|
<
|
<




|
<


<
|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
..
59
60
61
62
63
64
65

66

67

68

69

70
71
72
73
74
75
76

77

78

79

80

81
82
83

84

85
86
87
88
89

90
91

92
93
94
95
96
97
98
99
...
151
152
153
154
155
156
157
158
159
160

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Jim Tcl version 0.77</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<div class="main" id="main">
		
			<p class="articledate">Sunday, 04 September 2016</p>
			<h2 class="news">Jim Tcl version 0.77</h2>
		
		<h2 id="announce-jim-tcl-version-077">ANNOUNCE: Jim Tcl version 0.77</h2>

<p>Jim Tcl 0.77 has been released and is available from:</p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<p>Find out all about Jim Tcl at <a href="http://jim.tcl.tk/">http://jim.tcl.tk/</a></p>

<h2 id="changes-since-version-076">CHANGES SINCE VERSION 0.76</h2>

................................................................................
A summary is below. See git for the full changelog.</p>

<p>Thanks to everyone who contributed to this release.</p>

<p><strong>Bugs fixed in version 0.77</strong></p>

<ul>

  <li><code>exec</code> - better handline of pipeline abnormal termination</li>

  <li><code>exec</code> - fix append redirection on Windows</li>

  <li><code>regsub</code> - fix substitution with trailing backslash</li>

  <li><code>expr</code> - improved mathfunc handling and <code>pow/**</code></li>

  <li>chained tailcalls were not always being run</li>
</ul>

<p><strong>Features added in version 0.77</strong></p>

<ul>
  <li>Add support for <code>configure --docdir=...</code></li>

  <li>Add support for <code>jimsh --help</code></li>

  <li>Add support for booleans in <code>string is</code> and expressions (true, false, on, off, yes, no)</li>

  <li><code>aio</code> - add <code>sync</code>, openssl bindings, posix locking</li>

  <li><code>expr</code> - add support for atan2, hypot and fmod</li>

  <li><code>regexp</code>, <code>regsub</code>:
    <ul>
      <li>Add support for <code>\D</code>, <code>\W</code> and <code>\S</code></li>

      <li>Add partial support for <code>\A</code>, <code>\Z</code></li>

      <li>Add support for all character classes: <code>[[::blank:]], [[::xdigit::]]</code>, etc.</li>
    </ul>
  </li>
  <li>Update included sqlite3 to v3.14.1</li>
  <li>Add <code>$tcl_platform(engine)</code></li>

  <li>Add basic (optional) <code>zlib</code> support</li>
  <li>Add <code>interp</code> child interprester support</li>

  <li><code>oo</code>:
    <ul>
      <li>Add support for constructor, runs on new object creation</li>
      <li>Add support for <code>unknown</code> method</li>
    </ul>
  </li>
  <li>Add Travis and AppVeyor continuous integration support</li>
  <li>Use <code>pkg-config</code> in <code>configure</code> to find packages if possibe</li>
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/jim-release-0-78/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
...
199
200
201
202
203
204
205
206
207

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Jim Tcl version 0.78</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
A summary is below. See git for the full changelog.</p>

<p>Thanks to everyone who contributed to this release.</p>

<p><strong>Bugs fixed in version 0.78</strong></p>

<ul>
  <li>
<code>local</code> - Fix crash when local command is deleted</li>
  <li>
<code>history</code> - When creating ~/.jim_history, set permissions to 0600 for security</li>
  <li>
<code>exec</code> - Fix windows exec with empty or unset env</li>
  <li>
<code>exec</code> - Fix check for <code>|</code> and <code>|&amp;</code>
</li>
  <li>jim.c - Fix Object leak in zlib support</li>
  <li>
<code>signal</code> - Restore default signal handling on interp exit</li>
  <li>
<code>dict</code> - Fix [dict values] with duplicate values</li>
  <li>Fix ‘/’ command, divide by zero</li>
  <li>
<code>expr</code> - Replace expression engine to fix a number of problems</li>
  <li>
<code>zlib</code> - Various fixes</li>
  <li>
<code>lsort -unique</code> - Fix case with no duplicates</li>
  <li>
<code>aio tempname</code> - Fix a crash when the template is invalid</li>
  <li>Tcl compatibility - Error on extra characters after close brace</li>
  <li>eventloop - Return from callback is not an error</li>
  <li>
<code>oo</code> - Fix <code>methods</code> for superclasses</li>
  <li>Various refcount and edge case fixes found by fuzz testing</li>
</ul>

<p><strong>Features added in version 0.78</strong></p>

<ul>
  <li>Add support for utf-8 wide characters</li>
  <li>
<code>aio</code> - Add <code>tty</code> for termios settings</li>
  <li>
<code>aio</code> - Add <code>sockopt</code> for <code>broadcast</code>, <code>tcp_nodelay</code>, etc.</li>
  <li>utf-8 - Update UnicodeData.txt to 9.0.0</li>
  <li>jimsh - Add support for <code>jimsh -</code>
</li>
  <li>jimsh - Scriptable command-line completion support via <code>tcl::autocomplete</code>
</li>
  <li>
<code>history</code> - Add autocompletion support <code>history completion &lt;cmd&gt;</code>
</li>
  <li>Add support for <code>-commands</code> to many commands</li>
  <li>Add pkg-config support - <code>jimtcl.pc</code>
</li>
  <li>
<code>clock</code> - Add <code>-gmt</code> option to <code>format</code> and <code>scan</code>
</li>
  <li>
<code>tree</code> - Allow nodes to be deleted</li>
  <li>
<code>defer</code>, <code>$jim::defer</code> - Allow scripts to run on proc exit</li>
  <li>eventloop - Support sub-millisecond timer resolution</li>
  <li>Support <code>lambda</code> even if references are disabled</li>
  <li>Performance - Improve a number of common cases through caching</li>
  <li>
<code>signal</code>, <code>exec</code>, <code>wait</code>, <code>pid</code>, <code>pipe</code> - Many improvements</li>
  <li>build - Support <code>--silent-rules</code>, and enable by default</li>
  <li>
<code>regexp</code> - Implement class shorthand escapes in brackets</li>
  <li>linenoise (<code>jimsh</code>) - Add ^Z (SUSP) support</li>
  <li>linenoise (<code>jismh</code>) - Update to support multiline mode</li>
</ul>

<p><strong>Other changes</strong></p>

<ul>
  <li>
<code>signal</code> - Remove the signal command from child interpreters</li>
  <li>
<code>os.wait</code> is now <code>wait</code>
</li>
  <li>
<code>aio ssl</code> now upgrades the current channel rather than creating a new channel</li>
  <li>Update autosetup to v0.6.8</li>
</ul>

<p>Steve Bennett (<a href="mailto:steveb@workware.net.au">steveb@workware.net.au</a>)</p>

		
			<hr id="#comments">
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







<
|
<
|
<
|
<
|
<

<
|
<
|

<
|
<
|
<
|
<
|


<
|







<
|
<
|

|
<
|
<
<
|
<

|
<
<
|
<
<
|
<
|



<
|

<
|







<
|
<
|
<
<
|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
59
60
61
62
63
64
65

66

67

68

69

70

71

72
73

74

75

76

77
78
79

80
81
82
83
84
85
86
87

88

89
90
91

92


93

94
95


96


97

98
99
100
101

102
103

104
105
106
107
108
109
110
111

112

113


114
115
116
117
118
119
120
121
...
167
168
169
170
171
172
173
174
175
176

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Jim Tcl version 0.78</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
A summary is below. See git for the full changelog.</p>

<p>Thanks to everyone who contributed to this release.</p>

<p><strong>Bugs fixed in version 0.78</strong></p>

<ul>

  <li><code>local</code> - Fix crash when local command is deleted</li>

  <li><code>history</code> - When creating ~/.jim_history, set permissions to 0600 for security</li>

  <li><code>exec</code> - Fix windows exec with empty or unset env</li>

  <li><code>exec</code> - Fix check for <code>|</code> and <code>|&amp;</code></li>

  <li>jim.c - Fix Object leak in zlib support</li>

  <li><code>signal</code> - Restore default signal handling on interp exit</li>

  <li><code>dict</code> - Fix [dict values] with duplicate values</li>
  <li>Fix ‘/’ command, divide by zero</li>

  <li><code>expr</code> - Replace expression engine to fix a number of problems</li>

  <li><code>zlib</code> - Various fixes</li>

  <li><code>lsort -unique</code> - Fix case with no duplicates</li>

  <li><code>aio tempname</code> - Fix a crash when the template is invalid</li>
  <li>Tcl compatibility - Error on extra characters after close brace</li>
  <li>eventloop - Return from callback is not an error</li>

  <li><code>oo</code> - Fix <code>methods</code> for superclasses</li>
  <li>Various refcount and edge case fixes found by fuzz testing</li>
</ul>

<p><strong>Features added in version 0.78</strong></p>

<ul>
  <li>Add support for utf-8 wide characters</li>

  <li><code>aio</code> - Add <code>tty</code> for termios settings</li>

  <li><code>aio</code> - Add <code>sockopt</code> for <code>broadcast</code>, <code>tcp_nodelay</code>, etc.</li>
  <li>utf-8 - Update UnicodeData.txt to 9.0.0</li>
  <li>jimsh - Add support for <code>jimsh -</code></li>

  <li>jimsh - Scriptable command-line completion support via <code>tcl::autocomplete</code></li>


  <li><code>history</code> - Add autocompletion support <code>history completion &lt;cmd&gt;</code></li>

  <li>Add support for <code>-commands</code> to many commands</li>
  <li>Add pkg-config support - <code>jimtcl.pc</code></li>


  <li><code>clock</code> - Add <code>-gmt</code> option to <code>format</code> and <code>scan</code></li>


  <li><code>tree</code> - Allow nodes to be deleted</li>

  <li><code>defer</code>, <code>$jim::defer</code> - Allow scripts to run on proc exit</li>
  <li>eventloop - Support sub-millisecond timer resolution</li>
  <li>Support <code>lambda</code> even if references are disabled</li>
  <li>Performance - Improve a number of common cases through caching</li>

  <li><code>signal</code>, <code>exec</code>, <code>wait</code>, <code>pid</code>, <code>pipe</code> - Many improvements</li>
  <li>build - Support <code>--silent-rules</code>, and enable by default</li>

  <li><code>regexp</code> - Implement class shorthand escapes in brackets</li>
  <li>linenoise (<code>jimsh</code>) - Add ^Z (SUSP) support</li>
  <li>linenoise (<code>jismh</code>) - Update to support multiline mode</li>
</ul>

<p><strong>Other changes</strong></p>

<ul>

  <li><code>signal</code> - Remove the signal command from child interpreters</li>

  <li><code>os.wait</code> is now <code>wait</code></li>


  <li><code>aio ssl</code> now upgrades the current channel rather than creating a new channel</li>
  <li>Update autosetup to v0.6.8</li>
</ul>

<p>Steve Bennett (<a href="mailto:steveb@workware.net.au">steveb@workware.net.au</a>)</p>

		
			<hr id="#comments">
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Added www/articles/jim-release-0-79/index.html.























































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
<!DOCTYPE html><html lang="en"><head>
    <meta charset="utf-8">
    <title>Jim Tcl - Jim Tcl version 0.79</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
	
	<script type="text/javascript">
	  var _gaq = _gaq || [];
	  _gaq.push(['_setAccount', 'UA-23178588-2']);
	  _gaq.push(['_trackPageview']);

	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
		<div class="breadcrumbs">
		
		
			<a href="../../">The Jim Interpreter</a> 
			» 
		
			<a href="../">All News Articles</a> 
			» 
		
			<a href="./">Jim Tcl version 0.79</a> 
			 
		
		</div>
		<div class="main" id="main">
		
			<p class="articledate">Wednesday, 20 November 2019</p>
			<h2 class="news">Jim Tcl version 0.79</h2>
		
		<h2 id="announce-jim-tcl-version-079">ANNOUNCE: Jim Tcl version 0.79</h2>

<p>Jim Tcl 0.79 has been released and is available from:</p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<p>Find out all about Jim Tcl at <a href="http://jim.tcl.tk/">http://jim.tcl.tk/</a></p>

<h2 id="changes-since-version-078">CHANGES SINCE VERSION 0.78</h2>

<p>This release contains bug fixes plus a number of additional features.
A summary is below. See git for the full changelog.</p>

<p>Thanks to everyone who contributed to this release.</p>

<p><strong>Bugs fixed in version 0.79</strong></p>

<ul>
  <li><code>aio</code> - Fix closing stdin in bootstrap jimsh</li>
  <li><code>clock scan</code> - Unspecified filed use the current date/time</li>
  <li>Fix linenoise assertion failure on Windows</li>
  <li><code>file</code> - Improved support for trailing slashes in pathnames</li>
  <li><code>regexp</code>, <code>regsub</code> - Various fixes in UTF-8 mode</li>
  <li><code>$(...)</code> syntax now properly returns non-error codes</li>
</ul>

<p><strong>Features added in version 0.78</strong></p>

<ul>
  <li><code>file</code> - Add <code>mtimeus</code> for microsecond resolution</li>
  <li><code>file</code> - Add missing <code>split</code> subcommand</li>
  <li><code>lreplace</code> - Implement <a href="https://core.tcl-lang.org/tips/doc/trunk/tip/505.md">TIP #505</a></li>
  <li><code>aio</code> - Add dgram unix socket support</li>
  <li><code>aio</code> - Add support for <code>lock -wait</code></li>
  <li><code>aio copyto</code> - Significantly improve performance</li>
  <li><code>aio tty</code> - Allow setting echo</li>
  <li><code>signal</code> - Add <code>block</code> for blocking signals with <code>SIG_IGN</code></li>
  <li>Add built-in JSON support with the <code>json</code> extension</li>
  <li>Improve performance when indexing UTF-8 strings</li>
</ul>

<p><strong>Other changes</strong></p>

<ul>
  <li>Documentation updates to improve consistency, remove obsolete commands, add some missing commands</li>
  <li><code>exec</code> no longer forces <code>SIGPIPE</code> disposition to <code>SIG_DFL</code></li>
  <li>Update autosetup to v0.6.9 with optimised insert/delete</li>
</ul>

<p>Steve Bennett (<a href="mailto:steveb@workware.net.au">steveb@workware.net.au</a>)</p>

		
			<hr id="#comments">
<div id="disqus_thread"></div>
<script type="text/javascript">
	var disqus_shortname = 'jimtcl';
	var disqus_identifier = '/articles/jim-release-0-79/'; 
	
	var disqus_url = 'http://jim.tcl.tk/index.html/doc/www/www/articles/jim-release-0-79/';
	(function() {
		var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
		dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
		(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
	})();
</script>
<a href="http://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>

		
		</div>
	</div>
    <div id="sidebar">
      <h2>About Jim Tcl</h2>
      <ul>
		
			
			<li class="stdlink"><a href="../../">Introduction</a></li>
		
			
			<li class="stdlink"><a href="../../news/">News</a></li>
		
			
			<li class="stdlink"><a href="../../download/">Download</a></li>
		
			
			<li class="stdlink"><a href="../../documentation/">Documentation</a></li>
		
			
			<li class="stdlink"><a href="../../extensions/">Extensions</a></li>
		
			
			<li class="stdlink"><a href="../../license/">License</a></li>
		
			
			<li class="stdlink"><a href="../../about/">About</a></li>
		
      </ul>
      <h2>Community</h2>
      <ul>
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/jim-sqlite-shell/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
...
150
151
152
153
154
155
156
157
158

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - jSQLsh - Jim Tcl SQLite Shell</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
<p>The creator, Lorance Stinson, wanted an sqlite command shell which
addressed some of the deficiencies of the native sqlite command
shell, so he decided to create his own with Jim Tcl.</p>

<p>To run it, you simply need <code>jimsh</code> built with <em>sqlite3</em> and <em>readline</em> support.
For example, to build a version of <code>jimsh</code> with these extensions included statically:</p>

<pre class="sh_unix">
$ ./configure --with-ext="sqlite3 rlprompt"
...
$ make
...
</pre>

<p>And then try it out:</p>

<pre class="sh_unix">
$ ./jimsh jsqlsh
Welcome to the SQLite Shell in Jim TCL 0.72.
Opening the database ':memory:'.
To execute a query type '/'. For help type '/h'.
:memory: (0 rows, 0 changes) # /h
Commands:
  /A(UTO)     Toggle the auto option state.
  /c(lear)    Clear the query buffer
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







<
|







|
<







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
52
53
54
55
56
57
58

59
60
61
62
63
64
65
66
67

68
69
70
71
72
73
74
...
145
146
147
148
149
150
151
152
153
154

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - jSQLsh - Jim Tcl SQLite Shell</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
<p>The creator, Lorance Stinson, wanted an sqlite command shell which
addressed some of the deficiencies of the native sqlite command
shell, so he decided to create his own with Jim Tcl.</p>

<p>To run it, you simply need <code>jimsh</code> built with <em>sqlite3</em> and <em>readline</em> support.
For example, to build a version of <code>jimsh</code> with these extensions included statically:</p>


<pre class="sh_unix">$ ./configure --with-ext="sqlite3 rlprompt"
...
$ make
...
</pre>

<p>And then try it out:</p>

<pre class="sh_unix">$ ./jimsh jsqlsh

Welcome to the SQLite Shell in Jim TCL 0.72.
Opening the database ':memory:'.
To execute a query type '/'. For help type '/h'.
:memory: (0 rows, 0 changes) # /h
Commands:
  /A(UTO)     Toggle the auto option state.
  /c(lear)    Clear the query buffer
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/jim-tcl-tk-2011-paper/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
...
107
108
109
110
111
112
113
114
115

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Jim @ Tcl/Tk 2011</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
...
104
105
106
107
108
109
110
111
112
113

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Jim @ Tcl/Tk 2011</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/light-weight-namespaces/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
...
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
...
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
...
308
309
310
311
312
313
314
315
316

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Lightweight Namespaces</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
supports implicit namespaces. Any procedure or variable which
is defined with a name containing ::, is implicitly scoped within
a namespace.</p>

<p>For example, the following procedure and variable are created
in the namespace ‘test’</p>

<pre class="sh_tcl">
proc ::test::myproc {} {
  puts "I am in namespace [namespace current]"
}
set ::test::myvar 3
</pre>

<p>This approach allows much of the existing variable and command
resolution machinery to be used with little change. It also means
................................................................................
<p>This also means that commands which do not create a call frame (such as commands
implemented in C) do not have an associated namespace.</p>

<p>Similarly to Tcl, namespace eval introduces a temporary, anonymous
call frame with the associated namespace. For example, the following
will return “::test,1”.</p>

<pre class="sh_tcl">
namespace eval test {
	puts [namespace current],[info level]
}
</pre>

<h2 id="variable-resolution">Variable resolution</h2>
<p>The variable command in Jim Tcl has the same syntax as Tcl, but is closer in behaviour to the global command.
The variable command creates a link from a local variable to a namespace variable, possibly initialising it.</p>

<p>For example, the following procedure uses ‘variable’ to initialse and access myvar.</p>

<pre class="sh_tcl">
proc ::test::myproc {} {
  variable myvar 4
  incr myvar
}
</pre>

<p>Note that there is no automatic resolution of namespace variables.
For example, the following will <em>not</em> work.</p>

<pre class="sh_tcl">
namespace eval ::test {
  variable myvar 4
}
namespace eval ::test {
  # This will increment a local variable, not ::test::myvar
  incr myvar
}
</pre>

<p>And similarly, the following will only access local variables</p>

<pre class="sh_tcl">
set x 3
namespace eval ::test {
	# This will incremement a local variable, not ::x
	incr x
	# This will also increment a local variable
	incr abc::def
}
</pre>
................................................................................

<h2 id="namespace-unknown">namespace unknown</h2>
<p>If an undefined command is invoked, the “unknown” command is invoked.
The same namespace resolution rules apply for the unknown command.
This means that in the following example, test::unknown will be invoked
for the missing command rather than the global ::unknown.</p>

<pre class="sh_tcl">
proc unknown {args} {
	puts "global unknown"
}

proc test::unknown {args} {
	puts "test unknown"
}

................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







<
|







 







<
|










<
|








<
|










|
<







 







<
|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
79
80
81
82
83
84
85

86
87
88
89
90
91
92
93
...
109
110
111
112
113
114
115

116
117
118
119
120
121
122
123
124
125
126

127
128
129
130
131
132
133
134
135

136
137
138
139
140
141
142
143
144
145
146
147

148
149
150
151
152
153
154
...
204
205
206
207
208
209
210

211
212
213
214
215
216
217
218
...
299
300
301
302
303
304
305
306
307
308

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Lightweight Namespaces</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
supports implicit namespaces. Any procedure or variable which
is defined with a name containing ::, is implicitly scoped within
a namespace.</p>

<p>For example, the following procedure and variable are created
in the namespace ‘test’</p>


<pre class="sh_tcl">proc ::test::myproc {} {
  puts "I am in namespace [namespace current]"
}
set ::test::myvar 3
</pre>

<p>This approach allows much of the existing variable and command
resolution machinery to be used with little change. It also means
................................................................................
<p>This also means that commands which do not create a call frame (such as commands
implemented in C) do not have an associated namespace.</p>

<p>Similarly to Tcl, namespace eval introduces a temporary, anonymous
call frame with the associated namespace. For example, the following
will return “::test,1”.</p>


<pre class="sh_tcl">namespace eval test {
	puts [namespace current],[info level]
}
</pre>

<h2 id="variable-resolution">Variable resolution</h2>
<p>The variable command in Jim Tcl has the same syntax as Tcl, but is closer in behaviour to the global command.
The variable command creates a link from a local variable to a namespace variable, possibly initialising it.</p>

<p>For example, the following procedure uses ‘variable’ to initialse and access myvar.</p>


<pre class="sh_tcl">proc ::test::myproc {} {
  variable myvar 4
  incr myvar
}
</pre>

<p>Note that there is no automatic resolution of namespace variables.
For example, the following will <em>not</em> work.</p>


<pre class="sh_tcl">namespace eval ::test {
  variable myvar 4
}
namespace eval ::test {
  # This will increment a local variable, not ::test::myvar
  incr myvar
}
</pre>

<p>And similarly, the following will only access local variables</p>

<pre class="sh_tcl">set x 3

namespace eval ::test {
	# This will incremement a local variable, not ::x
	incr x
	# This will also increment a local variable
	incr abc::def
}
</pre>
................................................................................

<h2 id="namespace-unknown">namespace unknown</h2>
<p>If an undefined command is invoked, the “unknown” command is invoked.
The same namespace resolution rules apply for the unknown command.
This means that in the following example, test::unknown will be invoked
for the missing command rather than the global ::unknown.</p>


<pre class="sh_tcl">proc unknown {args} {
	puts "global unknown"
}

proc test::unknown {args} {
	puts "test unknown"
}

................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/metakit-extension/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
...
128
129
130
131
132
133
134
135
136

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - New Metakit Extension</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
documentation fully explains the API.</p>

<h2 id="building-the-metakit-extension">Building the Metakit Extension</h2>

<p>Building the extension requires the metakit headers and library to be
available. Here is one way to statically build the metakit extension into jimsh.</p>

<pre class="sh_unix">
$ cd jimtcl
$ svn co svn://svn.equi4.com/metakit/trunk metakit
$ cd metakit/unix
$ ./configure --without-tcl --without-python --disable-shared
$ make
$ cd ../..
$ ./configure --with-ext=mk CFLAGS="-Imetakit/include -Lmetakit/unix"
$ make
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|
<







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
56
57
58
59
60
61
62
63

64
65
66
67
68
69
70
...
124
125
126
127
128
129
130
131
132
133

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - New Metakit Extension</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
documentation fully explains the API.</p>

<h2 id="building-the-metakit-extension">Building the Metakit Extension</h2>

<p>Building the extension requires the metakit headers and library to be
available. Here is one way to statically build the metakit extension into jimsh.</p>

<pre class="sh_unix">$ cd jimtcl

$ svn co svn://svn.equi4.com/metakit/trunk metakit
$ cd metakit/unix
$ ./configure --without-tcl --without-python --disable-shared
$ make
$ cd ../..
$ ./configure --with-ext=mk CFLAGS="-Imetakit/include -Lmetakit/unix"
$ make
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/new-comment-system/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
...
103
104
105
106
107
108
109
110
111

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - New Comment System</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
...
100
101
102
103
104
105
106
107
108
109

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - New Comment System</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/no-namespaces-revisited/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
..
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
...
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
...
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
...
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
...
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
...
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
...
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
...
343
344
345
346
347
348
349
350
351

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Coping without Namespaces - Revisited</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
<p>Once again, let's consider porting <a href="http://tcllib.cvs.sourceforge.net/viewvc/tcllib/tcllib/modules/dns/dns.tcl">dns.tcl</a>
from <a href="http://tcllib.sourceforge.net/">tcllib</a> to Jim Tcl.</p>

<hr>

<p>Firstly an explanation of what was changed.</p>

<pre class="sh_tcl">
--- dns.tcl.orig	2012-03-05 13:02:36.000000000 +1000
+++ dns.tcl	2012-03-05 13:02:56.000000000 +1000
@@ -1,3 +1,15 @@
+# dns.tcl - Steve Bennett &lt;steveb@workware.net.au&gt;
+#
+# Modified for Jim Tcl to:
+# - use udp transport by default
+# - use sendto/recvfrom
................................................................................
 # Provide a Tcl only Domain Name Service client. See RFC 1034 and RFC 1035
</pre>

<p>For simplicity, we remove the dependencies on tcllib <code>logger</code>, <code>uri</code> and <code>ip</code> to
allow this example to be self contained. In Jim Tcl the <code>binary</code> and <code>namespace</code>
modules are optional, so load them if required.</p>

<pre class="sh_tcl">
@@ -31,14 +43,11 @@
 #
 # $Id: dns.tcl,v 1.36 2008/11/22 12:28:54 mic42 Exp $
 
-package require Tcl 8.2;                # tcl minimum version
-package require logger;                 # tcllib 1.3
-package require uri;                    # tcllib 1.1
-package require uri::urn;               # tcllib 1.2
................................................................................
 
     namespace export configure resolve name address cname \
</pre>

<p>Since Jim Tcl supports udp out-of-the-box, and it is more efficient,
default to udp rather than tcp. Also comment out the logging calls.</p>

<pre class="sh_tcl">
@@ -49,23 +58,13 @@
         array set options {
             port       53
             timeout    30000
-            protocol   tcp
+            protocol   udp
             search     {}
             nameserver {localhost}
................................................................................
     }
 
     variable types
</pre>

<p>udp is built-in with Jim Tcl.</p>

<pre class="sh_tcl">
@@ -248,14 +237,6 @@
         return -code error "no nameserver specified"
     }
 
-    if {$state(-protocol) == "udp"} {
-        if {[llength [package provide ceptcl]] == 0 \
-                &amp;&amp; [llength [package provide udp]] == 0} {
-            return -code error "udp support is not available,\
................................................................................
     if {[regexp {^(?:\d{0,3}\.){3}\d{0,3}$} $state(query)]} {
         set addr [lreverse [split $state(query) .]]
</pre>

<p>udp in Jim Tcl works just like tcp, with <code>readable</code> event handler being
triggered when the response is available.</p>

<pre class="sh_tcl">
@@ -273,6 +254,7 @@
         }
     } else {
         UdpTransmit $token
+        wait $token
     }
     
     return $token
</pre>

<p>Jim Tcl has no support for async connect, and the parameters to <code>socket</code> are a little different.</p>

<pre class="sh_tcl">
@@ -668,9 +650,9 @@
                                    "operation timed out"]]
     }
 
-    # Sometimes DNS servers drop TCP requests. So it's better to
-    # use asynchronous connect
-    set s [socket -async $state(-nameserver) $state(-port)]
+    # Jim Tcl has no async connect ...
................................................................................
     fileevent $s writable [list [namespace origin TcpConnected] $token $s]
     set state(sock) $s
     set state(status) connect
</pre>

<p>Comment out the async connect check.</p>

<pre class="sh_tcl">
@@ -683,11 +665,13 @@
     upvar 0 $token state
 
     fileevent $s writable {}
-    if {[catch {fconfigure $s -peername}]} {
-	# TCP connection failed
-        Finish $token "can't connect to server"
-	return
................................................................................
     fconfigure $s -blocking 0 -translation binary -buffering none
 
</pre>

<p>udp in Jim Tcl is easy. Simpy create the socket with <code>socket dgram</code> and
send with <code>sendto</code>.</p>

<pre class="sh_tcl">
@@ -722,18 +706,10 @@
                                   "operation timed out"]]
     }
     
-    if {[llength [package provide ceptcl]] &gt; 0} {
-        # using ceptcl
-        set state(sock) [cep -type datagram $state(-nameserver) $state(-port)]
-        fconfigure $state(sock) -blocking 0
................................................................................
     
     fileevent $state(sock) readable [list [namespace current]::UdpEvent $token]
     
</pre>

<p>Reading from a udp socket is best done with <code>recvfrom</code></p>

<pre class="sh_tcl">
@@ -879,7 +855,7 @@
     upvar 0 $token state
     set s $state(sock)
 
-    set payload [read $state(sock)]
+    set payload [$state(sock) recvfrom 1500]
     append state(reply) $payload
 
     binary scan $payload S id
</pre>

<p>Jim Tcl has <code>lreverse</code> built-in</p>

<pre class="sh_tcl">
@@ -1011,17 +987,6 @@
 }
 
 # -------------------------------------------------------------------------
-# Description:
-#   Reverse a list. Code from http://wiki.tcl.tk/tcl/43
-#
-proc ::dns::lreverse {lst} {
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







<
|







 







|
<







 







|
<







 







|
<







 







|
<











|
<







 







<
|







 







<
|







 







|
<












<
|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
57
58
59
60
61
62
63

64
65
66
67
68
69
70
71
..
81
82
83
84
85
86
87
88

89
90
91
92
93
94
95
...
104
105
106
107
108
109
110
111

112
113
114
115
116
117
118
...
135
136
137
138
139
140
141
142

143
144
145
146
147
148
149
...
155
156
157
158
159
160
161
162

163
164
165
166
167
168
169
170
171
172
173
174

175
176
177
178
179
180
181
...
184
185
186
187
188
189
190

191
192
193
194
195
196
197
198
...
208
209
210
211
212
213
214

215
216
217
218
219
220
221
222
...
234
235
236
237
238
239
240
241

242
243
244
245
246
247
248
249
250
251
252
253

254
255
256
257
258
259
260
261
...
330
331
332
333
334
335
336
337
338
339

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Coping without Namespaces - Revisited</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
<p>Once again, let's consider porting <a href="http://tcllib.cvs.sourceforge.net/viewvc/tcllib/tcllib/modules/dns/dns.tcl">dns.tcl</a>
from <a href="http://tcllib.sourceforge.net/">tcllib</a> to Jim Tcl.</p>

<hr>

<p>Firstly an explanation of what was changed.</p>


<pre class="sh_tcl">--- dns.tcl.orig	2012-03-05 13:02:36.000000000 +1000
+++ dns.tcl	2012-03-05 13:02:56.000000000 +1000
@@ -1,3 +1,15 @@
+# dns.tcl - Steve Bennett &lt;steveb@workware.net.au&gt;
+#
+# Modified for Jim Tcl to:
+# - use udp transport by default
+# - use sendto/recvfrom
................................................................................
 # Provide a Tcl only Domain Name Service client. See RFC 1034 and RFC 1035
</pre>

<p>For simplicity, we remove the dependencies on tcllib <code>logger</code>, <code>uri</code> and <code>ip</code> to
allow this example to be self contained. In Jim Tcl the <code>binary</code> and <code>namespace</code>
modules are optional, so load them if required.</p>

<pre class="sh_tcl">@@ -31,14 +43,11 @@

 #
 # $Id: dns.tcl,v 1.36 2008/11/22 12:28:54 mic42 Exp $
 
-package require Tcl 8.2;                # tcl minimum version
-package require logger;                 # tcllib 1.3
-package require uri;                    # tcllib 1.1
-package require uri::urn;               # tcllib 1.2
................................................................................
 
     namespace export configure resolve name address cname \
</pre>

<p>Since Jim Tcl supports udp out-of-the-box, and it is more efficient,
default to udp rather than tcp. Also comment out the logging calls.</p>

<pre class="sh_tcl">@@ -49,23 +58,13 @@

         array set options {
             port       53
             timeout    30000
-            protocol   tcp
+            protocol   udp
             search     {}
             nameserver {localhost}
................................................................................
     }
 
     variable types
</pre>

<p>udp is built-in with Jim Tcl.</p>

<pre class="sh_tcl">@@ -248,14 +237,6 @@

         return -code error "no nameserver specified"
     }
 
-    if {$state(-protocol) == "udp"} {
-        if {[llength [package provide ceptcl]] == 0 \
-                &amp;&amp; [llength [package provide udp]] == 0} {
-            return -code error "udp support is not available,\
................................................................................
     if {[regexp {^(?:\d{0,3}\.){3}\d{0,3}$} $state(query)]} {
         set addr [lreverse [split $state(query) .]]
</pre>

<p>udp in Jim Tcl works just like tcp, with <code>readable</code> event handler being
triggered when the response is available.</p>

<pre class="sh_tcl">@@ -273,6 +254,7 @@

         }
     } else {
         UdpTransmit $token
+        wait $token
     }
     
     return $token
</pre>

<p>Jim Tcl has no support for async connect, and the parameters to <code>socket</code> are a little different.</p>

<pre class="sh_tcl">@@ -668,9 +650,9 @@

                                    "operation timed out"]]
     }
 
-    # Sometimes DNS servers drop TCP requests. So it's better to
-    # use asynchronous connect
-    set s [socket -async $state(-nameserver) $state(-port)]
+    # Jim Tcl has no async connect ...
................................................................................
     fileevent $s writable [list [namespace origin TcpConnected] $token $s]
     set state(sock) $s
     set state(status) connect
</pre>

<p>Comment out the async connect check.</p>


<pre class="sh_tcl">@@ -683,11 +665,13 @@
     upvar 0 $token state
 
     fileevent $s writable {}
-    if {[catch {fconfigure $s -peername}]} {
-	# TCP connection failed
-        Finish $token "can't connect to server"
-	return
................................................................................
     fconfigure $s -blocking 0 -translation binary -buffering none
 
</pre>

<p>udp in Jim Tcl is easy. Simpy create the socket with <code>socket dgram</code> and
send with <code>sendto</code>.</p>


<pre class="sh_tcl">@@ -722,18 +706,10 @@
                                   "operation timed out"]]
     }
     
-    if {[llength [package provide ceptcl]] &gt; 0} {
-        # using ceptcl
-        set state(sock) [cep -type datagram $state(-nameserver) $state(-port)]
-        fconfigure $state(sock) -blocking 0
................................................................................
     
     fileevent $state(sock) readable [list [namespace current]::UdpEvent $token]
     
</pre>

<p>Reading from a udp socket is best done with <code>recvfrom</code></p>

<pre class="sh_tcl">@@ -879,7 +855,7 @@

     upvar 0 $token state
     set s $state(sock)
 
-    set payload [read $state(sock)]
+    set payload [$state(sock) recvfrom 1500]
     append state(reply) $payload
 
     binary scan $payload S id
</pre>

<p>Jim Tcl has <code>lreverse</code> built-in</p>


<pre class="sh_tcl">@@ -1011,17 +987,6 @@
 }
 
 # -------------------------------------------------------------------------
-# Description:
-#   Reverse a list. Code from http://wiki.tcl.tk/tcl/43
-#
-proc ::dns::lreverse {lst} {
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/articles/no-namespaces/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
...
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
...
183
184
185
186
187
188
189
190
191

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Coping without Namespaces</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
to easily porting this code to Jim.</p>

<p>For this example, we will port <a href="http://tcllib.cvs.sourceforge.net/viewvc/tcllib/tcllib/modules/dns/dns.tcl">dns.tcl</a> to Jim.</p>

<p>The general approach is to modify the code from using implicit scoping to explicit scoping.
Consider the following code which uses namespaces to declare a proc and a variable within a namespace.</p>

<pre class="sh_tcl">
namespace eval dns {
	variable timeout 10 
	proc configure {new} {
		variable timeout
		set timeout $new
	}
}
</pre>

<p>This code create a variable <code>::dns::timeout</code> and a proc <code>::dns::configure</code>. We can do the same
explicitly.</p>

<pre class="sh_tcl">
set dns::timeout 10

proc dns::configure {new} {
	global dns::timeout
	set dns::timeout $new
}
</pre>

<p>The main differences between this code and the namespace code are:</p>

<ul>
  <li>All variables and procs are visible, even if not <em>exported</em>
</li>
  <li>Namespace procs need to be referenced with a fully qualified name</li>
  <li>Namespace variables need to be referenced with a fully qualified name</li>
</ul>

<p>We can mitigate this last difference with one small change.</p>

<pre class="sh_tcl">
# Poor man's variable for Jim Tcl
# Links a global variable, ::ns::var to a local variable, var
proc variable {ns var} {
    uplevel 1 [list upvar #0 ${ns}::$var $var]
}

set dns::timeout 10

................................................................................
which is linked to the fully qualified name.</p>

<p>You can see the fully converted version of <a href="https://github.com/msteveb/jimtcl/blob/0.73/examples/dns.tcl">dns.tcl for Jim</a></p>

<p>To summarise:</p>

<ul>
  <li>Remove <code>namespace eval</code>
</li>
  <li>Initialise variables with fully qualified names: <code>set ns::var value</code>
</li>
  <li>Ensure procs are declared with fully quality names: <code>proc ns::procname { ... }</code>
</li>
  <li>Use fully qualified names when invoking procs within the namespace.</li>
  <li>Replace the use of <code>namespace current</code> with the namespace name</li>
  <li>Replace the use of <code>namespace origin</code> with the namespace name</li>
  <li>Use the <code>variable</code> proc to declare variables within procs</li>
</ul>

<p>Steve Bennett (<a href="mailto:steveb@workware.net.au">steveb@workware.net.au</a>)</p>
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|
<











|
<










|
<






<
|







 







|
<
|
<
|
<







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
56
57
58
59
60
61
62
63

64
65
66
67
68
69
70
71
72
73
74
75

76
77
78
79
80
81
82
83
84
85
86

87
88
89
90
91
92

93
94
95
96
97
98
99
100
...
108
109
110
111
112
113
114
115

116

117

118
119
120
121
122
123
124
...
173
174
175
176
177
178
179
180
181
182

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Coping without Namespaces</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
to easily porting this code to Jim.</p>

<p>For this example, we will port <a href="http://tcllib.cvs.sourceforge.net/viewvc/tcllib/tcllib/modules/dns/dns.tcl">dns.tcl</a> to Jim.</p>

<p>The general approach is to modify the code from using implicit scoping to explicit scoping.
Consider the following code which uses namespaces to declare a proc and a variable within a namespace.</p>

<pre class="sh_tcl">namespace eval dns {

	variable timeout 10 
	proc configure {new} {
		variable timeout
		set timeout $new
	}
}
</pre>

<p>This code create a variable <code>::dns::timeout</code> and a proc <code>::dns::configure</code>. We can do the same
explicitly.</p>

<pre class="sh_tcl">set dns::timeout 10


proc dns::configure {new} {
	global dns::timeout
	set dns::timeout $new
}
</pre>

<p>The main differences between this code and the namespace code are:</p>

<ul>
  <li>All variables and procs are visible, even if not <em>exported</em></li>

  <li>Namespace procs need to be referenced with a fully qualified name</li>
  <li>Namespace variables need to be referenced with a fully qualified name</li>
</ul>

<p>We can mitigate this last difference with one small change.</p>


<pre class="sh_tcl"># Poor man's variable for Jim Tcl
# Links a global variable, ::ns::var to a local variable, var
proc variable {ns var} {
    uplevel 1 [list upvar #0 ${ns}::$var $var]
}

set dns::timeout 10

................................................................................
which is linked to the fully qualified name.</p>

<p>You can see the fully converted version of <a href="https://github.com/msteveb/jimtcl/blob/0.73/examples/dns.tcl">dns.tcl for Jim</a></p>

<p>To summarise:</p>

<ul>
  <li>Remove <code>namespace eval</code></li>

  <li>Initialise variables with fully qualified names: <code>set ns::var value</code></li>

  <li>Ensure procs are declared with fully quality names: <code>proc ns::procname { ... }</code></li>

  <li>Use fully qualified names when invoking procs within the namespace.</li>
  <li>Replace the use of <code>namespace current</code> with the namespace name</li>
  <li>Replace the use of <code>namespace origin</code> with the namespace name</li>
  <li>Use the <code>variable</code> proc to declare variables within procs</li>
</ul>

<p>Steve Bennett (<a href="mailto:steveb@workware.net.au">steveb@workware.net.au</a>)</p>
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/documentation/functional/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
..
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
...
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
...
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
...
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
...
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
...
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
...
337
338
339
340
341
342
343
344
345

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Functional Programming</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................

<h2 id="references">References</h2>

<p>A reference can be thought of as holding a value with one level of indirection,
where the value may be garbage collected when unreferenced.
Consider the following example:</p>

<pre class="sh_tcl">
. set r [ref "One String" test]
&lt;reference.&lt;test___&gt;.00000000000000000000&gt;
. getref $r
One String
</pre>

<p>The operation ‘ref’ creates a references to the value specfied by the
first argument. (The second argument is a “type” used for documentation purposes).</p>

<p>The operation ‘getref’ is the dereferencing operation which retrieves the value
stored in the reference.</p>

<pre class="sh_tcl">
. setref $r "New String"
New String
. getref $r
New String
</pre>

<p>The operation ‘setref’ replaces the value stored by the reference. If the old value
is no longer accessible by any reference, it will eventually be automatically be garbage
................................................................................
<p>With the introduction of references, it is possible to create values whose lifetime
transcend their scope. To support this, case, the Jim system will periodically identify
and discard objects which are no longer accessible by any reference.</p>

<p>The ‘collect’ command may be used to force garbage collection.  Consider a reference created
with a finalizer:</p>

<pre class="sh_tcl">
. proc f {ref value} { puts "Finaliser called for $ref,$value" }
. set r [ref "One String" test f]
&lt;reference.&lt;test___&gt;.00000000000
. collect
0
. set r ""
. collect
Finaliser called for &lt;reference.&lt;test___&gt;.00000000000,One String
................................................................................

<p>Note that once the reference, ‘r’, was modified so that it no longer
contained a reference to the value, the garbage collector discarded
the value (after calling the finalizer).</p>

<p>The finalizer for a reference may be examined or changed with the ‘finalize’ command</p>

<pre class="sh_tcl">
. finalize $r
f
. finalize $r newf
newf
</pre>

<h2 id="lambda">Lambda</h2>

<p>Jim provides a garbage collected lambda function. This is a procedure
which is able to create an anonymous procedure.  Consider:</p>

<pre class="sh_tcl">
. set f [lambda {a} {{x 0}} { incr x $a }]
. $f 1
1
. $f 2
3
. set f ""
</pre>

................................................................................
which is incremented by the supplied value and the result returned.</p>

<p>Once the procedure name is no longer accessible, it will automatically be deleted
when the garbage collector runs.</p>

<p>The procedure may also be delete immediately by renaming it “”. e.g.</p>

<pre class="sh_tcl">
. rename $f ""
</pre>

<h1 id="background">BACKGROUND</h1>

<h2 id="rationale">Rationale</h2>

<p>Why did Jim add references to the language? These are the main reasons, in decreasing order of importance:</p>
................................................................................
<p>References are just names with an associated string. Given the
reference it’s possible to obtain the associated string, or to set
a new one in place of the old.</p>

<p>In order to create a new reference, the ref command is used. It has
the following signature:</p>

<pre class="sh_tcl">
ref string tag ?finalizer?
</pre>

<p>The string is the initial value associated to the reference to
create. Can be any kind of string (or object, if you like more the
implementation point of view). The tag will be explained in a moment.
The finalizer is the name of a procedure that will be called just
after the reference was destroyed with two arguments: the name of
the reference destroyed, and its content.</p>

<p>An example of reference creation:</p>

<pre class="sh_tcl">
. set r [ref "My little string" test]
&lt;reference.&lt;test___&gt;.00000000000000000001&gt;
</pre>

<p>What is returned is indeed the name of the reference. References
are all the same length, and can’t contain spaces (this way it’s
possible to skip many kind of objects in the GC scan stage). As you
can see the tag argument “test” appears in the reference name. And
................................................................................
help. The tag can’t be longer than 7 characters in order to make
references memory usage and creation/destroy time very little.</p>

<p>Now, the reference containing “My little string” is contained in
the variable ‘r’. Using getref it’s possible to obtain the string
a reference contains:</p>

<pre class="sh_tcl">
. set r [ref "My little string" test]
&lt;reference.&lt;test___&gt;.00000000000000000002&gt;
. getref $r
My little string
</pre>

<p>setref will instead set a new string for the specified reference:</p>

<pre class="sh_tcl">
. setref $r "New String"
New String
. getref $r
New String
</pre>

<p>That’s it! Now… why is this special? You can already do it with
a global array in Tcl. The unique feature of Jim references is
................................................................................
<p>Jim takes two counters:
The number of seconds elapsed since the last collection.
The number of references created since the last collection.
Every time a new reference is created, if at least one of these two counters is greater than a given value, a garbage collection cycle is performed. The user may also force garbage collection if working with huge strings, or just for testing, using the collect command.
Using the collect command we can try the effect of the finalizer.
First of all, a reference is created, setting as finalzer procedure myfinalizer:</p>

<pre class="sh_tcl">
. set r [ref foobar test myfinalizer]
&lt;reference.&lt;test___&gt;.00000000000000000004&gt;
</pre>

<p>We need to create this procedure of course. It just a one liner:</p>

<pre class="sh_tcl">
. proc myfinalizer {x y} {puts "Finalizer called with $x,$y"}
</pre>

<p>Now, let’s call collect to check what happens:</p>

<pre class="sh_tcl">
. collect
0
</pre>

<p>It returns zero and the finalizer is not called. Because there is
nothing to collect, there is only one reference and it is referenced
by the variable r. The collect command returns the number of
references collected. So let’s lose the reference we have by setting
r to the null string, then try again to call collect:</p>

<pre class="sh_tcl">
. set r {}
. collect
Finalizer called with &lt;reference.&lt;test___&gt;.00000000000,foobar
1
</pre>

<p>This time the reference was destroyed, and the finalizer called with its name, and the content, as arguments.
The implementation of lambda
Given a system like this, you can create a garbage collected lambda in Jim itself with a few lines of code:</p>

<pre class="sh_tcl">
proc lambda {arglist args} {
    set name [ref {} function lambdaFinalizer]
    uplevel 1 [list proc $name $arglist {*}$args]
    return $name
}
proc lambdaFinalizer {name val} {
    rename $name {}
}
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







<
|











<
|







 







<
|







 







|
<










<
|







 







|
<







 







<
|











<
|







 







<
|







<
|







 







<
|





<
|




|
<









|
<









<
|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
52
53
54
55
56
57
58

59
60
61
62
63
64
65
66
67
68
69
70

71
72
73
74
75
76
77
78
..
86
87
88
89
90
91
92

93
94
95
96
97
98
99
100
...
103
104
105
106
107
108
109
110

111
112
113
114
115
116
117
118
119
120

121
122
123
124
125
126
127
128
...
130
131
132
133
134
135
136
137

138
139
140
141
142
143
144
...
173
174
175
176
177
178
179

180
181
182
183
184
185
186
187
188
189
190
191

192
193
194
195
196
197
198
199
...
205
206
207
208
209
210
211

212
213
214
215
216
217
218
219

220
221
222
223
224
225
226
227
...
234
235
236
237
238
239
240

241
242
243
244
245
246

247
248
249
250
251
252

253
254
255
256
257
258
259
260
261
262

263
264
265
266
267
268
269
270
271

272
273
274
275
276
277
278
279
...
319
320
321
322
323
324
325
326
327
328

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Functional Programming</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................

<h2 id="references">References</h2>

<p>A reference can be thought of as holding a value with one level of indirection,
where the value may be garbage collected when unreferenced.
Consider the following example:</p>


<pre class="sh_tcl">. set r [ref "One String" test]
&lt;reference.&lt;test___&gt;.00000000000000000000&gt;
. getref $r
One String
</pre>

<p>The operation ‘ref’ creates a references to the value specfied by the
first argument. (The second argument is a “type” used for documentation purposes).</p>

<p>The operation ‘getref’ is the dereferencing operation which retrieves the value
stored in the reference.</p>


<pre class="sh_tcl">. setref $r "New String"
New String
. getref $r
New String
</pre>

<p>The operation ‘setref’ replaces the value stored by the reference. If the old value
is no longer accessible by any reference, it will eventually be automatically be garbage
................................................................................
<p>With the introduction of references, it is possible to create values whose lifetime
transcend their scope. To support this, case, the Jim system will periodically identify
and discard objects which are no longer accessible by any reference.</p>

<p>The ‘collect’ command may be used to force garbage collection.  Consider a reference created
with a finalizer:</p>


<pre class="sh_tcl">. proc f {ref value} { puts "Finaliser called for $ref,$value" }
. set r [ref "One String" test f]
&lt;reference.&lt;test___&gt;.00000000000
. collect
0
. set r ""
. collect
Finaliser called for &lt;reference.&lt;test___&gt;.00000000000,One String
................................................................................

<p>Note that once the reference, ‘r’, was modified so that it no longer
contained a reference to the value, the garbage collector discarded
the value (after calling the finalizer).</p>

<p>The finalizer for a reference may be examined or changed with the ‘finalize’ command</p>

<pre class="sh_tcl">. finalize $r

f
. finalize $r newf
newf
</pre>

<h2 id="lambda">Lambda</h2>

<p>Jim provides a garbage collected lambda function. This is a procedure
which is able to create an anonymous procedure.  Consider:</p>


<pre class="sh_tcl">. set f [lambda {a} {{x 0}} { incr x $a }]
. $f 1
1
. $f 2
3
. set f ""
</pre>

................................................................................
which is incremented by the supplied value and the result returned.</p>

<p>Once the procedure name is no longer accessible, it will automatically be deleted
when the garbage collector runs.</p>

<p>The procedure may also be delete immediately by renaming it “”. e.g.</p>

<pre class="sh_tcl">. rename $f ""

</pre>

<h1 id="background">BACKGROUND</h1>

<h2 id="rationale">Rationale</h2>

<p>Why did Jim add references to the language? These are the main reasons, in decreasing order of importance:</p>
................................................................................
<p>References are just names with an associated string. Given the
reference it’s possible to obtain the associated string, or to set
a new one in place of the old.</p>

<p>In order to create a new reference, the ref command is used. It has
the following signature:</p>


<pre class="sh_tcl">ref string tag ?finalizer?
</pre>

<p>The string is the initial value associated to the reference to
create. Can be any kind of string (or object, if you like more the
implementation point of view). The tag will be explained in a moment.
The finalizer is the name of a procedure that will be called just
after the reference was destroyed with two arguments: the name of
the reference destroyed, and its content.</p>

<p>An example of reference creation:</p>


<pre class="sh_tcl">. set r [ref "My little string" test]
&lt;reference.&lt;test___&gt;.00000000000000000001&gt;
</pre>

<p>What is returned is indeed the name of the reference. References
are all the same length, and can’t contain spaces (this way it’s
possible to skip many kind of objects in the GC scan stage). As you
can see the tag argument “test” appears in the reference name. And
................................................................................
help. The tag can’t be longer than 7 characters in order to make
references memory usage and creation/destroy time very little.</p>

<p>Now, the reference containing “My little string” is contained in
the variable ‘r’. Using getref it’s possible to obtain the string
a reference contains:</p>


<pre class="sh_tcl">. set r [ref "My little string" test]
&lt;reference.&lt;test___&gt;.00000000000000000002&gt;
. getref $r
My little string
</pre>

<p>setref will instead set a new string for the specified reference:</p>


<pre class="sh_tcl">. setref $r "New String"
New String
. getref $r
New String
</pre>

<p>That’s it! Now… why is this special? You can already do it with
a global array in Tcl. The unique feature of Jim references is
................................................................................
<p>Jim takes two counters:
The number of seconds elapsed since the last collection.
The number of references created since the last collection.
Every time a new reference is created, if at least one of these two counters is greater than a given value, a garbage collection cycle is performed. The user may also force garbage collection if working with huge strings, or just for testing, using the collect command.
Using the collect command we can try the effect of the finalizer.
First of all, a reference is created, setting as finalzer procedure myfinalizer:</p>


<pre class="sh_tcl">. set r [ref foobar test myfinalizer]
&lt;reference.&lt;test___&gt;.00000000000000000004&gt;
</pre>

<p>We need to create this procedure of course. It just a one liner:</p>


<pre class="sh_tcl">. proc myfinalizer {x y} {puts "Finalizer called with $x,$y"}
</pre>

<p>Now, let’s call collect to check what happens:</p>

<pre class="sh_tcl">. collect

0
</pre>

<p>It returns zero and the finalizer is not called. Because there is
nothing to collect, there is only one reference and it is referenced
by the variable r. The collect command returns the number of
references collected. So let’s lose the reference we have by setting
r to the null string, then try again to call collect:</p>

<pre class="sh_tcl">. set r {}

. collect
Finalizer called with &lt;reference.&lt;test___&gt;.00000000000,foobar
1
</pre>

<p>This time the reference was destroyed, and the finalizer called with its name, and the content, as arguments.
The implementation of lambda
Given a system like this, you can create a garbage collected lambda in Jim itself with a few lines of code:</p>


<pre class="sh_tcl">proc lambda {arglist args} {
    set name [ref {} function lambdaFinalizer]
    uplevel 1 [list proc $name $arglist {*}$args]
    return $name
}
proc lambdaFinalizer {name val} {
    rename $name {}
}
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/documentation/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
...
105
106
107
108
109
110
111
112
113

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Documentation</title>
    <link rel="stylesheet" type="text/css" href="../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../css/sh_style.css" media="screen">
	
	<script src="../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
			
			<li class="stdlink"><a href="../news/">News</a></li>
		
			
			<li class="stdlink"><a href="../download/">Download</a></li>
		
			
			<li class="stdlink"><span class="active" title="You're here.">Documentation</span></li>
		
			
			<li class="stdlink"><a href="../extensions/">Extensions</a></li>
		
			
			<li class="stdlink"><a href="../license/">License</a></li>
		
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
...
102
103
104
105
106
107
108
109
110
111

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Documentation</title>
    <link rel="stylesheet" type="text/css" href="../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../css/sh_style.css" media="screen">
	
	<script src="../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
			
			<li class="stdlink"><a href="../news/">News</a></li>
		
			
			<li class="stdlink"><a href="../download/">Download</a></li>
		
			
			<li class="stdlink"><span class="active">Documentation</span></li>
		
			
			<li class="stdlink"><a href="../extensions/">Extensions</a></li>
		
			
			<li class="stdlink"><a href="../license/">License</a></li>
		
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/documentation/metakit/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
...
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
...
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
...
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
...
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
...
436
437
438
439
440
441
442
443
444

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Metakit</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
The supported property types include:</p>

<dl>
  <dt><code>string</code></dt>
  <dd>A NULL-terminated string, stored as an array of bytes (without any encoding
assumptions).</dd>
  <dt><code>binary</code></dt>
  <dd>
<strong>Not yet supported by the <code>mk</code> extension.</strong>
Blob of binary data that may contain embedded NULLs (zero bytes). Stored
as-is. This is more efficient than <code>string</code> when storing large blocks of
data (e.g. images) and will adjust the storage strategy as needed.</dd>
  <dt><code>integer</code></dt>
  <dd>An signed integer value occupying a maximum of 32 bits. If all values
stored in a column can fit in a smaller range (16, 8, or even 4 or 2 bits),
they are packed automatically.</dd>
  <dt><code>long</code></dt>
  <dd>Like <code>integer</code>, but is required to fit into 64 bits.</dd>
  <dt>
<code>float</code> and <code>double</code>
</dt>
  <dd>32-bit and 64-bit IEEE floating-point values respectively.</dd>
  <dt><code>subview</code></dt>
  <dd>This type is not usually specified directly; instead, a structure
description of a nested view is given. <code>subview</code> properties store complete
views as their value, creating hierarchical data structures. When retreived
from a view, a value of a subview property is a normal view handle.</dd>
</dl>
................................................................................

<p>or via a dictionary with</p>

<pre><code>cursor set $cur dictValue
</code></pre>

<p>In the first form of the command, property names may also be preceded by a
-<em>typeName</em> option. In this case, a new property of the specified type will be
created if it doesn’t already exist; note that this will cause <em>all</em> the rows
in the view to have the property (but see <strong>A NOTE ON NULL</strong> below).</p>

<p>If the row index points after the end of the view, an appropriate number of
fresh rows will be inserted first. So, for example, you can use <code>end+1</code>
to append a new row. (Note that you then have to set it all at once, though.)</p>

................................................................................

<p>Binary operations are left-biased when there are conflicting property values;
that is, they always prefer the values from the left view.</p>

<h3 id="unary-operations">Unary operations</h3>

<dl>
  <dt>
<em>view</em> <code>unique</code>
</dt>
  <dd>Derived view with duplicate rows removed.</dd>
  <dt>
<em>view</em> <code>sort</code> <em>crit ?crit …?</em>
</dt>
  <dd>Derived view sorted on the specified criteria, in order. A single <em>crit</em>
is either a property name or a property name preceded by a dash; the latter
specifies that the sorting is to be performed in reverse order.</dd>
</dl>

<h3 id="binary-operations">Binary operations</h3>

<p>The operations taking <em>set</em> arguments require that the given views have no
duplicate rows. The <code>unique</code> method can be used to ensure this.</p>

<dl>
  <dt>
<em>view1</em> <code>concat</code> <em>view2</em>
</dt>
  <dd>Vertical concatenation; that is, all the rows of <em>view1</em> and then all rows
of <em>view2</em>.</dd>
  <dt>
<em>view1</em> <code>pair</code> <em>view2</em>
</dt>
  <dd>Pairing, or horizontal concatenation: every row in <em>view1</em> is matched with
a row with the same index in <em>view2</em>; the result has all the properties of
<em>view1</em> and all the properties of <em>view2</em>.</dd>
  <dt>
<em>view1</em> <code>product</code> <em>view2</em>
</dt>
  <dd>Cartesian product: each row in <em>view1</em> horizontally concatenated with every
row in <em>view2</em>.</dd>
  <dt>
<em>set1</em> <code>union</code> <em>set2</em>
</dt>
  <dd>Set union. Unlike <code>concat</code>, this operation removes duplicates from the
result. A row is in the result if it is in <em>set1</em> <strong>or</strong> in <em>set2</em>.</dd>
  <dt>
<em>set1</em> <code>intersect</code> <em>set2</em>
</dt>
  <dd>Set intersection. A row is in the result if it is in <em>set1</em> <strong>and</strong> in
<em>set2</em>.</dd>
  <dt>
<em>set1</em> <code>different</code> <em>set2</em>
</dt>
  <dd>Symmetric difference. A row is in the result if it is in <em>set1</em> <strong>xor</strong> in
<em>set2</em>, that is, in <em>set1</em> or in <em>set2</em>, but not in both.</dd>
  <dt>
<em>set1</em> <code>minus</code> <em>set2</em>
</dt>
  <dd>Set minus. A row is in the result if it is in <em>set1</em> <strong>and not</strong> in <em>set2</em>.</dd>
</dl>

<h3 id="relational-operations">Relational operations</h3>

<dl>
  <dt>
<em>view1</em> <code>join</code> <em>view2</em> ?<code>-outer</code>? <em>prop ?prop …?</em>
</dt>
  <dd>Relational join on the specified properties: the rows from <em>view1</em> and
<em>view2</em> with all the specified properties equal are concatenated to form a
new row. If the <code>-outer</code> option is specified, the rows from <em>view1</em> that do
not have a corresponding one in <em>view2</em> are also left in the view, with the
properties existing only in <em>view2</em> filled with default values.</dd>
  <dt>
<em>view</em> <code>group</code> <em>subviewName prop ?prop …?</em>
</dt>
  <dd>Groups the rows with all the specified properties equal; moves all the
remaining properties into a newly created subview property called
<em>subviewName</em>.</dd>
  <dt>
<em>view</em> <code>flatten</code> <em>subviewProp</em>
</dt>
  <dd>The inverse of <code>group</code>.</dd>
</dl>

<h3 id="projections-and-selections">Projections and selections</h3>

<dl>
  <dt>
<em>view</em> <code>project</code> <em>prop ?prop …?</em>
</dt>
  <dd>Projection: a derived view with only the specified properties left.</dd>
  <dt>
<em>view</em> <code>without</code> <em>prop ?prop …?</em>
</dt>
  <dd>The opposite of <code>project</code>: a derived view with the specified properties
removed.</dd>
</dl>

<p><em>view</em> <code>range</code> <em>start end ?step?</em>
    A slice or a segment of <em>view</em>: rows at <em>start</em>, <em>start+step</em>, and so on,
    until the row number becomes larger than <em>end</em>. The usual <code>end[+-]integer</code>
................................................................................
    is resized.</p>

<p><strong>(!) select etc. should go here</strong></p>

<h3 id="search-and-storage-optimization">Search and storage optimization</h3>

<dl>
  <dt>
<em>view</em> <code>blocked</code>
</dt>
  <dd>Invokes an optimization designed for storing large amounts of data. <em>view</em>
must have a single subview property called <code>_B</code> with the desired structure
inside. This additional level of indirection is used by <code>blocked</code> to create
a view that looks like a usual one, but can store much more data
efficiently. As a result, indexing into the view becomes a bit slower. Once
this method is invoked, all access to <em>view</em> must go through the returned
view.</dd>
  <dt>
<em>view</em> <code>ordered</code> <em>prop ?prop …?</em>
</dt>
  <dd>Does not transform the structure of the view in any way, but signals that
the view should be considered ordered on a unique key consisting of the
specified properties, enabling some optimizations. Note that duplicate keys
are not allowed in an ordered view.</dd>
</dl>

<p><strong>(!) TODO: hash, indexed(?) – these make no sense until searches are implemented</strong></p>
................................................................................
this syntax in Tcl procedures, you’ll need to do this yourself, or you may want
to create a custom view method and have the view handle work out the syntax for
you (see <strong>USER-DEFINED METHODS</strong> below).</p>

<h2 id="other-view-methods">OTHER VIEW METHODS</h2>

<dl>
  <dt>
<em>view</em> <code>copy</code>
</dt>
  <dd>Creates a copy of view with the same data.</dd>
  <dt>
<em>view</em> <code>clone</code>
</dt>
  <dd>Creates a view with the same structure, but no data.</dd>
  <dt>
<em>view</em> <code>pin</code>
</dt>
  <dd>Specifies that the view should not be destroyed after a single method call.
Returns <em>view</em>.</dd>
  <dt>
<em>view</em> <code>as</code> <em>varName</em>
</dt>
  <dd>In addition to the actions performed by <code>pin</code>, assigns the view handle to
the variable named varName in the caller’s scope.</dd>
  <dt>
<em>view</em> <code>properties</code>
</dt>
  <dd>Returns the names of all properties in the view.</dd>
  <dt>
<em>view</em> <code>type</code> <em>prop</em>
</dt>
  <dd>Returns the type of the specified property.</dd>
</dl>

<h2 id="a-note-on-null">A NOTE ON NULL</h2>
<p>Note that Metakit does not have a special <code>NULL</code> value like conventional
relational databases do. Instead, it defines <em>default</em> property values: <code>""</code> for
<code>string</code> and <code>binary</code> types, <code>0</code> for all numeric types and a view with no rows
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







<
|









<
|
<







 







|







 







<
|
<

<
|
<











<
|
<


<
|
<



<
|
<


<
|
<


<
|
<


<
|
<


<
|
<






<
|
<





<
|
<



<
|
<






<
|
<

<
|
<







 







<
|
<







<
|
<







 







<
|
<

<
|
<

<
|
<


<
|
<


<
|
<

<
|
<







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
91
92
93
94
95
96
97

98
99
100
101
102
103
104
105
106
107

108

109
110
111
112
113
114
115
...
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
...
205
206
207
208
209
210
211

212

213

214

215
216
217
218
219
220
221
222
223
224
225

226

227
228

229

230
231
232

233

234
235

236

237
238

239

240
241

242

243
244

245

246
247
248
249
250
251

252

253
254
255
256
257

258

259
260
261

262

263
264
265
266
267
268

269

270

271

272
273
274
275
276
277
278
...
280
281
282
283
284
285
286

287

288
289
290
291
292
293
294

295

296
297
298
299
300
301
302
...
313
314
315
316
317
318
319

320

321

322

323

324

325
326

327

328
329

330

331

332

333
334
335
336
337
338
339
...
386
387
388
389
390
391
392
393
394
395

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Metakit</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
The supported property types include:</p>

<dl>
  <dt><code>string</code></dt>
  <dd>A NULL-terminated string, stored as an array of bytes (without any encoding
assumptions).</dd>
  <dt><code>binary</code></dt>

  <dd><strong>Not yet supported by the <code>mk</code> extension.</strong>
Blob of binary data that may contain embedded NULLs (zero bytes). Stored
as-is. This is more efficient than <code>string</code> when storing large blocks of
data (e.g. images) and will adjust the storage strategy as needed.</dd>
  <dt><code>integer</code></dt>
  <dd>An signed integer value occupying a maximum of 32 bits. If all values
stored in a column can fit in a smaller range (16, 8, or even 4 or 2 bits),
they are packed automatically.</dd>
  <dt><code>long</code></dt>
  <dd>Like <code>integer</code>, but is required to fit into 64 bits.</dd>

  <dt><code>float</code> and <code>double</code></dt>

  <dd>32-bit and 64-bit IEEE floating-point values respectively.</dd>
  <dt><code>subview</code></dt>
  <dd>This type is not usually specified directly; instead, a structure
description of a nested view is given. <code>subview</code> properties store complete
views as their value, creating hierarchical data structures. When retreived
from a view, a value of a subview property is a normal view handle.</dd>
</dl>
................................................................................

<p>or via a dictionary with</p>

<pre><code>cursor set $cur dictValue
</code></pre>

<p>In the first form of the command, property names may also be preceded by a
-_typeName_ option. In this case, a new property of the specified type will be
created if it doesn’t already exist; note that this will cause <em>all</em> the rows
in the view to have the property (but see <strong>A NOTE ON NULL</strong> below).</p>

<p>If the row index points after the end of the view, an appropriate number of
fresh rows will be inserted first. So, for example, you can use <code>end+1</code>
to append a new row. (Note that you then have to set it all at once, though.)</p>

................................................................................

<p>Binary operations are left-biased when there are conflicting property values;
that is, they always prefer the values from the left view.</p>

<h3 id="unary-operations">Unary operations</h3>

<dl>

  <dt><em>view</em> <code>unique</code></dt>

  <dd>Derived view with duplicate rows removed.</dd>

  <dt><em>view</em> <code>sort</code> <em>crit ?crit …?</em></dt>

  <dd>Derived view sorted on the specified criteria, in order. A single <em>crit</em>
is either a property name or a property name preceded by a dash; the latter
specifies that the sorting is to be performed in reverse order.</dd>
</dl>

<h3 id="binary-operations">Binary operations</h3>

<p>The operations taking <em>set</em> arguments require that the given views have no
duplicate rows. The <code>unique</code> method can be used to ensure this.</p>

<dl>

  <dt><em>view1</em> <code>concat</code> <em>view2</em></dt>

  <dd>Vertical concatenation; that is, all the rows of <em>view1</em> and then all rows
of <em>view2</em>.</dd>

  <dt><em>view1</em> <code>pair</code> <em>view2</em></dt>

  <dd>Pairing, or horizontal concatenation: every row in <em>view1</em> is matched with
a row with the same index in <em>view2</em>; the result has all the properties of
<em>view1</em> and all the properties of <em>view2</em>.</dd>

  <dt><em>view1</em> <code>product</code> <em>view2</em></dt>

  <dd>Cartesian product: each row in <em>view1</em> horizontally concatenated with every
row in <em>view2</em>.</dd>

  <dt><em>set1</em> <code>union</code> <em>set2</em></dt>

  <dd>Set union. Unlike <code>concat</code>, this operation removes duplicates from the
result. A row is in the result if it is in <em>set1</em> <strong>or</strong> in <em>set2</em>.</dd>

  <dt><em>set1</em> <code>intersect</code> <em>set2</em></dt>

  <dd>Set intersection. A row is in the result if it is in <em>set1</em> <strong>and</strong> in
<em>set2</em>.</dd>

  <dt><em>set1</em> <code>different</code> <em>set2</em></dt>

  <dd>Symmetric difference. A row is in the result if it is in <em>set1</em> <strong>xor</strong> in
<em>set2</em>, that is, in <em>set1</em> or in <em>set2</em>, but not in both.</dd>

  <dt><em>set1</em> <code>minus</code> <em>set2</em></dt>

  <dd>Set minus. A row is in the result if it is in <em>set1</em> <strong>and not</strong> in <em>set2</em>.</dd>
</dl>

<h3 id="relational-operations">Relational operations</h3>

<dl>

  <dt><em>view1</em> <code>join</code> <em>view2</em> ?<code>-outer</code>? <em>prop ?prop …?</em></dt>

  <dd>Relational join on the specified properties: the rows from <em>view1</em> and
<em>view2</em> with all the specified properties equal are concatenated to form a
new row. If the <code>-outer</code> option is specified, the rows from <em>view1</em> that do
not have a corresponding one in <em>view2</em> are also left in the view, with the
properties existing only in <em>view2</em> filled with default values.</dd>

  <dt><em>view</em> <code>group</code> <em>subviewName prop ?prop …?</em></dt>

  <dd>Groups the rows with all the specified properties equal; moves all the
remaining properties into a newly created subview property called
<em>subviewName</em>.</dd>

  <dt><em>view</em> <code>flatten</code> <em>subviewProp</em></dt>

  <dd>The inverse of <code>group</code>.</dd>
</dl>

<h3 id="projections-and-selections">Projections and selections</h3>

<dl>

  <dt><em>view</em> <code>project</code> <em>prop ?prop …?</em></dt>

  <dd>Projection: a derived view with only the specified properties left.</dd>

  <dt><em>view</em> <code>without</code> <em>prop ?prop …?</em></dt>

  <dd>The opposite of <code>project</code>: a derived view with the specified properties
removed.</dd>
</dl>

<p><em>view</em> <code>range</code> <em>start end ?step?</em>
    A slice or a segment of <em>view</em>: rows at <em>start</em>, <em>start+step</em>, and so on,
    until the row number becomes larger than <em>end</em>. The usual <code>end[+-]integer</code>
................................................................................
    is resized.</p>

<p><strong>(!) select etc. should go here</strong></p>

<h3 id="search-and-storage-optimization">Search and storage optimization</h3>

<dl>

  <dt><em>view</em> <code>blocked</code></dt>

  <dd>Invokes an optimization designed for storing large amounts of data. <em>view</em>
must have a single subview property called <code>_B</code> with the desired structure
inside. This additional level of indirection is used by <code>blocked</code> to create
a view that looks like a usual one, but can store much more data
efficiently. As a result, indexing into the view becomes a bit slower. Once
this method is invoked, all access to <em>view</em> must go through the returned
view.</dd>

  <dt><em>view</em> <code>ordered</code> <em>prop ?prop …?</em></dt>

  <dd>Does not transform the structure of the view in any way, but signals that
the view should be considered ordered on a unique key consisting of the
specified properties, enabling some optimizations. Note that duplicate keys
are not allowed in an ordered view.</dd>
</dl>

<p><strong>(!) TODO: hash, indexed(?) – these make no sense until searches are implemented</strong></p>
................................................................................
this syntax in Tcl procedures, you’ll need to do this yourself, or you may want
to create a custom view method and have the view handle work out the syntax for
you (see <strong>USER-DEFINED METHODS</strong> below).</p>

<h2 id="other-view-methods">OTHER VIEW METHODS</h2>

<dl>

  <dt><em>view</em> <code>copy</code></dt>

  <dd>Creates a copy of view with the same data.</dd>

  <dt><em>view</em> <code>clone</code></dt>

  <dd>Creates a view with the same structure, but no data.</dd>

  <dt><em>view</em> <code>pin</code></dt>

  <dd>Specifies that the view should not be destroyed after a single method call.
Returns <em>view</em>.</dd>

  <dt><em>view</em> <code>as</code> <em>varName</em></dt>

  <dd>In addition to the actions performed by <code>pin</code>, assigns the view handle to
the variable named varName in the caller’s scope.</dd>

  <dt><em>view</em> <code>properties</code></dt>

  <dd>Returns the names of all properties in the view.</dd>

  <dt><em>view</em> <code>type</code> <em>prop</em></dt>

  <dd>Returns the type of the specified property.</dd>
</dl>

<h2 id="a-note-on-null">A NOTE ON NULL</h2>
<p>Note that Metakit does not have a special <code>NULL</code> value like conventional
relational databases do. Instead, it defines <em>default</em> property values: <code>""</code> for
<code>string</code> and <code>binary</code> types, <code>0</code> for all numeric types and a view with no rows
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/documentation/oo/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
..
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
..
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
...
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
...
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
...
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
...
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
...
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
...
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
...
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
...
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
...
370
371
372
373
374
375
376
377
378

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Object Oriented</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<div class="main" id="main">
		
		<h1 id="object-oriented-support-for-jim-tcl">Object Oriented Support for Jim Tcl</h1>

<h2 id="overview">OVERVIEW</h2>

<p>The pure-Tcl oo package leverages Jim’s unique strengths
to provide support for Object Oriented programming. </p>

<p>The oo package can be statically linked with Jim or installed
as a separate Tcl package and loaded with:</p>

<pre class="sh_tcl">
package require oo
</pre>

<h2 id="declaring-classes">DECLARING CLASSES</h2>

<p>A class is declared with the <code>class</code> proc as follows.</p>

<pre class="sh_tcl">
class myclass ?baseclasses? classvars
</pre>

<p>This declares a class named <code>myclass</code> with the given dictionary,
<code>classvars</code>, providing the initial state of all new objects.
It is important to list all class variables in <code>classvars</code>, even
if initialised only to the empty string, since the class makes
these variables available in methods and via <code>[myclass vars]</code>.</p>
................................................................................
<p>A list of zero or more base classes may also be specified from
which methods and class variables are imported. See INHERITANCE
below for more details.</p>

<p>Declaring a class creates a procedure with the class name along
with some related procedures. For example:</p>

<pre class="sh_tcl">
. class Account {balance 0}
Account
. info procs Account*
{Account get} {Account methods} {Account eval} Account {Account new} {Account destroy}
{Account vars} {Account classname} {Account classvars} {Account method}
</pre>

<p>Notice that apart from the main <code>Account</code> procedure, all the remaining procedures (methods)
................................................................................

<h2 id="predefined-class-methods">PREDEFINED CLASS METHODS</h2>

<p>Decaring a class pre-defines a number of “class” methods. i.e. those which don’t
require an object and simply return or manipulate properties of the class. These are:</p>

<dl>
  <dt>
<strong>new</strong> ?instancevars?</dt>
  <dd>Creates and returns new object, optionally overriding the default class variable values.
Note that the class name is an alias for <code>classname new {}</code> and can be used as a shorthand
for creating new objects with default values.</dd>
</dl>
<dl>
  <dt>
<strong>method</strong> name arglist body</dt>
  <dd>Creates or redefines a method for the class with the given name, argument list and body.</dd>
</dl>
<dl>
  <dt><strong>methods</strong></dt>
  <dd>Returns a list of the methods supported by this class, including both class methods
and instance methods. Also includes base class methods.</dd>
</dl>
................................................................................
  <dt><strong>classname</strong></dt>
  <dd>Returns the classname. This can be useful as [$self classname].</dd>
</dl>

<p>Class methods may be invoked either via the class name or via an object of the class.
For example:</p>

<pre class="sh_tcl">
. class Account {balance 0}
Account
. Account methods
classname classvars destroy eval get method methods new vars
. set a [Account]
&lt;reference.&lt;Account&gt;.00000000000000000001&gt;
. $a methods
classname classvars destroy eval get method methods new vars
................................................................................
<dl>
  <dt><strong>destroy</strong></dt>
  <dd>Destroys the object. This method may be overridden, but note that it should
delete the object with {rename $self “”}. This method will also be called
if the object is reaped during garbage collection.</dd>
</dl>
<dl>
  <dt>
<strong>get</strong> varname</dt>
  <dd>Returns the value of the given instance variable.</dd>
</dl>
<dl>
  <dt>
<strong>eval</strong> ?locals? body</dt>
  <dd>Makes any given local variables available to the body, along with
the instance variables, and evaluate the body in that context.
This can be used for one-off evaluation to avoid declaring a method.</dd>
</dl>

<h2 id="creating-objects">CREATING OBJECTS</h2>

................................................................................
<p>An object is created with the <code>new</code> method, or simply by using the classname shortcut.
If the <code>new</code> method is used, the variables for the newly created object (instance variables)
may be initialised. Otherwise they are set to the default values specified when the
class was declared.</p>

<p>For example:</p>

<pre class="sh_tcl">
. class Account {balance 0}
Account
. set a [Account]
&lt;reference.&lt;Account&gt;.00000000000000000001&gt;
. set b [Account new {balance 1000}]
&lt;reference.&lt;Account&gt;.00000000000000000002&gt;
. $a get balance
0
................................................................................

<p>In addition to the predefined methods, new methods may be decared, or existing
methods redefined with the class method, method.</p>

<p>Declaring a method is very similar to defining a proc, and the arglist
has identical syntax. For example:</p>

<pre class="sh_tcl">
. Account method show {{chan stdout}} { $chan puts "Balance of account is $balance" }
. $b show
Balance of account is 1000
</pre>

<p>All instance variables are available within the method and any
changes to these variables are maintained by the object.</p>

<p>In addition, the $self variables is defined and refers to the current object.
This may be used to invoke further methods on the object. For example:</p>

<pre class="sh_tcl">
. Account method show {} { puts "Balance of account is [$self get balance]" }
. $b show
Balance of account is 1000
</pre>

<p>Notes:</p>

<ul>
  <li>It is a bad idea to unset an instance variable.</li>
  <li>In general, you should avoid redefining any of the pre-defined methods, except for <code>destroy</code>.</li>
  <li>When accessing the caller’s scope with upvar or uplevel, note that there
are two frame levels between the caller and the method. Thus it is necessary
to use <code>upvar 2</code> or <code>uplevel 2</code>
</li>
</ul>

<h2 id="inheritance">INHERITANCE</h2>

<p>For each base class given in a new class declaration, the methods
and variables of those classes are imported into the new class being
defined. Base classes are imported in left to right order, so that if a
................................................................................
method is defined in more than one base class, the later definition
is selected. This applies similarly to class variables.</p>

<p>Within a method, <code>super</code> may be used to explicitly invoke a
base class method on the object. This applies only to the <em>last</em>
base class given. For example:</p>

<pre class="sh_tcl">
# Assumes the existence of classes Account and Client
. Account method debit {amount} { incr balance -$amount }
. class CreditAccount {Client Account} {type visa}
CreditAccount
. CreditAccount method debit {amount} {
  puts "Debit $type card"
  super debit $amount
}
................................................................................

<p>Objects are implemented as lambdas. That is, they are procedures with state
and are named as references. This means that when an object is no longer
reachable by any name and garbage collection runs, the object will be
discarded and the destructor will be invoked. Note that the garbage collector
can be invoked manually with <code>collect</code> if required.</p>

<pre class="sh_tcl">
. class Account {}
Account
. Account method destroy {} { puts dying...; rename $self "" }
Account destroy
. proc a {} { set b [Account]; return "" }
a
. a
. collect
................................................................................
The method dispatcher will automatically be able to dispatch to this method.
Using this approach, it is also possible to add class static variables by
defining static variables to the proc. Although strictly these variables
are accessible only to that proc, not the class as a whole.</p>

<p>For example:</p>

<pre class="sh_tcl">
. class Account {}
Account
. proc {Account nextid} {} {{id 0}} { incr id }
Account nextid
. Account nextid
1
. Account nextid
2
................................................................................

<h3 id="examplesootesttclhttprepoorczwjimtclgitblobheadexamplesootesttcl"><a href="http://repo.or.cz/w/jimtcl.git/blob/HEAD:/examples/ootest.tcl">examples/ootest.tcl</a></h3>

<p>A comprehensive OO example is provided in examples/ootest.tcl.</p>

<p>It can be run simply as:</p>

<pre class="sh_unix">
$ ./jimsh examples/ootest.tcl
</pre>

		
		</div>
	</div>
    <div id="sidebar">
      <h2>About Jim Tcl</h2>
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|




|
<






<
|







 







<
|







 







<
|





<
|







 







<
|







 







<
|



<
|







 







<
|







 







<
|










<
|











|
<







 







<
|







 







|
<







 







|
<







 







<
|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
43
44
45
46
47
48
49
50
51
52
53
54
55

56
57
58
59
60
61

62
63
64
65
66
67
68
69
..
71
72
73
74
75
76
77

78
79
80
81
82
83
84
85
..
87
88
89
90
91
92
93

94
95
96
97
98
99

100
101
102
103
104
105
106
107
...
119
120
121
122
123
124
125

126
127
128
129
130
131
132
133
...
141
142
143
144
145
146
147

148
149
150
151

152
153
154
155
156
157
158
159
...
160
161
162
163
164
165
166

167
168
169
170
171
172
173
174
...
180
181
182
183
184
185
186

187
188
189
190
191
192
193
194
195
196
197

198
199
200
201
202
203
204
205
206
207
208
209
210

211
212
213
214
215
216
217
...
218
219
220
221
222
223
224

225
226
227
228
229
230
231
232
...
245
246
247
248
249
250
251
252

253
254
255
256
257
258
259
...
268
269
270
271
272
273
274
275

276
277
278
279
280
281
282
...
310
311
312
313
314
315
316

317
318
319
320
321
322
323
324
...
351
352
353
354
355
356
357
358
359
360

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Object Oriented</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<div class="main" id="main">
		
		<h1 id="object-oriented-support-for-jim-tcl">Object Oriented Support for Jim Tcl</h1>

<h2 id="overview">OVERVIEW</h2>

<p>The pure-Tcl oo package leverages Jim’s unique strengths
to provide support for Object Oriented programming.</p>

<p>The oo package can be statically linked with Jim or installed
as a separate Tcl package and loaded with:</p>

<pre class="sh_tcl">package require oo

</pre>

<h2 id="declaring-classes">DECLARING CLASSES</h2>

<p>A class is declared with the <code>class</code> proc as follows.</p>


<pre class="sh_tcl">class myclass ?baseclasses? classvars
</pre>

<p>This declares a class named <code>myclass</code> with the given dictionary,
<code>classvars</code>, providing the initial state of all new objects.
It is important to list all class variables in <code>classvars</code>, even
if initialised only to the empty string, since the class makes
these variables available in methods and via <code>[myclass vars]</code>.</p>
................................................................................
<p>A list of zero or more base classes may also be specified from
which methods and class variables are imported. See INHERITANCE
below for more details.</p>

<p>Declaring a class creates a procedure with the class name along
with some related procedures. For example:</p>


<pre class="sh_tcl">. class Account {balance 0}
Account
. info procs Account*
{Account get} {Account methods} {Account eval} Account {Account new} {Account destroy}
{Account vars} {Account classname} {Account classvars} {Account method}
</pre>

<p>Notice that apart from the main <code>Account</code> procedure, all the remaining procedures (methods)
................................................................................

<h2 id="predefined-class-methods">PREDEFINED CLASS METHODS</h2>

<p>Decaring a class pre-defines a number of “class” methods. i.e. those which don’t
require an object and simply return or manipulate properties of the class. These are:</p>

<dl>

  <dt><strong>new</strong> ?instancevars?</dt>
  <dd>Creates and returns new object, optionally overriding the default class variable values.
Note that the class name is an alias for <code>classname new {}</code> and can be used as a shorthand
for creating new objects with default values.</dd>
</dl>
<dl>

  <dt><strong>method</strong> name arglist body</dt>
  <dd>Creates or redefines a method for the class with the given name, argument list and body.</dd>
</dl>
<dl>
  <dt><strong>methods</strong></dt>
  <dd>Returns a list of the methods supported by this class, including both class methods
and instance methods. Also includes base class methods.</dd>
</dl>
................................................................................
  <dt><strong>classname</strong></dt>
  <dd>Returns the classname. This can be useful as [$self classname].</dd>
</dl>

<p>Class methods may be invoked either via the class name or via an object of the class.
For example:</p>


<pre class="sh_tcl">. class Account {balance 0}
Account
. Account methods
classname classvars destroy eval get method methods new vars
. set a [Account]
&lt;reference.&lt;Account&gt;.00000000000000000001&gt;
. $a methods
classname classvars destroy eval get method methods new vars
................................................................................
<dl>
  <dt><strong>destroy</strong></dt>
  <dd>Destroys the object. This method may be overridden, but note that it should
delete the object with {rename $self “”}. This method will also be called
if the object is reaped during garbage collection.</dd>
</dl>
<dl>

  <dt><strong>get</strong> varname</dt>
  <dd>Returns the value of the given instance variable.</dd>
</dl>
<dl>

  <dt><strong>eval</strong> ?locals? body</dt>
  <dd>Makes any given local variables available to the body, along with
the instance variables, and evaluate the body in that context.
This can be used for one-off evaluation to avoid declaring a method.</dd>
</dl>

<h2 id="creating-objects">CREATING OBJECTS</h2>

................................................................................
<p>An object is created with the <code>new</code> method, or simply by using the classname shortcut.
If the <code>new</code> method is used, the variables for the newly created object (instance variables)
may be initialised. Otherwise they are set to the default values specified when the
class was declared.</p>

<p>For example:</p>


<pre class="sh_tcl">. class Account {balance 0}
Account
. set a [Account]
&lt;reference.&lt;Account&gt;.00000000000000000001&gt;
. set b [Account new {balance 1000}]
&lt;reference.&lt;Account&gt;.00000000000000000002&gt;
. $a get balance
0
................................................................................

<p>In addition to the predefined methods, new methods may be decared, or existing
methods redefined with the class method, method.</p>

<p>Declaring a method is very similar to defining a proc, and the arglist
has identical syntax. For example:</p>


<pre class="sh_tcl">. Account method show {{chan stdout}} { $chan puts "Balance of account is $balance" }
. $b show
Balance of account is 1000
</pre>

<p>All instance variables are available within the method and any
changes to these variables are maintained by the object.</p>

<p>In addition, the $self variables is defined and refers to the current object.
This may be used to invoke further methods on the object. For example:</p>


<pre class="sh_tcl">. Account method show {} { puts "Balance of account is [$self get balance]" }
. $b show
Balance of account is 1000
</pre>

<p>Notes:</p>

<ul>
  <li>It is a bad idea to unset an instance variable.</li>
  <li>In general, you should avoid redefining any of the pre-defined methods, except for <code>destroy</code>.</li>
  <li>When accessing the caller’s scope with upvar or uplevel, note that there
are two frame levels between the caller and the method. Thus it is necessary
to use <code>upvar 2</code> or <code>uplevel 2</code></li>

</ul>

<h2 id="inheritance">INHERITANCE</h2>

<p>For each base class given in a new class declaration, the methods
and variables of those classes are imported into the new class being
defined. Base classes are imported in left to right order, so that if a
................................................................................
method is defined in more than one base class, the later definition
is selected. This applies similarly to class variables.</p>

<p>Within a method, <code>super</code> may be used to explicitly invoke a
base class method on the object. This applies only to the <em>last</em>
base class given. For example:</p>


<pre class="sh_tcl"># Assumes the existence of classes Account and Client
. Account method debit {amount} { incr balance -$amount }
. class CreditAccount {Client Account} {type visa}
CreditAccount
. CreditAccount method debit {amount} {
  puts "Debit $type card"
  super debit $amount
}
................................................................................

<p>Objects are implemented as lambdas. That is, they are procedures with state
and are named as references. This means that when an object is no longer
reachable by any name and garbage collection runs, the object will be
discarded and the destructor will be invoked. Note that the garbage collector
can be invoked manually with <code>collect</code> if required.</p>

<pre class="sh_tcl">. class Account {}

Account
. Account method destroy {} { puts dying...; rename $self "" }
Account destroy
. proc a {} { set b [Account]; return "" }
a
. a
. collect
................................................................................
The method dispatcher will automatically be able to dispatch to this method.
Using this approach, it is also possible to add class static variables by
defining static variables to the proc. Although strictly these variables
are accessible only to that proc, not the class as a whole.</p>

<p>For example:</p>

<pre class="sh_tcl">. class Account {}

Account
. proc {Account nextid} {} {{id 0}} { incr id }
Account nextid
. Account nextid
1
. Account nextid
2
................................................................................

<h3 id="examplesootesttclhttprepoorczwjimtclgitblobheadexamplesootesttcl"><a href="http://repo.or.cz/w/jimtcl.git/blob/HEAD:/examples/ootest.tcl">examples/ootest.tcl</a></h3>

<p>A comprehensive OO example is provided in examples/ootest.tcl.</p>

<p>It can be run simply as:</p>


<pre class="sh_unix">$ ./jimsh examples/ootest.tcl
</pre>

		
		</div>
	</div>
    <div id="sidebar">
      <h2>About Jim Tcl</h2>
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/documentation/sqlite/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
...
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
...
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
...
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
...
278
279
280
281
282
283
284
285
286

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Sqlite Extension</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
extensions. The only difference being the open call, <strong>sqlite.open</strong> vs. <strong>sqlite3.open</strong></p>

<h2 id="basic-usage">Basic usage</h2>

<p>The Sqlite extension exports an Object Based interface for databases. In order
to open a database use:</p>

<pre class="sh_tcl">
set f [sqlite3.open dbname]
</pre>

<p>The <code>sqlite3.open</code> command returns a db handle, that is a command name that
can be used to perform operations on the database. A real example:</p>

<pre class="sh_tcl">
. set db [sqlite3.open test.db]
sqlite.handle0
. $db query "SELECT * from tbl1" 
{one hello! two 10} {one goodbye two 20}
</pre>

<p>In the second line the handle is used as a command name, followed
by the ‘method’ or ‘subcommand’ (“query” in the example), and the arguments.</p>

<h2 id="the-query-method">The query method</h2>

<p>The query method has the following signature:</p>

<pre class="sh_tcl">
$db query SqlQuery ?args?
</pre>

<p>The sql query may contain occurrences of “%s” that are substituted
in the actual query with the following arguments, quoted in order
to make sure that the query is correct even if this arguments contain
“’” characters. So for example it is possible to write:</p>

<pre class="sh_tcl">
. $db query "SELECT * from tbl1 WHERE one='%s'" hello!
{one hello! two 10}
</pre>

<p>Instead of hello! it is possible to use a string with embedded “’”:</p>

<pre class="sh_tcl">
. $db query "SELECT * from tbl1 WHERE one='%s'" a'b
(no matches - the empty list is returned)
</pre>

<p>This does not work instead using the Tcl variable expansion in the string:</p>

<pre class="sh_tcl">
. $db query "SELECT * from tbl1 WHERE one='$foo'"
near "b": syntax error
</pre>

<p>In order to obtain an actual ‘%’ character in the query, there is just
to use two, like in “foo %% bar”. This is the same as the [format] argument.</p>

<h2 id="specification-of-query-results">Specification of query results</h2>

<p>In one of the above examples, the following query was used:</p>

<pre class="sh_tcl">
. $db query "SELECT * from tbl1" 
{one hello! two 10} {one goodbye two 20}
</pre>

<p>As you can see the result of a query is a list of lists. Every
element of the list represents a row, as a list of key/value pairs,
so actually every row is a Jim dictionary.</p>

<p>The following example and generated output show how to take advantage
of this representation:</p>

<pre class="sh_tcl">
. set res [$db query "SELECT * from tbl1"]
{one hello! two 10} {one goodbye two 20}
. foreach row $res {puts "One: $row(one), Two: $row(two)"}
One: hello!, Two: 10
One: goodbye, Two: 20
</pre>

<p>To access every row sequentially is very simple, and field of a row
................................................................................

<h2 id="the-close-method">The close method</h2>

<p>In order to close the db, use the ‘close’ method that will have as side effect
to close the db and to remove the command associated with the db.
Just use:</p>

<pre class="sh_tcl">
$db close
</pre>

<h2 id="handling-null-values">Handling NULL values</h2>

<p>In the SQL language there is a special value NULL that is not the empty
string, so how to represent it in a typeless language like Tcl?
For default this extension will use the empty string, but it is possible
................................................................................

<pre><code>sqlite&gt; INSERT INTO tbl1 VALUES(NULL,30);
sqlite&gt; .exit
</code></pre>

<p>That’s what the sqlite extension will return for default:</p>

<pre class="sh_tcl">
. $db query "SELECT * from tbl1"
{one hello! two 10} {one goodbye two 20} {one {} two 30}
</pre>

<p>As you can see in the last row, the NULL is represented as {}, that’s
the empty string. Using the -null option of the ‘query’ command we
can change this default, and tell the sqlite extension to represent
the NULL value as a different string:</p>

<pre class="sh_tcl">
. $db query -null &lt;&lt;NULL&gt;&gt; "SELECT * from tbl1"
{one hello! two 10} {one goodbye two 20} {one &lt;&lt;NULL&gt;&gt; two 30}
</pre>

<p>This way if the emtpy string has some semantical value for your
dataset you can change it.</p>

<h2 id="finding-the-id-of-the-last-inserted-row">Finding the ID of the last inserted row</h2>

<p>This is as simple as:</p>

<pre class="sh_tcl">
. $db lastid
10
</pre>

<h2 id="number-of-rows-changed-by-the-most-recent-query">Number of rows changed by the most recent query</h2>

<p>This is also very simple, there is just to use the ‘changes’ method
without arugments.</p>

<pre class="sh_tcl">
. $db changes
5
</pre>

<p>Note that if you drop an entire table the number of changes will
be reported as zero, because of details of the sqlite implementation.</p>

<p>That’s all,
................................................................................
to the filesystem. Of course this databases are only useful for
temp data.</p>

<p>In-memory DBs are used just like regular databases, just the name used to
open the database is :memory:. That’s an example that does not use the
filesystem at all to create and work with the db.</p>

<pre class="sh_tcl">
package require sqlite3
set db [sqlite3.open :memory:]
$db query {CREATE TABLE plays (id, author, title)}
$db query {INSERT INTO plays (id, author, title) VALUES (1, 'Goethe', 'Faust');}
$db query {INSERT INTO plays (id, author, title) VALUES (2, 'Shakespeare', 'Hamlet');}
$db query {INSERT INTO plays (id, author, title) VALUES (3, 'Sophocles', 'Oedipus Rex');}
set res [$db query "SELECT * FROM plays"]
$db close
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







<
|





<
|












<
|







<
|





<
|





<
|










<
|










<
|







 







|
<







 







<
|








<
|










|
<








|
<







 







<
|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
57
58
59
60
61
62
63

64
65
66
67
68
69

70
71
72
73
74
75
76
77
78
79
80
81
82

83
84
85
86
87
88
89
90

91
92
93
94
95
96

97
98
99
100
101
102

103
104
105
106
107
108
109
110
111
112
113

114
115
116
117
118
119
120
121
122
123
124

125
126
127
128
129
130
131
132
...
134
135
136
137
138
139
140
141

142
143
144
145
146
147
148
...
154
155
156
157
158
159
160

161
162
163
164
165
166
167
168
169

170
171
172
173
174
175
176
177
178
179
180
181

182
183
184
185
186
187
188
189
190

191
192
193
194
195
196
197
...
209
210
211
212
213
214
215

216
217
218
219
220
221
222
223
...
261
262
263
264
265
266
267
268
269
270

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Sqlite Extension</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
extensions. The only difference being the open call, <strong>sqlite.open</strong> vs. <strong>sqlite3.open</strong></p>

<h2 id="basic-usage">Basic usage</h2>

<p>The Sqlite extension exports an Object Based interface for databases. In order
to open a database use:</p>


<pre class="sh_tcl">set f [sqlite3.open dbname]
</pre>

<p>The <code>sqlite3.open</code> command returns a db handle, that is a command name that
can be used to perform operations on the database. A real example:</p>


<pre class="sh_tcl">. set db [sqlite3.open test.db]
sqlite.handle0
. $db query "SELECT * from tbl1" 
{one hello! two 10} {one goodbye two 20}
</pre>

<p>In the second line the handle is used as a command name, followed
by the ‘method’ or ‘subcommand’ (“query” in the example), and the arguments.</p>

<h2 id="the-query-method">The query method</h2>

<p>The query method has the following signature:</p>


<pre class="sh_tcl">$db query SqlQuery ?args?
</pre>

<p>The sql query may contain occurrences of “%s” that are substituted
in the actual query with the following arguments, quoted in order
to make sure that the query is correct even if this arguments contain
“’” characters. So for example it is possible to write:</p>


<pre class="sh_tcl">. $db query "SELECT * from tbl1 WHERE one='%s'" hello!
{one hello! two 10}
</pre>

<p>Instead of hello! it is possible to use a string with embedded “’”:</p>


<pre class="sh_tcl">. $db query "SELECT * from tbl1 WHERE one='%s'" a'b
(no matches - the empty list is returned)
</pre>

<p>This does not work instead using the Tcl variable expansion in the string:</p>


<pre class="sh_tcl">. $db query "SELECT * from tbl1 WHERE one='$foo'"
near "b": syntax error
</pre>

<p>In order to obtain an actual ‘%’ character in the query, there is just
to use two, like in “foo %% bar”. This is the same as the [format] argument.</p>

<h2 id="specification-of-query-results">Specification of query results</h2>

<p>In one of the above examples, the following query was used:</p>


<pre class="sh_tcl">. $db query "SELECT * from tbl1" 
{one hello! two 10} {one goodbye two 20}
</pre>

<p>As you can see the result of a query is a list of lists. Every
element of the list represents a row, as a list of key/value pairs,
so actually every row is a Jim dictionary.</p>

<p>The following example and generated output show how to take advantage
of this representation:</p>


<pre class="sh_tcl">. set res [$db query "SELECT * from tbl1"]
{one hello! two 10} {one goodbye two 20}
. foreach row $res {puts "One: $row(one), Two: $row(two)"}
One: hello!, Two: 10
One: goodbye, Two: 20
</pre>

<p>To access every row sequentially is very simple, and field of a row
................................................................................

<h2 id="the-close-method">The close method</h2>

<p>In order to close the db, use the ‘close’ method that will have as side effect
to close the db and to remove the command associated with the db.
Just use:</p>

<pre class="sh_tcl">$db close

</pre>

<h2 id="handling-null-values">Handling NULL values</h2>

<p>In the SQL language there is a special value NULL that is not the empty
string, so how to represent it in a typeless language like Tcl?
For default this extension will use the empty string, but it is possible
................................................................................

<pre><code>sqlite&gt; INSERT INTO tbl1 VALUES(NULL,30);
sqlite&gt; .exit
</code></pre>

<p>That’s what the sqlite extension will return for default:</p>


<pre class="sh_tcl">. $db query "SELECT * from tbl1"
{one hello! two 10} {one goodbye two 20} {one {} two 30}
</pre>

<p>As you can see in the last row, the NULL is represented as {}, that’s
the empty string. Using the -null option of the ‘query’ command we
can change this default, and tell the sqlite extension to represent
the NULL value as a different string:</p>


<pre class="sh_tcl">. $db query -null &lt;&lt;NULL&gt;&gt; "SELECT * from tbl1"
{one hello! two 10} {one goodbye two 20} {one &lt;&lt;NULL&gt;&gt; two 30}
</pre>

<p>This way if the emtpy string has some semantical value for your
dataset you can change it.</p>

<h2 id="finding-the-id-of-the-last-inserted-row">Finding the ID of the last inserted row</h2>

<p>This is as simple as:</p>

<pre class="sh_tcl">. $db lastid

10
</pre>

<h2 id="number-of-rows-changed-by-the-most-recent-query">Number of rows changed by the most recent query</h2>

<p>This is also very simple, there is just to use the ‘changes’ method
without arugments.</p>

<pre class="sh_tcl">. $db changes

5
</pre>

<p>Note that if you drop an entire table the number of changes will
be reported as zero, because of details of the sqlite implementation.</p>

<p>That’s all,
................................................................................
to the filesystem. Of course this databases are only useful for
temp data.</p>

<p>In-memory DBs are used just like regular databases, just the name used to
open the database is :memory:. That’s an example that does not use the
filesystem at all to create and work with the db.</p>


<pre class="sh_tcl">package require sqlite3
set db [sqlite3.open :memory:]
$db query {CREATE TABLE plays (id, author, title)}
$db query {INSERT INTO plays (id, author, title) VALUES (1, 'Goethe', 'Faust');}
$db query {INSERT INTO plays (id, author, title) VALUES (2, 'Shakespeare', 'Hamlet');}
$db query {INSERT INTO plays (id, author, title) VALUES (3, 'Sophocles', 'Oedipus Rex');}
set res [$db query "SELECT * FROM plays"]
$db close
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/documentation/utf8/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
...
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
...
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
...
257
258
259
260
261
262
263
264
265

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - UTF-8 and Unicode</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
<h2 id="overview">Overview</h2>
<p>Traditionally Jim Tcl has support strings, including binary strings containing
nulls, however it has had no support for multi-byte character encodings.</p>

<p>In some fields, such as when dealing with the web or other user-generated content,
support for multi-byte character encodings is necessary.
In these cases it is very useful for Jim Tcl to be able to process strings
as multi-byte character strings rather than simply binary bytes. </p>

<p>Supporting multiple character encodings and translation between those encodings
is beyond the scope of Jim Tcl. Therefore, Jim has been enhanced to add support
for UTF-8, as probably the most common general purpose multi-byte encoding.</p>

<p>UTF-8 support is optional. It can be enabled at compile time with:</p>

<pre class="sh_unix">
$ ./configure --enable-utf8
</pre>

<p>When UTF-8 support is enabled, most string-related commands become UTF-8 aware, including
<code>string match</code>, <code>split</code>, <code>glob</code>, <code>scan</code> and <code>format</code>.</p>

<p>UTF-8 encoding has many advantages, but one of the complications is that
characters can take a variable number of bytes. Thus the addition of
................................................................................
<p>Some UTF-8 character sequences are invalid, such as those beginning with <code>0xff</code>,
those which represent character sequences longer than 3 bytes (greater than U+FFFF),
and those which end prematurely, such as a lone <code>0xc2</code>.</p>

<p>In these situations, the offending bytes are treated as single characters. For example,
the following returns 2.</p>

<pre class="sh_tcl">
string bytelength \xff\xff
</pre>

<h2 id="commands-supporting-utf-8">Commands Supporting UTF-8</h2>
<p>The following commands have been enhanced to support UTF-8 strings.</p>

<ul>
  <li>array {get,names,unset}</li>
................................................................................
  <li>info procs, commands, vars, globals, locals</li>
</ul>

<h2 id="string-matching">String Matching</h2>
<p>Commands such as <code>string match</code>, <code>lsearch -glob</code>, <code>array names</code> and others use string
pattern matching rules. These commands support UTF-8. For example:</p>

<pre class="sh_tcl">
string match a\[\ua0-\ubf\]b "a\u00a3b"
</pre>

<h2 id="format-and-scan">format and scan</h2>

<p><code>format %c</code> allows a unicode codepoint to be be encoded. For example, the following will return
a string with two bytes and one character. The same as <code>\ub5</code></p>

<pre class="sh_tcl">
format %c 0xb5
</pre>

<p><code>format</code> respects widths as character widths, not byte widths. For example, the following will
return a string with three characters, not three bytes.</p>

<pre class="sh_tcl">
format %.3s \ub5\ub6\ub7\ub8
</pre>

<p>Similarly, <code>scan ... %c</code> allows a UTF-8 to be decoded to a unicode codepoint. The following will set
<em>a</em> to 181 (0xb5) and <em>b</em> to 65 (0x41).</p>

<pre class="sh_tcl">
scan \u00b5A %c%c a b
</pre>

<p><code>scan %s</code> will also accept a character class, including unicode ranges.</p>

<h2 id="string-and-character-classes">String and Character Classes</h2>
<p><code>string is</code> has <strong>not</strong> been extended to classify UTF-8 characters. Therefore, the following
will return <code>0</code>, even though the string may be considered to be alphabetic.</p>

<pre class="sh_tcl">
string is alpha \ub5Test
</pre>

<p>This does not affect the string classes <code>ascii</code>, <code>control</code>, <code>digit</code>, <code>double</code>, <code>integer</code> or <code>xdigit</code>.</p>

<p>Similarly, UTF-8 character classes are not supported. Thus <code>[:alpha:]</code>
will match <code>[a-zA-Z]</code> but not non-ASCII alphabetic characters.</p>

................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|







<
|







 







<
|







 







<
|







|
<





<
|





<
|








<
|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61

62
63
64
65
66
67
68
69
...
104
105
106
107
108
109
110

111
112
113
114
115
116
117
118
...
129
130
131
132
133
134
135

136
137
138
139
140
141
142
143
144

145
146
147
148
149

150
151
152
153
154
155

156
157
158
159
160
161
162
163
164

165
166
167
168
169
170
171
172
...
247
248
249
250
251
252
253
254
255
256

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - UTF-8 and Unicode</title>
    <link rel="stylesheet" type="text/css" href="../../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../../css/sh_style.css" media="screen">
	
	<script src="../../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
<h2 id="overview">Overview</h2>
<p>Traditionally Jim Tcl has support strings, including binary strings containing
nulls, however it has had no support for multi-byte character encodings.</p>

<p>In some fields, such as when dealing with the web or other user-generated content,
support for multi-byte character encodings is necessary.
In these cases it is very useful for Jim Tcl to be able to process strings
as multi-byte character strings rather than simply binary bytes.</p>

<p>Supporting multiple character encodings and translation between those encodings
is beyond the scope of Jim Tcl. Therefore, Jim has been enhanced to add support
for UTF-8, as probably the most common general purpose multi-byte encoding.</p>

<p>UTF-8 support is optional. It can be enabled at compile time with:</p>


<pre class="sh_unix">$ ./configure --enable-utf8
</pre>

<p>When UTF-8 support is enabled, most string-related commands become UTF-8 aware, including
<code>string match</code>, <code>split</code>, <code>glob</code>, <code>scan</code> and <code>format</code>.</p>

<p>UTF-8 encoding has many advantages, but one of the complications is that
characters can take a variable number of bytes. Thus the addition of
................................................................................
<p>Some UTF-8 character sequences are invalid, such as those beginning with <code>0xff</code>,
those which represent character sequences longer than 3 bytes (greater than U+FFFF),
and those which end prematurely, such as a lone <code>0xc2</code>.</p>

<p>In these situations, the offending bytes are treated as single characters. For example,
the following returns 2.</p>


<pre class="sh_tcl">string bytelength \xff\xff
</pre>

<h2 id="commands-supporting-utf-8">Commands Supporting UTF-8</h2>
<p>The following commands have been enhanced to support UTF-8 strings.</p>

<ul>
  <li>array {get,names,unset}</li>
................................................................................
  <li>info procs, commands, vars, globals, locals</li>
</ul>

<h2 id="string-matching">String Matching</h2>
<p>Commands such as <code>string match</code>, <code>lsearch -glob</code>, <code>array names</code> and others use string
pattern matching rules. These commands support UTF-8. For example:</p>


<pre class="sh_tcl">string match a\[\ua0-\ubf\]b "a\u00a3b"
</pre>

<h2 id="format-and-scan">format and scan</h2>

<p><code>format %c</code> allows a unicode codepoint to be be encoded. For example, the following will return
a string with two bytes and one character. The same as <code>\ub5</code></p>

<pre class="sh_tcl">format %c 0xb5

</pre>

<p><code>format</code> respects widths as character widths, not byte widths. For example, the following will
return a string with three characters, not three bytes.</p>


<pre class="sh_tcl">format %.3s \ub5\ub6\ub7\ub8
</pre>

<p>Similarly, <code>scan ... %c</code> allows a UTF-8 to be decoded to a unicode codepoint. The following will set
<em>a</em> to 181 (0xb5) and <em>b</em> to 65 (0x41).</p>


<pre class="sh_tcl">scan \u00b5A %c%c a b
</pre>

<p><code>scan %s</code> will also accept a character class, including unicode ranges.</p>

<h2 id="string-and-character-classes">String and Character Classes</h2>
<p><code>string is</code> has <strong>not</strong> been extended to classify UTF-8 characters. Therefore, the following
will return <code>0</code>, even though the string may be considered to be alphabetic.</p>


<pre class="sh_tcl">string is alpha \ub5Test
</pre>

<p>This does not affect the string classes <code>ascii</code>, <code>control</code>, <code>digit</code>, <code>double</code>, <code>integer</code> or <code>xdigit</code>.</p>

<p>Similarly, UTF-8 character classes are not supported. Thus <code>[:alpha:]</code>
will match <code>[a-zA-Z]</code> but not non-ASCII alphabetic characters.</p>

................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/download/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
..
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
..
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
...
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
...
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
...
149
150
151
152
153
154
155
156
157

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Get Jim Tcl</title>
    <link rel="stylesheet" type="text/css" href="../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../css/sh_style.css" media="screen">
	
	<script src="../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<h2 id="get-it">Get It</h2>

<p>Jim Tcl source is available from the git repository.</p>

<p>See <a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or
the github mirror at <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<pre class="sh_unix">
$ git clone git://repo.or.cz/jimtcl.git
remote: Counting objects: 3703, done.
remote: Compressing objects: 100% (907/907), done.
remote: Total 3703 (delta 2715), reused 3703 (delta 2715)
Receiving objects: 100% (3703/3703), 1.88 MiB | 437 KiB/s, done.
Resolving deltas: 100% (2715/2715), done.
</pre>

................................................................................
<p>You will need:</p>

<ul>
  <li>a C compiler</li>
  <li>make</li>
</ul>

<pre class="sh_unix">
$ cd jimtcl/
$ ./configure
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
...etc...
$ make
................................................................................
...etc...
</pre>

<h2 id="test-it">Test It</h2>

<p>Jim Tcl includes an extensive test suite.</p>

<pre class="sh_unix">
$ make test
      alias.test: Total    18   Passed    18  Skipped     0  Failed     0
      array.test: Total    12   Passed    12  Skipped     0  Failed     0
       case.test: Total     6   Passed     6  Skipped     0  Failed     0
     concat.test: Total    16   Passed    16  Skipped     0  Failed     0
       dict.test: Total    30   Passed    30  Skipped     0  Failed     0
      error.test: Total     3   Passed     3  Skipped     0  Failed     0
      event.test: Total    14   Passed    14  Skipped     0  Failed     0
................................................................................
...etc...
</pre>

<h2 id="try-it">Try It</h2>

<p>The Jim Tcl shell can be run interactively.</p>

<pre class="sh_unix">
$ ./jimsh 
Welcome to Jim version 0.71
. 
</pre>

		
		</div>
	</div>
................................................................................
			
			<li class="stdlink"><a href="../">Introduction</a></li>
		
			
			<li class="stdlink"><a href="../news/">News</a></li>
		
			
			<li class="stdlink"><span class="active" title="You're here.">Download</span></li>
		
			
			<li class="stdlink"><a href="../documentation/">Documentation</a></li>
		
			
			<li class="stdlink"><a href="../extensions/">Extensions</a></li>
		
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







<
|







 







|
<







 







|
<







 







|
<







 







|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
42
43
44
45
46
47
48

49
50
51
52
53
54
55
56
..
62
63
64
65
66
67
68
69

70
71
72
73
74
75
76
..
80
81
82
83
84
85
86
87

88
89
90
91
92
93
94
..
99
100
101
102
103
104
105
106

107
108
109
110
111
112
113
...
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
...
142
143
144
145
146
147
148
149
150
151

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Get Jim Tcl</title>
    <link rel="stylesheet" type="text/css" href="../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../css/sh_style.css" media="screen">
	
	<script src="../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		<h2 id="get-it">Get It</h2>

<p>Jim Tcl source is available from the git repository.</p>

<p>See <a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or
the github mirror at <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>


<pre class="sh_unix">$ git clone git://repo.or.cz/jimtcl.git
remote: Counting objects: 3703, done.
remote: Compressing objects: 100% (907/907), done.
remote: Total 3703 (delta 2715), reused 3703 (delta 2715)
Receiving objects: 100% (3703/3703), 1.88 MiB | 437 KiB/s, done.
Resolving deltas: 100% (2715/2715), done.
</pre>

................................................................................
<p>You will need:</p>

<ul>
  <li>a C compiler</li>
  <li>make</li>
</ul>

<pre class="sh_unix">$ cd jimtcl/

$ ./configure
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
...etc...
$ make
................................................................................
...etc...
</pre>

<h2 id="test-it">Test It</h2>

<p>Jim Tcl includes an extensive test suite.</p>

<pre class="sh_unix">$ make test

      alias.test: Total    18   Passed    18  Skipped     0  Failed     0
      array.test: Total    12   Passed    12  Skipped     0  Failed     0
       case.test: Total     6   Passed     6  Skipped     0  Failed     0
     concat.test: Total    16   Passed    16  Skipped     0  Failed     0
       dict.test: Total    30   Passed    30  Skipped     0  Failed     0
      error.test: Total     3   Passed     3  Skipped     0  Failed     0
      event.test: Total    14   Passed    14  Skipped     0  Failed     0
................................................................................
...etc...
</pre>

<h2 id="try-it">Try It</h2>

<p>The Jim Tcl shell can be run interactively.</p>

<pre class="sh_unix">$ ./jimsh 

Welcome to Jim version 0.71
. 
</pre>

		
		</div>
	</div>
................................................................................
			
			<li class="stdlink"><a href="../">Introduction</a></li>
		
			
			<li class="stdlink"><a href="../news/">News</a></li>
		
			
			<li class="stdlink"><span class="active">Download</span></li>
		
			
			<li class="stdlink"><a href="../documentation/">Documentation</a></li>
		
			
			<li class="stdlink"><a href="../extensions/">Extensions</a></li>
		
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/extensions/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
...
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
...
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
...
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
...
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
...
241
242
243
244
245
246
247
248
249

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - Extensions</title>
    <link rel="stylesheet" type="text/css" href="../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../css/sh_style.css" media="screen">
	
	<script src="../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
    <p>A pure-Tcl extension to provide Object-Oriented support. See <a href="../documentation/oo/">OO Extension</a>
for more information.</p>
  </dd>
  <dt><strong>tree</strong></dt>
  <dd>Pure-Tcl OO tree structure, similar to tcllib ::struct::tree</dd>
</dl>
<dl>
  <dt>
<strong>readline</strong>, <strong>rlprompt</strong>
</dt>
  <dd>Interface to libreadline (deprecated in favour of the built-in line editing)</dd>
</dl>
<dl>
  <dt>
<strong>sqlite</strong>, <strong>sqlite3</strong>
</dt>
  <dd>Interface to <a href="http://www.sqlite.org">sqlite, sqlite3</a>.
See <a href="../documentation/sqlite/">Sqlite Extension</a> for more information.</dd>
</dl>
<dl>
  <dt><strong>metakit</strong></dt>
  <dd>Interface to <a href="http://equi4.com/metakit/">metakit</a>.
See <a href="../documentation/metakit/">Metakit Extension</a> for more information.</dd>
................................................................................
  <dt><strong>sdl</strong></dt>
  <dd>SDL bindings for 2D graphics, with SDL_Glx primitives.</dd>
  <dd>
    <p>Currently experimental, but some GLX primitive are supported.
This is an example script:</p>
  </dd>
  <dd>
    <pre class="sh_tcl">
 package require sdl
   
 set xres 200
 set yres 200
 set s [sdl.screen $xres $yres]
   
 set i 0
 while 1 {
................................................................................
  </dd>
  <dd>
    <p><img src="../img/jim-sdl-screenshot.png" alt="Jim-SDL screenshot"></p>
  </dd>
  <dt><strong>win32</strong></dt>
  <dd>Experimental interface to win32</dd>
  <dd>
    <pre class="sh_tcl">
. info commands win32.*
win32.GetVersion win32.GetModuleFileName
win32.GetUserName win32.GetActiveWindow
win32.GetCursor win32.FreeLibrary
win32.SetCursor win32.LoadLibrary
win32.GetCursorPos  win32.GetCursorInfo
win32.ShellExecute win32.GetComputerName
win32.GetModuleHandle win32.SetCursorPos
................................................................................
			
			<li class="stdlink"><a href="../download/">Download</a></li>
		
			
			<li class="stdlink"><a href="../documentation/">Documentation</a></li>
		
			
			<li class="stdlink"><span class="active" title="You're here.">Extensions</span></li>
		
			
			<li class="stdlink"><a href="../license/">License</a></li>
		
			
			<li class="stdlink"><a href="../about/">About</a></li>
		
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







<
|
<



<
|
<







 







|
<







 







<
|







 







|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
...
129
130
131
132
133
134
135

136

137
138
139

140

141
142
143
144
145
146
147
...
150
151
152
153
154
155
156
157

158
159
160
161
162
163
164
...
178
179
180
181
182
183
184

185
186
187
188
189
190
191
192
...
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
...
232
233
234
235
236
237
238
239
240
241

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - Extensions</title>
    <link rel="stylesheet" type="text/css" href="../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../css/sh_style.css" media="screen">
	
	<script src="../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
    <p>A pure-Tcl extension to provide Object-Oriented support. See <a href="../documentation/oo/">OO Extension</a>
for more information.</p>
  </dd>
  <dt><strong>tree</strong></dt>
  <dd>Pure-Tcl OO tree structure, similar to tcllib ::struct::tree</dd>
</dl>
<dl>

  <dt><strong>readline</strong>, <strong>rlprompt</strong></dt>

  <dd>Interface to libreadline (deprecated in favour of the built-in line editing)</dd>
</dl>
<dl>

  <dt><strong>sqlite</strong>, <strong>sqlite3</strong></dt>

  <dd>Interface to <a href="http://www.sqlite.org">sqlite, sqlite3</a>.
See <a href="../documentation/sqlite/">Sqlite Extension</a> for more information.</dd>
</dl>
<dl>
  <dt><strong>metakit</strong></dt>
  <dd>Interface to <a href="http://equi4.com/metakit/">metakit</a>.
See <a href="../documentation/metakit/">Metakit Extension</a> for more information.</dd>
................................................................................
  <dt><strong>sdl</strong></dt>
  <dd>SDL bindings for 2D graphics, with SDL_Glx primitives.</dd>
  <dd>
    <p>Currently experimental, but some GLX primitive are supported.
This is an example script:</p>
  </dd>
  <dd>
    <pre class="sh_tcl"> package require sdl

   
 set xres 200
 set yres 200
 set s [sdl.screen $xres $yres]
   
 set i 0
 while 1 {
................................................................................
  </dd>
  <dd>
    <p><img src="../img/jim-sdl-screenshot.png" alt="Jim-SDL screenshot"></p>
  </dd>
  <dt><strong>win32</strong></dt>
  <dd>Experimental interface to win32</dd>
  <dd>

    <pre class="sh_tcl">. info commands win32.*
win32.GetVersion win32.GetModuleFileName
win32.GetUserName win32.GetActiveWindow
win32.GetCursor win32.FreeLibrary
win32.SetCursor win32.LoadLibrary
win32.GetCursorPos  win32.GetCursorInfo
win32.ShellExecute win32.GetComputerName
win32.GetModuleHandle win32.SetCursorPos
................................................................................
			
			<li class="stdlink"><a href="../download/">Download</a></li>
		
			
			<li class="stdlink"><a href="../documentation/">Documentation</a></li>
		
			
			<li class="stdlink"><span class="active">Extensions</span></li>
		
			
			<li class="stdlink"><a href="../license/">License</a></li>
		
			
			<li class="stdlink"><a href="../about/">About</a></li>
		
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/feed.xml.

1
2
3
4
5
6
7
8
9
10
11
12


























































13
14
15
16
17
18
19
20
21
22
23
24
..
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
...
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
...
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
...
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
...
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
...
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
...
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
...
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
...
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
....
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
....
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
....
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
....
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
....
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
....
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
....
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
....
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>http://jim.tcl.tk/index.html/doc/www/www/</id>
  <title>Jim Tcl News</title>
  <updated>2018-06-30T14:00:00Z</updated>
  <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/"/>
  <link rel="self" href="http://jim.tcl.tk/index.html/doc/www/www/feed.xml"/>
  <author>
    <name>steveb@workware.net.au</name>
    <uri>mailto:steveb@workware.net.au</uri>
  </author>
  <entry>


























































    <id>tag:jim.tcl.tk,2018-07-01:/index.html/doc/www/www/articles/jim-release-0-78/</id>
    <title type="html">Jim Tcl version 0.78</title>
    <published>2018-06-30T14:00:00Z</published>
    <updated>2018-06-30T14:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/jim-release-0-78/"/>
    <content type="html">&lt;h2 id="announce-jim-tcl-version-078"&gt;ANNOUNCE: Jim Tcl version 0.78&lt;/h2&gt;

&lt;p&gt;Jim Tcl 0.78 has been released and is available from:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://repo.or.cz/w/jimtcl.git"&gt;http://repo.or.cz/w/jimtcl.git&lt;/a&gt; or &lt;a href="https://github.com/msteveb/jimtcl"&gt;https://github.com/msteveb/jimtcl&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find out all about Jim Tcl at &lt;a href="http://jim.tcl.tk/"&gt;http://jim.tcl.tk/&lt;/a&gt;&lt;/p&gt;
................................................................................
&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;signal&lt;/code&gt; - Remove the signal command from child interpreters&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;os.wait&lt;/code&gt; is now &lt;code&gt;wait&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;aio ssl&lt;/code&gt; now upgrades the current channel rather than creating a new channel&lt;/li&gt;
  &lt;li&gt;Update autosetup to v0.6.8&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Steve Bennett (&lt;a href="&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;"&gt;&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2016-09-04:/index.html/doc/www/www/articles/jim-release-0-77/</id>
    <title type="html">Jim Tcl version 0.77</title>
    <published>2016-09-03T14:00:00Z</published>
    <updated>2016-09-03T14:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/jim-release-0-77/"/>
    <content type="html">&lt;h2 id="announce-jim-tcl-version-077"&gt;ANNOUNCE: Jim Tcl version 0.77&lt;/h2&gt;

&lt;p&gt;Jim Tcl 0.77 has been released and is available from: &lt;/p&gt;

&lt;p&gt;&lt;a href="http://repo.or.cz/w/jimtcl.git"&gt;http://repo.or.cz/w/jimtcl.git&lt;/a&gt; or &lt;a href="https://github.com/msteveb/jimtcl"&gt;https://github.com/msteveb/jimtcl&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find out all about Jim Tcl at &lt;a href="http://jim.tcl.tk/"&gt;http://jim.tcl.tk/&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="changes-since-version-076"&gt;CHANGES SINCE VERSION 0.76&lt;/h2&gt;

................................................................................
      &lt;li&gt;Add support for &lt;code&gt;unknown&lt;/code&gt; method&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Add Travis and AppVeyor continuous integration support&lt;/li&gt;
  &lt;li&gt;Use &lt;code&gt;pkg-config&lt;/code&gt; in &lt;code&gt;configure&lt;/code&gt; to find packages if possibe&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Steve Bennett (&lt;a href="&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;"&gt;&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2015-01-31:/index.html/doc/www/www/articles/jim-release-0-76/</id>
    <title type="html">Jim Tcl version 0.76</title>
    <published>2015-01-30T14:00:00Z</published>
    <updated>2015-01-30T14:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/jim-release-0-76/"/>
    <content type="html">&lt;h2 id="announce-jim-tcl-version-076"&gt;ANNOUNCE: Jim Tcl version 0.76&lt;/h2&gt;

&lt;p&gt;Jim Tcl 0.76 has been released and is available from: &lt;/p&gt;

&lt;p&gt;&lt;a href="http://repo.or.cz/w/jimtcl.git"&gt;http://repo.or.cz/w/jimtcl.git&lt;/a&gt; or &lt;a href="https://github.com/msteveb/jimtcl"&gt;https://github.com/msteveb/jimtcl&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find out all about Jim Tcl at &lt;a href="http://jim.tcl.tk/"&gt;http://jim.tcl.tk/&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="changes-since-version-075"&gt;CHANGES SINCE VERSION 0.75&lt;/h2&gt;

................................................................................

&lt;ul&gt;
  &lt;li&gt;Some invalid scripts will now throw an error rather than silently executing&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;glob&lt;/code&gt; is more Tcl-compatible with respect to &lt;code&gt;-directory&lt;/code&gt; and &lt;code&gt;-tails&lt;/code&gt;, so may affect some scripts&lt;/li&gt;
  &lt;li&gt;The output of errorInfo has changed from &lt;code&gt;"Runtime Error: &amp;lt;file&amp;gt;:&amp;lt;line&amp;gt;: ..."&lt;/code&gt; to &lt;code&gt;"&amp;lt;file&amp;gt;:&amp;lt;line&amp;gt;: Error: ..."&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Steve Bennett (&lt;a href="&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;"&gt;&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2014-02-27:/index.html/doc/www/www/articles/jim-release-0-75/</id>
    <title type="html">Jim Tcl version 0.75</title>
    <published>2014-02-26T14:00:00Z</published>
    <updated>2014-02-26T14:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/jim-release-0-75/"/>
    <content type="html">&lt;h2 id="announce-jim-tcl-version-075"&gt;ANNOUNCE: Jim Tcl version 0.75&lt;/h2&gt;

&lt;p&gt;Jim Tcl 0.75 has been released and is available from: &lt;/p&gt;

&lt;p&gt;&lt;a href="http://repo.or.cz/w/jimtcl.git"&gt;http://repo.or.cz/w/jimtcl.git&lt;/a&gt; or &lt;a href="https://github.com/msteveb/jimtcl"&gt;https://github.com/msteveb/jimtcl&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find out all about Jim Tcl at &lt;a href="http://jim.tcl.tk/"&gt;http://jim.tcl.tk/&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="changes-since-version-074"&gt;CHANGES SINCE VERSION 0.74&lt;/h2&gt;

................................................................................

&lt;p&gt;&lt;strong&gt;Bugs fixed in version 0.75&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;eventloop - Correct file handler should be deleted&lt;/li&gt;
  &lt;li&gt;eventloop - Fix memory management of aio event handlers&lt;/li&gt;
  &lt;li&gt;local - Requires at least one argument&lt;/li&gt;
  &lt;li&gt;exec - Support nulls in &lt;code&gt;exec&lt;/code&gt; immediate redirection &lt;/li&gt;
  &lt;li&gt;binary - More compliant with Tcl&lt;/li&gt;
  &lt;li&gt;aio - Fix aio recvfrom for non-inet socket&lt;/li&gt;
  &lt;li&gt;Fix &lt;code&gt;string tolower&lt;/code&gt; buffer overflow for non-utf8&lt;/li&gt;
  &lt;li&gt;jimsh - consider scripts with trailing backslash as unfinished&lt;/li&gt;
  &lt;li&gt;Properly respect backslashes in comments&lt;/li&gt;
  &lt;li&gt;Avoid infinite recursion with namespace import&lt;/li&gt;
  &lt;li&gt;Fix dict/list shimmering with embedded nulls&lt;/li&gt;
................................................................................

&lt;p&gt;&lt;strong&gt;Compatiblity&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The deprecated &lt;code&gt;case&lt;/code&gt; command has been removed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Steve Bennett (&lt;a href="&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;"&gt;&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2014-01-24:/index.html/doc/www/www/articles/binary-cheatsheet/</id>
    <title type="html">Binary Cheatsheet</title>
    <published>2014-01-23T14:00:00Z</published>
    <updated>2014-01-23T14:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/binary-cheatsheet/"/>
    <content type="html">&lt;p&gt;I have been using Tcl for years, but I &lt;em&gt;still&lt;/em&gt; need to lookup the manual every
time I use &lt;code&gt;binary format&lt;/code&gt; and &lt;code&gt;binary scan&lt;/code&gt;. If you are like me, you will find
this cheatsheet a handy reference.&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt; &lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Endian&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Little&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Big&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Host&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Type&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Notes&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;a&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;byte string&lt;/td&gt;
      &lt;td&gt;format pads with nulls&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;A&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;byte string&lt;/td&gt;
      &lt;td&gt;format pads with spaces, scan strips trailing spaces/nulls&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;b&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;B&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;binary digits&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;h&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;H&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;hex digits&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;c&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;8 bit integer list&lt;/td&gt;
      &lt;td&gt;In other words, ASCII chars&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;s&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;S&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;t&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;16 bit integer list&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;i&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;I&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;n&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;32 bit integer list&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;w&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;W&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;m&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;64 bit integer list&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;r&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;R&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;f&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;single prec. float list&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;q&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;Q&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;d&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;double prec. float list&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;x&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;null bytes&lt;/td&gt;
      &lt;td&gt;count is number of bytes&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;X&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;move cursor back&lt;/td&gt;
      &lt;td&gt;count is number of bytes to back up&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;@&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;move cursor to location&lt;/td&gt;
      &lt;td&gt;count is byte position, zero based&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;Examples&lt;/strong&gt;&lt;/p&gt;
................................................................................
&lt;pre class="sh_tcl"&gt;
set bin [binary format I2sH2a* {0x123 0x456} 17 ab "testing"]

# This returns 4 (number of conversions)
binary scan $bin I2sH2a* intlist intval hexval str
&lt;/pre&gt;

&lt;p&gt;Steve Bennett (&lt;a href="&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;"&gt;&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2013-07-25:/index.html/doc/www/www/articles/jim-release-0-74/</id>
    <title type="html">Jim Tcl version 0.74</title>
    <published>2013-07-24T14:00:00Z</published>
    <updated>2013-07-24T14:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/jim-release-0-74/"/>
    <content type="html">&lt;h2 id="announce-jim-tcl-version-074"&gt;ANNOUNCE: Jim Tcl version 0.74&lt;/h2&gt;

&lt;p&gt;Jim Tcl 0.74 has been released and is available from: &lt;/p&gt;

&lt;p&gt;&lt;a href="http://repo.or.cz/w/jimtcl.git"&gt;http://repo.or.cz/w/jimtcl.git&lt;/a&gt; or &lt;a href="https://github.com/msteveb/jimtcl"&gt;https://github.com/msteveb/jimtcl&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find out all about Jim Tcl at &lt;a href="http://jim.tcl.tk/"&gt;http://jim.tcl.tk/&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="changes-since-version-073"&gt;CHANGES SINCE VERSION 0.73&lt;/h2&gt;

................................................................................
             rotate       .
              sieve    -20%
       sieve [dict]    -20%
              upvar    -16%
   wiki.tcl.tk/8566       .
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Steve Bennett (&lt;a href="&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;"&gt;&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2012-02-10:/index.html/doc/www/www/articles/no-namespaces-revisited/</id>
    <title type="html">Coping without Namespaces - Revisited</title>
    <published>2012-02-09T14:00:00Z</published>
    <updated>2012-02-09T14:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/no-namespaces-revisited/"/>
    <content type="html">&lt;p&gt;Back in the article &lt;a href="/articles/no-namespaces/"&gt;Coping without Namespaces&lt;/a&gt;,
we discussed that fact that Jim Tcl did not support namespaces, but
that small changes to the source could be made to allow namespace-based
Tcl code to be ported for use with Jim Tcl.&lt;/p&gt;

&lt;p&gt;Now with &lt;a href="/articles/light-weight-namespaces/"&gt;namespaces supported&lt;/a&gt;
in &lt;a href="/articles/jim-release-0.73/"&gt;Jim Tcl 0.73&lt;/a&gt;, porting Tcl code
................................................................................
&lt;hr /&gt;

&lt;p&gt;Notice that no namespace-related changes were required when porting this module.&lt;/p&gt;

&lt;p&gt;The latest version of &lt;a href="https://github.com/msteveb/jimtcl/blob/ad3b3c48c9d7e9/examples/dns.tcl"&gt;dns.tcl for Jim Tcl&lt;/a&gt; is
available in git.&lt;/p&gt;

&lt;p&gt;Steve Bennett (&lt;a href="&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;"&gt;&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-12-22:/index.html/doc/www/www/articles/jim-release-0-73/</id>
    <title type="html">Jim Tcl version 0.73</title>
    <published>2011-12-21T14:00:00Z</published>
    <updated>2011-12-21T14:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/jim-release-0-73/"/>
    <content type="html">&lt;h2 id="announce-jim-tcl-version-073"&gt;ANNOUNCE: Jim Tcl version 0.73&lt;/h2&gt;

&lt;p&gt;Jim Tcl 0.73 has been released and is available from: &lt;/p&gt;

&lt;p&gt;&lt;a href="http://repo.or.cz/w/jimtcl.git"&gt;http://repo.or.cz/w/jimtcl.git&lt;/a&gt; or &lt;a href="https://github.com/msteveb/jimtcl"&gt;https://github.com/msteveb/jimtcl&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find out all about Jim Tcl at &lt;a href="http://jim.tcl.tk/"&gt;http://jim.tcl.tk/&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="changes-since-version-072"&gt;CHANGES SINCE VERSION 0.72&lt;/h2&gt;

................................................................................
  &lt;li&gt;Added &lt;code&gt;tcl::prefix&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Added the &lt;code&gt;history&lt;/code&gt; command to access command line editing and history from scripts&lt;/li&gt;
  &lt;li&gt;Added a Tcl-compatible &lt;code&gt;apply&lt;/code&gt; command&lt;/li&gt;
  &lt;li&gt;Most extensions are now enabled by default&lt;/li&gt;
  &lt;li&gt;Jim Tcl now compiles with MSVC on Windows (but no build support)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Steve Bennett (&lt;a href="&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;"&gt;&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-12-15:/index.html/doc/www/www/articles/light-weight-namespaces/</id>
    <title type="html">Lightweight Namespaces</title>
    <published>2011-12-14T14:00:00Z</published>
    <updated>2011-12-14T14:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/light-weight-namespaces/"/>
    <content type="html">&lt;p&gt;New in Jim Tcl v0.73 is (optional) support for namespaces.&lt;/p&gt;

&lt;p&gt;The following is taken directly from README.namespaces in the Jim Tcl repository.&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id="lightweight-namespaces-for-jim-tcl"&gt;Lightweight Namespaces for Jim Tcl&lt;/h1&gt;
................................................................................
&lt;p&gt;Even if namespace support is disabled, the command resolution will
recognised global scoping of commands and treat these as identical.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-11-10:/index.html/doc/www/www/articles/jim-tcl-tk-2011-paper/</id>
    <title type="html">Jim @ Tcl/Tk 2011</title>
    <published>2011-11-09T14:00:00Z</published>
    <updated>2011-11-09T14:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/jim-tcl-tk-2011-paper/"/>
    <content type="html">&lt;p&gt;At the &lt;a href="http://www.tcl.tk/community/tcl2011/"&gt;Tck/Tk 2011 conference&lt;/a&gt; I
presented a paper on Jim Tcl. It seemed to be well received.&lt;/p&gt;

&lt;p&gt;You can read the paper by clicking on the image below.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://workware.net.au/papers/jimtcl-tcl-tk-2011.pdf"&gt;&lt;img src="/img/jimtcl-tcl-tk-2011-front.png" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Steve Bennett (&lt;a href="&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;"&gt;&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-10-06:/index.html/doc/www/www/articles/jim-release-0-72/</id>
    <title type="html">Jim Tcl version 0.72</title>
    <published>2011-10-05T14:00:00Z</published>
    <updated>2011-10-05T14:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/jim-release-0-72/"/>
    <content type="html">&lt;h2 id="announce-jim-tcl-version-072"&gt;ANNOUNCE: Jim Tcl version 0.72&lt;/h2&gt;

&lt;p&gt;Jim Tcl 0.72 has been released and is available from: &lt;/p&gt;

&lt;p&gt;&lt;a href="http://repo.or.cz/w/jimtcl.git"&gt;http://repo.or.cz/w/jimtcl.git&lt;/a&gt; or &lt;a href="https://github.com/msteveb/jimtcl"&gt;https://github.com/msteveb/jimtcl&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="changes-since-version-071"&gt;CHANGES SINCE VERSION 0.71&lt;/h2&gt;

&lt;p&gt;This release incorporates bug fixes and many new features.&lt;/p&gt;

................................................................................
  &lt;li&gt;New [aio listen] to set the size of the listen queue on server sockets&lt;/li&gt;
  &lt;li&gt;Jim Tcl Manual is better formatted, commands are hyperlinked and various corrections have been made&lt;/li&gt;
  &lt;li&gt;The oo, tree, binary and pack extensions are now documented&lt;/li&gt;
  &lt;li&gt;New metakit extension&lt;/li&gt;
  &lt;li&gt;The SDL extension once again builds and runs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Steve Bennett (&lt;a href="&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;"&gt;&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-10-04:/index.html/doc/www/www/articles/jim-sqlite-shell/</id>
    <title type="html">jSQLsh - Jim Tcl SQLite Shell</title>
    <published>2011-10-03T14:00:00Z</published>
    <updated>2011-10-03T14:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/jim-sqlite-shell/"/>
    <content type="html">&lt;p&gt;The jSQLsh project at &lt;a href="https://github.com/LStinson/jSQLsh"&gt;https://github.com/LStinson/jSQLsh&lt;/a&gt; provides
a small but powerful shell for sqlite, modelled after
&lt;a href="http://www.postgresql.org/docs/9.0/static/app-psql.html"&gt;psql&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The creator, Lorance Stinson, wanted an sqlite command shell which
addressed some of the deficiencies of the native sqlite command
shell, so he decided to create his own with Jim Tcl.&lt;/p&gt;
................................................................................
  /q(uit)     Quit  (Also Ctrl-D)
  /u(ser)     Display the user macros.
  /u(ser)#    Copy user macro # into the query buffer.
  /u(ser)# -  Copy the query buffer, or supplied text, into macro #.
:memory: (0 rows, 0 changes) # 
&lt;/pre&gt;

&lt;p&gt;Steve Bennett (&lt;a href="&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;"&gt;&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-09-06:/index.html/doc/www/www/articles/metakit-extension/</id>
    <title type="html">New Metakit Extension</title>
    <published>2011-09-05T14:00:00Z</published>
    <updated>2011-09-05T14:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/metakit-extension/"/>
    <content type="html">&lt;p&gt;Alexander Shpilkin has contributed the metakit extension to Jim Tcl.&lt;/p&gt;

&lt;p&gt;Metakit (&lt;a href="http://equi4.com/metakit/"&gt;http://equi4.com/metakit/&lt;/a&gt;) is an embeddable non-SQL
database with advanced data manipulation features through the use of views.
Using metakit can be an alternative to sqlite.&lt;/p&gt;

&lt;p&gt;The Jim Tcl metakit interface is different from the Tcl metakit interface as it
................................................................................
$ cd ../..
$ ./configure --with-ext=mk CFLAGS="-Imetakit/include -Lmetakit/unix"
$ make
$ ./jimsh examples/metakit.tcl
  ...
&lt;/pre&gt;

&lt;p&gt;Steve Bennett (&lt;a href="&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;"&gt;&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-06-24:/index.html/doc/www/www/articles/jim-release-0-71/</id>
    <title type="html">Jim Tcl version 0.71</title>
    <published>2011-06-23T14:00:00Z</published>
    <updated>2011-06-23T14:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/jim-release-0-71/"/>
    <content type="html">&lt;h2 id="announce-jim-tcl-version-071"&gt;ANNOUNCE: Jim Tcl version 0.71&lt;/h2&gt;

&lt;p&gt;Jim Tcl 0.71 has been released and is available from: &lt;/p&gt;

&lt;p&gt;&lt;a href="http://repo.or.cz/w/jimtcl.git"&gt;http://repo.or.cz/w/jimtcl.git&lt;/a&gt; or &lt;a href="https://github.com/msteveb/jimtcl"&gt;https://github.com/msteveb/jimtcl&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="changes-since-version-070"&gt;CHANGES SINCE VERSION 0.70&lt;/h2&gt;

&lt;p&gt;This release incorporates bug fixes and
several new features, including:&lt;/p&gt;
................................................................................
  &lt;li&gt;Minimal exec implementation is supported even without vfork/waitpid&lt;/li&gt;
  &lt;li&gt;configure is now faster and simpler with autosetup (&lt;a href="https://github.com/msteveb/autosetup"&gt;https://github.com/msteveb/autosetup&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Add string byterange&lt;/li&gt;
  &lt;li&gt;Ability to create a single source file bootstrap jimsh&lt;/li&gt;
  &lt;li&gt;Added debian packaging support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Steve Bennett (&lt;a href="&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;"&gt;&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-06-10:/index.html/doc/www/www/articles/new-comment-system/</id>
    <title type="html">New Comment System</title>
    <published>2011-06-09T14:00:00Z</published>
    <updated>2011-06-09T14:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/new-comment-system/"/>
    <content type="html">&lt;p&gt;I have added a comment system to the Jim Tcl website.
Let me know if there are any problems with it.&lt;/p&gt;

&lt;p&gt;Steve Bennett (&lt;a href="&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;"&gt;&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-06-09:/index.html/doc/www/www/articles/bootstrap-jimsh/</id>
    <title type="html">Bootstrap jimsh</title>
    <published>2011-06-08T14:00:00Z</published>
    <updated>2011-06-08T14:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/bootstrap-jimsh/"/>
    <content type="html">&lt;p&gt;The Jim interpreter is small, portable and full-featured. This makes
&lt;code&gt;jimsh&lt;/code&gt; an ideal tool to bootstrap a development system that
requires an interpreter.&lt;/p&gt;

&lt;p&gt;Consider the case of a development configuration system such as
&lt;a href="http://www.gnu.org/software/autoconf/"&gt;GNU autotools&lt;/a&gt;.  Here it
is necessary to run fairly complex scripts that invoke external
................................................................................
user   0m1.121s
sys    0m0.109s
$ ./jimsh0
Welcome to Jim version 0.71
. 
&lt;/pre&gt;

&lt;p&gt;Steve Bennett (&lt;a href="&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;"&gt;&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-05-26:/index.html/doc/www/www/articles/no-namespaces/</id>
    <title type="html">Coping without Namespaces</title>
    <published>2011-05-25T14:00:00Z</published>
    <updated>2011-05-25T14:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/no-namespaces/"/>
    <content type="html">&lt;p&gt;One of the features of Tcl which Jim lacks is support for
&lt;a href="http://www.tcl.tk/man/tcl8.5/TclCmd/namespace.htm"&gt;namespaces&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The lack of namespaces in Jim is generally not a problem in the
small, embedded applications for which Jim is most suited. However
occasionally it useful to be able to port Tcl code which uses
namespace.  For example, &lt;a href="http://tcllib.sourceforge.net/"&gt;tcllib&lt;/a&gt;
................................................................................
  &lt;li&gt;Ensure procs are declared with fully quality names: &lt;code&gt;proc ns::procname { ... }&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Use fully qualified names when invoking procs within the namespace.&lt;/li&gt;
  &lt;li&gt;Replace the use of &lt;code&gt;namespace current&lt;/code&gt; with the namespace name&lt;/li&gt;
  &lt;li&gt;Replace the use of &lt;code&gt;namespace origin&lt;/code&gt; with the namespace name&lt;/li&gt;
  &lt;li&gt;Use the &lt;code&gt;variable&lt;/code&gt; proc to declare variables within procs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Steve Bennett (&lt;a href="&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;"&gt;&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-05-25:/index.html/doc/www/www/articles/jim-is-modular/</id>
    <title type="html">Jim Is Modular</title>
    <published>2011-05-24T14:00:00Z</published>
    <updated>2011-05-24T14:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/jim-is-modular/"/>
    <content type="html">&lt;p&gt;One of the advantages of Jim Tcl is that the core interpreter
contains only the bare essentials. Many Tcl standard commands are provided by
optional extensions which can be disable or built as loadable modules if required.&lt;/p&gt;

&lt;dl&gt;
  &lt;dt&gt;core commands&lt;/dt&gt;
  &lt;dd&gt;*, +, -, /, alias, append, break, catch, collect, concat,
................................................................................
  &lt;dt&gt;signal extension&lt;/dt&gt;
  &lt;dd&gt;signal, alarm, kill, sleep&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;In addition, features including references, UTF-8 support, IPv6 and command line editing
can be disabled with &lt;code&gt;configure&lt;/code&gt;. See &lt;code&gt;configure --help&lt;/code&gt; for full details.&lt;/p&gt;

&lt;p&gt;Steve Bennett (&lt;a href="&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;"&gt;&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-04-24:/index.html/doc/www/www/articles/2011-04-24/</id>
    <title type="html">New Website Launched</title>
    <published>2011-04-23T14:00:00Z</published>
    <updated>2011-04-23T14:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/2011-04-24/"/>
    <content type="html">&lt;p&gt;Jim Tcl development has been proceeding apace, but the &lt;a href="http://jim.berlios.de/"&gt;website&lt;/a&gt;
had not been updated for several years. In order to make Jim Tcl
more approachable, we have given the website and updated the content
to reflect current reality.&lt;/p&gt;

&lt;p&gt;Steve Bennett (&lt;a href="&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;"&gt;&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-04-22:/index.html/doc/www/www/articles/2011-04-22/</id>
    <title type="html">Roadmap for Jim Tcl</title>
    <published>2011-04-21T14:00:00Z</published>
    <updated>2011-04-21T14:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/2011-04-22/"/>
    <content type="html">&lt;p&gt;I have a few things on my list that I would like to see go into the
next release of Jim Tcl.&lt;/p&gt;

&lt;h2 id="boring-stuff"&gt;Boring Stuff&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Bug fixes&lt;/li&gt;
  &lt;li&gt;Performance improvements&lt;/li&gt;
  &lt;li&gt;Size reduction&lt;/li&gt;
  &lt;li&gt;Clean up dlopen() handles on interpreter deletion&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="tcl-8x-features"&gt;Tcl 8.x Features&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Add support for the [binary] command&lt;/li&gt;
  &lt;li&gt;Support for non-greedy quantifiers in [regexp]&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="tclx-features"&gt;TclX Features&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Add the [loop] command&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="tcl-9-proposed-features"&gt;Tcl 9 (Proposed) Features&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;[expr] shorthand syntax: $(…)&lt;/li&gt;
  &lt;li&gt;Automatic upvars in prog args: &amp;amp;varname&lt;/li&gt;
  &lt;li&gt;Allow proc ‘args’ to be renamed&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="build-system"&gt;Build System&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Replace autoconf with Tcl-based autosetup (&lt;a href="https://github.com/msteveb/autosetup"&gt;https://github.com/msteveb/autosetup&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="other-enhancements"&gt;Other Enhancements&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Ability to “push” a proc over the top of an existing proc to easily create a
wrapper proc, including the ability to “upcall” the original proc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Steve Bennett (&lt;a href="&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;"&gt;&amp;#115;&amp;#116;&amp;#101;&amp;#118;&amp;#101;&amp;#098;&amp;#064;&amp;#119;&amp;#111;&amp;#114;&amp;#107;&amp;#119;&amp;#097;&amp;#114;&amp;#101;&amp;#046;&amp;#110;&amp;#101;&amp;#116;&amp;#046;&amp;#097;&amp;#117;&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
</feed>
|
|


|
|
|





>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>


|
|
|







 







|





|
|
|


|







 







|





|
|
|


|







 







|





|
|
|


|







 







|







 







|





|
|
|









|
|
|










|
|





|
|






|

|




|

|



|
|








|






|






|






|






|



|
|





|
|





|
|







 







|





|
|
|


|







 







|





|
|
|







 







|





|
|
|


|







 







|





|
|
|







 







|
|
|







|





|
|
|


|







 







|





|
|
|







 







|





|
|
|







 







|





|
|
|


|







 







|





|
|
|



|





|
|
|







 







|





|
|
|







 







|





|
|
|







 







|





|
|
|





|


|
<
<
<
<
<
<
<

<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
...
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
...
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
...
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
...
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
...
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
...
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
...
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
...
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
...
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
....
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
....
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
....
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
....
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
....
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
....
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
....
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
....
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537







1538









































<!--?xml version="1.0" encoding="UTF-8"?-->
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="http://jim.tcl.tk/index.html/doc/www/www/">
  <id>http://jim.tcl.tk/index.html/doc/www/www/</id>
  <title>Jim Tcl News</title>
  <updated>2019-11-20T00:00:00Z</updated>
  <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/" type="text/html">
  <link rel="self" href="http://jim.tcl.tk/index.html/doc/www/www/feed.xml" type="application/atom+xml">
  <author>
    <name>steveb@workware.net.au</name>
    <uri>mailto:steveb@workware.net.au</uri>
  </author>
  <entry>
    <id>tag:jim.tcl.tk,2019-11-20:/index.html/doc/www/www/articles/jim-release-0-79/</id>
    <title type="html">Jim Tcl version 0.79</title>
    <published>2019-11-20T00:00:00Z</published>
    <updated>2019-11-20T00:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/jim-release-0-79/" type="text/html">
    <content type="html">&lt;h2 id="announce-jim-tcl-version-079"&gt;ANNOUNCE: Jim Tcl version 0.79&lt;/h2&gt;

&lt;p&gt;Jim Tcl 0.79 has been released and is available from:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://repo.or.cz/w/jimtcl.git"&gt;http://repo.or.cz/w/jimtcl.git&lt;/a&gt; or &lt;a href="https://github.com/msteveb/jimtcl"&gt;https://github.com/msteveb/jimtcl&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find out all about Jim Tcl at &lt;a href="http://jim.tcl.tk/"&gt;http://jim.tcl.tk/&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="changes-since-version-078"&gt;CHANGES SINCE VERSION 0.78&lt;/h2&gt;

&lt;p&gt;This release contains bug fixes plus a number of additional features.
A summary is below. See git for the full changelog.&lt;/p&gt;

&lt;p&gt;Thanks to everyone who contributed to this release.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bugs fixed in version 0.79&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;aio&lt;/code&gt; - Fix closing stdin in bootstrap jimsh&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;clock scan&lt;/code&gt; - Unspecified filed use the current date/time&lt;/li&gt;
  &lt;li&gt;Fix linenoise assertion failure on Windows&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;file&lt;/code&gt; - Improved support for trailing slashes in pathnames&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;regexp&lt;/code&gt;, &lt;code&gt;regsub&lt;/code&gt; - Various fixes in UTF-8 mode&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;$(...)&lt;/code&gt; syntax now properly returns non-error codes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Features added in version 0.78&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;file&lt;/code&gt; - Add &lt;code&gt;mtimeus&lt;/code&gt; for microsecond resolution&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;file&lt;/code&gt; - Add missing &lt;code&gt;split&lt;/code&gt; subcommand&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;lreplace&lt;/code&gt; - Implement &lt;a href="https://core.tcl-lang.org/tips/doc/trunk/tip/505.md"&gt;TIP #505&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;aio&lt;/code&gt; - Add dgram unix socket support&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;aio&lt;/code&gt; - Add support for &lt;code&gt;lock -wait&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;aio copyto&lt;/code&gt; - Significantly improve performance&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;aio tty&lt;/code&gt; - Allow setting echo&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;signal&lt;/code&gt; - Add &lt;code&gt;block&lt;/code&gt; for blocking signals with &lt;code&gt;SIG_IGN&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Add built-in JSON support with the &lt;code&gt;json&lt;/code&gt; extension&lt;/li&gt;
  &lt;li&gt;Improve performance when indexing UTF-8 strings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Other changes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Documentation updates to improve consistency, remove obsolete commands, add some missing commands&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;exec&lt;/code&gt; no longer forces &lt;code&gt;SIGPIPE&lt;/code&gt; disposition to &lt;code&gt;SIG_DFL&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Update autosetup to v0.6.9 with optimised insert/delete&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Steve Bennett (&lt;a href="mailto:steveb@workware.net.au"&gt;steveb@workware.net.au&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2018-07-01:/index.html/doc/www/www/articles/jim-release-0-78/</id>
    <title type="html">Jim Tcl version 0.78</title>
    <published>2018-07-01T00:00:00Z</published>
    <updated>2018-07-01T00:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/jim-release-0-78/" type="text/html">
    <content type="html">&lt;h2 id="announce-jim-tcl-version-078"&gt;ANNOUNCE: Jim Tcl version 0.78&lt;/h2&gt;

&lt;p&gt;Jim Tcl 0.78 has been released and is available from:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://repo.or.cz/w/jimtcl.git"&gt;http://repo.or.cz/w/jimtcl.git&lt;/a&gt; or &lt;a href="https://github.com/msteveb/jimtcl"&gt;https://github.com/msteveb/jimtcl&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find out all about Jim Tcl at &lt;a href="http://jim.tcl.tk/"&gt;http://jim.tcl.tk/&lt;/a&gt;&lt;/p&gt;
................................................................................
&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;signal&lt;/code&gt; - Remove the signal command from child interpreters&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;os.wait&lt;/code&gt; is now &lt;code&gt;wait&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;aio ssl&lt;/code&gt; now upgrades the current channel rather than creating a new channel&lt;/li&gt;
  &lt;li&gt;Update autosetup to v0.6.8&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Steve Bennett (&lt;a href="mailto:steveb@workware.net.au"&gt;steveb@workware.net.au&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2016-09-04:/index.html/doc/www/www/articles/jim-release-0-77/</id>
    <title type="html">Jim Tcl version 0.77</title>
    <published>2016-09-04T00:00:00Z</published>
    <updated>2016-09-04T00:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/jim-release-0-77/" type="text/html">
    <content type="html">&lt;h2 id="announce-jim-tcl-version-077"&gt;ANNOUNCE: Jim Tcl version 0.77&lt;/h2&gt;

&lt;p&gt;Jim Tcl 0.77 has been released and is available from:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://repo.or.cz/w/jimtcl.git"&gt;http://repo.or.cz/w/jimtcl.git&lt;/a&gt; or &lt;a href="https://github.com/msteveb/jimtcl"&gt;https://github.com/msteveb/jimtcl&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find out all about Jim Tcl at &lt;a href="http://jim.tcl.tk/"&gt;http://jim.tcl.tk/&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="changes-since-version-076"&gt;CHANGES SINCE VERSION 0.76&lt;/h2&gt;

................................................................................
      &lt;li&gt;Add support for &lt;code&gt;unknown&lt;/code&gt; method&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Add Travis and AppVeyor continuous integration support&lt;/li&gt;
  &lt;li&gt;Use &lt;code&gt;pkg-config&lt;/code&gt; in &lt;code&gt;configure&lt;/code&gt; to find packages if possibe&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Steve Bennett (&lt;a href="mailto:steveb@workware.net.au"&gt;steveb@workware.net.au&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2015-01-31:/index.html/doc/www/www/articles/jim-release-0-76/</id>
    <title type="html">Jim Tcl version 0.76</title>
    <published>2015-01-31T00:00:00Z</published>
    <updated>2015-01-31T00:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/jim-release-0-76/" type="text/html">
    <content type="html">&lt;h2 id="announce-jim-tcl-version-076"&gt;ANNOUNCE: Jim Tcl version 0.76&lt;/h2&gt;

&lt;p&gt;Jim Tcl 0.76 has been released and is available from:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://repo.or.cz/w/jimtcl.git"&gt;http://repo.or.cz/w/jimtcl.git&lt;/a&gt; or &lt;a href="https://github.com/msteveb/jimtcl"&gt;https://github.com/msteveb/jimtcl&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find out all about Jim Tcl at &lt;a href="http://jim.tcl.tk/"&gt;http://jim.tcl.tk/&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="changes-since-version-075"&gt;CHANGES SINCE VERSION 0.75&lt;/h2&gt;

................................................................................

&lt;ul&gt;
  &lt;li&gt;Some invalid scripts will now throw an error rather than silently executing&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;glob&lt;/code&gt; is more Tcl-compatible with respect to &lt;code&gt;-directory&lt;/code&gt; and &lt;code&gt;-tails&lt;/code&gt;, so may affect some scripts&lt;/li&gt;
  &lt;li&gt;The output of errorInfo has changed from &lt;code&gt;"Runtime Error: &amp;lt;file&amp;gt;:&amp;lt;line&amp;gt;: ..."&lt;/code&gt; to &lt;code&gt;"&amp;lt;file&amp;gt;:&amp;lt;line&amp;gt;: Error: ..."&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Steve Bennett (&lt;a href="mailto:steveb@workware.net.au"&gt;steveb@workware.net.au&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2014-02-27:/index.html/doc/www/www/articles/jim-release-0-75/</id>
    <title type="html">Jim Tcl version 0.75</title>
    <published>2014-02-27T00:00:00Z</published>
    <updated>2014-02-27T00:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/jim-release-0-75/" type="text/html">
    <content type="html">&lt;h2 id="announce-jim-tcl-version-075"&gt;ANNOUNCE: Jim Tcl version 0.75&lt;/h2&gt;

&lt;p&gt;Jim Tcl 0.75 has been released and is available from:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://repo.or.cz/w/jimtcl.git"&gt;http://repo.or.cz/w/jimtcl.git&lt;/a&gt; or &lt;a href="https://github.com/msteveb/jimtcl"&gt;https://github.com/msteveb/jimtcl&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find out all about Jim Tcl at &lt;a href="http://jim.tcl.tk/"&gt;http://jim.tcl.tk/&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="changes-since-version-074"&gt;CHANGES SINCE VERSION 0.74&lt;/h2&gt;

................................................................................

&lt;p&gt;&lt;strong&gt;Bugs fixed in version 0.75&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;eventloop - Correct file handler should be deleted&lt;/li&gt;
  &lt;li&gt;eventloop - Fix memory management of aio event handlers&lt;/li&gt;
  &lt;li&gt;local - Requires at least one argument&lt;/li&gt;
  &lt;li&gt;exec - Support nulls in &lt;code&gt;exec&lt;/code&gt; immediate redirection&lt;/li&gt;
  &lt;li&gt;binary - More compliant with Tcl&lt;/li&gt;
  &lt;li&gt;aio - Fix aio recvfrom for non-inet socket&lt;/li&gt;
  &lt;li&gt;Fix &lt;code&gt;string tolower&lt;/code&gt; buffer overflow for non-utf8&lt;/li&gt;
  &lt;li&gt;jimsh - consider scripts with trailing backslash as unfinished&lt;/li&gt;
  &lt;li&gt;Properly respect backslashes in comments&lt;/li&gt;
  &lt;li&gt;Avoid infinite recursion with namespace import&lt;/li&gt;
  &lt;li&gt;Fix dict/list shimmering with embedded nulls&lt;/li&gt;
................................................................................

&lt;p&gt;&lt;strong&gt;Compatiblity&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The deprecated &lt;code&gt;case&lt;/code&gt; command has been removed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Steve Bennett (&lt;a href="mailto:steveb@workware.net.au"&gt;steveb@workware.net.au&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2014-01-24:/index.html/doc/www/www/articles/binary-cheatsheet/</id>
    <title type="html">Binary Cheatsheet</title>
    <published>2014-01-24T00:00:00Z</published>
    <updated>2014-01-24T00:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/binary-cheatsheet/" type="text/html">
    <content type="html">&lt;p&gt;I have been using Tcl for years, but I &lt;em&gt;still&lt;/em&gt; need to lookup the manual every
time I use &lt;code&gt;binary format&lt;/code&gt; and &lt;code&gt;binary scan&lt;/code&gt;. If you are like me, you will find
this cheatsheet a handy reference.&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt; &lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Endian&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Little&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Big&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Host&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Type&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Notes&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;a&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
      &lt;td&gt;byte string&lt;/td&gt;
      &lt;td&gt;format pads with nulls&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;A&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
      &lt;td&gt;byte string&lt;/td&gt;
      &lt;td&gt;format pads with spaces, scan strips trailing spaces/nulls&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;b&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;B&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
      &lt;td&gt;binary digits&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;h&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;H&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
      &lt;td&gt;hex digits&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;c&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
      &lt;td&gt;8 bit integer list&lt;/td&gt;
      &lt;td&gt;In other words, ASCII chars&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;s&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;S&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;t&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;16 bit integer list&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;i&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;I&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;n&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;32 bit integer list&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;w&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;W&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;m&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;64 bit integer list&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;r&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;R&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;f&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;single prec. float list&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;q&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;Q&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;d&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;double prec. float list&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;x&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
      &lt;td&gt;null bytes&lt;/td&gt;
      &lt;td&gt;count is number of bytes&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;X&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
      &lt;td&gt;move cursor back&lt;/td&gt;
      &lt;td&gt;count is number of bytes to back up&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;@&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
      &lt;td&gt;&nbsp;&lt;/td&gt;
      &lt;td&gt;move cursor to location&lt;/td&gt;
      &lt;td&gt;count is byte position, zero based&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;Examples&lt;/strong&gt;&lt;/p&gt;
................................................................................
&lt;pre class="sh_tcl"&gt;
set bin [binary format I2sH2a* {0x123 0x456} 17 ab "testing"]

# This returns 4 (number of conversions)
binary scan $bin I2sH2a* intlist intval hexval str
&lt;/pre&gt;

&lt;p&gt;Steve Bennett (&lt;a href="mailto:steveb@workware.net.au"&gt;steveb@workware.net.au&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2013-07-25:/index.html/doc/www/www/articles/jim-release-0-74/</id>
    <title type="html">Jim Tcl version 0.74</title>
    <published>2013-07-25T00:00:00Z</published>
    <updated>2013-07-25T00:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/jim-release-0-74/" type="text/html">
    <content type="html">&lt;h2 id="announce-jim-tcl-version-074"&gt;ANNOUNCE: Jim Tcl version 0.74&lt;/h2&gt;

&lt;p&gt;Jim Tcl 0.74 has been released and is available from:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://repo.or.cz/w/jimtcl.git"&gt;http://repo.or.cz/w/jimtcl.git&lt;/a&gt; or &lt;a href="https://github.com/msteveb/jimtcl"&gt;https://github.com/msteveb/jimtcl&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find out all about Jim Tcl at &lt;a href="http://jim.tcl.tk/"&gt;http://jim.tcl.tk/&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="changes-since-version-073"&gt;CHANGES SINCE VERSION 0.73&lt;/h2&gt;

................................................................................
             rotate       .
              sieve    -20%
       sieve [dict]    -20%
              upvar    -16%
   wiki.tcl.tk/8566       .
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Steve Bennett (&lt;a href="mailto:steveb@workware.net.au"&gt;steveb@workware.net.au&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2012-02-10:/index.html/doc/www/www/articles/no-namespaces-revisited/</id>
    <title type="html">Coping without Namespaces - Revisited</title>
    <published>2012-02-10T00:00:00Z</published>
    <updated>2012-02-10T00:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/no-namespaces-revisited/" type="text/html">
    <content type="html">&lt;p&gt;Back in the article &lt;a href="/articles/no-namespaces/"&gt;Coping without Namespaces&lt;/a&gt;,
we discussed that fact that Jim Tcl did not support namespaces, but
that small changes to the source could be made to allow namespace-based
Tcl code to be ported for use with Jim Tcl.&lt;/p&gt;

&lt;p&gt;Now with &lt;a href="/articles/light-weight-namespaces/"&gt;namespaces supported&lt;/a&gt;
in &lt;a href="/articles/jim-release-0.73/"&gt;Jim Tcl 0.73&lt;/a&gt;, porting Tcl code
................................................................................
&lt;hr /&gt;

&lt;p&gt;Notice that no namespace-related changes were required when porting this module.&lt;/p&gt;

&lt;p&gt;The latest version of &lt;a href="https://github.com/msteveb/jimtcl/blob/ad3b3c48c9d7e9/examples/dns.tcl"&gt;dns.tcl for Jim Tcl&lt;/a&gt; is
available in git.&lt;/p&gt;

&lt;p&gt;Steve Bennett (&lt;a href="mailto:steveb@workware.net.au"&gt;steveb@workware.net.au&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-12-22:/index.html/doc/www/www/articles/jim-release-0-73/</id>
    <title type="html">Jim Tcl version 0.73</title>
    <published>2011-12-22T00:00:00Z</published>
    <updated>2011-12-22T00:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/jim-release-0-73/" type="text/html">
    <content type="html">&lt;h2 id="announce-jim-tcl-version-073"&gt;ANNOUNCE: Jim Tcl version 0.73&lt;/h2&gt;

&lt;p&gt;Jim Tcl 0.73 has been released and is available from:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://repo.or.cz/w/jimtcl.git"&gt;http://repo.or.cz/w/jimtcl.git&lt;/a&gt; or &lt;a href="https://github.com/msteveb/jimtcl"&gt;https://github.com/msteveb/jimtcl&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find out all about Jim Tcl at &lt;a href="http://jim.tcl.tk/"&gt;http://jim.tcl.tk/&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="changes-since-version-072"&gt;CHANGES SINCE VERSION 0.72&lt;/h2&gt;

................................................................................
  &lt;li&gt;Added &lt;code&gt;tcl::prefix&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Added the &lt;code&gt;history&lt;/code&gt; command to access command line editing and history from scripts&lt;/li&gt;
  &lt;li&gt;Added a Tcl-compatible &lt;code&gt;apply&lt;/code&gt; command&lt;/li&gt;
  &lt;li&gt;Most extensions are now enabled by default&lt;/li&gt;
  &lt;li&gt;Jim Tcl now compiles with MSVC on Windows (but no build support)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Steve Bennett (&lt;a href="mailto:steveb@workware.net.au"&gt;steveb@workware.net.au&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-12-15:/index.html/doc/www/www/articles/light-weight-namespaces/</id>
    <title type="html">Lightweight Namespaces</title>
    <published>2011-12-15T00:00:00Z</published>
    <updated>2011-12-15T00:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/light-weight-namespaces/" type="text/html">
    <content type="html">&lt;p&gt;New in Jim Tcl v0.73 is (optional) support for namespaces.&lt;/p&gt;

&lt;p&gt;The following is taken directly from README.namespaces in the Jim Tcl repository.&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id="lightweight-namespaces-for-jim-tcl"&gt;Lightweight Namespaces for Jim Tcl&lt;/h1&gt;
................................................................................
&lt;p&gt;Even if namespace support is disabled, the command resolution will
recognised global scoping of commands and treat these as identical.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-11-10:/index.html/doc/www/www/articles/jim-tcl-tk-2011-paper/</id>
    <title type="html">Jim @ Tcl/Tk 2011</title>
    <published>2011-11-10T00:00:00Z</published>
    <updated>2011-11-10T00:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/jim-tcl-tk-2011-paper/" type="text/html">
    <content type="html">&lt;p&gt;At the &lt;a href="http://www.tcl.tk/community/tcl2011/"&gt;Tck/Tk 2011 conference&lt;/a&gt; I
presented a paper on Jim Tcl. It seemed to be well received.&lt;/p&gt;

&lt;p&gt;You can read the paper by clicking on the image below.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://workware.net.au/papers/jimtcl-tcl-tk-2011.pdf"&gt;&lt;img src="/img/jimtcl-tcl-tk-2011-front.png" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Steve Bennett (&lt;a href="mailto:steveb@workware.net.au"&gt;steveb@workware.net.au&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-10-06:/index.html/doc/www/www/articles/jim-release-0-72/</id>
    <title type="html">Jim Tcl version 0.72</title>
    <published>2011-10-06T00:00:00Z</published>
    <updated>2011-10-06T00:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/jim-release-0-72/" type="text/html">
    <content type="html">&lt;h2 id="announce-jim-tcl-version-072"&gt;ANNOUNCE: Jim Tcl version 0.72&lt;/h2&gt;

&lt;p&gt;Jim Tcl 0.72 has been released and is available from:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://repo.or.cz/w/jimtcl.git"&gt;http://repo.or.cz/w/jimtcl.git&lt;/a&gt; or &lt;a href="https://github.com/msteveb/jimtcl"&gt;https://github.com/msteveb/jimtcl&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="changes-since-version-071"&gt;CHANGES SINCE VERSION 0.71&lt;/h2&gt;

&lt;p&gt;This release incorporates bug fixes and many new features.&lt;/p&gt;

................................................................................
  &lt;li&gt;New [aio listen] to set the size of the listen queue on server sockets&lt;/li&gt;
  &lt;li&gt;Jim Tcl Manual is better formatted, commands are hyperlinked and various corrections have been made&lt;/li&gt;
  &lt;li&gt;The oo, tree, binary and pack extensions are now documented&lt;/li&gt;
  &lt;li&gt;New metakit extension&lt;/li&gt;
  &lt;li&gt;The SDL extension once again builds and runs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Steve Bennett (&lt;a href="mailto:steveb@workware.net.au"&gt;steveb@workware.net.au&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-10-04:/index.html/doc/www/www/articles/jim-sqlite-shell/</id>
    <title type="html">jSQLsh - Jim Tcl SQLite Shell</title>
    <published>2011-10-04T00:00:00Z</published>
    <updated>2011-10-04T00:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/jim-sqlite-shell/" type="text/html">
    <content type="html">&lt;p&gt;The jSQLsh project at &lt;a href="https://github.com/LStinson/jSQLsh"&gt;https://github.com/LStinson/jSQLsh&lt;/a&gt; provides
a small but powerful shell for sqlite, modelled after
&lt;a href="http://www.postgresql.org/docs/9.0/static/app-psql.html"&gt;psql&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The creator, Lorance Stinson, wanted an sqlite command shell which
addressed some of the deficiencies of the native sqlite command
shell, so he decided to create his own with Jim Tcl.&lt;/p&gt;
................................................................................
  /q(uit)     Quit  (Also Ctrl-D)
  /u(ser)     Display the user macros.
  /u(ser)#    Copy user macro # into the query buffer.
  /u(ser)# -  Copy the query buffer, or supplied text, into macro #.
:memory: (0 rows, 0 changes) # 
&lt;/pre&gt;

&lt;p&gt;Steve Bennett (&lt;a href="mailto:steveb@workware.net.au"&gt;steveb@workware.net.au&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-09-06:/index.html/doc/www/www/articles/metakit-extension/</id>
    <title type="html">New Metakit Extension</title>
    <published>2011-09-06T00:00:00Z</published>
    <updated>2011-09-06T00:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/metakit-extension/" type="text/html">
    <content type="html">&lt;p&gt;Alexander Shpilkin has contributed the metakit extension to Jim Tcl.&lt;/p&gt;

&lt;p&gt;Metakit (&lt;a href="http://equi4.com/metakit/"&gt;http://equi4.com/metakit/&lt;/a&gt;) is an embeddable non-SQL
database with advanced data manipulation features through the use of views.
Using metakit can be an alternative to sqlite.&lt;/p&gt;

&lt;p&gt;The Jim Tcl metakit interface is different from the Tcl metakit interface as it
................................................................................
$ cd ../..
$ ./configure --with-ext=mk CFLAGS="-Imetakit/include -Lmetakit/unix"
$ make
$ ./jimsh examples/metakit.tcl
  ...
&lt;/pre&gt;

&lt;p&gt;Steve Bennett (&lt;a href="mailto:steveb@workware.net.au"&gt;steveb@workware.net.au&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-06-24:/index.html/doc/www/www/articles/jim-release-0-71/</id>
    <title type="html">Jim Tcl version 0.71</title>
    <published>2011-06-24T00:00:00Z</published>
    <updated>2011-06-24T00:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/jim-release-0-71/" type="text/html">
    <content type="html">&lt;h2 id="announce-jim-tcl-version-071"&gt;ANNOUNCE: Jim Tcl version 0.71&lt;/h2&gt;

&lt;p&gt;Jim Tcl 0.71 has been released and is available from:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://repo.or.cz/w/jimtcl.git"&gt;http://repo.or.cz/w/jimtcl.git&lt;/a&gt; or &lt;a href="https://github.com/msteveb/jimtcl"&gt;https://github.com/msteveb/jimtcl&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="changes-since-version-070"&gt;CHANGES SINCE VERSION 0.70&lt;/h2&gt;

&lt;p&gt;This release incorporates bug fixes and
several new features, including:&lt;/p&gt;
................................................................................
  &lt;li&gt;Minimal exec implementation is supported even without vfork/waitpid&lt;/li&gt;
  &lt;li&gt;configure is now faster and simpler with autosetup (&lt;a href="https://github.com/msteveb/autosetup"&gt;https://github.com/msteveb/autosetup&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Add string byterange&lt;/li&gt;
  &lt;li&gt;Ability to create a single source file bootstrap jimsh&lt;/li&gt;
  &lt;li&gt;Added debian packaging support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Steve Bennett (&lt;a href="mailto:steveb@workware.net.au"&gt;steveb@workware.net.au&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-06-10:/index.html/doc/www/www/articles/new-comment-system/</id>
    <title type="html">New Comment System</title>
    <published>2011-06-10T00:00:00Z</published>
    <updated>2011-06-10T00:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/new-comment-system/" type="text/html">
    <content type="html">&lt;p&gt;I have added a comment system to the Jim Tcl website.
Let me know if there are any problems with it.&lt;/p&gt;

&lt;p&gt;Steve Bennett (&lt;a href="mailto:steveb@workware.net.au"&gt;steveb@workware.net.au&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-06-09:/index.html/doc/www/www/articles/bootstrap-jimsh/</id>
    <title type="html">Bootstrap jimsh</title>
    <published>2011-06-09T00:00:00Z</published>
    <updated>2011-06-09T00:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/bootstrap-jimsh/" type="text/html">
    <content type="html">&lt;p&gt;The Jim interpreter is small, portable and full-featured. This makes
&lt;code&gt;jimsh&lt;/code&gt; an ideal tool to bootstrap a development system that
requires an interpreter.&lt;/p&gt;

&lt;p&gt;Consider the case of a development configuration system such as
&lt;a href="http://www.gnu.org/software/autoconf/"&gt;GNU autotools&lt;/a&gt;.  Here it
is necessary to run fairly complex scripts that invoke external
................................................................................
user   0m1.121s
sys    0m0.109s
$ ./jimsh0
Welcome to Jim version 0.71
. 
&lt;/pre&gt;

&lt;p&gt;Steve Bennett (&lt;a href="mailto:steveb@workware.net.au"&gt;steveb@workware.net.au&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-05-26:/index.html/doc/www/www/articles/no-namespaces/</id>
    <title type="html">Coping without Namespaces</title>
    <published>2011-05-26T00:00:00Z</published>
    <updated>2011-05-26T00:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/no-namespaces/" type="text/html">
    <content type="html">&lt;p&gt;One of the features of Tcl which Jim lacks is support for
&lt;a href="http://www.tcl.tk/man/tcl8.5/TclCmd/namespace.htm"&gt;namespaces&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The lack of namespaces in Jim is generally not a problem in the
small, embedded applications for which Jim is most suited. However
occasionally it useful to be able to port Tcl code which uses
namespace.  For example, &lt;a href="http://tcllib.sourceforge.net/"&gt;tcllib&lt;/a&gt;
................................................................................
  &lt;li&gt;Ensure procs are declared with fully quality names: &lt;code&gt;proc ns::procname { ... }&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Use fully qualified names when invoking procs within the namespace.&lt;/li&gt;
  &lt;li&gt;Replace the use of &lt;code&gt;namespace current&lt;/code&gt; with the namespace name&lt;/li&gt;
  &lt;li&gt;Replace the use of &lt;code&gt;namespace origin&lt;/code&gt; with the namespace name&lt;/li&gt;
  &lt;li&gt;Use the &lt;code&gt;variable&lt;/code&gt; proc to declare variables within procs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Steve Bennett (&lt;a href="mailto:steveb@workware.net.au"&gt;steveb@workware.net.au&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-05-25:/index.html/doc/www/www/articles/jim-is-modular/</id>
    <title type="html">Jim Is Modular</title>
    <published>2011-05-25T00:00:00Z</published>
    <updated>2011-05-25T00:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/jim-is-modular/" type="text/html">
    <content type="html">&lt;p&gt;One of the advantages of Jim Tcl is that the core interpreter
contains only the bare essentials. Many Tcl standard commands are provided by
optional extensions which can be disable or built as loadable modules if required.&lt;/p&gt;

&lt;dl&gt;
  &lt;dt&gt;core commands&lt;/dt&gt;
  &lt;dd&gt;*, +, -, /, alias, append, break, catch, collect, concat,
................................................................................
  &lt;dt&gt;signal extension&lt;/dt&gt;
  &lt;dd&gt;signal, alarm, kill, sleep&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;In addition, features including references, UTF-8 support, IPv6 and command line editing
can be disabled with &lt;code&gt;configure&lt;/code&gt;. See &lt;code&gt;configure --help&lt;/code&gt; for full details.&lt;/p&gt;

&lt;p&gt;Steve Bennett (&lt;a href="mailto:steveb@workware.net.au"&gt;steveb@workware.net.au&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:jim.tcl.tk,2011-04-24:/index.html/doc/www/www/articles/2011-04-24/</id>
    <title type="html">New Website Launched</title>
    <published>2011-04-24T00:00:00Z</published>
    <updated>2011-04-24T00:00:00Z</updated>
    <link rel="alternate" href="http://jim.tcl.tk/index.html/doc/www/www/articles/2011-04-24/" type="text/html">
    <content type="html">&lt;p&gt;Jim Tcl development has been proceeding apace, but the &lt;a href="http://jim.berlios.de/"&gt;website&lt;/a&gt;
had not been updated for several years. In order to make Jim Tcl
more approachable, we have given the website and updated the content
to reflect current reality.&lt;/p&gt;

&lt;p&gt;Steve Bennett (&lt;a href="mailto:steveb@workware.net.au"&gt;steveb@workware.net.au&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
</feed>

















































Changes to www/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
..
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
...
117
118
119
120
121
122
123
124
125

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - The Jim Interpreter</title>
    <link rel="stylesheet" type="text/css" href="css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="css/sh_style.css" media="screen">
	
	<link rel="alternate" type="application/rss+xml" title="News" href="feed.xml">
	
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		</div>
	</div>
    <div id="sidebar">
      <h2>About Jim Tcl</h2>
      <ul>
		
			
			<li class="stdlink"><span class="active" title="You're here.">Introduction</span></li>
		
			
			<li class="stdlink"><a href="news/">News</a></li>
		
			
			<li class="stdlink"><a href="download/">Download</a></li>
		
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







|







 







|
|
>

1


2
3
4
5
6
7
8
..
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
..
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
...
114
115
116
117
118
119
120
121
122
123

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - The Jim Interpreter</title>
    <link rel="stylesheet" type="text/css" href="css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="css/sh_style.css" media="screen">
	
	<link rel="alternate" type="application/rss+xml" title="News" href="feed.xml">
	
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		</div>
	</div>
    <div id="sidebar">
      <h2>About Jim Tcl</h2>
      <ul>
		
			
			<li class="stdlink"><span class="active">Introduction</span></li>
		
			
			<li class="stdlink"><a href="news/">News</a></li>
		
			
			<li class="stdlink"><a href="download/">Download</a></li>
		
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/license/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
38
39
40
41
42
43
44

45
46
47
48
49
50
51
52
...
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
...
118
119
120
121
122
123
124
125
126

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - License</title>
    <link rel="stylesheet" type="text/css" href="../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../css/sh_style.css" media="screen">
	
	<script src="../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		
			<a href="./">License</a> 
			 
		
		</div>
		<div class="main" id="main">
		

		<h2 id="terms-and-conditions">Terms and Conditions</h2>

<p><a style="border: 0px;" href="http://www.opensource.org/docs/definition.php"><img style="border: 0px;" src="http://opensource.org/trademarks/open_source_button.png" width="88" height="31" alt="opensource logo"></a></p>

<p>Jim is released under the <a href="http://www.freebsd.org/copyright/freebsd-license.html">FreeBSD License</a>.
This license but allows you to create derivative proprietary software
with Jim, that can be ditributed in binary only form without the
need to share the modified source code.</p>
................................................................................
			
			<li class="stdlink"><a href="../documentation/">Documentation</a></li>
		
			
			<li class="stdlink"><a href="../extensions/">Extensions</a></li>
		
			
			<li class="stdlink"><span class="active" title="You're here.">License</span></li>
		
			
			<li class="stdlink"><a href="../about/">About</a></li>
		
      </ul>
      <h2>Community</h2>
      <ul>
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







>
|







 







|







 







|
|
>

1


2
3
4
5
6
7
8
..
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
...
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
...
116
117
118
119
120
121
122
123
124
125

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - License</title>
    <link rel="stylesheet" type="text/css" href="../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../css/sh_style.css" media="screen">
	
	<script src="../javascript/sh_main.min.js" type="text/javascript"></script>
	<script src="../javascript/sh_lang.js" type="text/javascript"></script>
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
		
			<a href="./">License</a> 
			 
		
		</div>
		<div class="main" id="main">
		
		
<h2 id="terms-and-conditions">Terms and Conditions</h2>

<p><a style="border: 0px;" href="http://www.opensource.org/docs/definition.php"><img style="border: 0px;" src="http://opensource.org/trademarks/open_source_button.png" width="88" height="31" alt="opensource logo"></a></p>

<p>Jim is released under the <a href="http://www.freebsd.org/copyright/freebsd-license.html">FreeBSD License</a>.
This license but allows you to create derivative proprietary software
with Jim, that can be ditributed in binary only form without the
need to share the modified source code.</p>
................................................................................
			
			<li class="stdlink"><a href="../documentation/">Documentation</a></li>
		
			
			<li class="stdlink"><a href="../extensions/">Extensions</a></li>
		
			
			<li class="stdlink"><span class="active">License</span></li>
		
			
			<li class="stdlink"><a href="../about/">About</a></li>
		
      </ul>
      <h2>Community</h2>
      <ul>
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>

Changes to www/news/index.html.

1
2
3
4
5
6
7
8
9
10
11
..
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
..
43
44
45
46
47
48
49































































50
51
52
53
54
55
56
..
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
...
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
...
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
...
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
...
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
...
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
...
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
...
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
...
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
...
685
686
687
688
689
690
691
692
693

<!DOCTYPE HTML>
<html lang="en">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <title>Jim Tcl - News</title>
    <link rel="stylesheet" type="text/css" href="../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../css/sh_style.css" media="screen">
	
	<link rel="alternate" type="application/rss+xml" title="News" href="../feed.xml">
	
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
	<meta name="generator" content="nanoc 3.1.6">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
			<a href="./">News</a> 
			 
		
		</div>
		<div class="main" id="news">
		
		































































<div class="main" id="main">
<p class="articledate">Sunday, 01 July 2018</p>
<h2 class="news"><a href="../articles/jim-release-0-78/">Jim Tcl version 0.78</a></h2>


<h2 id="announce-jim-tcl-version-078">ANNOUNCE: Jim Tcl version 0.78</h2>

................................................................................
A summary is below. See git for the full changelog.</p>

<p>Thanks to everyone who contributed to this release.</p>

<p><strong>Bugs fixed in version 0.78</strong></p>

<ul>
  <li>
<code>local</code> - Fix crash when local command is deleted</li>
  <li>
<code>history</code> - When creating ~/.jim_history, set permissions to 0600 for security</li>
  <li>
<code>exec</code> - Fix windows exec with empty or unset env</li>
  <li>
<code>exec</code> - Fix check for <code>|</code> and <code>|&amp;</code>
</li>
  <li>jim.c - Fix Object leak in zlib support</li>
  <li>
<code>signal</code> - Restore default signal handling on interp exit</li>
  <li>
<code>dict</code> - Fix [dict values] with duplicate values</li>
  <li>Fix ‘/’ command, divide by zero</li>
  <li>
<code>expr</code> - Replace expression engine to fix a number of problems</li>
  <li>
<code>zlib</code> - Various fixes</li>
  <li>
<code>lsort -unique</code> - Fix case with no duplicates</li>
  <li>
<code>aio tempname</code> - Fix a crash when the template is invalid</li>
  <li>Tcl compatibility - Error on extra characters after close brace</li>
  <li>eventloop - Return from callback is not an error</li>
  <li>
<code>oo</code> - Fix <code>methods</code> for superclasses</li>
  <li>Various refcount and edge case fixes found by fuzz testing</li>
</ul>

<p><strong>Features added in version 0.78</strong></p>

<ul>
  <li>Add support for utf-8 wide characters</li>
  <li>
<code>aio</code> - Add <code>tty</code> for termios settings</li>
  <li>
<code>aio</code> - Add <code>sockopt</code> for <code>broadcast</code>, <code>tcp_nodelay</code>, etc.</li>
  <li>utf-8 - Update UnicodeData.txt to 9.0.0</li>
  <li>jimsh - Add support for <code>jimsh -</code>
</li>
  <li>jimsh - Scriptable command-line completion support via <code>tcl::autocomplete</code>
</li>
  <li>
<code>history</code> - Add autocompletion support <code>history completion &lt;cmd&gt;</code>
</li>
  <li>Add support for <code>-commands</code> to many commands</li>
  <li>Add pkg-config support - <code>jimtcl.pc</code>
</li>
  <li>
<code>clock</code> - Add <code>-gmt</code> option to <code>format</code> and <code>scan</code>
</li>
  <li>
<code>tree</code> - Allow nodes to be deleted</li>
  <li>
<code>defer</code>, <code>$jim::defer</code> - Allow scripts to run on proc exit</li>
  <li>eventloop - Support sub-millisecond timer resolution</li>
  <li>Support <code>lambda</code> even if references are disabled</li>
  <li>Performance - Improve a number of common cases through caching</li>
  <li>
<code>signal</code>, <code>exec</code>, <code>wait</code>, <code>pid</code>, <code>pipe</code> - Many improvements</li>
  <li>build - Support <code>--silent-rules</code>, and enable by default</li>
  <li>
<code>regexp</code> - Implement class shorthand escapes in brackets</li>
  <li>linenoise (<code>jimsh</code>) - Add ^Z (SUSP) support</li>
  <li>linenoise (<code>jismh</code>) - Update to support multiline mode</li>
</ul>

<p><strong>Other changes</strong></p>

<ul>
  <li>
<code>signal</code> - Remove the signal command from child interpreters</li>
  <li>
<code>os.wait</code> is now <code>wait</code>
</li>
  <li>
<code>aio ssl</code> now upgrades the current channel rather than creating a new channel</li>
  <li>Update autosetup to v0.6.8</li>
</ul>

<p>Steve Bennett (<a href="mailto:steveb@workware.net.au">steveb@workware.net.au</a>)</p>


<a href="../articles/jim-release-0-78/#comments">Comments &gt;&gt;&gt;</a>
................................................................................
<div class="main" id="main">
<p class="articledate">Sunday, 04 September 2016</p>
<h2 class="news"><a href="../articles/jim-release-0-77/">Jim Tcl version 0.77</a></h2>


<h2 id="announce-jim-tcl-version-077">ANNOUNCE: Jim Tcl version 0.77</h2>

<p>Jim Tcl 0.77 has been released and is available from: </p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<p>Find out all about Jim Tcl at <a href="http://jim.tcl.tk/">http://jim.tcl.tk/</a></p>

<h2 id="changes-since-version-076">CHANGES SINCE VERSION 0.76</h2>

................................................................................
A summary is below. See git for the full changelog.</p>

<p>Thanks to everyone who contributed to this release.</p>

<p><strong>Bugs fixed in version 0.77</strong></p>

<ul>
  <li>
<code>exec</code> - better handline of pipeline abnormal termination</li>
  <li>
<code>exec</code> - fix append redirection on Windows</li>
  <li>
<code>regsub</code> - fix substitution with trailing backslash</li>
  <li>
<code>expr</code> - improved mathfunc handling and <code>pow/**</code>
</li>
  <li>chained tailcalls were not always being run</li>
</ul>

<p><strong>Features added in version 0.77</strong></p>

<ul>
  <li>Add support for <code>configure --docdir=...</code>
</li>
  <li>Add support for <code>jimsh --help</code>
</li>
  <li>Add support for booleans in <code>string is</code> and expressions (true, false, on, off, yes, no)</li>
  <li>
<code>aio</code> - add <code>sync</code>, openssl bindings, posix locking</li>
  <li>
<code>expr</code> - add support for atan2, hypot and fmod</li>
  <li>
<code>regexp</code>, <code>regsub</code>:
    <ul>
      <li>Add support for <code>\D</code>, <code>\W</code> and <code>\S</code>
</li>
      <li>Add partial support for <code>\A</code>, <code>\Z</code>
</li>
      <li>Add support for all character classes: <code>[[::blank:]], [[::xdigit::]]</code>, etc.</li>
    </ul>
  </li>
  <li>Update included sqlite3 to v3.14.1</li>
  <li>Add <code>$tcl_platform(engine)</code>
</li>
  <li>Add basic (optional) <code>zlib</code> support</li>
  <li>Add <code>interp</code> child interprester support</li>
  <li>
<code>oo</code>:
    <ul>
      <li>Add support for constructor, runs on new object creation</li>
      <li>Add support for <code>unknown</code> method</li>
    </ul>
  </li>
  <li>Add Travis and AppVeyor continuous integration support</li>
  <li>Use <code>pkg-config</code> in <code>configure</code> to find packages if possibe</li>
................................................................................
<div class="main" id="main">
<p class="articledate">Saturday, 31 January 2015</p>
<h2 class="news"><a href="../articles/jim-release-0-76/">Jim Tcl version 0.76</a></h2>


<h2 id="announce-jim-tcl-version-076">ANNOUNCE: Jim Tcl version 0.76</h2>

<p>Jim Tcl 0.76 has been released and is available from: </p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<p>Find out all about Jim Tcl at <a href="http://jim.tcl.tk/">http://jim.tcl.tk/</a></p>

<h2 id="changes-since-version-075">CHANGES SINCE VERSION 0.75</h2>

................................................................................
A summary is below. See git for the full changelog.</p>

<p>Thanks to everyone who contributed to this release.</p>

<p><strong>Bugs fixed in version 0.76</strong></p>

<ul>
  <li>
<code>file</code> - fix stat file size for large files</li>
  <li>
<code>array</code> - avoid crash on unset variable</li>
  <li>
<code>exec</code>, file` - set umask before mkstemp</li>
  <li>
<code>file copy</code> - use binary mode when reading and writing files (Windows)</li>
  <li>
<code>glob</code> - work when intermediate dirs are not readable, and other fixes</li>
  <li>aio - fix conflict between onexception and writable</li>
  <li>
<code>namespace</code> - restore namespace import support</li>
  <li>
<code>alias</code> - don’t rely on internal list never shimmering</li>
  <li>Fix various minor problems reported by <a href="http://www.coverity.com">coverity</a>
</li>
  <li>Fix <code>info nameofexecutable</code> after <code>cd</code>
</li>
</ul>

<p><strong>Features added in version 0.76</strong></p>

<ul>
  <li>
<code>exec</code>, file - respect $TMPDIR</li>
  <li>
<code>aio</code> - optional argument addrvar for accept.</li>
  <li>
<code>string</code> - implement <code>string cat</code> (<a href="http://www.tcl.tk/cgi-bin/tct/tip/429.html">TIP #429</a>)</li>
  <li>
<code>file</code> - add support for <code>file link</code>
</li>
  <li>
<code>info</code> - add support for <code>info source ?filename line?</code>
</li>
  <li>Better script validation (e.g. missing trailing brackets)</li>
  <li>Install tcltest compatibility package</li>
</ul>

<p><strong>Compatiblity</strong></p>

<ul>
  <li>Some invalid scripts will now throw an error rather than silently executing</li>
  <li>
<code>glob</code> is more Tcl-compatible with respect to <code>-directory</code> and <code>-tails</code>, so may affect some scripts</li>
  <li>The output of errorInfo has changed from <code>"Runtime Error: &lt;file&gt;:&lt;line&gt;: ..."</code> to <code>"&lt;file&gt;:&lt;line&gt;: Error: ..."</code>
</li>
</ul>

<p>Steve Bennett (<a href="mailto:steveb@workware.net.au">steveb@workware.net.au</a>)</p>


<a href="../articles/jim-release-0-76/#comments">Comments &gt;&gt;&gt;</a>

................................................................................
<div class="main" id="main">
<p class="articledate">Thursday, 27 February 2014</p>
<h2 class="news"><a href="../articles/jim-release-0-75/">Jim Tcl version 0.75</a></h2>


<h2 id="announce-jim-tcl-version-075">ANNOUNCE: Jim Tcl version 0.75</h2>

<p>Jim Tcl 0.75 has been released and is available from: </p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<p>Find out all about Jim Tcl at <a href="http://jim.tcl.tk/">http://jim.tcl.tk/</a></p>

<h2 id="changes-since-version-074">CHANGES SINCE VERSION 0.74</h2>

................................................................................

<p><strong>Bugs fixed in version 0.75</strong></p>

<ul>
  <li>eventloop - Correct file handler should be deleted</li>
  <li>eventloop - Fix memory management of aio event handlers</li>
  <li>local - Requires at least one argument</li>
  <li>exec - Support nulls in <code>exec</code> immediate redirection </li>
  <li>binary - More compliant with Tcl</li>
  <li>aio - Fix aio recvfrom for non-inet socket</li>
  <li>Fix <code>string tolower</code> buffer overflow for non-utf8</li>
  <li>jimsh - consider scripts with trailing backslash as unfinished</li>
  <li>Properly respect backslashes in comments</li>
  <li>Avoid infinite recursion with namespace import</li>
  <li>Fix dict/list shimmering with embedded nulls</li>
  <li>Fix <code>aio close</code> from non-global namespace</li>
  <li>
<code>tailcall</code> should resolve command in current namespace</li>
  <li>errors caught by <code>catch</code> shouldn`t affect later stacktrace</li>
  <li>
<code>tailcall</code>: properly merge tailcall frames</li>
  <li>
<code>exec</code>: fix reaping of detached processes</li>
  <li>
<code>clock</code>: handle case of format string too long</li>
  <li>
<code>format</code>: fix format %hd on some platforms</li>
  <li>jim.c: fix some dict/list shimmering issues</li>
</ul>

<p><strong>Features added in version 0.75</strong></p>

<ul>
  <li>
<code>binary</code>, <code>pack</code> and <code>unpack</code> now support floating point</li>
  <li>
<code>file copy</code> <code>-force</code> handles source and target as the same file</li>
  <li>
<code>format</code> now supports <code>%b</code> for binary conversion</li>
  <li>
<code>lsort</code> now supports <code>-unique</code> and <code>-real</code>
</li>
  <li>Add support for half-close with <code>aio close ?r|w?</code>
</li>
  <li>Add <code>socket pair</code> for a bidirectional pipe</li>
  <li>Add –random-hash to randomise hash tables for greater security</li>
  <li>
<code>dict</code> now supports <code>for</code>, <code>values</code>, <code>incr</code>, <code>append</code>, <code>lappend</code>, <code>update</code>, <code>info</code> and <code>replace</code>
</li>
  <li>
<code>file stat</code> no longer requires the variable name</li>
</ul>

<p><strong>Compatiblity</strong></p>

<ul>
  <li>The deprecated <code>case</code> command has been removed</li>
</ul>
................................................................................
this cheatsheet a handy reference.</p>

<table>
  <tbody>
    <tr>
      <td><code> </code></td>
      <td><strong>Endian</strong></td>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
    <tr>
      <td><strong>Little</strong></td>
      <td><strong>Big</strong></td>
      <td><strong>Host</strong></td>
      <td><strong>Type</strong></td>
      <td><strong>Notes</strong></td>
    </tr>
    <tr>
      <td><code>a</code></td>
      <td> </td>
      <td> </td>
      <td>byte string</td>
      <td>format pads with nulls</td>
    </tr>
    <tr>
      <td><code>A</code></td>
      <td> </td>
      <td> </td>
      <td>byte string</td>
      <td>format pads with spaces, scan strips trailing spaces/nulls</td>
    </tr>
    <tr>
      <td><code>b</code></td>
      <td><code>B</code></td>
      <td> </td>
      <td>binary digits</td>
      <td> </td>
    </tr>
    <tr>
      <td><code>h</code></td>
      <td><code>H</code></td>
      <td> </td>
      <td>hex digits</td>
      <td> </td>
    </tr>
    <tr>
      <td><code>c</code></td>
      <td> </td>
      <td> </td>
      <td>8 bit integer list</td>
      <td>In other words, ASCII chars</td>
    </tr>
    <tr>
      <td><code>s</code></td>
      <td><code>S</code></td>
      <td><code>t</code></td>
      <td>16 bit integer list</td>
      <td> </td>
    </tr>
    <tr>
      <td><code>i</code></td>
      <td><code>I</code></td>
      <td><code>n</code></td>
      <td>32 bit integer list</td>
      <td> </td>
    </tr>
    <tr>
      <td><code>w</code></td>
      <td><code>W</code></td>
      <td><code>m</code></td>
      <td>64 bit integer list</td>
      <td> </td>
    </tr>
    <tr>
      <td><code>r</code></td>
      <td><code>R</code></td>
      <td><code>f</code></td>
      <td>single prec. float list</td>
      <td> </td>
    </tr>
    <tr>
      <td><code>q</code></td>
      <td><code>Q</code></td>
      <td><code>d</code></td>
      <td>double prec. float list</td>
      <td> </td>
    </tr>
    <tr>
      <td><code>x</code></td>
      <td> </td>
      <td> </td>
      <td>null bytes</td>
      <td>count is number of bytes</td>
    </tr>
    <tr>
      <td><code>X</code></td>
      <td> </td>
      <td> </td>
      <td>move cursor back</td>
      <td>count is number of bytes to back up</td>
    </tr>
    <tr>
      <td><code>@</code></td>
      <td> </td>
      <td> </td>
      <td>move cursor to location</td>
      <td>count is byte position, zero based</td>
    </tr>
  </tbody>
</table>

<p><strong>Examples</strong></p>

<pre class="sh_tcl">
set bin [binary format I2sH2a* {0x123 0x456} 17 ab "testing"]

# This returns 4 (number of conversions)
binary scan $bin I2sH2a* intlist intval hexval str
</pre>

<p>Steve Bennett (<a href="mailto:steveb@workware.net.au">steveb@workware.net.au</a>)</p>


<a href="../articles/binary-cheatsheet/#comments">Comments &gt;&gt;&gt;</a>



</div>

<div class="main" id="main">
<p class="articledate">Thursday, 25 July 2013</p>
<h2 class="news"><a href="../articles/jim-release-0-74/">Jim Tcl version 0.74</a></h2>


<h2 id="announce-jim-tcl-version-074">ANNOUNCE: Jim Tcl version 0.74</h2>

<p>Jim Tcl 0.74 has been released and is available from: </p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<p>Find out all about Jim Tcl at <a href="http://jim.tcl.tk/">http://jim.tcl.tk/</a></p>

<h2 id="changes-since-version-073">CHANGES SINCE VERSION 0.73</h2>

<p>This release is mostly a bug fix release with some performance
enhancements and a few small additional features.
A summary is below. See git for the full changelog.</p>

<p>Thanks to everyone who contributed to this release.</p>

<p><strong>Bugs fixed in version 0.74</strong></p>

<ul>
  <li>Space allocated for <code>exec</code> envenvironment may be one byte short</li>
  <li>Fix <code>glob</code> with patterns containing spaces, [ and ]</li>
  <li>Sense of <code>fconfigure -blocking</code> is reversed</li>
  <li>
<code>subst -noc</code> should substitute vars inside brackets</li>
  <li>Fix a reference counting bug</li>
  <li>Fix invalid memory reference during finalisers</li>
  <li>Fix an invalid memory reference in <code>info references</code>
</li>
  <li>Fix a buffer overflow in <code>info references</code>
</li>
  <li>Ensure that the full ref is passed to finalizer</li>
  <li>Fix conversion of numbers &gt;= 2^31</li>
  <li>Fix <code>binary scan</code> for too-few bytes.</li>
  <li>Fix bug that was causing the system <code>environ</code> variable to be freed</li>
  <li>Fix a linenoise bug when moving off the left</li>
  <li>Fix linenoise serial console window size for vt102</li>
  <li>Fix a bug in the <code>sqlite3</code> module (array index out of bounds)</li>
  <li>Fix <code>string replace</code> replacing a single char</li>
</ul>

<p><strong>Features added in version 0.74</strong></p>

<ul>
  <li>Add support for <code>aio isatty</code>
</li>
  <li>Remove octal literals with a leading 0 (<a href="TIP%20#114">http://www.tcl.tk/cgi-bin/tct/tip/114.html</a>)</li>
  <li>Add support for <code>glob -directory</code>
</li>
  <li>Allow abbreviations to <code>glob</code> options</li>
  <li>Ensure that signals can break <code>vwait</code>
</li>
  <li>Allow <code>aio copyto</code> and <code>aio read</code> to copy &gt;2GB</li>
  <li>
<code>aio seek</code> and <code>aio tell</code> should allow for 64 bit offsets</li>
  <li>Add support for <code>string equal -length</code> and <code>string compare -length</code>
</li>
</ul>

<p><strong>Performance Improvements</strong></p>

<p>Thanks in large part to Lauri Kasanen, performance of Jim Tcl has
improved by up to 20% in some areas compared to version 0.73.</p>

<pre><code>    Executable Size     +1%
          PI digits     -4%
    [for] busy loop       .
       [local] loop       .
  [while] busy loop     -1%
                ary    -10%
         ary [dict]    -20%
       ary [static]     -1%
       dynamic code     -3%
dynamic code (list)       .
             expand     -1%
      fibonacci(25)     +1%
           heapsort     -4%
             mandel     -9%
         mini loops       .
       nested loops       .
             repeat       .
             rotate       .
              sieve    -20%
       sieve [dict]    -20%
              upvar    -16%
   wiki.tcl.tk/8566       .
</code></pre>

<p>Steve Bennett (<a href="mailto:steveb@workware.net.au">steveb@workware.net.au</a>)</p>


<a href="../articles/jim-release-0-74/#comments">Comments &gt;&gt;&gt;</a>



</div>

<p><a href="../articles/">See All News Articles »</a></p>

		
................................................................................
      <h2>About Jim Tcl</h2>
      <ul>
		
			
			<li class="stdlink"><a href="../">Introduction</a></li>
		
			
			<li class="stdlink"><span class="active" title="You're here.">News</span></li>
		
			
			<li class="stdlink"><a href="../download/">Download</a></li>
		
			
			<li class="stdlink"><a href="../documentation/">Documentation</a></li>
		
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  </body>
</html>

<
|
<
<







 







|







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







 







<
|
<
|
<
|
<
|
<

<
|
<
|

<
|
<
|
<
|
<
|


<
|







<
|
<
|

|
<
|
<
<
|
<

|
<
<
|
<
<
|
<
|



<
|

<
|







<
|
<
|
<
<
|







 







|







 







<
|
<
|
<
|
<
|
<






|
<
|
<

<
|
<
|
<
|

|
<
|
<




|
<


<
|







 







|







 







<
|
<
|
<
|
<
|
<
|

<
|
<
|
|
<
|
<





<
|
<
|
<
|
<
|
<
<
|
<








<
|
|
<







 







|







 







|








<
|

<
|
<
|
<
|
<
|






<
|
<
|
<
|
<
|
<
|
<


<
|
<
<
|







 







|
|
|










|
|





|
|






|

|




|

|



|
|








|






|






|






|






|



|
|





|
|





|
|








<
|










<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







 







|







 







|
|
>

1


2
3
4
5
6
7
8
..
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
..
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
...
126
127
128
129
130
131
132

133

134

135

136

137

138

139
140

141

142

143

144
145
146

147
148
149
150
151
152
153
154

155

156
157
158

159


160

161
162


163


164

165
166
167
168

169
170

171
172
173
174
175
176
177
178

179

180


181
182
183
184
185
186
187
188
...
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
...
210
211
212
213
214
215
216

217

218

219

220

221
222
223
224
225
226
227

228

229

230

231

232
233
234

235

236
237
238
239
240

241
242

243
244
245
246
247
248
249
250
...
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
...
278
279
280
281
282
283
284

285

286

287

288

289
290

291

292
293

294

295
296
297
298
299

300

301

302

303


304

305
306
307
308
309
310
311
312

313
314

315
316
317
318
319
320
321
...
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
...
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360

361
362

363

364

365

366
367
368
369
370
371
372

373

374

375

376

377

378
379

380


381
382
383
384
385
386
387
388
...
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519

520
521
522
523
524
525
526
527
528
529
530





































































































531
532
533
534
535
536
537
...
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
...
568
569
570
571
572
573
574
575
576
577

<!DOCTYPE html><html lang="en"><head>


    <meta charset="utf-8">
    <title>Jim Tcl - News</title>
    <link rel="stylesheet" type="text/css" href="../css/style.css" media="screen">
    <link rel="stylesheet" type="text/css" href="../css/sh_style.css" media="screen">
	
	<link rel="alternate" type="application/rss+xml" title="News" href="../feed.xml">
	
................................................................................
	  (function() {
		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	  })();
	</script>
	
    <meta name="generator" content="Nanoc 4.11.5">
  </head>
  <body>
	<div id="header">
	  <h1 id="blog-title">The Jim Interpreter</h1>
	  <p id="description">A small footprint implementation of the Tcl programming language</p>
	</div>
    <div id="content">
................................................................................
			<a href="./">News</a> 
			 
		
		</div>
		<div class="main" id="news">
		
		
<div class="main" id="main">
<p class="articledate">Wednesday, 20 November 2019</p>
<h2 class="news"><a href="../articles/jim-release-0-79/">Jim Tcl version 0.79</a></h2>


<h2 id="announce-jim-tcl-version-079">ANNOUNCE: Jim Tcl version 0.79</h2>

<p>Jim Tcl 0.79 has been released and is available from:</p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<p>Find out all about Jim Tcl at <a href="http://jim.tcl.tk/">http://jim.tcl.tk/</a></p>

<h2 id="changes-since-version-078">CHANGES SINCE VERSION 0.78</h2>

<p>This release contains bug fixes plus a number of additional features.
A summary is below. See git for the full changelog.</p>

<p>Thanks to everyone who contributed to this release.</p>

<p><strong>Bugs fixed in version 0.79</strong></p>

<ul>
  <li><code>aio</code> - Fix closing stdin in bootstrap jimsh</li>
  <li><code>clock scan</code> - Unspecified filed use the current date/time</li>
  <li>Fix linenoise assertion failure on Windows</li>
  <li><code>file</code> - Improved support for trailing slashes in pathnames</li>
  <li><code>regexp</code>, <code>regsub</code> - Various fixes in UTF-8 mode</li>
  <li><code>$(...)</code> syntax now properly returns non-error codes</li>
</ul>

<p><strong>Features added in version 0.78</strong></p>

<ul>
  <li><code>file</code> - Add <code>mtimeus</code> for microsecond resolution</li>
  <li><code>file</code> - Add missing <code>split</code> subcommand</li>
  <li><code>lreplace</code> - Implement <a href="https://core.tcl-lang.org/tips/doc/trunk/tip/505.md">TIP #505</a></li>
  <li><code>aio</code> - Add dgram unix socket support</li>
  <li><code>aio</code> - Add support for <code>lock -wait</code></li>
  <li><code>aio copyto</code> - Significantly improve performance</li>
  <li><code>aio tty</code> - Allow setting echo</li>
  <li><code>signal</code> - Add <code>block</code> for blocking signals with <code>SIG_IGN</code></li>
  <li>Add built-in JSON support with the <code>json</code> extension</li>
  <li>Improve performance when indexing UTF-8 strings</li>
</ul>

<p><strong>Other changes</strong></p>

<ul>
  <li>Documentation updates to improve consistency, remove obsolete commands, add some missing commands</li>
  <li><code>exec</code> no longer forces <code>SIGPIPE</code> disposition to <code>SIG_DFL</code></li>
  <li>Update autosetup to v0.6.9 with optimised insert/delete</li>
</ul>

<p>Steve Bennett (<a href="mailto:steveb@workware.net.au">steveb@workware.net.au</a>)</p>


<a href="../articles/jim-release-0-79/#comments">Comments &gt;&gt;&gt;</a>



</div>

<div class="main" id="main">
<p class="articledate">Sunday, 01 July 2018</p>
<h2 class="news"><a href="../articles/jim-release-0-78/">Jim Tcl version 0.78</a></h2>


<h2 id="announce-jim-tcl-version-078">ANNOUNCE: Jim Tcl version 0.78</h2>

................................................................................
A summary is below. See git for the full changelog.</p>

<p>Thanks to everyone who contributed to this release.</p>

<p><strong>Bugs fixed in version 0.78</strong></p>

<ul>

  <li><code>local</code> - Fix crash when local command is deleted</li>

  <li><code>history</code> - When creating ~/.jim_history, set permissions to 0600 for security</li>

  <li><code>exec</code> - Fix windows exec with empty or unset env</li>

  <li><code>exec</code> - Fix check for <code>|</code> and <code>|&amp;</code></li>

  <li>jim.c - Fix Object leak in zlib support</li>

  <li><code>signal</code> - Restore default signal handling on interp exit</li>

  <li><code>dict</code> - Fix [dict values] with duplicate values</li>
  <li>Fix ‘/’ command, divide by zero</li>

  <li><code>expr</code> - Replace expression engine to fix a number of problems</li>

  <li><code>zlib</code> - Various fixes</li>

  <li><code>lsort -unique</code> - Fix case with no duplicates</li>

  <li><code>aio tempname</code> - Fix a crash when the template is invalid</li>
  <li>Tcl compatibility - Error on extra characters after close brace</li>
  <li>eventloop - Return from callback is not an error</li>

  <li><code>oo</code> - Fix <code>methods</code> for superclasses</li>
  <li>Various refcount and edge case fixes found by fuzz testing</li>
</ul>

<p><strong>Features added in version 0.78</strong></p>

<ul>
  <li>Add support for utf-8 wide characters</li>

  <li><code>aio</code> - Add <code>tty</code> for termios settings</li>

  <li><code>aio</code> - Add <code>sockopt</code> for <code>broadcast</code>, <code>tcp_nodelay</code>, etc.</li>
  <li>utf-8 - Update UnicodeData.txt to 9.0.0</li>
  <li>jimsh - Add support for <code>jimsh -</code></li>

  <li>jimsh - Scriptable command-line completion support via <code>tcl::autocomplete</code></li>


  <li><code>history</code> - Add autocompletion support <code>history completion &lt;cmd&gt;</code></li>

  <li>Add support for <code>-commands</code> to many commands</li>
  <li>Add pkg-config support - <code>jimtcl.pc</code></li>


  <li><code>clock</code> - Add <code>-gmt</code> option to <code>format</code> and <code>scan</code></li>


  <li><code>tree</code> - Allow nodes to be deleted</li>

  <li><code>defer</code>, <code>$jim::defer</code> - Allow scripts to run on proc exit</li>
  <li>eventloop - Support sub-millisecond timer resolution</li>
  <li>Support <code>lambda</code> even if references are disabled</li>
  <li>Performance - Improve a number of common cases through caching</li>

  <li><code>signal</code>, <code>exec</code>, <code>wait</code>, <code>pid</code>, <code>pipe</code> - Many improvements</li>
  <li>build - Support <code>--silent-rules</code>, and enable by default</li>

  <li><code>regexp</code> - Implement class shorthand escapes in brackets</li>
  <li>linenoise (<code>jimsh</code>) - Add ^Z (SUSP) support</li>
  <li>linenoise (<code>jismh</code>) - Update to support multiline mode</li>
</ul>

<p><strong>Other changes</strong></p>

<ul>

  <li><code>signal</code> - Remove the signal command from child interpreters</li>

  <li><code>os.wait</code> is now <code>wait</code></li>


  <li><code>aio ssl</code> now upgrades the current channel rather than creating a new channel</li>
  <li>Update autosetup to v0.6.8</li>
</ul>

<p>Steve Bennett (<a href="mailto:steveb@workware.net.au">steveb@workware.net.au</a>)</p>


<a href="../articles/jim-release-0-78/#comments">Comments &gt;&gt;&gt;</a>
................................................................................
<div class="main" id="main">
<p class="articledate">Sunday, 04 September 2016</p>
<h2 class="news"><a href="../articles/jim-release-0-77/">Jim Tcl version 0.77</a></h2>


<h2 id="announce-jim-tcl-version-077">ANNOUNCE: Jim Tcl version 0.77</h2>

<p>Jim Tcl 0.77 has been released and is available from:</p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<p>Find out all about Jim Tcl at <a href="http://jim.tcl.tk/">http://jim.tcl.tk/</a></p>

<h2 id="changes-since-version-076">CHANGES SINCE VERSION 0.76</h2>

................................................................................
A summary is below. See git for the full changelog.</p>

<p>Thanks to everyone who contributed to this release.</p>

<p><strong>Bugs fixed in version 0.77</strong></p>

<ul>

  <li><code>exec</code> - better handline of pipeline abnormal termination</li>

  <li><code>exec</code> - fix append redirection on Windows</li>

  <li><code>regsub</code> - fix substitution with trailing backslash</li>

  <li><code>expr</code> - improved mathfunc handling and <code>pow/**</code></li>

  <li>chained tailcalls were not always being run</li>
</ul>

<p><strong>Features added in version 0.77</strong></p>

<ul>
  <li>Add support for <code>configure --docdir=...</code></li>

  <li>Add support for <code>jimsh --help</code></li>

  <li>Add support for booleans in <code>string is</code> and expressions (true, false, on, off, yes, no)</li>

  <li><code>aio</code> - add <code>sync</code>, openssl bindings, posix locking</li>

  <li><code>expr</code> - add support for atan2, hypot and fmod</li>

  <li><code>regexp</code>, <code>regsub</code>:
    <ul>
      <li>Add support for <code>\D</code>, <code>\W</code> and <code>\S</code></li>

      <li>Add partial support for <code>\A</code>, <code>\Z</code></li>

      <li>Add support for all character classes: <code>[[::blank:]], [[::xdigit::]]</code>, etc.</li>
    </ul>
  </li>
  <li>Update included sqlite3 to v3.14.1</li>
  <li>Add <code>$tcl_platform(engine)</code></li>

  <li>Add basic (optional) <code>zlib</code> support</li>
  <li>Add <code>interp</code> child interprester support</li>

  <li><code>oo</code>:
    <ul>
      <li>Add support for constructor, runs on new object creation</li>
      <li>Add support for <code>unknown</code> method</li>
    </ul>
  </li>
  <li>Add Travis and AppVeyor continuous integration support</li>
  <li>Use <code>pkg-config</code> in <code>configure</code> to find packages if possibe</li>
................................................................................
<div class="main" id="main">
<p class="articledate">Saturday, 31 January 2015</p>
<h2 class="news"><a href="../articles/jim-release-0-76/">Jim Tcl version 0.76</a></h2>


<h2 id="announce-jim-tcl-version-076">ANNOUNCE: Jim Tcl version 0.76</h2>

<p>Jim Tcl 0.76 has been released and is available from:</p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<p>Find out all about Jim Tcl at <a href="http://jim.tcl.tk/">http://jim.tcl.tk/</a></p>

<h2 id="changes-since-version-075">CHANGES SINCE VERSION 0.75</h2>

................................................................................
A summary is below. See git for the full changelog.</p>

<p>Thanks to everyone who contributed to this release.</p>

<p><strong>Bugs fixed in version 0.76</strong></p>

<ul>

  <li><code>file</code> - fix stat file size for large files</li>

  <li><code>array</code> - avoid crash on unset variable</li>

  <li><code>exec</code>, file` - set umask before mkstemp</li>

  <li><code>file copy</code> - use binary mode when reading and writing files (Windows)</li>

  <li><code>glob</code> - work when intermediate dirs are not readable, and other fixes</li>
  <li>aio - fix conflict between onexception and writable</li>

  <li><code>namespace</code> - restore namespace import support</li>

  <li><code>alias</code> - don’t rely on internal list never shimmering</li>
  <li>Fix various minor problems reported by <a href="http://www.coverity.com">coverity</a></li>

  <li>Fix <code>info nameofexecutable</code> after <code>cd</code></li>

</ul>

<p><strong>Features added in version 0.76</strong></p>

<ul>

  <li><code>exec</code>, file - respect $TMPDIR</li>

  <li><code>aio</code> - optional argument addrvar for accept.</li>

  <li><code>string</code> - implement <code>string cat</code> (<a href="http://www.tcl.tk/cgi-bin/tct/tip/429.html">TIP #429</a>)</li>

  <li><code>file</code> - add support for <code>file link</code></li>


  <li><code>info</code> - add support for <code>info source ?filename line?</code></li>

  <li>Better script validation (e.g. missing trailing brackets)</li>
  <li>Install tcltest compatibility package</li>
</ul>

<p><strong>Compatiblity</strong></p>

<ul>
  <li>Some invalid scripts will now throw an error rather than silently executing</li>

  <li><code>glob</code> is more Tcl-compatible with respect to <code>-directory</code> and <code>-tails</code>, so may affect some scripts</li>
  <li>The output of errorInfo has changed from <code>"Runtime Error: &lt;file&gt;:&lt;line&gt;: ..."</code> to <code>"&lt;file&gt;:&lt;line&gt;: Error: ..."</code></li>

</ul>

<p>Steve Bennett (<a href="mailto:steveb@workware.net.au">steveb@workware.net.au</a>)</p>


<a href="../articles/jim-release-0-76/#comments">Comments &gt;&gt;&gt;</a>

................................................................................
<div class="main" id="main">
<p class="articledate">Thursday, 27 February 2014</p>
<h2 class="news"><a href="../articles/jim-release-0-75/">Jim Tcl version 0.75</a></h2>


<h2 id="announce-jim-tcl-version-075">ANNOUNCE: Jim Tcl version 0.75</h2>

<p>Jim Tcl 0.75 has been released and is available from:</p>

<p><a href="http://repo.or.cz/w/jimtcl.git">http://repo.or.cz/w/jimtcl.git</a> or <a href="https://github.com/msteveb/jimtcl">https://github.com/msteveb/jimtcl</a></p>

<p>Find out all about Jim Tcl at <a href="http://jim.tcl.tk/">http://jim.tcl.tk/</a></p>

<h2 id="changes-since-version-074">CHANGES SINCE VERSION 0.74</h2>

................................................................................

<p><strong>Bugs fixed in version 0.75</strong></p>

<ul>
  <li>eventloop - Correct file handler should be deleted</li>
  <li>eventloop - Fix memory management of aio event handlers</li>
  <li>local - Requires at least one argument</li>
  <li>exec - Support nulls in <code>exec</code> immediate redirection</li>
  <li>binary - More compliant with Tcl</li>
  <li>aio - Fix aio recvfrom for non-inet socket</li>
  <li>Fix <code>string tolower</code> buffer overflow for non-utf8</li>
  <li>jimsh - consider scripts with trailing backslash as unfinished</li>
  <li>Properly respect backslashes in comments</li>
  <li>Avoid infinite recursion with namespace import</li>
  <li>Fix dict/list shimmering with embedded nulls</li>
  <li>Fix <code>aio close</code> from non-global namespace</li>

  <li><code>tailcall</code> should resolve command in current namespace</li>
  <li>errors caught by <code>catch</code> shouldn`t affect later stacktrace</li>

  <li><code>tailcall</code>: properly merge tailcall frames</li>

  <li><code>exec</code>: fix reaping of detached processes</li>

  <li><code>clock</code>: handle case of format string too long</li>

  <li><code>format</code>: fix format %hd on some platforms</li>
  <li>jim.c: fix some dict/list shimmering issues</li>
</ul>

<p><strong>Features added in version 0.75</strong></p>

<ul>

  <li><code>binary</code>, <code>pack</code> and <code>unpack</code> now support floating point</li>

  <li><code>file copy</code> <code>-force</code> handles source and target as the same file</li>

  <li><code>format</code> now supports <code>%b</code> for binary conversion</li>

  <li><code>lsort</code> now supports <code>-unique</code> and <code>-real</code></li>

  <li>Add support for half-close with <code>aio close ?r|w?</code></li>

  <li>Add <code>socket pair</code> for a bidirectional pipe</li>
  <li>Add –random-hash to randomise hash tables for greater security</li>

  <li><code>dict</code> now supports <code>for</code>, <code>values</code>, <code>incr</code>, <code>append</code>, <code>lappend</code>, <code>update</code>, <code>info</code> and <code>replace</code></li>


  <li><code>file stat</code> no longer requires the variable name</li>
</ul>

<p><strong>Compatiblity</strong></p>

<ul>
  <li>The deprecated <code>case</code> command has been removed</li>
</ul>
................................................................................
this cheatsheet a handy reference.</p>

<table>
  <tbody>
    <tr>
      <td><code> </code></td>
      <td><strong>Endian</strong></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><strong>Little</strong></td>
      <td><strong>Big</strong></td>
      <td><strong>Host</strong></td>
      <td><strong>Type</strong></td>
      <td><strong>Notes</strong></td>
    </tr>
    <tr>
      <td><code>a</code></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>byte string</td>
      <td>format pads with nulls</td>
    </tr>
    <tr>
      <td><code>A</code></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>byte string</td>
      <td>format pads with spaces, scan strips trailing spaces/nulls</td>
    </tr>
    <tr>
      <td><code>b</code></td>
      <td><code>B</code></td>
      <td>&nbsp;</td>
      <td>binary digits</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><code>h</code></td>
      <td><code>H</code></td>
      <td>&nbsp;</td>
      <td>hex digits</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><code>c</code></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>8 bit integer list</td>
      <td>In other words, ASCII chars</td>
    </tr>
    <tr>
      <td><code>s</code></td>
      <td><code>S</code></td>
      <td><code>t</code></td>
      <td>16 bit integer list</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><code>i</code></td>
      <td><code>I</code></td>
      <td><code>n</code></td>
      <td>32 bit integer list</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><code>w</code></td>
      <td><code>W</code></td>
      <td><code>m</code></td>
      <td>64 bit integer list</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><code>r</code></td>
      <td><code>R</code></td>
      <td><code>f</code></td>
      <td>single prec. float list</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><code>q</code></td>
      <td><code>Q</code></td>
      <td><code>d</code></td>
      <td>double prec. float list</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><code>x</code></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>null bytes</td>
      <td>count is number of bytes</td>
    </tr>
    <tr>
      <td><code>X</code></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>move cursor back</td>
      <td>count is number of bytes to back up</td>
    </tr>
    <tr>
      <td><code>@</code></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>move cursor to location</td>
      <td>count is byte position, zero based</td>
    </tr>
  </tbody>
</table>

<p><strong>Examples</strong></p>


<pre class="sh_tcl">set bin [binary format I2sH2a* {0x123 0x456} 17 ab "testing"]

# This returns 4 (number of conversions)
binary scan $bin I2sH2a* intlist intval hexval str
</pre>

<p>Steve Bennett (<a href="mailto:steveb@workware.net.au">steveb@workware.net.au</a>)</p>


<a href="../articles/binary-cheatsheet/#comments">Comments &gt;&gt;&gt;</a>








































































































</div>

<p><a href="../articles/">See All News Articles »</a></p>

		
................................................................................
      <h2>About Jim Tcl</h2>
      <ul>
		
			
			<li class="stdlink"><a href="../">Introduction</a></li>
		
			
			<li class="stdlink"><span class="active">News</span></li>
		
			
			<li class="stdlink"><a href="../download/">Download</a></li>
		
			
			<li class="stdlink"><a href="../documentation/">Documentation</a></li>
		
................................................................................
		<li><a href="http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel">Mailing List</a></li>
		<li><a href="https://github.com/msteveb/jimtcl">Jim @ github</a></li>
		<li><a href="http://jim.tcl.tk/fossil/timeline/">Jim in fossil</a></li>
		<li><a href="http://wiki.tcl.tk/jim">Jim @ the Tcler's Wiki</a></li>
      </ul>
    </div>
	<script language="javascript">sh_highlightDocument();</script>
  

</body></html>