Tcl Library Source Code

Changes On Branch tcllib-1-20-rc
Login

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

Changes In Branch tcllib-1-20-rc Excluding Merge-Ins

This is equivalent to a diff from c230d5a347 to a198fe68f5

2019-12-01
21:55
Tcllib Release 1.20 work integrated with trunk. Release imminent. check-in: 678001e94f user: aku tags: trunk
2019-11-26
04:25
Brought RC into sync with trunk. Updated READMEs to match work on - blowfish - dns - httpd - markdown - profiler - struct::matrix - tcl::chan::halfpipe Closed-Leaf check-in: a198fe68f5 user: aku tags: release, tcllib-1-20, tcllib-1-20-rc
02:53
Integrated blowfish work. Updated local documentation. check-in: c230d5a347 user: aku tags: trunk
00:02
blowfish - blowfish - B - Tkt [d56da1abca] Extended testsuite: Added channel-based (-in) test cases where appropriate. Fixed error handling for channel processing, swallowed the error message, and state. Closed-Leaf check-in: 69558ad9d0 user: andreask tags: tkt-d56da1abca
2019-11-23
05:02
1. Integrated markdown work. Updated local documentation. 2. Reworked the collection and post processing of per-test(suite) timings added in commit [6b2f59f4e4] for faster sorting. Further fixed an issue with the collection of the per-test timings in the face of variable-field data. 3. Switching the 8.6 series from 8.6.9 to 8.6.10 for testing caused failures (hook, string::token::shell) due to changes in command name reporting (FQN in a few places where plain names were reported before). This actually looks to be a bug fix, restoring 8.5 behaviour. These testsuite issues were fixed by extending the test code used to select the expected result by core version. Added a new test utility command `byConstraint` to help with that, allowing for easy multi-way selection. check-in: b99647b031 user: aku tags: trunk
2019-11-15
23:11
Brought RC into sync with trunk. Updated READMEs to match new math work. check-in: 5be0d16961 user: aku tags: tcllib-1-20-rc

Changes to devdoc/parts/b_critcl.inc.
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
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







-
-
+
+
+









-
-
-
+
+
+








While the majority of Tcllib consists of packages written in pure Tcl
a number of packages also have [term accelerators] associated with them.

These are [syscmd critcl]-based C packages whose use will boost the
performance of the packages using them.

These accelerators are optional, and they are not installed by
default.
These accelerators are optional, and they are not built by default.
If they are built according to the instructions below then they will
also be installed as well.

[para] To build the accelerators the normally optional dependency on
       [syscmd critcl] becomes required.

[para] To build and install Tcllib with the accelerators in a
       Unix-like environment invoke:

[example {
  ./configure
  make critcl # This builds the shared library holding
              # the accelerators
  make install
  make critcl  # Builds the shared library and package holding
               # the accelerators, tcllibc
  make install # Installs all packages, including the new tcllibc.
}]

[para] The underlying tool is [file sak.tcl] in the toplevel directory
of Tcllib and the command [cmd {make critcl}] is just a wrapper around

[example {
  ./sak.tcl critcl
Changes to embedded/md/tcllib/files/devdoc/tcllib_installer.md.
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
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







-
-
+
+
+








-
-
-
+
+
+







inside it\.

## <a name='subsection5'></a>Critcl & Accelerators

While the majority of Tcllib consists of packages written in pure Tcl a number
of packages also have *accelerators* associated with them\. These are
__critcl__\-based C packages whose use will boost the performance of the
packages using them\. These accelerators are optional, and they are not installed
by default\.
packages using them\. These accelerators are optional, and they are not built by
default\. If they are built according to the instructions below then they will
also be installed as well\.

To build the accelerators the normally optional dependency on __critcl__
becomes required\.

To build and install Tcllib with the accelerators in a Unix\-like environment
invoke:

    ./configure
    make critcl # This builds the shared library holding
                # the accelerators
    make install
    make critcl  # Builds the shared library and package holding
                 # the accelerators, tcllibc
    make install # Installs all packages, including the new tcllibc.

The underlying tool is "sak\.tcl" in the toplevel directory of Tcllib and the
command __make critcl__ is just a wrapper around

    ./sak.tcl critcl

Therefore in a Windows environment instead invoke
Changes to idoc/man/files/devdoc/tcllib_installer.n.
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
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







-
-
+
+
+










-
-
-
+
+
+







.CE
inside it\&.
.SS "CRITCL & ACCELERATORS"
While the majority of Tcllib consists of packages written in pure Tcl
a number of packages also have \fIaccelerators\fR associated with them\&.
These are \fBcritcl\fR-based C packages whose use will boost the
performance of the packages using them\&.
These accelerators are optional, and they are not installed by
default\&.
These accelerators are optional, and they are not built by default\&.
If they are built according to the instructions below then they will
also be installed as well\&.
.PP
To build the accelerators the normally optional dependency on
\fBcritcl\fR becomes required\&.
.PP
To build and install Tcllib with the accelerators in a
Unix-like environment invoke:
.CS


  \&./configure
  make critcl # This builds the shared library holding
              # the accelerators
  make install
  make critcl  # Builds the shared library and package holding
               # the accelerators, tcllibc
  make install # Installs all packages, including the new tcllibc\&.

.CE
.PP
The underlying tool is "\fIsak\&.tcl\fR" in the toplevel directory
of Tcllib and the command \fBmake critcl\fR is just a wrapper around
.CS

Changes to idoc/www/tcllib/files/devdoc/tcllib_installer.html.
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
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







-
-
+
+
+






-
-
-
+
+
+







<p>inside it.</p>
</div>
<div id="subsection5" class="doctools_subsection"><h3><a name="subsection5">Critcl &amp; Accelerators</a></h3>
<p>While the majority of Tcllib consists of packages written in pure Tcl
a number of packages also have <i class="term">accelerators</i> associated with them.
These are <b class="syscmd">critcl</b>-based C packages whose use will boost the
performance of the packages using them.
These accelerators are optional, and they are not installed by
default.</p>
These accelerators are optional, and they are not built by default.
If they are built according to the instructions below then they will
also be installed as well.</p>
<p>To build the accelerators the normally optional dependency on
       <b class="syscmd">critcl</b> becomes required.</p>
<p>To build and install Tcllib with the accelerators in a
       Unix-like environment invoke:</p>
<pre class="doctools_example">
  ./configure
  make critcl # This builds the shared library holding
              # the accelerators
  make install
  make critcl  # Builds the shared library and package holding
               # the accelerators, tcllibc
  make install # Installs all packages, including the new tcllibc.
</pre>
<p>The underlying tool is &quot;<b class="file">sak.tcl</b>&quot; in the toplevel directory
of Tcllib and the command <b class="cmd">make critcl</b> is just a wrapper around</p>
<pre class="doctools_example">
  ./sak.tcl critcl
</pre>
<p>Therefore in a Windows environment instead invoke</p>
Changes to modules/0compatibility/pkgIndex.tcl.
1
2
3
4
5

6
7
8
9
10
11
12
1
2
3
4

5
6
7
8
9
10
11
12




-
+







# Compatibility wrapper for deprecated packages.
##
# Stages
# [D1] Next Release   - Noted deprecated, with redirection wrappers
# [D2] Release After  - Wrappers become Boockers, throwing error noting redirection
# [D2] Release After  - Wrappers become Blockers, throwing error noting redirection
# [D3] Release Beyond - All removed.
##
# Currently in deprecation
# - D1 doctools::path	(doctools2base)
# - D1 doctools::config	(doctools2base)
# - D1 configuration	(pt)
# - D1 paths		(pt)
Changes to modules/blowfish/blowfish.tcl.
520
521
522
523
524
525
526

527

528
529
530
531
532
533
534
520
521
522
523
524
525
526
527

528
529
530
531
532
533
534
535







+
-
+







        #puts "Chunk: reading [string len $data] bytes"
        set data $state(remainder)$data

        # If data is not a multiple of 8, state(remainder) will hold
        # excess bytes for the next round.
        set pagedlen         [expr {([string length $data] / 8) * 8}]
        set state(remainder) [string range $data $pagedlen end]
        incr pagedlen        -1
        set data             [string range $data 0 $pagedlen-1]
        set data             [string range $data 0 $pagedlen]
    }

    if {![string length $data]} return

    if {[set code [catch {
        set cipher [$state(cmd) $Key $data]
    } msg]]} {
Changes to modules/blowfish/blowfish.test.
60
61
62
63
64
65
66
67


68
69
70
71
72
73
74
60
61
62
63
64
65
66

67
68
69
70
71
72
73
74
75







-
+
+







    } msg] $msg
}

proc do-chan {data script} {
    upvar 1 in in msg msg

    set p  [makeBinaryFile $data IN]
    set in [open $p rb]
    set in [open $p r]
    fconfigure $in -translation binary -encoding binary
            
    set r [list [catch {
        uplevel 1 $script
    } msg] $msg]

    close $in
    file delete $p
Changes to modules/html/pkgIndex.tcl.
1
2

1

2

-
+
if {![package vsatisfies [package provide Tcl] 8.2]} {return}
package ifneeded html 1.4.5 [list source [file join $dir html.tcl]]
package ifneeded html 1.5 [list source [file join $dir html.tcl]]
Changes to modules/log/ChangeLog.
1
2
3

4
5
6
7
8
9
10
11

12
13
14
15
16
17
18
1
2

3
4
5
6
7
8
9
10

11
12
13
14
15
16
17
18


-
+







-
+







2018-02-20 Harald Oehlmann <[email protected]>

	* log.tcl: [RFE 19607f927b]: Add command log::logeval
	* log.tcl: [RFE 19607f927b]: Add command log::logsubst
	* log.man: to optimize expensive log message construction.
	* log.test: Bumped package version to 1.4

2013-02-01  Andreas Kupries  <[email protected]>

	*
	* Released and tagged Tcllib 1.15 ========================
	* 
	*

2012-07-09  Andreas Kupries  <aku@hephaistos>

	* logger.tcl: [Bug 3541628]: Fixed creative writing issue in
	* logger.man: logger::init. Bumped package to version 0.9.3
	* pkgIndex.tcl: Whitespace cleanup in places.

Changes to modules/log/log.man.

1
2

3
4
5
6
7
8
9
10
11
12

13
14
15
16
17
18
19
1
2

3
4
5
6
7
8
9
10
11
12

13
14
15
16
17
18
19
20
+

-
+









-
+







[vset VERSION 1.4]
[comment {-*- tcl -*- doctools manpage}]
[manpage_begin log n 1.4]
[manpage_begin log n [vset VERSION]]
[keywords log]
[keywords {log level}]
[keywords message]
[keywords {message level}]
[copyright {2001-2009 Andreas Kupries <[email protected]>}]
[moddesc   {Logging facility}]
[titledesc {Procedures to log messages of libraries and applications.}]
[category  {Programming tools}]
[require Tcl 8]
[require log [opt 1.4]]
[require log [opt [vset VERSION]]]
[description]

[para]

The [package log] package provides commands that allow libraries and
applications to selectively log information about their internal
operation and state.
Changes to modules/math/pkgIndex.tcl.
14
15
16
17
18
19
20
21

22
23
24
25
26
27
28
14
15
16
17
18
19
20

21
22
23
24
25
26
27
28







-
+







package ifneeded math::optimize          1.0.1 [list source [file join $dir optimize.tcl]]
package ifneeded math::interpolate       1.1.2 [list source [file join $dir interpolate.tcl]]
package ifneeded math::bignum            3.1.1 [list source [file join $dir bignum.tcl]]
package ifneeded math::bigfloat          1.2.2 [list source [file join $dir bigfloat.tcl]]
package ifneeded math::machineparameters 0.1   [list source [file join $dir machineparameters.tcl]]

if {![package vsatisfies [package provide Tcl] 8.5]} {return}
package ifneeded math::calculus          0.8.1 [list source [file join $dir calculus.tcl]]
package ifneeded math::calculus          0.8.2 [list source [file join $dir calculus.tcl]]
# statistics depends on linearalgebra (for multi-variate linear regression).
# statistics depends on optimize (for logistic regression).
package ifneeded math::statistics        1.5.0 [list source [file join $dir statistics.tcl]]
package ifneeded math::linearalgebra     1.1.6 [list source [file join $dir linalg.tcl]]
package ifneeded math::calculus::symdiff 1.0.1 [list source [file join $dir symdiff.tcl]]
package ifneeded math::bigfloat          2.0.2 [list source [file join $dir bigfloat2.tcl]]
package ifneeded math::numtheory         1.1.1 [list source [file join $dir numtheory.tcl]]
Changes to support/devel/sak/localdoc/localdoc.tcl.
24
25
26
27
28
29
30
31


32
33
34
35
36
37
38
24
25
26
27
28
29
30

31
32
33
34
35
36
37
38
39







-
+
+







    getpackage doctools         doctools/doctools.tcl
    getpackage doctools::toc    doctools/doctoc.tcl
    getpackage doctools::idx    doctools/docidx.tcl
    getpackage dtplite          dtplite/dtplite.tcl

    # Read installation information. Need the list of excluded
    # modules to suppress them here in the doc generation as well.
    global excluded modules apps guide
    global excluded modules apps guide distribution
    set distribution [pwd]
    source support/installation/modules.tcl

    lappend baseconfig -module tcllib
    foreach e $excluded {
	puts "Excluding $e ..."
	lappend baseconfig -exclude */modules/$e/*
    }
Changes to support/installation/actions.tcl.
1
2
3
4
5
6
7
8
9









10
11
12
13
14
15
16
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









+
+
+
+
+
+
+
+
+







# -*- tcl -*-

# This file holds the commands determining the files to install. They
# are used by the installer to actually perform the installation, and
# by 'sak' to get the per-module lists of relevant files. The
# different purposes are handled through the redefinition of the
# commands [xcopy] and [xcopyf] used by the commands here.

proc _null {args} {}

proc _all {module libdir} {
    global distribution
    xcopy \
	    [file join $distribution modules $module] \
	    [file join $libdir $module] \
	    1
    return
}

proc _tcl {module libdir} {
    global distribution
    xcopy \
	    [file join $distribution modules $module] \
	    [file join $libdir $module] \
	    0 *.tcl
Changes to support/installation/modules.tcl.
28
29
30
31
32
33
34





35
36
37
38
39
40
41
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46







+
+
+
+
+







array set guide {}

# --------------------------------------------------------------
# @@ Registration START

Exclude calendar
Exclude exif

if {[file exists [file join $distribution modules tcllibc]]} {
    #       name         pkg   doc   example
    Module  tcllibc      _all  _null  _null
}

#       name           pkg   doc   example
Module  0compatibility _tcl  _null  _null
# Wrapper packages redirecting deprecated/moved packages to their old
# implementations. See pkgIndex.tcl for more notes.

#       name         pkg   doc   example
Changes to support/installation/version.tcl.
1

2
3
4
5
6
7
8

1
2
3
4
5
6
7
8
-
+







package_version 1.19
package_version 1.20
package_name    tcllib

dist_exclude    config
dist_exclude    modules/ftp/example
dist_exclude    modules/ftpd/examples
dist_exclude    modules/stats
dist_exclude    modules/fileinput
Added support/releases/history/README-1.20.md.













































































































































































































































































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
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
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
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Overview
========

||||||
|---|---|---|---|---|
|8|new packages|in|7|modules|
|47|changed packages|in|30|modules|
|389|unchanged packages|in|115|modules|
|446|packages, total|in|131|modules, total|

Legend
======

|Change|Details|Comments|
|---|---|---|
|Major|API|__incompatible__ API changes|
|Minor|EF|Extended functionality, API|
||I|Major rewrite, but no API change|
|Patch|B|Bug fixes|
||EX|New examples|
||P|Performance enhancement|
|None|T|Testsuite changes|
||D|Documentation updates|

New in Tcllib 1.20
==================

|Module|Package|Version|Comments|
|---|---|---|---|
|clay|clay|0.8.6||
|fileutil|fileutil::paths|1|Replaces: `doctools::paths`, (pt) `paths`.|
|lazyset|lazyset|1||
|||||
|math|math::quasirandom|1.0||
||math::trig|1.0||
|||||
|practcl|practcl|0.16.3||
|struct|struct::map|1|Replaces: `doctools::config`, (pt) `configuration`.|
|textutil|textutil::patch|0.1||
||textutil::wcswidth|35.1||
|||||

Deprecations in Tcllib 1.20
===========================

Four packages are stage 1 deprecated in favor of two replacements.
All internal users of the deprecated packages have been rewritten to
use their replacements.

|Module|Package|Replacement|Deprecation stage|
|---|---|---|---|
|doctools|doctools::paths|fileutil::paths|(D1) Redirected to replacements|
|doctools|doctools::config|struct::map|(D1) Redirected to replacements|
|pt|paths|fileutil::paths|(D1) Redirected to replacements|
|pt|configuration|struct::map|(D1) Redirected to replacements|

Stage 1 (__D1__) means that:

  - The deprecated packages still exist.
  - Their implementations have changed and become wrappers around their replacements.

Future progress:

  - In the release after 1.20 the stage 1 deprecated packages will be
    moved to stage 2 (__D2__). In that stage the implementations of the
    deprecated packages will stop redirecting to their replacements,
    and throw errors instead. IOW starting with stage 2 use of the
    deprecated packages will be more strictly blocked.

  - In the release after that all stage 2 deprecated package will be
    moved to stage 3 (__D3__). In that stage the packages will be
    removed from Tcllib, causing `package require` to fail.


Changes from Tcllib 1.19 to 1.20
================================

|Module|Package|From 1.19|To 1.20|Comments|
|---|---|---|---|---|
|blowfish|blowfish|1.0.4|1.0.5|B, D, T|
|cache|cache::async|0.3|0.3.1|B, D, T|
|dns|dns|1.4|1.4.1|B, D, T|
||||||
|doctools|doctools|1.4.21|1.5.6|B|
||doctools::idx|1.0.7|1.1|EF, D, T|
||doctools::toc|1.1.6|1.2|EF, B, D, T|
||||||
|doctools2idx|doctools::idx::export|0.2|0.2.1|I, D, T|
||doctools::idx::import|0.2|0.2.1|I, D, T|
||||||
|doctools2toc|doctools::toc::export|0.2|0.2.1|I, D, T|
||doctools::toc::import|0.2|0.2.1|I, D, T|
||||||
|dtplite|dtplite|1.3|1.3.1|B, D|
|html|html|1.4.4|1.4.5|EF, B, D, T|
|http|autoproxy __(1)__|1.6|1.7|EF, B, D, T|
|httpd|httpd|4.1.0|4.3.4|I, B, D, T|
||||||
|log|log|1.3|1.4|EF, D, T|
||logger::utils|1.3|1.3.1|B, D, T|
||||||
|markdown|Markdown|1.1|1.1.1|B, T|
||||||
|math|math::calculus|0.8.2|0.8.2|D|
||math::interpolate|1.1.1|1.1.2|B|
||math::special __(1)__|0.3|0.4|EF, D, T|
||math::geometry|1.2.3|1.3.1|EF, D, T|
||math::numtheory|1.1|1.1.1|EF, D, T|
||math::statistics __(1)__|1.1.1|1.5|EF, D, T|
||||||
|mime|mime|1.6|1.6.2|B, D, T|
||smtp|1.4.5|1.5|EF, D, T|
||||||
|namespacex|namespacex|0.1|0.2|EF, I, B, D, T|
|ncgi|ncgi|1.4.3|1.4.4|B, D, T|
|oauth|oauth|1.0.1|1.0.3|B, D|
|png|png|0.2|0.3|EF, D, T|
|practcl|practcl __(2)__|0.11|0.16.3|EF, I, D|
|profiler|profiler|0.3|0.5|B, D, T|
||||||
|pt|pt::peg::export|1|1.0.1|I, D, T|
||pt::peg::import|1|1.0.1|I, D, T|
||pt::peg::op|1.0.1|1.1.0|B, I, D|
||||||
|sha1|sha1|2.0.3|2.0.4|B, D|
||sha256|1.0.3|1.0.4|B, D|
||||||
|simulation|simulation::random|0.3.1|0.4.0|EF, D, T|
||||||
|struct|struct::disjointset __(2)__|1.0|1.1|EF, I, D, T|
||struct::graph|2.4.1|2.4.3|B, D, T|
||struct::list|1.8.3|1.8.4|B, D, T|
||struct::matrix|2.0.3|2.0.4|B, D, T
||struct::record|1.2.1|1.2.2|B, D ,T|
||||||
|textutil|textutil|0.8|0.9|EF, D, T|
|uuid|uuid|1.0.5|1.0.7|B, D, T|
||||||
|virtchannel_base|tcl::chan::cat|1.0.2|1.0.3|B, D|
||tcl::chan::halfpipe|1|1.0.1|B, T|
||||||
|zip|zipfile::mkzip|1.2|1.2.1|B, D|
||||||

Notes

  1. Now requires Tcl 8.5+
  2. Now requires Tcl 8.6+

Unchanged
=========

    aes, ascii85, asn, base32, base32::core, base32::hex, base64,
    bee, bench, bench::in, bench::out::csv, bench::out::text,
    bibtex, calendar, char, cksum, clock::iso8601,
    clock::rfc2822, cmdline, comm, control,
    coroutine, coroutine::auto, counter, crc16, crc32, cron, csv,
    debug, debug::caller, debug::heartbeat, debug::timestamp, defer,
    des, dicttool, docstrip, docstrip::util, doctools::toc (v2),
    doctools::changelog, doctools::cvs, doctools::idx (v2),
    doctools::html, doctools::html::cssdefaults,
    doctools::idx::export::docidx, doctools::idx::export::html,
    doctools::idx::export::json, doctools::idx::export::nroff,
    doctools::idx::export::text, doctools::idx::export::wiki,
    doctools::idx::import::docidx, doctools::idx::import::json,
    doctools::idx::parse, doctools::idx::structure,
    doctools::msgcat, doctools::msgcat::idx::c,
    doctools::msgcat::idx::de, doctools::msgcat::idx::en,
    doctools::msgcat::idx::fr, doctools::msgcat::toc::c,
    doctools::msgcat::toc::de, doctools::msgcat::toc::en,
    doctools::msgcat::toc::fr, doctools::nroff::man_macros,
    doctools::tcl::parse, doctools::text,
    doctools::toc::export::doctoc, doctools::toc::export::html,
    doctools::toc::export::json, doctools::toc::export::nroff,
    doctools::toc::export::text, doctools::toc::export::wiki,
    doctools::toc::import::doctoc, doctools::toc::import::json,
    doctools::toc::parse, doctools::toc::structure, exif, fileutil,
    fileutil::decode, fileutil::magic::cfront,
    fileutil::magic::cgen, fileutil::magic::filetype,
    fileutil::magic::rt, fileutil::multi, fileutil::multi::op,
    fileutil::traverse, ftp, ftp::geturl, ftpd, generator, gpx,
    grammar::aycock, grammar::aycock::debug,
    grammar::aycock::runtime, grammar::fa, grammar::fa::dacceptor,
    grammar::fa::dexec, grammar::fa::op, grammar::me::cpu,
    grammar::me::cpu::core, grammar::me::cpu::gasm,
    grammar::me::tcl, grammar::me::util, grammar::peg,
    grammar::peg::interp, hook, htmlparse, http::wget, huddle,
    huddle::json, ident, imap4, inifile, interp,
    interp::delegate::method, interp::delegate::proc, ip, irc,
    javascript, jpeg, json, json::write, lambda, ldap, ldapx,
    logger, logger::appender, map::geocode::nominatim, map::slippy,
    map::slippy::cache, map::slippy::fetcher, mapproj,
    math, math::bigfloat, math::bignum, math::calculus::symdiff,
    math::complexnumbers, math::constants, math::decimal,
    math::exact, math::fourier, math::fuzzy,
    math::linearalgebra, math::machineparameters, math::optimize,
    math::PCA, math::polynomials, math::rationalfunctions,
    math::roman, md4, md5, md5crypt, multiplexer,
    nameserv, nameserv::auto, nameserv::common, nameserv::server,
    nettool, nmea, nntp, odie::processman, oo::dialect, oo::meta,
    oo::option, oo::util, otp, page::analysis::peg::emodes,
    page::analysis::peg::minimize, page::analysis::peg::reachable,
    page::analysis::peg::realizable, page::compiler::peg::mecpu,
    page::config::peg, page::gen::peg::canon, page::gen::peg::cpkg,
    page::gen::peg::hb, page::gen::peg::me, page::gen::peg::mecpu,
    page::gen::peg::ser, page::gen::tree::text, page::parse::lemon,
    page::parse::peg, page::parse::peghb, page::parse::pegser,
    page::pluginmgr, page::reader::hb, page::reader::lemon,
    page::reader::peg, page::reader::ser, page::reader::treeser,
    page::transform::mecpu, page::transform::reachable,
    page::transform::realizable, page::util::flow,
    page::util::norm::lemon, page::util::norm::peg, page::util::peg,
    page::util::quote, page::writer::hb, page::writer::identity,
    page::writer::me, page::writer::mecpu, page::writer::null,
    page::writer::peg, page::writer::ser, page::writer::tpc,
    page::writer::tree, picoirc, pki, pluginmgr, pop3, pop3d,
    pop3d::dbox, pop3d::udb, processman, pt::ast,
    pt::cparam::configuration::critcl,
    pt::cparam::configuration::tea, pt::parse::peg, pt::pe,
    pt::pe::op, pt::peg, pt::peg::container,
    pt::peg::container::peg, pt::peg::export::container,
    pt::peg::export::json, pt::peg::export::peg,
    pt::peg::from::json, pt::peg::from::peg, pt::peg::import::json,
    pt::peg::import::peg, pt::peg::interp, pt::peg::to::container,
    pt::peg::to::cparam, pt::peg::to::json, pt::peg::to::param,
    pt::peg::to::peg, pt::peg::to::tclparam, pt::pgen, pt::rde,
    pt::rde::nx, pt::rde::oo, pt::tclparam::configuration::nx,
    pt::tclparam::configuration::snit,
    pt::tclparam::configuration::tcloo, pt::util, rc4, rcs, report,
    resolv, rest, ripemd128, ripemd160, S3, SASL, SASL::NTLM,
    SASL::SCRAM, SASL::XGoogleToken, simulation::annealing,
    simulation::montecarlo, smtpd, snit, soundex, spf, stooop,
    string::token, string::token::shell, stringprep, sha1 (v1),
    stringprep::data, struct, struct::graph::op,
    struct::pool, struct::prioqueue, struct::queue, struct::set,
    struct::skiplist, struct::stack, struct::tree, sum, switched,
    tar, tcl::chan::core, tcl::chan::events, tcl::chan::facade,
    tcl::chan::fifo, tcl::chan::fifo2,
    tcl::chan::memchan, tcl::chan::null, tcl::chan::nullzero,
    tcl::chan::random, tcl::chan::std, tcl::chan::string,
    tcl::chan::textwindow, tcl::chan::variable, tcl::chan::zero,
    tcl::randomseed, tcl::transform::adler32,
    tcl::transform::base64, tcl::transform::core,
    tcl::transform::counter, tcl::transform::crc32,
    tcl::transform::hex, tcl::transform::identity,
    tcl::transform::limitsize, tcl::transform::observe,
    tcl::transform::otp, tcl::transform::rot,
    tcl::transform::spacer, tcl::transform::zlib, tclDES, tclDESjr,
    tepam, tepam::doc_gen, term, term::ansi::code,
    term::ansi::code::attr, term::ansi::code::ctrl,
    term::ansi::code::macros, term::ansi::ctrl::unix,
    term::ansi::send, term::interact::menu, term::interact::pager,
    term::receive, term::receive::bind, term::send, text::write,
    textutil::adjust, textutil::expander, textutil::repeat,
    textutil::split, textutil::string, textutil::tabify,
    textutil::trim, throw, tie, tie::std::array, tie::std::dsource,
    tie::std::file, tie::std::growfile, tie::std::log,
    tie::std::rarray, tiff, time, tool, transfer::connect,
    transfer::copy, transfer::copy::queue,
    transfer::data::destination, transfer::data::source,
    transfer::receiver, transfer::transmitter, treeql, try,
    udpcluster, uevent, uevent::onidle, unicode, unicode::data,
    units, uri, uri::urn, uuencode, valtype::common,
    valtype::creditcard::amex, valtype::creditcard::discover,
    valtype::creditcard::mastercard, valtype::creditcard::visa,
    valtype::gs1::ean13, valtype::iban, valtype::imei,
    valtype::isbn, valtype::luhn, valtype::luhn5, valtype::usnpi,
    valtype::verhoeff, websocket, wip, xsxp, yaml, yencode,
    zipfile::decode, zipfile::encode
Added support/releases/history/README-1.20.txt.












































































































































































































































































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
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
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
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Overview
========

    8   new packages       in 7   modules
    47  changed packages   in 30  modules
    389 unchanged packages in 115 modules
    446 packages, total    in 131 modules, total

Legend
======

    Change   Details   Comments
    -------- --------- ----------------------------------
    Major    API       __incompatible__ API changes
    Minor    EF        Extended functionality, API
             I         Major rewrite, but no API change
    Patch    B         Bug fixes
             EX        New examples
             P         Performance enhancement
    None     T         Testsuite changes
             D         Documentation updates
    -------- --------- ----------------------------------

New in Tcllib 1.20
==================

    Module     Package              Version       Comments
    ---------- -------------------- ------------- ----------
    clay       clay                 0.8.6
    fileutil   fileutil::paths      1             Replaces: doctools::paths, (pt) paths.
    lazyset    lazyset              1
    ---------- -------------------- ------------- ----------
    math       math::quasirandom    1.0
               math::trig           1.0
    ---------- -------------------- ------------- ----------
    practcl    practcl              0.16.3
    struct     struct::map          1             Replaces: doctools::config, (pt) configuration.
    ---------- -------------------- ------------- ----------
    textutil   textutil::patch      0.1
               textutil::wcswidth   35.1
    ---------- -------------------- ------------- ----------

Deprecations in Tcllib 1.20
===========================

Four packages are stage 1 deprecated in favor of two replacements.
All internal users of the deprecated packages have been rewritten to
use their replacements.

    Module             Package           Replacement      Deprecation stage
    ------------------ ----------------- ---------------- --------------------------------
    doctools           doctools::paths   fileutil::paths  (D1) Redirected to replacements
    doctools           doctools::config  struct::map      (D1) Redirected to replacements
    pt                 paths             fileutil::paths  (D1) Redirected to replacements
    pt                 configuration     struct::map      (D1) Redirected to replacements
    ------------------ ----------------- ---------------- --------------------------------

Stage 1 (D1) means that:

  - The deprecated packages still exist.
  - Their implementations have changed and become wrappers around their replacements.

Future progress:

  - In the release after 1.20 the stage 1 deprecated packages will be
    moved to stage 2 (D2). In that stage the implementations of the
    deprecated packages will stop redirecting to their replacements,
    and throw errors instead. IOW starting with stage 2 use of the
    deprecated packages will be more strictly blocked.

  - In the release after that all stage 2 deprecated package will be
    moved to stage 3 (D3). In that stage the packages will be removed
    from Tcllib, causing `package require` to fail.

Changes from Tcllib 1.19 to 1.20
================================

    Module             Package                 From 1.19   To 1.20   Comments
    ------------------ ----------------------- ----------- --------- ----------
    blowfish	       blowfish		       1.0.4	   1.0.5     B, D, T
    cache              cache::async            0.3         0.3.1     B, D, T
    dns		       dns		       1.4	   1.4.1     B, D, T
    ------------------ ----------------------- ----------- --------- ----------
    doctools           doctools                1.4.21      1.5.6     B
                       doctools::idx           1.0.7       1.1       EF, D, T
                       doctools::toc           1.1.6       1.2       EF, B, D, T
    ------------------ ----------------------- ----------- --------- ----------
    doctools2idx       doctools::idx::export   0.2         0.2.1     I, D, T
                       doctools::idx::import   0.2         0.2.1     I, D, T
    ------------------ ----------------------- ----------- --------- ----------
    doctools2toc       doctools::toc::export   0.2         0.2.1     I, D, T
                       doctools::toc::import   0.2         0.2.1     I, D, T
    ------------------ ----------------------- ----------- --------- ----------
    dtplite            dtplite                 1.3         1.3.1     B, D
    html               html                    1.4.4       1.4.5     EF, B, D, T
    http               autoproxy (1)           1.6         1.7       EF, B, D, T
    httpd              httpd                   4.1.0       4.3.4     I, B, D, T
    ------------------ ----------------------- ----------- --------- ----------
    log                log                     1.3         1.4       EF, D, T
                       logger::utils           1.3         1.3.1     B, D, T
    ------------------ ----------------------- ----------- --------- ----------
    markdown	       Markdown		       1.1	   1.1.1     B, T
    ------------------ ----------------------- ----------- --------- ----------
    math               math::calculus          0.8.2       0.8.2     D
                       math::interpolate       1.1.1       1.1.2     B
                       math::special (1)       0.3         0.4       EF, D, T
                       math::geometry          1.2.3       1.3.1     EF, D, T, B
                       math::numtheory         1.1         1.1.1     EF, D, T
                       math::statistics (1)    1.1.1       1.5       EF, D, T
    ------------------ ----------------------- ----------- --------- ----------
    mime               mime                    1.6         1.6.2     B, D, T
                       smtp                    1.4.5       1.5       EF, D, T
    ------------------ ----------------------- ----------- --------- ----------
    namespacex         namespacex              0.1         0.2       EF, I, B, D, T
    ncgi               ncgi                    1.4.3       1.4.4     B, D, T
    oauth              oauth                   1.0.1       1.0.3     B, D
    png                png                     0.2         0.3       EF, D, T
    practcl            practcl (2)             0.11        0.16.3    EF, I, D
    profiler           profiler                0.3         0.5       B, D, T
    ------------------ ----------------------- ----------- --------- ----------
    pt                 pt::peg::export         1           1.0.1     I, D, T
                       pt::peg::import         1           1.0.1     I, D, T
                       pt::peg::op             1.0.1       1.1.0     B, I, D
    ------------------ ----------------------- ----------- --------- ----------
    sha1               sha1                    2.0.3       2.0.4     B, D
                       sha256                  1.0.3       1.0.4     B, D
    ------------------ ----------------------- ----------- --------- ----------
    simulation         simulation::random      0.3.1       0.4.0     EF, D, T
    ------------------ ----------------------- ----------- --------- ----------
    struct             struct::disjointset (2) 1.0         1.1       EF, I, D, T
                       struct::graph           2.4.1       2.4.3     B, D, T
                       struct::list            1.8.3       1.8.4     B, D, T
		       struct::matrix	       2.0.3	   2.0.4     B, D, T
                       struct::record          1.2.1       1.2.2     B, D, T
    ------------------ ----------------------- ----------- --------- ----------
    textutil           textutil                0.8         0.9       EF, D, T
    uuid               uuid                    1.0.5       1.0.7     B, D, T
    ------------------ ----------------------- ----------- --------- ----------
    virtchannel_base   tcl::chan::cat          1.0.2       1.0.3     B, D
    		       tcl::chan::halfpipe     1	   1.0.1     B, T
    ------------------ ----------------------- ----------- --------- ----------
    zip                zipfile::mkzip          1.2         1.2.1     B, D
    ------------------ ----------------------- ----------- --------- ----------

Notes
(1) Now requires Tcl 8.5+
(2) Now requires Tcl 8.6+

Unchanged
=========

    aes, ascii85, asn, base32, base32::core, base32::hex, base64,
    bee, bench, bench::in, bench::out::csv, bench::out::text,
    bibtex, calendar, char, cksum, clock::iso8601,
    clock::rfc2822, cmdline, comm, control,
    coroutine, coroutine::auto, counter, crc16, crc32, cron, csv,
    debug, debug::caller, debug::heartbeat, debug::timestamp, defer,
    des, dicttool, docstrip, docstrip::util, doctools::toc (v2),
    doctools::changelog, doctools::cvs, doctools::idx (v2),
    doctools::html, doctools::html::cssdefaults,
    doctools::idx::export::docidx, doctools::idx::export::html,
    doctools::idx::export::json, doctools::idx::export::nroff,
    doctools::idx::export::text, doctools::idx::export::wiki,
    doctools::idx::import::docidx, doctools::idx::import::json,
    doctools::idx::parse, doctools::idx::structure,
    doctools::msgcat, doctools::msgcat::idx::c,
    doctools::msgcat::idx::de, doctools::msgcat::idx::en,
    doctools::msgcat::idx::fr, doctools::msgcat::toc::c,
    doctools::msgcat::toc::de, doctools::msgcat::toc::en,
    doctools::msgcat::toc::fr, doctools::nroff::man_macros,
    doctools::tcl::parse, doctools::text,
    doctools::toc::export::doctoc, doctools::toc::export::html,
    doctools::toc::export::json, doctools::toc::export::nroff,
    doctools::toc::export::text, doctools::toc::export::wiki,
    doctools::toc::import::doctoc, doctools::toc::import::json,
    doctools::toc::parse, doctools::toc::structure, exif, fileutil,
    fileutil::decode, fileutil::magic::cfront,
    fileutil::magic::cgen, fileutil::magic::filetype,
    fileutil::magic::rt, fileutil::multi, fileutil::multi::op,
    fileutil::traverse, ftp, ftp::geturl, ftpd, generator, gpx,
    grammar::aycock, grammar::aycock::debug,
    grammar::aycock::runtime, grammar::fa, grammar::fa::dacceptor,
    grammar::fa::dexec, grammar::fa::op, grammar::me::cpu,
    grammar::me::cpu::core, grammar::me::cpu::gasm,
    grammar::me::tcl, grammar::me::util, grammar::peg,
    grammar::peg::interp, hook, htmlparse, http::wget, huddle,
    huddle::json, ident, imap4, inifile, interp,
    interp::delegate::method, interp::delegate::proc, ip, irc,
    javascript, jpeg, json, json::write, lambda, ldap, ldapx,
    logger, logger::appender, map::geocode::nominatim, map::slippy,
    map::slippy::cache, map::slippy::fetcher, mapproj,
    math, math::bigfloat, math::bignum, math::calculus::symdiff,
    math::complexnumbers, math::constants, math::decimal,
    math::exact, math::fourier, math::fuzzy,
    math::linearalgebra, math::machineparameters, math::optimize,
    math::PCA, math::polynomials, math::rationalfunctions,
    math::roman, md4, md5, md5crypt, multiplexer,
    nameserv, nameserv::auto, nameserv::common, nameserv::server,
    nettool, nmea, nntp, odie::processman, oo::dialect, oo::meta,
    oo::option, oo::util, otp, page::analysis::peg::emodes,
    page::analysis::peg::minimize, page::analysis::peg::reachable,
    page::analysis::peg::realizable, page::compiler::peg::mecpu,
    page::config::peg, page::gen::peg::canon, page::gen::peg::cpkg,
    page::gen::peg::hb, page::gen::peg::me, page::gen::peg::mecpu,
    page::gen::peg::ser, page::gen::tree::text, page::parse::lemon,
    page::parse::peg, page::parse::peghb, page::parse::pegser,
    page::pluginmgr, page::reader::hb, page::reader::lemon,
    page::reader::peg, page::reader::ser, page::reader::treeser,
    page::transform::mecpu, page::transform::reachable,
    page::transform::realizable, page::util::flow,
    page::util::norm::lemon, page::util::norm::peg, page::util::peg,
    page::util::quote, page::writer::hb, page::writer::identity,
    page::writer::me, page::writer::mecpu, page::writer::null,
    page::writer::peg, page::writer::ser, page::writer::tpc,
    page::writer::tree, picoirc, pki, pluginmgr, pop3, pop3d,
    pop3d::dbox, pop3d::udb, processman, pt::ast,
    pt::cparam::configuration::critcl,
    pt::cparam::configuration::tea, pt::parse::peg, pt::pe,
    pt::pe::op, pt::peg, pt::peg::container,
    pt::peg::container::peg, pt::peg::export::container,
    pt::peg::export::json, pt::peg::export::peg,
    pt::peg::from::json, pt::peg::from::peg, pt::peg::import::json,
    pt::peg::import::peg, pt::peg::interp, pt::peg::to::container,
    pt::peg::to::cparam, pt::peg::to::json, pt::peg::to::param,
    pt::peg::to::peg, pt::peg::to::tclparam, pt::pgen, pt::rde,
    pt::rde::nx, pt::rde::oo, pt::tclparam::configuration::nx,
    pt::tclparam::configuration::snit,
    pt::tclparam::configuration::tcloo, pt::util, rc4, rcs, report,
    resolv, rest, ripemd128, ripemd160, S3, SASL, SASL::NTLM,
    SASL::SCRAM, SASL::XGoogleToken, simulation::annealing,
    simulation::montecarlo, smtpd, snit, soundex, spf, stooop,
    string::token, string::token::shell, stringprep, sha1 (v1),
    stringprep::data, struct, struct::graph::op,
    struct::pool, struct::prioqueue, struct::queue, struct::set,
    struct::skiplist, struct::stack, struct::tree, sum, switched,
    tar, tcl::chan::core, tcl::chan::events, tcl::chan::facade,
    tcl::chan::fifo, tcl::chan::fifo2,
    tcl::chan::memchan, tcl::chan::null, tcl::chan::nullzero,
    tcl::chan::random, tcl::chan::std, tcl::chan::string,
    tcl::chan::textwindow, tcl::chan::variable, tcl::chan::zero,
    tcl::randomseed, tcl::transform::adler32,
    tcl::transform::base64, tcl::transform::core,
    tcl::transform::counter, tcl::transform::crc32,
    tcl::transform::hex, tcl::transform::identity,
    tcl::transform::limitsize, tcl::transform::observe,
    tcl::transform::otp, tcl::transform::rot,
    tcl::transform::spacer, tcl::transform::zlib, tclDES, tclDESjr,
    tepam, tepam::doc_gen, term, term::ansi::code,
    term::ansi::code::attr, term::ansi::code::ctrl,
    term::ansi::code::macros, term::ansi::ctrl::unix,
    term::ansi::send, term::interact::menu, term::interact::pager,
    term::receive, term::receive::bind, term::send, text::write,
    textutil::adjust, textutil::expander, textutil::repeat,
    textutil::split, textutil::string, textutil::tabify,
    textutil::trim, throw, tie, tie::std::array, tie::std::dsource,
    tie::std::file, tie::std::growfile, tie::std::log,
    tie::std::rarray, tiff, time, tool, transfer::connect,
    transfer::copy, transfer::copy::queue,
    transfer::data::destination, transfer::data::source,
    transfer::receiver, transfer::transmitter, treeql, try,
    udpcluster, uevent, uevent::onidle, unicode, unicode::data,
    units, uri, uri::urn, uuencode, valtype::common,
    valtype::creditcard::amex, valtype::creditcard::discover,
    valtype::creditcard::mastercard, valtype::creditcard::visa,
    valtype::gs1::ean13, valtype::iban, valtype::imei,
    valtype::isbn, valtype::luhn, valtype::luhn5, valtype::usnpi,
    valtype::verhoeff, websocket, wip, xsxp, yaml, yencode,
    zipfile::decode, zipfile::encode