summaryrefslogtreecommitdiffstats
path: root/tcllib/support
diff options
context:
space:
mode:
authorWilliam Joye <wjoye@cfa.harvard.edu>2016-10-27 19:39:39 (GMT)
committerWilliam Joye <wjoye@cfa.harvard.edu>2016-10-27 19:39:39 (GMT)
commitea28451286d3ea4a772fa174483f9a7a66bb1ab3 (patch)
tree6ee9d8a7848333a7ceeee3b13d492e40225f8b86 /tcllib/support
parentb5ca09bae0d6a1edce939eea03594dd56383f2c8 (diff)
parent7c621da28f07e449ad90c387344f07a453927569 (diff)
downloadblt-ea28451286d3ea4a772fa174483f9a7a66bb1ab3.zip
blt-ea28451286d3ea4a772fa174483f9a7a66bb1ab3.tar.gz
blt-ea28451286d3ea4a772fa174483f9a7a66bb1ab3.tar.bz2
Merge commit '7c621da28f07e449ad90c387344f07a453927569' as 'tcllib'
Diffstat (limited to 'tcllib/support')
-rw-r--r--tcllib/support/devel/all.tcl234
-rw-r--r--tcllib/support/devel/sak/doc/cmd.tcl44
-rw-r--r--tcllib/support/devel/sak/doc/doc.tcl262
-rw-r--r--tcllib/support/devel/sak/doc/doc_auto.tcl311
-rw-r--r--tcllib/support/devel/sak/doc/help.txt42
-rw-r--r--tcllib/support/devel/sak/doc/kwic.txt3762
-rw-r--r--tcllib/support/devel/sak/doc/manpages.txt421
-rw-r--r--tcllib/support/devel/sak/doc/pkgIndex.tcl4
-rw-r--r--tcllib/support/devel/sak/doc/toc.txt1144
-rw-r--r--tcllib/support/devel/sak/doc/toc_apps.txt11
-rw-r--r--tcllib/support/devel/sak/doc/toc_cats.txt479
-rw-r--r--tcllib/support/devel/sak/doc/toc_mods.txt656
-rw-r--r--tcllib/support/devel/sak/doc/topic.txt1
-rw-r--r--tcllib/support/devel/sak/help/cmd.tcl25
-rw-r--r--tcllib/support/devel/sak/help/help.tcl75
-rw-r--r--tcllib/support/devel/sak/help/help.txt8
-rw-r--r--tcllib/support/devel/sak/help/pkgIndex.tcl4
-rw-r--r--tcllib/support/devel/sak/help/topic.txt1
-rw-r--r--tcllib/support/devel/sak/localdoc/cmd.tcl21
-rw-r--r--tcllib/support/devel/sak/localdoc/help.txt8
-rw-r--r--tcllib/support/devel/sak/localdoc/localdoc.tcl129
-rw-r--r--tcllib/support/devel/sak/localdoc/pkgIndex.tcl2
-rw-r--r--tcllib/support/devel/sak/localdoc/topic.txt2
-rw-r--r--tcllib/support/devel/sak/old/help.txt102
-rw-r--r--tcllib/support/devel/sak/old/topic.txt1
-rw-r--r--tcllib/support/devel/sak/readme/cmd.tcl25
-rw-r--r--tcllib/support/devel/sak/readme/help.txt14
-rw-r--r--tcllib/support/devel/sak/readme/pkgIndex.tcl2
-rw-r--r--tcllib/support/devel/sak/readme/readme.tcl448
-rw-r--r--tcllib/support/devel/sak/readme/topic.txt2
-rw-r--r--tcllib/support/devel/sak/registry/pkgIndex.tcl2
-rw-r--r--tcllib/support/devel/sak/registry/registry.man171
-rw-r--r--tcllib/support/devel/sak/registry/registry.tcl287
-rw-r--r--tcllib/support/devel/sak/registry/registry.test450
-rw-r--r--tcllib/support/devel/sak/review/cmd.tcl25
-rw-r--r--tcllib/support/devel/sak/review/help.txt10
-rw-r--r--tcllib/support/devel/sak/review/pkgIndex.tcl2
-rw-r--r--tcllib/support/devel/sak/review/review.tcl964
-rw-r--r--tcllib/support/devel/sak/review/topic.txt1
-rw-r--r--tcllib/support/devel/sak/test/cmd.tcl28
-rw-r--r--tcllib/support/devel/sak/test/help.txt46
-rw-r--r--tcllib/support/devel/sak/test/pkgIndex.tcl5
-rw-r--r--tcllib/support/devel/sak/test/run.tcl880
-rw-r--r--tcllib/support/devel/sak/test/shell.tcl94
-rw-r--r--tcllib/support/devel/sak/test/shells.tcl24
-rw-r--r--tcllib/support/devel/sak/test/test.tcl19
-rw-r--r--tcllib/support/devel/sak/test/topic.txt1
-rw-r--r--tcllib/support/devel/sak/util/anim.tcl64
-rw-r--r--tcllib/support/devel/sak/util/color.tcl54
-rw-r--r--tcllib/support/devel/sak/util/feedback.tcl182
-rw-r--r--tcllib/support/devel/sak/util/pkgIndex.tcl6
-rw-r--r--tcllib/support/devel/sak/util/registry.tcl59
-rw-r--r--tcllib/support/devel/sak/util/util.tcl72
-rw-r--r--tcllib/support/devel/sak/validate/cmd.tcl70
-rw-r--r--tcllib/support/devel/sak/validate/help.txt53
-rw-r--r--tcllib/support/devel/sak/validate/manpages.tcl464
-rw-r--r--tcllib/support/devel/sak/validate/pkgIndex.tcl6
-rw-r--r--tcllib/support/devel/sak/validate/syntax.tcl668
-rw-r--r--tcllib/support/devel/sak/validate/testsuites.tcl512
-rw-r--r--tcllib/support/devel/sak/validate/topic.txt1
-rw-r--r--tcllib/support/devel/sak/validate/validate.tcl37
-rw-r--r--tcllib/support/devel/sak/validate/versions.tcl258
-rw-r--r--tcllib/support/fossil-nav-integration.html91
-rw-r--r--tcllib/support/installation/actions.tcl112
-rwxr-xr-xtcllib/support/installation/main.tcl5
-rw-r--r--tcllib/support/installation/man.macros267
-rwxr-xr-xtcllib/support/installation/modules.tcl173
-rw-r--r--tcllib/support/installation/version.tcl30
-rw-r--r--tcllib/support/releases/PACKAGES424
-rw-r--r--tcllib/support/releases/history/README-1.10.txt278
-rw-r--r--tcllib/support/releases/history/README-1.11.1.txt59
-rw-r--r--tcllib/support/releases/history/README-1.11.txt274
-rw-r--r--tcllib/support/releases/history/README-1.12.txt271
-rw-r--r--tcllib/support/releases/history/README-1.13.txt272
-rw-r--r--tcllib/support/releases/history/README-1.14.txt219
-rw-r--r--tcllib/support/releases/history/README-1.15.txt220
-rw-r--r--tcllib/support/releases/history/README-1.16.txt516
-rw-r--r--tcllib/support/releases/history/README-1.17.txt315
-rw-r--r--tcllib/support/releases/history/README-1.18.txt263
-rw-r--r--tcllib/support/releases/history/README-1.4.txt99
-rw-r--r--tcllib/support/releases/history/README-1.6.1.txt47
-rw-r--r--tcllib/support/releases/history/README-1.6.txt88
-rw-r--r--tcllib/support/releases/history/README-1.7.txt141
-rw-r--r--tcllib/support/releases/history/README-1.8.txt203
-rw-r--r--tcllib/support/releases/history/README-1.9.txt164
-rw-r--r--tcllib/support/releases/package_rpm.txt57
-rw-r--r--tcllib/support/releases/package_tip55.txt9
-rw-r--r--tcllib/support/releases/package_yml.txt20
-rw-r--r--tcllib/support/shed.tcl40
89 files changed, 18412 insertions, 0 deletions
diff --git a/tcllib/support/devel/all.tcl b/tcllib/support/devel/all.tcl
new file mode 100644
index 0000000..22de15a
--- /dev/null
+++ b/tcllib/support/devel/all.tcl
@@ -0,0 +1,234 @@
+# all.tcl --
+#
+# This file contains a top-level script to run all of the Tcl
+# tests. Execute it by invoking "tclsh all.test" in this directory.
+#
+# To test a subset of the modules, invoke it by 'tclsh all.test -modules "<module list>"'
+#
+# Copyright (c) 1998-2000 by Ajuba Solutions.
+# All rights reserved.
+#
+# RCS: @(#) $Id: all.tcl,v 1.7 2009/12/08 21:00:51 andreas_kupries Exp $
+
+catch {wm withdraw .}
+
+set old_auto_path $auto_path
+
+if {[lsearch [namespace children] ::tcltest] == -1} {
+ namespace eval ::tcltest {}
+ proc ::tcltest::processCmdLineArgsAddFlagsHook {} {
+ return [list -modules]
+ }
+ proc ::tcltest::processCmdLineArgsHook {argv} {
+ array set foo $argv
+ catch {set ::modules $foo(-modules)}
+ }
+ proc ::tcltest::cleanupTestsHook {{c {}}} {
+ if { [string equal $c ""] } {
+ # Ignore calls in the master.
+ return
+ }
+
+ # When called from a slave copy the information found in the
+ # slave to here and update our own data.
+
+ # Get total/pass/skip/fail counts
+ array set foo [$c eval {array get ::tcltest::numTests}]
+ foreach index {Total Passed Skipped Failed} {
+ incr ::tcltest::numTests($index) $foo($index)
+ }
+ incr ::tcltest::numTestFiles
+
+ # Append the list of failFiles if necessary
+ set f [$c eval {
+ set ff $::tcltest::failFiles
+ if {($::tcltest::currentFailure) && \
+ ([lsearch -exact $ff $testFileName] == -1)} {
+ set res [file join $::tcllibModule $testFileName]
+ } else {
+ set res ""
+ }
+ set res
+ }] ; # {}
+ if { ![string equal $f ""] } {
+ lappend ::tcltest::failFiles $f
+ }
+
+ # Get the "skipped because" information
+ unset foo
+ array set foo [$c eval {array get ::tcltest::skippedBecause}]
+ foreach constraint [array names foo] {
+ if { ![info exists ::tcltest::skippedBecause($constraint)] } {
+ set ::tcltest::skippedBecause($constraint) $foo($constraint)
+ } else {
+ incr ::tcltest::skippedBecause($constraint) $foo($constraint)
+ }
+ }
+
+ # Clean out the state in the slave
+ $c eval {
+ foreach index {Total Passed Skipped Failed} {
+ set ::tcltest::numTests($index) 0
+ }
+ set ::tcltest::failFiles {}
+ foreach constraint [array names ::tcltest::skippedBecause] {
+ unset ::tcltest::skippedBecause($constraint)
+ }
+ }
+ }
+
+ package require tcltest
+ namespace import ::tcltest::*
+}
+
+set ::tcltest::testSingleFile false
+set ::tcltest::testsDirectory [file dirname \
+ [file dirname [file dirname [info script]]]]
+
+# We need to ensure that the testsDirectory is absolute
+if {[catch {::tcltest::normalizePath ::tcltest::testsDirectory}]} {
+ # The version of tcltest we have here does not support
+ # 'normalizePath', so we have to do this on our own.
+
+ set oldpwd [pwd]
+ catch {cd $::tcltest::testsDirectory}
+ set ::tcltest::testsDirectory [pwd]
+ cd $oldpwd
+}
+set root $::tcltest::testsDirectory
+
+proc Note {k v} {
+ puts stdout [list @@ $k $v]
+ flush stdout
+ return
+}
+proc Now {} {return [clock seconds]}
+
+puts stdout ""
+Note Host [info hostname]
+Note Platform $tcl_platform(os)-$tcl_platform(osVersion)-$tcl_platform(machine)
+Note CWD $::tcltest::testsDirectory
+Note Shell [info nameofexecutable]
+Note Tcl [info patchlevel]
+
+# Host => Platform | Identity of the Test environment.
+# Shell => Tcl |
+# CWD | Identity of the Tcllib under test.
+
+if {[llength $::tcltest::skip]} {Note SkipTests $::tcltest::skip}
+if {[llength $::tcltest::match]} {Note MatchTests $::tcltest::match}
+if {[llength $::tcltest::skipFiles]} {Note SkipFiles $::tcltest::skipFiles}
+if {[llength $::tcltest::matchFiles]} {Note MatchFiles $::tcltest::matchFiles}
+
+set auto_path $old_auto_path
+set auto_path [linsert $auto_path 0 [file join $root modules]]
+set old_apath $auto_path
+
+##
+## Take default action if the modules are not specified
+##
+
+if {![info exists modules]} then {
+ foreach module [glob [file join $root modules]/*/*.test] {
+ set tmp([lindex [file split $module] end-1]) 1
+ }
+ set modules [lsort -dict [array names tmp]]
+ unset tmp
+}
+
+Note Start [Now]
+
+foreach module $modules {
+ set ::tcltest::testsDirectory [file join $root modules $module]
+
+ if { ![file isdirectory $::tcltest::testsDirectory] } {
+ puts stdout "unknown module $module"
+ }
+
+ set auto_path $old_apath
+ set auto_path [linsert $auto_path 0 $::tcltest::testsDirectory]
+
+ # For each module, make a slave interp and source that module's
+ # tests into the slave. This isolates the test suites from one
+ # another.
+
+ Note Module [file tail $module]
+
+ set c [interp create]
+ interp alias $c pSet {} set
+ interp alias $c Note {} Note
+
+ $c eval {
+ # import the auto_path from the parent interp,
+ # so "package require" works
+
+ set ::auto_path [pSet ::auto_path]
+ set ::argv0 [pSet ::argv0]
+ set ::tcllibModule [pSet module]
+
+ # The next command allows the execution of 'tk' constrained
+ # tests, if Tk is present (for example when this code is run
+ # run by 'wish').
+
+ # Under wish 8.2/8.3 we have to explicitly load Tk into the
+ # slave, the package management is not able to.
+
+ if {![package vsatisfies [package provide Tcl] 8.4]} {
+ catch {
+ load {} Tk
+ wm withdraw .
+ }
+ } else {
+ catch {
+ package require Tk
+ wm withdraw .
+ }
+ }
+
+ package require tcltest
+
+ # Re-import, the loading of an older tcltest package reset it
+ # to the standard set of paths.
+ set ::auto_path [pSet ::auto_path]
+
+ namespace import ::tcltest::*
+ set ::tcltest::testSingleFile false
+ set ::tcltest::testsDirectory [pSet ::tcltest::testsDirectory]
+
+ # configure not present in tcltest 1.x
+ if {[catch {::tcltest::configure -verbose bstep}]} {
+ set ::tcltest::verbose psb
+ }
+ }
+
+ interp alias \
+ $c ::tcltest::cleanupTestsHook \
+ {} ::tcltest::cleanupTestsHook $c
+
+ # source each of the specified tests
+ foreach file [lsort [::tcltest::getMatchingFiles]] {
+ set tail [file tail $file]
+ Note Testsuite [string map [list "$root/" ""] $file]
+ Note StartFile [Now]
+ $c eval {
+ if {[catch {source [pSet file]} msg]} {
+ puts stdout "@+"
+ puts stdout @|[join [split $errorInfo \n] "\n@|"]
+ puts stdout "@-"
+ }
+ }
+ Note EndFile [Now]
+ }
+ interp delete $c
+ puts stdout ""
+}
+
+# cleanup
+Note End [Now]
+::tcltest::cleanupTests 1
+# FRINK: nocheck
+# Use of 'exit' ensures proper termination of the test system when
+# driven by a 'wish' instead of a 'tclsh'. Otherwise 'wish' would
+# enter its regular event loop and no tests would complete.
+exit
+
diff --git a/tcllib/support/devel/sak/doc/cmd.tcl b/tcllib/support/devel/sak/doc/cmd.tcl
new file mode 100644
index 0000000..564ac94
--- /dev/null
+++ b/tcllib/support/devel/sak/doc/cmd.tcl
@@ -0,0 +1,44 @@
+# -*- tcl -*-
+# Implementation of 'doc'.
+
+# Available variables
+# * argv - Cmdline arguments
+# * base - Location of sak.tcl = Top directory of Tcllib distribution
+# * cbase - Location of all files relevant to this command.
+# * sbase - Location of all files supporting the SAK.
+
+if {![llength $argv]} {
+ set format *
+} else {
+ set format [lindex $argv 0]*
+ set argv [lrange $argv 1 end]
+}
+
+package require sak::util
+if {![sak::util::checkModules argv]} return
+
+set matches 0
+foreach f {
+ html nroff tmml text wiki latex dvi ps pdf list validate imake ishow index
+} {
+ if {![string match $format $f]} continue
+ incr matches
+}
+if {!$matches} {
+ puts " No format matching \"$format\""
+ return
+}
+
+# ###
+
+package require sak::doc
+
+foreach f {
+ html nroff tmml text wiki latex dvi ps pdf list validate imake ishow index
+} {
+ if {![string match $format $f]} continue
+ sak::doc::$f $argv
+}
+
+##
+# ###
diff --git a/tcllib/support/devel/sak/doc/doc.tcl b/tcllib/support/devel/sak/doc/doc.tcl
new file mode 100644
index 0000000..59ab9b7
--- /dev/null
+++ b/tcllib/support/devel/sak/doc/doc.tcl
@@ -0,0 +1,262 @@
+# -*- tcl -*-
+# sak::doc - Documentation facilities
+
+package require sak::util
+package require sak::doc::auto
+
+namespace eval ::sak::doc {}
+
+# ###
+# API commands
+
+## ### ### ### ######### ######### #########
+
+proc ::sak::doc::index {modules} {
+ # The argument (= set of modules) is irrelevant to this command.
+ global base
+
+ # First locate all manpages in the CVS workspace.
+ set manpages [auto::findManpages $base]
+ auto::saveManpages $manpages
+
+ # Then scan the found pages and extract the information needed for
+ # keyword index and table of contents.
+ array set meta [auto::scanManpages $manpages]
+
+ # Sort through the extracted data.
+ array set kwic {} ; # map: keyword -> list (file...)
+ array set title {} ; # map: file -> description
+ array set cat {} ; # map: category -> list (file...)
+ array set name {} ; # map: file -> label
+ set apps {} ; # list (file...)
+ array set mods {} ; # map: module -> list(file...)
+
+ foreach page [array names meta] {
+ unset -nocomplain m
+ array set m $meta($page)
+
+ # Collect keywords and file mapping for index.
+ foreach kw $m(keywords) {
+ lappend kwic($kw) $page
+ }
+ # Get page title, relevant for display order
+ if {$m(desc) eq ""} {
+ set m(desc) $m(shortdesc)
+ }
+ set title($page) $m(desc)
+ # Get page name/title, relevant for display order.
+ set name($page) $m(title)
+ # Get page category, for sectioning and display order in the
+ # table of contents
+ if {$m(category) ne ""} {
+ set c $m(category)
+ } else {
+ set c Unfiled
+ }
+ lappend cat($c) $page
+
+ # Type of documented entity
+ set type [lindex [file split $page] 0]
+ if {$type eq "apps"} {
+ lappend apps $page
+ } else {
+ lappend mods([lindex [file split $page] 1]) $page
+ }
+ }
+
+ #parray meta
+ #parray kwic
+ #parray title
+ #parray name
+ #parray cat
+ #puts "apps = $apps"
+ #parray mods
+
+ auto::saveKeywordIndex kwic name
+ auto::saveTableOfContents title name cat apps mods
+ auto::saveSimpleTableOfContents1 title name apps toc_apps.txt
+ auto::saveSimpleTableOfContents2 title name mods toc_mods.txt
+ auto::saveSimpleTableOfContents3 title name cat toc_cats.txt
+ return
+}
+
+proc ::sak::doc::imake {modules} {
+ global base
+ # The argument (= set of modules) is irrelevant to this command.
+ auto::saveManpages [auto::findManpages $base]
+ return
+}
+
+proc ::sak::doc::ishow {modules} {
+ if {[catch {
+ set manpages [auto::loadManpages]
+ } msg]} {
+ puts stderr "Unable to use manpage listing '[auto::manpages]'\n$msg"
+ } else {
+ puts [join $manpages \n]
+ }
+ return
+}
+
+## ### ### ### ######### ######### #########
+
+proc ::sak::doc::validate {modules} {Gen null null $modules}
+proc ::sak::doc::html {modules} {Gen html html $modules}
+proc ::sak::doc::nroff {modules} {Gen nroff n $modules}
+proc ::sak::doc::tmml {modules} {Gen tmml tmml $modules}
+proc ::sak::doc::text {modules} {Gen text txt $modules}
+proc ::sak::doc::wiki {modules} {Gen wiki wiki $modules}
+proc ::sak::doc::latex {modules} {Gen latex tex $modules}
+
+proc ::sak::doc::dvi {modules} {
+ latex $modules
+ file mkdir [file join doc dvi]
+ cd [file join doc dvi]
+
+ foreach f [lsort -dict [glob -nocomplain ../latex/*.tex]] {
+
+ set target [file rootname [file tail $f]].dvi
+ if {[file exists $target]
+ && [file mtime $target] > [file mtime $f]} {
+ continue
+ }
+
+ puts "Gen (dvi): $f"
+ exec latex $f 1>@ stdout 2>@ stderr
+ }
+ cd ../..
+ return
+}
+
+proc ::sak::doc::ps {modules} {
+ dvi $modules
+ file mkdir [file join doc ps]
+ cd [file join doc ps]
+ foreach f [lsort -dict [glob -nocomplain ../dvi/*.dvi]] {
+
+ set target [file rootname [file tail $f]].ps
+ if {[file exists $target]
+ && [file mtime $target] > [file mtime $f]} {
+ continue
+ }
+
+ puts "Gen (ps): $f"
+ exec dvips -o $target $f >@ stdout 2>@ stderr
+ }
+ cd ../..
+ return
+}
+
+proc ::sak::doc::pdf {modules} {
+ dvi $modules
+ file mkdir [file join doc pdf]
+ cd [file join doc pdf]
+ foreach f [lsort -dict [glob -nocomplain ../ps/*.ps]] {
+
+ set target [file rootname [file tail $f]].pdf
+ if {[file exists $target]
+ && [file mtime $target] > [file mtime $f]} {
+ continue
+ }
+
+ puts "Gen (pdf): $f"
+ exec ps2pdf $f $target >@ stdout 2>@ stderr
+ }
+ cd ../..
+ return
+}
+
+proc ::sak::doc::list {modules} {
+ Gen list l $modules
+
+ set FILES [glob -nocomplain doc/list/*.l]
+ set LIST [open [file join doc list manpages.tcl] w]
+
+ foreach file $FILES {
+ set f [open $file r]
+ puts $LIST [read $f]
+ close $f
+ }
+ close $LIST
+
+ eval file delete -force $FILES
+ return
+}
+
+# ### ### ### ######### ######### #########
+## Implementation
+
+proc ::sak::doc::Gen {fmt ext modules} {
+ global distribution
+ global tcl_platform
+
+ getpackage doctools doctools/doctools.tcl
+
+ set null 0 ; if {![string compare $fmt null]} {set null 1}
+ set hidden 0 ; if {![string compare $fmt desc]} {set hidden 1}
+
+ if {!$null} {
+ file mkdir [file join doc $fmt]
+ set prefix "Gen ($fmt)"
+ } else {
+ set prefix "Validate "
+ }
+
+ foreach m $modules {
+ set mpath [sak::util::module2path $m]
+
+ ::doctools::new dt \
+ -format $fmt \
+ -module $m
+
+ set fl [glob -nocomplain [file join $mpath *.man]]
+
+ if {[llength $fl] == 0} {
+ dt destroy
+ continue
+ }
+
+ foreach f $fl {
+ if {!$null} {
+ set target [file join doc $fmt \
+ [file rootname [file tail $f]].$ext]
+ if {[file exists $target]
+ && [file mtime $target] > [file mtime $f]} {
+ continue
+ }
+ }
+ if {!$hidden} {puts "$prefix: $f"}
+
+ dt configure -file $f
+ if {$null} {
+ dt configure -deprecated 1
+ }
+
+ set fail [catch {
+ set data [dt format [get_input $f]]
+ } msg]
+
+ set warnings [dt warnings]
+ if {[llength $warnings] > 0} {
+ puts stderr [join $warnings \n]
+ }
+
+ if {$fail} {
+ puts stderr $msg
+ continue
+ }
+
+ if {!$null} {
+ write_out $target $data
+ }
+ }
+ dt destroy
+ }
+}
+
+# ### ### ### ######### ######### #########
+
+package provide sak::doc 1.0
+
+##
+# ###
diff --git a/tcllib/support/devel/sak/doc/doc_auto.tcl b/tcllib/support/devel/sak/doc/doc_auto.tcl
new file mode 100644
index 0000000..f04e9df
--- /dev/null
+++ b/tcllib/support/devel/sak/doc/doc_auto.tcl
@@ -0,0 +1,311 @@
+# -*- tcl -*-
+# sak::doc::auto - Documentation facilities, support for automatic
+# list of manpages, keyword index, and table of contents.
+
+package require sak::util
+
+namespace eval ::sak::doc::auto {
+ set here [file dirname [file normalize [info script]]]
+}
+
+getpackage fileutil fileutil/fileutil.tcl
+getpackage doctools doctools/doctools.tcl
+getpackage textutil::repeat textutil/repeat.tcl
+
+# ###
+# API commands
+
+proc ::sak::doc::auto::manpages {} {
+ variable here
+ return [file join $here manpages.txt]
+}
+
+proc ::sak::doc::auto::kwic {} {
+ variable here
+ return [file join $here kwic.txt]
+}
+
+proc ::sak::doc::auto::toc {{name toc.txt}} {
+ variable here
+ return [file join $here $name]
+}
+
+## ### ### ### ######### ######### #########
+
+proc ::sak::doc::auto::findManpages {base} {
+ set top [file normalize $base]
+ set manpages {}
+ foreach page [concat \
+ [glob -nocomplain -directory $top/modules */*.man] \
+ [glob -nocomplain -directory $top/apps *.man]] {
+ lappend manpages [fileutil::stripPath $top $page]
+ }
+ return [lsort -dict $manpages]
+}
+
+proc ::sak::doc::auto::saveManpages {manpages} {
+ fileutil::writeFile [manpages] [join [lsort -dict $manpages] \n]\n
+ return
+}
+
+proc ::sak::doc::auto::loadManpages {} {
+ return [lsort -dict [split [fileutil::cat [manpages]] \n]]
+}
+
+## ### ### ### ######### ######### #########
+
+proc ::sak::doc::auto::scanManpages {manpages} {
+ ::doctools::new dt -format list
+ set data {}
+ puts Scanning...
+ foreach page $manpages {
+ puts ...$page
+ if {![file size $page]} { puts "\tEMPTY, IGNORED" ; continue }
+ dt configure -ibase $page
+ lappend data $page [lindex [dt format [fileutil::cat $page]] 1]
+ }
+
+ dt destroy
+ return $data
+}
+
+## ### ### ### ######### ######### #########
+
+proc ::sak::doc::auto::saveKeywordIndex {kv nv} {
+ upvar 1 $kv kwic $nv name
+ # kwic: keyword -> list (files)
+ # name: file -> label
+
+ TagsBegin
+ Tag+ index_begin [list {Keyword Index} {}]
+
+ # Handle the keywords in dictionary order for nice display.
+ foreach kw [lsort -dict [array names kwic]] {
+ set tmp [Sortable $kwic($kw) name max _]
+
+ Tag+ key [list $kw]
+ foreach item [lsort -dict -index 0 $tmp] {
+ foreach {label file} $item break
+ Tag+ manpage [FmtR max $file] [list $label]
+ }
+ }
+
+ Tag+ index_end
+
+ fileutil::writeFile [kwic] [join $lines \n]
+ return
+}
+
+## ### ### ### ######### ######### #########
+
+proc ::sak::doc::auto::saveTableOfContents {tv nv cv av mv} {
+ upvar 1 $tv title $nv name $cv cat $av apps $mv mods
+ # title: file -> description
+ # name: file -> label
+ # cat: category -> list (file...)
+
+ TagsBegin
+ Tag+ toc_begin [list {Table Of Contents} {}]
+
+ # The man pages are sorted in several ways for the toc.
+ # 1. First section by category. Subsections are categories.
+ # Sorted by category name, in dictionary order.
+ # Inside the subsections the files, sorted by label and
+ # description.
+ # 2. Second section for types. Subsections are modules and apps.
+ # Apps first, then modules. For apps items directly, sorted
+ # by name and description. For modules one sub-subsection
+ # per module, elements the packages, sorted by label and
+ # description.
+
+ Tag+ division_start [list {By Categories}]
+ foreach c [lsort -dict [array names cat]] {
+ Tag+ division_start [list $c]
+ foreach item [lsort -dict -index 0 [Sortable $cat($c) name maxf maxl]] {
+ foreach {label file} $item break
+ Tag+ item \
+ [FmtR maxf $file] \
+ [FmtR maxl $label] \
+ [list $title($file)]
+ }
+ Tag+ division_end
+ }
+ Tag+ division_end
+
+ Tag+ division_start [list {By Type}]
+ # Not handled: 'no applications'
+ Tag+ division_start [list {Applications}]
+ foreach item [lsort -dict -index 0 [Sortable $apps name maxf maxl]] {
+ foreach {label file} $item break
+ Tag+ item \
+ [FmtR maxf $file] \
+ [FmtR maxl $label] \
+ [list $title($file)]
+ }
+ Tag+ division_end
+ # Not handled: 'no modules'
+ Tag+ division_start [list {Modules}]
+ foreach m [lsort -dict [array names mods]] {
+ Tag+ division_start [list $m]
+ foreach item [lsort -dict -index 0 [Sortable $mods($m) name maxf maxl]] {
+ foreach {label file} $item break
+ Tag+ item \
+ [FmtR maxf $file] \
+ [FmtR maxl $label] \
+ [list $title($file)]
+ }
+ Tag+ division_end
+ }
+ Tag+ division_end
+ Tag+ division_end
+ Tag+ toc_end
+
+ fileutil::writeFile [toc] [join $lines \n]
+ return
+}
+
+proc ::sak::doc::auto::saveSimpleTableOfContents1 {tv nv dv fname} {
+ upvar 1 $tv title $nv name $dv data
+ # title: file -> description
+ # name: file -> label
+ # data: list(file...)
+
+ TagsBegin
+ Tag+ toc_begin [list {Table Of Contents} {}]
+
+ # The man pages are sorted in several ways for the toc.
+ # Subsections are the modules or apps, whatever is in data.
+
+ # Not handled: 'no applications'
+ Tag+ division_start [list {Applications}]
+ foreach item [lsort -dict -index 0 [Sortable $data name maxf maxl]] {
+ foreach {label file} $item break
+ Tag+ item \
+ [FmtR maxf $file] \
+ [FmtR maxl $label] \
+ [list $title($file)]
+ }
+ Tag+ division_end
+ Tag+ toc_end
+
+ fileutil::writeFile [toc $fname] [join $lines \n]
+ return
+}
+
+proc ::sak::doc::auto::saveSimpleTableOfContents2 {tv nv dv fname} {
+ upvar 1 $tv title $nv name $dv data
+ # title: file -> description
+ # name: file -> label
+ # data: module -> list (file...)
+
+ TagsBegin
+ Tag+ toc_begin [list {Table Of Contents} {}]
+
+ # The man pages are sorted in several ways for the toc.
+ # Subsections are the modules or apps, whatever is in data.
+
+ # Not handled: 'no modules'
+ Tag+ division_start [list {Modules}]
+ foreach m [lsort -dict [array names data]] {
+ Tag+ division_start [list $m]
+ foreach item [lsort -dict -index 0 [Sortable $data($m) name maxf maxl]] {
+ foreach {label file} $item break
+ Tag+ item \
+ [FmtR maxf $file] \
+ [FmtR maxl $label] \
+ [list $title($file)]
+ }
+ Tag+ division_end
+ }
+ Tag+ division_end
+ Tag+ toc_end
+
+ fileutil::writeFile [toc $fname] [join $lines \n]
+ return
+}
+
+proc ::sak::doc::auto::saveSimpleTableOfContents3 {tv nv cv fname} {
+ upvar 1 $tv title $nv name $cv cat
+ # title: file -> description
+ # name: file -> label
+ # cat: category -> list (file...)
+
+ TagsBegin
+ Tag+ toc_begin [list {Table Of Contents} {}]
+
+ Tag+ division_start [list {By Categories}]
+ foreach c [lsort -dict [array names cat]] {
+ Tag+ division_start [list $c]
+ foreach item [lsort -dict -index 0 [Sortable $cat($c) name maxf maxl]] {
+ foreach {label file} $item break
+ Tag+ item \
+ [FmtR maxf $file] \
+ [FmtR maxl $label] \
+ [list $title($file)]
+ }
+ Tag+ division_end
+ }
+ Tag+ division_end
+ Tag+ toc_end
+
+ fileutil::writeFile [toc $fname] [join $lines \n]
+ return
+}
+
+proc ::sak::doc::auto::Sortable {files nv mfv mnv} {
+ upvar 1 $nv name $mfv maxf $mnv maxn
+ # Generate a list of files sortable by name, and also find the
+ # max length of all relevant names.
+ set maxf 0
+ set maxn 0
+ set tmp {}
+ foreach file $files {
+ lappend tmp [list $name($file) $file]
+ Max maxf $file
+ Max maxn $name($file)
+ }
+ return $tmp
+}
+
+## ### ### ### ######### ######### #########
+
+proc ::sak::doc::auto::Max {v str} {
+ upvar 1 $v max
+ set x [string length $str]
+ if {$x <= $max} return
+ set max $x
+ return
+}
+
+proc ::sak::doc::auto::FmtR {v str} {
+ upvar 1 $v max
+ return [list $str][textutil::repeat::blank \
+ [expr {$max - [string length [list $str]]}]]
+}
+
+## ### ### ### ######### ######### #########
+
+proc ::sak::doc::auto::Tag {n args} {
+ if {[llength $args]} {
+ return "\[$n [join $args]\]"
+ } else {
+ return "\[$n\]"
+ }
+ #return \[[linsert $args 0 $n]\]
+}
+
+proc ::sak::doc::auto::Tag+ {n args} {
+ upvar 1 lines lines
+ lappend lines [eval [linsert $args 0 ::sak::doc::auto::Tag $n]]
+ return
+}
+
+proc ::sak::doc::auto::TagsBegin {} {
+ upvar 1 lines lines
+ set lines {}
+ return
+}
+
+## ### ### ### ######### ######### #########
+
+package provide sak::doc::auto 1.0
diff --git a/tcllib/support/devel/sak/doc/help.txt b/tcllib/support/devel/sak/doc/help.txt
new file mode 100644
index 0000000..015d1f0
--- /dev/null
+++ b/tcllib/support/devel/sak/doc/help.txt
@@ -0,0 +1,42 @@
+
+ doc -- Generate and/or validate documentation
+
+ sak doc ?format? ?module...?
+
+ Convert the documentation for the specified module into the
+ given format. Modules can be specified by their plain name, or
+ as relative path.
+
+ The special format 'validate' causes the tool to syntax check
+ of the input without generating actual output. When output is
+ generated it is written into the sub-directory 'doc'/format of
+ the current working directory.
+
+ The special format 'imake' scans the checkout for manpages and
+ saves the list of found files into a file in the support
+ directory. This files will be put into CVS. The special format
+ 'ishow' will dump the contents of this list to stdout. Both
+ have been added to make it easy to verify that a checkout has
+ all manpages it should have. These two formats ignore any
+ module information they are given.
+
+ The format is actually a glob and output is generated for all
+ known formats matching it. It is implicitly padded with a * to
+ allow the use of prefixes.
+
+ The known output formats (beyond 'validate') are
+
+ - dvi See latex, + conversion to dvi (via 'latex' application)
+ - html HTML pages
+ - latex LaTeX pages
+ - list A list of manpages
+ - nroff Manpages
+ - ps See dvi, + conversion to PostScript (via 'dvips' application)
+ - pdf See ps, + conversion to PDF (via 'ps2pdf' application)
+ - text Plain text
+ - tmml TMML (Tcl Manpage Markup Language)
+ - wiki Wiki markup (Tcler's Wiki)
+
+ - validate Validate syntax, no output
+ - imake Make list of all manpages and save in checkout, no output.
+ - ishow Print list of manpages saved in checkout to stdout.
diff --git a/tcllib/support/devel/sak/doc/kwic.txt b/tcllib/support/devel/sak/doc/kwic.txt
new file mode 100644
index 0000000..2dc3f98
--- /dev/null
+++ b/tcllib/support/devel/sak/doc/kwic.txt
@@ -0,0 +1,3762 @@
+[index_begin {Keyword Index} {}]
+[key .ddt]
+[manpage modules/docstrip/docstrip_util.man docstrip_util]
+[key .dtx]
+[manpage modules/docstrip/docstrip.man docstrip]
+[manpage modules/docstrip/docstrip_util.man docstrip_util]
+[manpage apps/tcldocstrip.man tcldocstrip]
+[key /dev/null]
+[manpage modules/virtchannel_base/tcllib_null.man tcl::chan::null]
+[manpage modules/virtchannel_base/nullzero.man tcl::chan::nullzero]
+[key /dev/random]
+[manpage modules/virtchannel_base/tcllib_random.man tcl::chan::random]
+[manpage modules/virtchannel_base/randseed.man tcl::randomseed]
+[key /dev/zero]
+[manpage modules/virtchannel_base/nullzero.man tcl::chan::nullzero]
+[manpage modules/virtchannel_base/tcllib_zero.man tcl::chan::zero]
+[key 3DES]
+[manpage modules/des/des.man des]
+[manpage modules/des/tcldes.man tcldes]
+[manpage modules/des/tcldesjr.man tcldes]
+[key {abstract syntax tree}]
+[manpage modules/grammar_me/me_util.man grammar::me::util]
+[manpage modules/grammar_me/me_ast.man grammar::me_ast]
+[key acceptance]
+[manpage modules/grammar_fa/dacceptor.man grammar::fa::dacceptor]
+[key acceptor]
+[manpage modules/grammar_fa/dacceptor.man grammar::fa::dacceptor]
+[key active]
+[manpage modules/transfer/connect.man transfer::connect]
+[key adaptors]
+[manpage modules/snit/snit.man snit]
+[manpage modules/snit/snitfaq.man snitfaq]
+[key {adjacency list}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key {adjacency matrix}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key adjacent]
+[manpage modules/struct/graph.man struct::graph]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key adjusting]
+[manpage modules/textutil/adjust.man textutil::adjust]
+[key adler32]
+[manpage modules/virtchannel_transform/adler32.man tcl::transform::adler32]
+[key aes]
+[manpage modules/aes/aes.man aes]
+[key after]
+[manpage modules/coroutine/tcllib_coroutine.man coroutine]
+[manpage modules/coroutine/coro_auto.man coroutine::auto]
+[key alias]
+[manpage modules/interp/tcllib_interp.man interp]
+[key amazon]
+[manpage modules/amazon-s3/S3.man S3]
+[key ambiguous]
+[manpage modules/grammar_aycock/aycock.man grammar::aycock]
+[key {American Express}]
+[manpage modules/valtype/cc_amex.man valtype::creditcard::amex]
+[key AMEX]
+[manpage modules/valtype/cc_amex.man valtype::creditcard::amex]
+[key angle]
+[manpage modules/math/math_geometry.man math::geometry]
+[manpage modules/units/units.man units]
+[key {anonymous procedure}]
+[manpage modules/lambda/lambda.man lambda]
+[key ansi]
+[manpage modules/term/ansi_cattr.man term::ansi::code::attr]
+[manpage modules/term/ansi_cctrl.man term::ansi::code::ctrl]
+[manpage modules/term/ansi_cmacros.man term::ansi::code::macros]
+[manpage modules/term/ansi_ctrlu.man term::ansi::ctrl::unix]
+[key appender]
+[manpage modules/log/loggerAppender.man logger::appender]
+[manpage modules/log/loggerUtils.man logger::utils]
+[key application]
+[manpage apps/nns.man nns]
+[manpage apps/nnsd.man nnsd]
+[manpage apps/nnslog.man nnslog]
+[key {approximation algorithm}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key arc]
+[manpage modules/struct/graph.man struct::graph]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key arcfour]
+[manpage modules/rc4/rc4.man rc4]
+[key archive]
+[manpage modules/tar/tar.man tar]
+[key {argument integrity}]
+[manpage modules/tepam/tepam_introduction.man tepam]
+[manpage modules/tepam/tepam_procedure.man tepam::procedure]
+[key {argument processing}]
+[manpage modules/cmdline/cmdline.man cmdline]
+[key {argument validation}]
+[manpage modules/tepam/tepam_introduction.man tepam]
+[manpage modules/tepam/tepam_procedure.man tepam::procedure]
+[key arguments]
+[manpage modules/tepam/tepam_introduction.man tepam]
+[manpage modules/tepam/tepam_procedure.man tepam::procedure]
+[key argv]
+[manpage modules/cmdline/cmdline.man cmdline]
+[key argv0]
+[manpage modules/cmdline/cmdline.man cmdline]
+[key array]
+[manpage modules/tie/tie.man tie]
+[manpage modules/tie/tie_std.man tie]
+[key {articulation point}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key ascii85]
+[manpage modules/base64/ascii85.man ascii85]
+[key asn]
+[manpage modules/asn/asn.man asn]
+[key assembler]
+[manpage modules/grammar_me/gasm.man grammar::me::cpu::gasm]
+[key assert]
+[manpage modules/control/control.man control]
+[key assign]
+[manpage modules/struct/struct_list.man struct::list]
+[key AST]
+[manpage modules/grammar_me/me_ast.man grammar::me_ast]
+[key asynchronous]
+[manpage modules/cache/async.man cache::async]
+[key {attribute control}]
+[manpage modules/term/ansi_cattr.man term::ansi::code::attr]
+[manpage modules/term/ansi_cctrl.man term::ansi::code::ctrl]
+[key {augmenting network}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key {augmenting path}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key authentication]
+[manpage modules/http/autoproxy.man autoproxy]
+[manpage modules/sasl/sasl.man SASL]
+[manpage modules/sasl/ntlm.man SASL::NTLM]
+[manpage modules/sasl/scram.man SASL::SCRAM]
+[manpage modules/sasl/gtoken.man SASL::XGoogleToken]
+[key automatic]
+[manpage modules/nns/nns_auto.man nameserv::auto]
+[key {automatic documentation}]
+[manpage modules/tepam/tepam_doc_gen.man tepam::doc_gen]
+[key automaton]
+[manpage modules/grammar_fa/fa.man grammar::fa]
+[manpage modules/grammar_fa/dacceptor.man grammar::fa::dacceptor]
+[manpage modules/grammar_fa/dexec.man grammar::fa::dexec]
+[manpage modules/grammar_fa/faop.man grammar::fa::op]
+[key aycock]
+[manpage modules/grammar_aycock/aycock.man grammar::aycock]
+[key bank]
+[manpage modules/valtype/cc_amex.man valtype::creditcard::amex]
+[manpage modules/valtype/cc_discover.man valtype::creditcard::discover]
+[manpage modules/valtype/cc_mastercard.man valtype::creditcard::mastercard]
+[manpage modules/valtype/cc_visa.man valtype::creditcard::visa]
+[manpage modules/valtype/iban.man valtype::iban]
+[key base32]
+[manpage modules/base32/base32.man base32]
+[manpage modules/base32/base32core.man base32::core]
+[manpage modules/base32/base32hex.man base32::hex]
+[key base64]
+[manpage modules/base64/base64.man base64]
+[manpage modules/virtchannel_transform/vt_base64.man tcl::transform::base64]
+[key bash]
+[manpage modules/string/token_shell.man string::token::shell]
+[key bee]
+[manpage modules/bee/bee.man bee]
+[key {bench language}]
+[manpage modules/bench/bench_intro.man bench_intro]
+[manpage modules/bench/bench_lang_intro.man bench_lang_intro]
+[manpage modules/bench/bench_lang_spec.man bench_lang_spec]
+[key benchmark]
+[manpage modules/bench/bench.man bench]
+[manpage modules/bench/bench_read.man bench::in]
+[manpage modules/bench/bench_wcsv.man bench::out::csv]
+[manpage modules/bench/bench_wtext.man bench::out::text]
+[manpage modules/bench/bench_intro.man bench_intro]
+[manpage modules/bench/bench_lang_intro.man bench_lang_intro]
+[manpage modules/bench/bench_lang_spec.man bench_lang_spec]
+[key ber]
+[manpage modules/asn/asn.man asn]
+[key {Bessel functions}]
+[manpage modules/math/special.man math::special]
+[key bfs]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key bibliography]
+[manpage modules/bibtex/bibtex.man bibtex]
+[key bibtex]
+[manpage modules/bibtex/bibtex.man bibtex]
+[key bignums]
+[manpage modules/math/bignum.man math::bignum]
+[key bind]
+[manpage modules/uev/uevent.man uevent]
+[key bipartite]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key BitTorrent]
+[manpage modules/bee/bee.man bee]
+[key bittorrent]
+[manpage modules/bee/bee.man bee]
+[key blanks]
+[manpage modules/textutil/repeat.man textutil::repeat]
+[key {block cipher}]
+[manpage modules/aes/aes.man aes]
+[manpage modules/blowfish/blowfish.man blowfish]
+[manpage modules/des/des.man des]
+[manpage modules/des/tcldes.man tcldes]
+[manpage modules/des/tcldesjr.man tcldes]
+[key {blocking flow}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key blowfish]
+[manpage modules/blowfish/blowfish.man blowfish]
+[key {Book Number}]
+[manpage modules/valtype/isbn.man valtype::isbn]
+[key breadth-first]
+[manpage modules/struct/struct_tree.man struct::tree]
+[key bridge]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key BWidget]
+[manpage modules/snit/snit.man snit]
+[manpage modules/snit/snitfaq.man snitfaq]
+[key C]
+[manpage modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c]
+[manpage modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c]
+[key C++]
+[manpage modules/snit/snit.man snit]
+[manpage modules/snit/snitfaq.man snitfaq]
+[manpage modules/stooop/stooop.man stooop]
+[manpage modules/stooop/switched.man switched]
+[key cache]
+[manpage modules/cache/async.man cache::async]
+[manpage modules/map/map_slippy_cache.man map::slippy::cache]
+[key {caesar cipher}]
+[manpage modules/virtchannel_transform/rot.man tcl::transform::rot]
+[key calculus]
+[manpage modules/math/calculus.man math::calculus]
+[key callback]
+[manpage modules/cache/async.man cache::async]
+[manpage modules/hook/hook.man hook]
+[manpage modules/lambda/lambda.man lambda]
+[manpage modules/ooutil/ooutil.man oo::util]
+[manpage modules/tool/meta.man oo::util]
+[manpage modules/uev/uevent_onidle.man uevent::onidle]
+[key callbacks]
+[manpage modules/virtchannel_base/halfpipe.man tcl::chan::halfpipe]
+[key capitalize]
+[manpage modules/textutil/textutil_string.man textutil::string]
+[key {card for credit}]
+[manpage modules/valtype/cc_amex.man valtype::creditcard::amex]
+[manpage modules/valtype/cc_discover.man valtype::creditcard::discover]
+[manpage modules/valtype/cc_mastercard.man valtype::creditcard::mastercard]
+[manpage modules/valtype/cc_visa.man valtype::creditcard::visa]
+[key cardinality]
+[manpage modules/struct/struct_set.man struct::set]
+[key cat]
+[manpage modules/fileutil/fileutil.man fileutil]
+[key {catalog package}]
+[manpage modules/doctools2base/tcllib_msgcat.man doctools::msgcat]
+[manpage modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c]
+[manpage modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de]
+[manpage modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en]
+[manpage modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr]
+[manpage modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c]
+[manpage modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de]
+[manpage modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en]
+[manpage modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr]
+[key catalogue]
+[manpage modules/docstrip/docstrip_util.man docstrip_util]
+[key cell-phone]
+[manpage modules/valtype/imei.man valtype::imei]
+[key cer]
+[manpage modules/asn/asn.man asn]
+[key CFG]
+[manpage modules/grammar_me/me_intro.man grammar::me_intro]
+[key CFL]
+[manpage modules/grammar_me/me_intro.man grammar::me_intro]
+[key CGI]
+[manpage modules/ncgi/ncgi.man ncgi]
+[key cgraph]
+[manpage modules/struct/graph.man struct::graph]
+[manpage modules/struct/graph1.man struct::graph_v1]
+[key changelog]
+[manpage modules/doctools/changelog.man doctools::changelog]
+[manpage modules/doctools/cvs.man doctools::cvs]
+[key channel]
+[manpage modules/coroutine/tcllib_coroutine.man coroutine]
+[manpage modules/coroutine/coro_auto.man coroutine::auto]
+[manpage modules/transfer/connect.man transfer::connect]
+[manpage modules/transfer/copyops.man transfer::copy]
+[manpage modules/transfer/tqueue.man transfer::copy::queue]
+[manpage modules/transfer/ddest.man transfer::data::destination]
+[manpage modules/transfer/dsource.man transfer::data::source]
+[manpage modules/transfer/receiver.man transfer::receiver]
+[manpage modules/transfer/transmitter.man transfer::transmitter]
+[key {channel transformation}]
+[manpage modules/virtchannel_transform/adler32.man tcl::transform::adler32]
+[manpage modules/virtchannel_transform/vt_base64.man tcl::transform::base64]
+[manpage modules/virtchannel_transform/vt_counter.man tcl::transform::counter]
+[manpage modules/virtchannel_transform/vt_crc32.man tcl::transform::crc32]
+[manpage modules/virtchannel_transform/hex.man tcl::transform::hex]
+[manpage modules/virtchannel_transform/identity.man tcl::transform::identity]
+[manpage modules/virtchannel_transform/limitsize.man tcl::transform::limitsize]
+[manpage modules/virtchannel_transform/observe.man tcl::transform::observe]
+[manpage modules/virtchannel_transform/vt_otp.man tcl::transform::otp]
+[manpage modules/virtchannel_transform/rot.man tcl::transform::rot]
+[manpage modules/virtchannel_transform/spacer.man tcl::transform::spacer]
+[manpage modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib]
+[key {character input}]
+[manpage modules/term/receive.man term::receive]
+[manpage modules/term/term_bind.man term::receive::bind]
+[key {character output}]
+[manpage modules/term/ansi_send.man term::ansi::send]
+[manpage modules/term/term_send.man term::send]
+[key chat]
+[manpage modules/irc/irc.man irc]
+[manpage modules/multiplexer/multiplexer.man multiplexer]
+[manpage modules/irc/picoirc.man picoirc]
+[key checkbox]
+[manpage modules/html/html.man html]
+[manpage modules/javascript/javascript.man javascript]
+[key checkbutton]
+[manpage modules/html/html.man html]
+[key Checking]
+[manpage modules/valtype/valtype_common.man valtype::common]
+[manpage modules/valtype/cc_amex.man valtype::creditcard::amex]
+[manpage modules/valtype/cc_discover.man valtype::creditcard::discover]
+[manpage modules/valtype/cc_mastercard.man valtype::creditcard::mastercard]
+[manpage modules/valtype/cc_visa.man valtype::creditcard::visa]
+[manpage modules/valtype/ean13.man valtype::gs1::ean13]
+[manpage modules/valtype/iban.man valtype::iban]
+[manpage modules/valtype/imei.man valtype::imei]
+[manpage modules/valtype/isbn.man valtype::isbn]
+[manpage modules/valtype/luhn.man valtype::luhn]
+[manpage modules/valtype/luhn5.man valtype::luhn5]
+[manpage modules/valtype/usnpi.man valtype::usnpi]
+[manpage modules/valtype/verhoeff.man valtype::verhoeff]
+[key checksum]
+[manpage modules/crc/cksum.man cksum]
+[manpage modules/crc/crc16.man crc16]
+[manpage modules/crc/crc32.man crc32]
+[manpage modules/crc/sum.man sum]
+[manpage modules/virtchannel_transform/adler32.man tcl::transform::adler32]
+[manpage modules/virtchannel_transform/vt_crc32.man tcl::transform::crc32]
+[key chop]
+[manpage modules/textutil/textutil_string.man textutil::string]
+[key cipher]
+[manpage modules/pki/pki.man pki]
+[manpage modules/virtchannel_transform/vt_otp.man tcl::transform::otp]
+[manpage modules/virtchannel_transform/rot.man tcl::transform::rot]
+[key cksum]
+[manpage modules/crc/cksum.man cksum]
+[manpage modules/crc/crc16.man crc16]
+[manpage modules/crc/crc32.man crc32]
+[manpage modules/crc/sum.man sum]
+[key class]
+[manpage modules/snit/snit.man snit]
+[manpage modules/snit/snitfaq.man snitfaq]
+[manpage modules/stooop/stooop.man stooop]
+[manpage modules/stooop/switched.man switched]
+[key {class methods}]
+[manpage modules/ooutil/ooutil.man oo::util]
+[manpage modules/tool/meta.man oo::util]
+[key {class variables}]
+[manpage modules/ooutil/ooutil.man oo::util]
+[manpage modules/tool/meta.man oo::util]
+[key cleanup]
+[manpage modules/try/tcllib_try.man try]
+[key client]
+[manpage modules/nns/nns_client.man nameserv]
+[manpage modules/nns/nns_auto.man nameserv::auto]
+[manpage modules/nns/nns_common.man nameserv::common]
+[manpage apps/nns.man nns]
+[manpage modules/nns/nns_intro.man nns_intro]
+[manpage apps/nnslog.man nnslog]
+[key cloud]
+[manpage modules/amazon-s3/S3.man S3]
+[key {cmdline processing}]
+[manpage modules/cmdline/cmdline.man cmdline]
+[key {color control}]
+[manpage modules/term/ansi_cattr.man term::ansi::code::attr]
+[manpage modules/term/ansi_cctrl.man term::ansi::code::ctrl]
+[key columns]
+[manpage modules/term/ansi_ctrlu.man term::ansi::ctrl::unix]
+[key comm]
+[manpage modules/comm/comm.man comm]
+[manpage modules/comm/comm_wire.man comm_wire]
+[manpage modules/interp/deleg_method.man deleg_method]
+[manpage modules/interp/deleg_proc.man deleg_proc]
+[manpage modules/nns/nns_protocol.man nameserv::protocol]
+[key command]
+[manpage modules/doctools2base/tcl_parse.man doctools::tcl::parse]
+[key {command line processing}]
+[manpage modules/cmdline/cmdline.man cmdline]
+[key {command prefix}]
+[manpage modules/lambda/lambda.man lambda]
+[manpage modules/ooutil/ooutil.man oo::util]
+[manpage modules/tool/meta.man oo::util]
+[key comment]
+[manpage modules/jpeg/jpeg.man jpeg]
+[manpage modules/png/png.man png]
+[key common]
+[manpage modules/struct/struct_list.man struct::list]
+[key {common prefix}]
+[manpage modules/textutil/textutil_string.man textutil::string]
+[key communication]
+[manpage modules/comm/comm.man comm]
+[manpage modules/comm/comm_wire.man comm_wire]
+[key comparison]
+[manpage modules/struct/struct_list.man struct::list]
+[key {complete graph}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key {complex numbers}]
+[manpage modules/math/qcomplex.man math::complexnumbers]
+[manpage modules/math/fourier.man math::fourier]
+[key compression]
+[manpage modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib]
+[manpage modules/zip/encode.man zipfile::encode]
+[key computations]
+[manpage modules/math/bigfloat.man math::bigfloat]
+[key {concatenation channel}]
+[manpage modules/virtchannel_base/cat.man tcl::chan::cat]
+[manpage modules/virtchannel_base/facade.man tcl::chan::facade]
+[key {connected component}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key {connected fifos}]
+[manpage modules/virtchannel_base/tcllib_fifo2.man tcl::chan::fifo2]
+[key connection]
+[manpage modules/transfer/connect.man transfer::connect]
+[key constants]
+[manpage modules/math/constants.man math::constants]
+[manpage modules/units/units.man units]
+[key CONTAINER]
+[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container]
+[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container]
+[key contents]
+[manpage modules/doctools2toc/toc_introduction.man doctools2toc_introduction]
+[key {context-free grammar}]
+[manpage modules/grammar_me/me_intro.man grammar::me_intro]
+[key {context-free languages}]
+[manpage modules/grammar_me/me_intro.man grammar::me_intro]
+[manpage modules/grammar_peg/peg.man grammar::peg]
+[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp]
+[manpage apps/pt.man pt]
+[manpage modules/pt/pt_astree.man pt::ast]
+[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl]
+[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea]
+[manpage modules/pt/pt_json_language.man pt::json_language]
+[manpage modules/pt/pt_param.man pt::param]
+[manpage modules/pt/pt_pexpression.man pt::pe]
+[manpage modules/pt/pt_pexpr_op.man pt::pe::op]
+[manpage modules/pt/pt_pegrammar.man pt::peg]
+[manpage modules/pt/pt_peg_container.man pt::peg::container]
+[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg]
+[manpage modules/pt/pt_peg_export.man pt::peg::export]
+[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container]
+[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json]
+[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg]
+[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container]
+[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json]
+[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg]
+[manpage modules/pt/pt_peg_import.man pt::peg::import]
+[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container]
+[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json]
+[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg]
+[manpage modules/pt/pt_peg_interp.man pt::peg::interp]
+[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container]
+[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam]
+[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json]
+[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param]
+[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg]
+[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam]
+[manpage modules/pt/pt_peg_language.man pt::peg_language]
+[manpage modules/pt/pt_peg_introduction.man pt::pegrammar]
+[manpage modules/pt/pt_pgen.man pt::pgen]
+[manpage modules/pt/pt_rdengine.man pt::rde]
+[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit]
+[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo]
+[manpage modules/pt/pt_util.man pt::util]
+[manpage modules/pt/pt_to_api.man pt_export_api]
+[manpage modules/pt/pt_from_api.man pt_import_api]
+[manpage modules/pt/pt_introduction.man pt_introduction]
+[manpage modules/pt/pt_parse_peg.man pt_parse_peg]
+[manpage modules/pt/pt_parser_api.man pt_parser_api]
+[manpage modules/pt/pt_peg_op.man pt_peg_op]
+[key control]
+[manpage modules/control/control.man control]
+[manpage modules/term/term.man term]
+[manpage modules/term/ansi_code.man term::ansi::code]
+[manpage modules/term/ansi_cattr.man term::ansi::code::attr]
+[manpage modules/term/ansi_cctrl.man term::ansi::code::ctrl]
+[manpage modules/term/ansi_cmacros.man term::ansi::code::macros]
+[manpage modules/term/ansi_ctrlu.man term::ansi::ctrl::unix]
+[manpage modules/term/ansi_send.man term::ansi::send]
+[manpage modules/term/imenu.man term::interact::menu]
+[manpage modules/term/ipager.man term::interact::pager]
+[manpage modules/term/receive.man term::receive]
+[manpage modules/term/term_bind.man term::receive::bind]
+[manpage modules/term/term_send.man term::send]
+[key {control structure}]
+[manpage modules/generator/generator.man generator]
+[key conversion]
+[manpage modules/doctools/doctools.man doctools]
+[manpage modules/doctools2idx/idx_introduction.man doctools2idx_introduction]
+[manpage modules/doctools2toc/toc_introduction.man doctools2toc_introduction]
+[manpage modules/doctools2idx/idx_container.man doctools::idx]
+[manpage modules/doctools/docidx.man doctools::idx]
+[manpage modules/doctools2idx/idx_export.man doctools::idx::export]
+[manpage modules/doctools2idx/idx_import.man doctools::idx::import]
+[manpage modules/doctools2toc/toc_container.man doctools::toc]
+[manpage modules/doctools/doctoc.man doctools::toc]
+[manpage modules/doctools2toc/toc_export.man doctools::toc::export]
+[manpage modules/doctools2toc/toc_import.man doctools::toc::import]
+[manpage modules/dtplite/pkg_dtplite.man dtplite]
+[manpage apps/dtplite.man dtplite]
+[manpage modules/math/roman.man math::roman]
+[manpage modules/doctools/mpexpand.man mpexpand]
+[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json]
+[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg]
+[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container]
+[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam]
+[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json]
+[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param]
+[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg]
+[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam]
+[manpage apps/tcldocstrip.man tcldocstrip]
+[manpage modules/units/units.man units]
+[key cooked]
+[manpage modules/term/ansi_ctrlu.man term::ansi::ctrl::unix]
+[key cookie]
+[manpage modules/ncgi/ncgi.man ncgi]
+[key copy]
+[manpage modules/fileutil/multi.man fileutil::multi]
+[manpage modules/fileutil/multiop.man fileutil::multi::op]
+[manpage modules/transfer/copyops.man transfer::copy]
+[manpage modules/transfer/tqueue.man transfer::copy::queue]
+[manpage modules/transfer/ddest.man transfer::data::destination]
+[manpage modules/transfer/dsource.man transfer::data::source]
+[manpage modules/transfer/receiver.man transfer::receiver]
+[manpage modules/transfer/transmitter.man transfer::transmitter]
+[key coroutine]
+[manpage modules/coroutine/tcllib_coroutine.man coroutine]
+[manpage modules/coroutine/coro_auto.man coroutine::auto]
+[manpage modules/generator/generator.man generator]
+[key Cost]
+[manpage modules/treeql/treeql.man treeql]
+[key counter]
+[manpage modules/virtchannel_transform/vt_counter.man tcl::transform::counter]
+[key counting]
+[manpage modules/counter/counter.man counter]
+[key CPARAM]
+[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam]
+[key crc]
+[manpage modules/crc/cksum.man cksum]
+[manpage modules/crc/crc16.man crc16]
+[manpage modules/crc/crc32.man crc32]
+[manpage modules/crc/sum.man sum]
+[key crc16]
+[manpage modules/crc/crc16.man crc16]
+[key crc32]
+[manpage modules/crc/cksum.man cksum]
+[manpage modules/crc/crc16.man crc16]
+[manpage modules/crc/crc32.man crc32]
+[manpage modules/crc/sum.man sum]
+[manpage modules/virtchannel_transform/vt_crc32.man tcl::transform::crc32]
+[key {credit card}]
+[manpage modules/valtype/cc_amex.man valtype::creditcard::amex]
+[manpage modules/valtype/cc_discover.man valtype::creditcard::discover]
+[manpage modules/valtype/cc_mastercard.man valtype::creditcard::mastercard]
+[manpage modules/valtype/cc_visa.man valtype::creditcard::visa]
+[key cron]
+[manpage modules/cron/cron.man cron]
+[key cryptography]
+[manpage modules/blowfish/blowfish.man blowfish]
+[key CSS]
+[manpage modules/doctools2base/html_cssdefaults.man doctools::html::cssdefaults]
+[key csv]
+[manpage modules/bench/bench_read.man bench::in]
+[manpage modules/bench/bench_wcsv.man bench::out::csv]
+[manpage modules/csv/csv.man csv]
+[key currying]
+[manpage modules/lambda/lambda.man lambda]
+[manpage modules/ooutil/ooutil.man oo::util]
+[manpage modules/tool/meta.man oo::util]
+[key {cut edge}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key {cut vertex}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key CVS]
+[manpage modules/rcs/rcs.man rcs]
+[key cvs]
+[manpage modules/doctools/cvs.man doctools::cvs]
+[key {cvs log}]
+[manpage modules/doctools/cvs.man doctools::cvs]
+[key {cyclic redundancy check}]
+[manpage modules/crc/cksum.man cksum]
+[manpage modules/crc/crc16.man crc16]
+[manpage modules/crc/crc32.man crc32]
+[manpage modules/crc/sum.man sum]
+[key {data analysis}]
+[manpage modules/math/statistics.man math::statistics]
+[key {data destination}]
+[manpage modules/transfer/ddest.man transfer::data::destination]
+[manpage modules/transfer/receiver.man transfer::receiver]
+[key {data entry form}]
+[manpage modules/tepam/tepam_argument_dialogbox.man tepam::argument_dialogbox]
+[key {data exchange}]
+[manpage modules/yaml/huddle.man huddle]
+[manpage modules/json/json.man json]
+[manpage modules/json/json_write.man json::write]
+[manpage modules/yaml/yaml.man yaml]
+[key {data integrity}]
+[manpage modules/aes/aes.man aes]
+[manpage modules/crc/cksum.man cksum]
+[manpage modules/crc/crc16.man crc16]
+[manpage modules/crc/crc32.man crc32]
+[manpage modules/des/des.man des]
+[manpage modules/pki/pki.man pki]
+[manpage modules/rc4/rc4.man rc4]
+[manpage modules/crc/sum.man sum]
+[manpage modules/des/tcldes.man tcldes]
+[manpage modules/des/tcldesjr.man tcldes]
+[key {data source}]
+[manpage modules/transfer/dsource.man transfer::data::source]
+[manpage modules/transfer/transmitter.man transfer::transmitter]
+[key {data structures}]
+[manpage modules/struct/record.man struct::record]
+[key database]
+[manpage modules/tie/tie.man tie]
+[manpage modules/tie/tie_std.man tie]
+[key dataflow]
+[manpage modules/page/page_util_flow.man page_util_flow]
+[key DE]
+[manpage modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de]
+[manpage modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de]
+[key debug]
+[manpage modules/debug/debug.man debug]
+[manpage modules/debug/debug_caller.man debug::caller]
+[manpage modules/debug/debug_heartbeat.man debug::heartbeat]
+[manpage modules/debug/debug_timestamp.man debug::timestamp]
+[key decimal]
+[manpage modules/math/decimal.man math::decimal]
+[key declare]
+[manpage modules/term/ansi_code.man term::ansi::code]
+[key decompression]
+[manpage modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib]
+[manpage modules/zip/decode.man zipfile::decode]
+[manpage modules/zip/mkzip.man zipfile::mkzip]
+[key decryption]
+[manpage modules/virtchannel_transform/vt_otp.man tcl::transform::otp]
+[manpage modules/virtchannel_transform/rot.man tcl::transform::rot]
+[key deferal]
+[manpage modules/uev/uevent_onidle.man uevent::onidle]
+[key define]
+[manpage modules/term/ansi_code.man term::ansi::code]
+[key degree]
+[manpage modules/struct/graph.man struct::graph]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key {degree constrained spanning tree}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key degrees]
+[manpage modules/math/constants.man math::constants]
+[key delegation]
+[manpage modules/interp/deleg_method.man deleg_method]
+[manpage modules/interp/deleg_proc.man deleg_proc]
+[key depth-first]
+[manpage modules/struct/struct_tree.man struct::tree]
+[key der]
+[manpage modules/asn/asn.man asn]
+[key DES]
+[manpage modules/des/des.man des]
+[manpage modules/des/tcldes.man tcldes]
+[manpage modules/des/tcldesjr.man tcldes]
+[key deserialization]
+[manpage modules/doctools2idx/import_docidx.man doctools::idx::import::docidx]
+[manpage modules/doctools2idx/idx_import_json.man doctools::idx::import::json]
+[manpage modules/doctools2idx/idx_structure.man doctools::idx::structure]
+[manpage modules/doctools2toc/import_doctoc.man doctools::toc::import::doctoc]
+[manpage modules/doctools2toc/toc_import_json.man doctools::toc::import::json]
+[manpage modules/doctools2toc/toc_structure.man doctools::toc::structure]
+[key diameter]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key dict]
+[manpage modules/dicttool/dicttool.man dicttool]
+[key diff]
+[manpage modules/docstrip/docstrip_util.man docstrip_util]
+[manpage modules/struct/struct_list.man struct::list]
+[key {diff -n format}]
+[manpage modules/rcs/rcs.man rcs]
+[key difference]
+[manpage modules/struct/struct_set.man struct::set]
+[key differential]
+[manpage modules/struct/struct_list.man struct::list]
+[key {differential equations}]
+[manpage modules/math/calculus.man math::calculus]
+[key dijkstra]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key {directory access}]
+[manpage modules/ldap/ldap.man ldap]
+[manpage modules/ldap/ldapx.man ldapx]
+[key {directory traversal}]
+[manpage modules/fileutil/traverse.man fileutil_traverse]
+[key Discover]
+[manpage modules/valtype/cc_discover.man valtype::creditcard::discover]
+[key {discrete items}]
+[manpage modules/struct/pool.man struct::pool]
+[key {disjoint set}]
+[manpage modules/struct/disjointset.man struct::disjointset]
+[key dispatcher]
+[manpage modules/term/term_bind.man term::receive::bind]
+[key distance]
+[manpage modules/math/math_geometry.man math::geometry]
+[manpage modules/struct/graphops.man struct::graph::op]
+[manpage modules/units/units.man units]
+[key DNS]
+[manpage modules/dns/tcllib_dns.man dns]
+[key do]
+[manpage modules/control/control.man control]
+[key docidx]
+[manpage modules/doctools/docidx.man doctools::idx]
+[manpage modules/doctools2idx/idx_export.man doctools::idx::export]
+[manpage modules/doctools2idx/export_docidx.man doctools::idx::export::docidx]
+[manpage modules/doctools2idx/idx_import.man doctools::idx::import]
+[manpage modules/doctools2idx/import_docidx.man doctools::idx::import::docidx]
+[manpage modules/doctools2idx/idx_parse.man doctools::idx::parse]
+[manpage modules/doctools2idx/idx_structure.man doctools::idx::structure]
+[manpage modules/doctools2base/tcllib_msgcat.man doctools::msgcat]
+[manpage modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c]
+[manpage modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de]
+[manpage modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en]
+[manpage modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr]
+[manpage modules/dtplite/pkg_dtplite.man dtplite]
+[manpage apps/dtplite.man dtplite]
+[key {docidx commands}]
+[manpage modules/doctools/docidx_lang_cmdref.man docidx_lang_cmdref]
+[manpage modules/doctools/docidx_lang_faq.man docidx_lang_faq]
+[manpage modules/doctools/docidx_lang_intro.man docidx_lang_intro]
+[manpage modules/doctools/docidx_lang_syntax.man docidx_lang_syntax]
+[key {docidx language}]
+[manpage modules/doctools/docidx_lang_cmdref.man docidx_lang_cmdref]
+[manpage modules/doctools/docidx_lang_faq.man docidx_lang_faq]
+[manpage modules/doctools/docidx_lang_intro.man docidx_lang_intro]
+[manpage modules/doctools/docidx_lang_syntax.man docidx_lang_syntax]
+[key {docidx markup}]
+[manpage modules/doctools/docidx_lang_cmdref.man docidx_lang_cmdref]
+[manpage modules/doctools/docidx_lang_faq.man docidx_lang_faq]
+[manpage modules/doctools/docidx_lang_intro.man docidx_lang_intro]
+[manpage modules/doctools/docidx_lang_syntax.man docidx_lang_syntax]
+[manpage modules/doctools2idx/idx_container.man doctools::idx]
+[key {docidx syntax}]
+[manpage modules/doctools/docidx_lang_faq.man docidx_lang_faq]
+[manpage modules/doctools/docidx_lang_intro.man docidx_lang_intro]
+[manpage modules/doctools/docidx_lang_syntax.man docidx_lang_syntax]
+[key docstrip]
+[manpage modules/docstrip/docstrip.man docstrip]
+[manpage modules/docstrip/docstrip_util.man docstrip_util]
+[manpage apps/tcldocstrip.man tcldocstrip]
+[key doctoc]
+[manpage modules/doctools2base/tcllib_msgcat.man doctools::msgcat]
+[manpage modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c]
+[manpage modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de]
+[manpage modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en]
+[manpage modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr]
+[manpage modules/doctools/doctoc.man doctools::toc]
+[manpage modules/doctools2toc/toc_export.man doctools::toc::export]
+[manpage modules/doctools2toc/export_doctoc.man doctools::toc::export::doctoc]
+[manpage modules/doctools2toc/toc_import.man doctools::toc::import]
+[manpage modules/doctools2toc/import_doctoc.man doctools::toc::import::doctoc]
+[manpage modules/doctools2toc/toc_parse.man doctools::toc::parse]
+[manpage modules/doctools2toc/toc_structure.man doctools::toc::structure]
+[manpage modules/dtplite/pkg_dtplite.man dtplite]
+[manpage apps/dtplite.man dtplite]
+[key {doctoc commands}]
+[manpage modules/doctools/doctoc_lang_cmdref.man doctoc_lang_cmdref]
+[manpage modules/doctools/doctoc_lang_faq.man doctoc_lang_faq]
+[manpage modules/doctools/doctoc_lang_intro.man doctoc_lang_intro]
+[manpage modules/doctools/doctoc_lang_syntax.man doctoc_lang_syntax]
+[key {doctoc language}]
+[manpage modules/doctools/doctoc_lang_cmdref.man doctoc_lang_cmdref]
+[manpage modules/doctools/doctoc_lang_faq.man doctoc_lang_faq]
+[manpage modules/doctools/doctoc_lang_intro.man doctoc_lang_intro]
+[manpage modules/doctools/doctoc_lang_syntax.man doctoc_lang_syntax]
+[key {doctoc markup}]
+[manpage modules/doctools/doctoc_lang_cmdref.man doctoc_lang_cmdref]
+[manpage modules/doctools/doctoc_lang_faq.man doctoc_lang_faq]
+[manpage modules/doctools/doctoc_lang_intro.man doctoc_lang_intro]
+[manpage modules/doctools/doctoc_lang_syntax.man doctoc_lang_syntax]
+[manpage modules/doctools2toc/toc_container.man doctools::toc]
+[key {doctoc syntax}]
+[manpage modules/doctools/doctoc_lang_faq.man doctoc_lang_faq]
+[manpage modules/doctools/doctoc_lang_intro.man doctoc_lang_intro]
+[manpage modules/doctools/doctoc_lang_syntax.man doctoc_lang_syntax]
+[key doctools]
+[manpage modules/docstrip/docstrip_util.man docstrip_util]
+[manpage modules/doctools/changelog.man doctools::changelog]
+[manpage modules/doctools2base/html_cssdefaults.man doctools::html::cssdefaults]
+[manpage modules/doctools2idx/export_docidx.man doctools::idx::export::docidx]
+[manpage modules/doctools2idx/idx_export_html.man doctools::idx::export::html]
+[manpage modules/doctools2idx/idx_export_json.man doctools::idx::export::json]
+[manpage modules/doctools2idx/idx_export_nroff.man doctools::idx::export::nroff]
+[manpage modules/doctools2idx/idx_export_text.man doctools::idx::export::text]
+[manpage modules/doctools2idx/idx_export_wiki.man doctools::idx::export::wiki]
+[manpage modules/doctools2idx/import_docidx.man doctools::idx::import::docidx]
+[manpage modules/doctools2idx/idx_import_json.man doctools::idx::import::json]
+[manpage modules/doctools2idx/idx_parse.man doctools::idx::parse]
+[manpage modules/doctools2idx/idx_structure.man doctools::idx::structure]
+[manpage modules/doctools2base/tcllib_msgcat.man doctools::msgcat]
+[manpage modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c]
+[manpage modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de]
+[manpage modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en]
+[manpage modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr]
+[manpage modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c]
+[manpage modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de]
+[manpage modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en]
+[manpage modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr]
+[manpage modules/doctools2base/nroff_manmacros.man doctools::nroff::man_macros]
+[manpage modules/doctools2base/tcl_parse.man doctools::tcl::parse]
+[manpage modules/doctools2toc/export_doctoc.man doctools::toc::export::doctoc]
+[manpage modules/doctools2toc/toc_export_html.man doctools::toc::export::html]
+[manpage modules/doctools2toc/toc_export_json.man doctools::toc::export::json]
+[manpage modules/doctools2toc/toc_export_nroff.man doctools::toc::export::nroff]
+[manpage modules/doctools2toc/toc_export_text.man doctools::toc::export::text]
+[manpage modules/doctools2toc/toc_export_wiki.man doctools::toc::export::wiki]
+[manpage modules/doctools2toc/import_doctoc.man doctools::toc::import::doctoc]
+[manpage modules/doctools2toc/toc_import_json.man doctools::toc::import::json]
+[manpage modules/doctools2toc/toc_parse.man doctools::toc::parse]
+[manpage modules/doctools2toc/toc_structure.man doctools::toc::structure]
+[manpage modules/dtplite/pkg_dtplite.man dtplite]
+[manpage apps/dtplite.man dtplite]
+[key {doctools commands}]
+[manpage modules/doctools/doctools_lang_cmdref.man doctools_lang_cmdref]
+[manpage modules/doctools/doctools_lang_faq.man doctools_lang_faq]
+[manpage modules/doctools/doctools_lang_intro.man doctools_lang_intro]
+[manpage modules/doctools/doctools_lang_syntax.man doctools_lang_syntax]
+[key {doctools language}]
+[manpage modules/doctools/doctools_lang_cmdref.man doctools_lang_cmdref]
+[manpage modules/doctools/doctools_lang_faq.man doctools_lang_faq]
+[manpage modules/doctools/doctools_lang_intro.man doctools_lang_intro]
+[manpage modules/doctools/doctools_lang_syntax.man doctools_lang_syntax]
+[key {doctools markup}]
+[manpage modules/doctools/doctools_lang_cmdref.man doctools_lang_cmdref]
+[manpage modules/doctools/doctools_lang_faq.man doctools_lang_faq]
+[manpage modules/doctools/doctools_lang_intro.man doctools_lang_intro]
+[manpage modules/doctools/doctools_lang_syntax.man doctools_lang_syntax]
+[key {doctools syntax}]
+[manpage modules/doctools/doctools_lang_faq.man doctools_lang_faq]
+[manpage modules/doctools/doctools_lang_intro.man doctools_lang_intro]
+[manpage modules/doctools/doctools_lang_syntax.man doctools_lang_syntax]
+[key document]
+[manpage modules/doctools/doctools_plugin_apiref.man doctools_plugin_apiref]
+[key documentation]
+[manpage modules/docstrip/docstrip.man docstrip]
+[manpage modules/docstrip/docstrip_util.man docstrip_util]
+[manpage modules/doctools/doctools.man doctools]
+[manpage modules/doctools2idx/idx_container.man doctools::idx]
+[manpage modules/doctools/docidx.man doctools::idx]
+[manpage modules/doctools2idx/idx_export.man doctools::idx::export]
+[manpage modules/doctools2idx/idx_import.man doctools::idx::import]
+[manpage modules/doctools2toc/toc_container.man doctools::toc]
+[manpage modules/doctools/doctoc.man doctools::toc]
+[manpage modules/doctools2toc/toc_export.man doctools::toc::export]
+[manpage modules/doctools2toc/toc_import.man doctools::toc::import]
+[manpage apps/tcldocstrip.man tcldocstrip]
+[manpage modules/tepam/tepam_doc_gen.man tepam::doc_gen]
+[key DOM]
+[manpage modules/treeql/treeql.man treeql]
+[key dom]
+[manpage modules/amazon-s3/xsxp.man xsxp]
+[key {domain name service}]
+[manpage modules/dns/tcllib_dns.man dns]
+[key e]
+[manpage modules/math/constants.man math::constants]
+[key EAN]
+[manpage modules/valtype/ean13.man valtype::gs1::ean13]
+[manpage modules/valtype/isbn.man valtype::isbn]
+[key EAN13]
+[manpage modules/valtype/ean13.man valtype::gs1::ean13]
+[manpage modules/valtype/isbn.man valtype::isbn]
+[key earley]
+[manpage modules/grammar_aycock/aycock.man grammar::aycock]
+[key EBNF]
+[manpage apps/pt.man pt]
+[manpage modules/pt/pt_astree.man pt::ast]
+[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl]
+[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea]
+[manpage modules/pt/pt_json_language.man pt::json_language]
+[manpage modules/pt/pt_param.man pt::param]
+[manpage modules/pt/pt_pexpression.man pt::pe]
+[manpage modules/pt/pt_pexpr_op.man pt::pe::op]
+[manpage modules/pt/pt_pegrammar.man pt::peg]
+[manpage modules/pt/pt_peg_container.man pt::peg::container]
+[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg]
+[manpage modules/pt/pt_peg_export.man pt::peg::export]
+[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container]
+[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json]
+[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg]
+[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container]
+[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json]
+[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg]
+[manpage modules/pt/pt_peg_import.man pt::peg::import]
+[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container]
+[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json]
+[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg]
+[manpage modules/pt/pt_peg_interp.man pt::peg::interp]
+[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container]
+[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam]
+[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json]
+[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param]
+[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg]
+[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam]
+[manpage modules/pt/pt_peg_language.man pt::peg_language]
+[manpage modules/pt/pt_peg_introduction.man pt::pegrammar]
+[manpage modules/pt/pt_pgen.man pt::pgen]
+[manpage modules/pt/pt_rdengine.man pt::rde]
+[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit]
+[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo]
+[manpage modules/pt/pt_util.man pt::util]
+[manpage modules/pt/pt_to_api.man pt_export_api]
+[manpage modules/pt/pt_from_api.man pt_import_api]
+[manpage modules/pt/pt_introduction.man pt_introduction]
+[manpage modules/pt/pt_parse_peg.man pt_parse_peg]
+[manpage modules/pt/pt_parser_api.man pt_parser_api]
+[manpage modules/pt/pt_peg_op.man pt_peg_op]
+[key eccentricity]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key edge]
+[manpage modules/struct/graph.man struct::graph]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key emacs]
+[manpage modules/doctools/changelog.man doctools::changelog]
+[manpage modules/doctools/cvs.man doctools::cvs]
+[key email]
+[manpage modules/imap4/imap4.man imap4]
+[manpage modules/mime/mime.man mime]
+[manpage modules/pop3/pop3.man pop3]
+[manpage modules/mime/smtp.man smtp]
+[key emptiness]
+[manpage modules/struct/struct_set.man struct::set]
+[key {empty interpreter}]
+[manpage modules/interp/tcllib_interp.man interp]
+[key EN]
+[manpage modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en]
+[manpage modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en]
+[key encoding]
+[manpage modules/base64/ascii85.man ascii85]
+[manpage modules/base64/base64.man base64]
+[manpage modules/base64/uuencode.man uuencode]
+[manpage modules/base64/yencode.man yencode]
+[key encryption]
+[manpage modules/aes/aes.man aes]
+[manpage modules/blowfish/blowfish.man blowfish]
+[manpage modules/des/des.man des]
+[manpage modules/pki/pki.man pki]
+[manpage modules/rc4/rc4.man rc4]
+[manpage modules/virtchannel_transform/vt_otp.man tcl::transform::otp]
+[manpage modules/virtchannel_transform/rot.man tcl::transform::rot]
+[manpage modules/des/tcldes.man tcldes]
+[manpage modules/des/tcldesjr.man tcldes]
+[key {entry mask}]
+[manpage modules/tepam/tepam_introduction.man tepam]
+[key equal]
+[manpage modules/struct/struct_list.man struct::list]
+[key equality]
+[manpage modules/struct/struct_list.man struct::list]
+[key {equivalence class}]
+[manpage modules/struct/disjointset.man struct::disjointset]
+[key error]
+[manpage modules/try/tcllib_throw.man try]
+[manpage modules/try/tcllib_try.man try]
+[key {error function}]
+[manpage modules/math/special.man math::special]
+[key {European Article Number}]
+[manpage modules/valtype/ean13.man valtype::gs1::ean13]
+[manpage modules/valtype/isbn.man valtype::isbn]
+[key event]
+[manpage modules/hook/hook.man hook]
+[manpage modules/uev/uevent.man uevent]
+[manpage modules/uev/uevent_onidle.man uevent::onidle]
+[key {event management}]
+[manpage modules/virtchannel_core/events.man tcl::chan::events]
+[key events]
+[manpage modules/coroutine/tcllib_coroutine.man coroutine]
+[manpage modules/coroutine/coro_auto.man coroutine::auto]
+[key examples]
+[manpage modules/bench/bench_lang_intro.man bench_lang_intro]
+[manpage modules/doctools/docidx_lang_faq.man docidx_lang_faq]
+[manpage modules/doctools/doctoc_lang_faq.man doctoc_lang_faq]
+[manpage modules/doctools/doctools_lang_faq.man doctools_lang_faq]
+[key exception]
+[manpage modules/try/tcllib_try.man try]
+[key {exchange format}]
+[manpage modules/yaml/huddle.man huddle]
+[manpage modules/json/json.man json]
+[manpage modules/json/json_write.man json::write]
+[key exclusion]
+[manpage modules/struct/struct_set.man struct::set]
+[key execution]
+[manpage modules/grammar_fa/dexec.man grammar::fa::dexec]
+[key exif]
+[manpage modules/exif/exif.man exif]
+[manpage modules/jpeg/jpeg.man jpeg]
+[key exit]
+[manpage modules/coroutine/tcllib_coroutine.man coroutine]
+[manpage modules/coroutine/coro_auto.man coroutine::auto]
+[key export]
+[manpage modules/doctools2base/html_cssdefaults.man doctools::html::cssdefaults]
+[manpage modules/doctools2idx/idx_export.man doctools::idx::export]
+[manpage modules/doctools2idx/export_docidx.man doctools::idx::export::docidx]
+[manpage modules/doctools2idx/idx_export_html.man doctools::idx::export::html]
+[manpage modules/doctools2idx/idx_export_json.man doctools::idx::export::json]
+[manpage modules/doctools2idx/idx_export_nroff.man doctools::idx::export::nroff]
+[manpage modules/doctools2idx/idx_export_text.man doctools::idx::export::text]
+[manpage modules/doctools2idx/idx_export_wiki.man doctools::idx::export::wiki]
+[manpage modules/doctools2base/nroff_manmacros.man doctools::nroff::man_macros]
+[manpage modules/doctools2toc/toc_export.man doctools::toc::export]
+[manpage modules/doctools2toc/export_doctoc.man doctools::toc::export::doctoc]
+[manpage modules/doctools2toc/toc_export_html.man doctools::toc::export::html]
+[manpage modules/doctools2toc/toc_export_json.man doctools::toc::export::json]
+[manpage modules/doctools2toc/toc_export_nroff.man doctools::toc::export::nroff]
+[manpage modules/doctools2toc/toc_export_text.man doctools::toc::export::text]
+[manpage modules/doctools2toc/toc_export_wiki.man doctools::toc::export::wiki]
+[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container]
+[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json]
+[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg]
+[key expression]
+[manpage modules/grammar_me/me_intro.man grammar::me_intro]
+[manpage modules/grammar_peg/peg.man grammar::peg]
+[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp]
+[manpage apps/pt.man pt]
+[manpage modules/pt/pt_astree.man pt::ast]
+[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl]
+[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea]
+[manpage modules/pt/pt_json_language.man pt::json_language]
+[manpage modules/pt/pt_param.man pt::param]
+[manpage modules/pt/pt_pexpression.man pt::pe]
+[manpage modules/pt/pt_pexpr_op.man pt::pe::op]
+[manpage modules/pt/pt_pegrammar.man pt::peg]
+[manpage modules/pt/pt_peg_container.man pt::peg::container]
+[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg]
+[manpage modules/pt/pt_peg_export.man pt::peg::export]
+[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container]
+[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json]
+[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg]
+[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container]
+[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json]
+[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg]
+[manpage modules/pt/pt_peg_import.man pt::peg::import]
+[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container]
+[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json]
+[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg]
+[manpage modules/pt/pt_peg_interp.man pt::peg::interp]
+[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container]
+[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam]
+[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json]
+[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param]
+[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg]
+[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam]
+[manpage modules/pt/pt_peg_language.man pt::peg_language]
+[manpage modules/pt/pt_peg_introduction.man pt::pegrammar]
+[manpage modules/pt/pt_pgen.man pt::pgen]
+[manpage modules/pt/pt_rdengine.man pt::rde]
+[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit]
+[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo]
+[manpage modules/pt/pt_util.man pt::util]
+[manpage modules/pt/pt_to_api.man pt_export_api]
+[manpage modules/pt/pt_from_api.man pt_import_api]
+[manpage modules/pt/pt_introduction.man pt_introduction]
+[manpage modules/pt/pt_parse_peg.man pt_parse_peg]
+[manpage modules/pt/pt_parser_api.man pt_parser_api]
+[manpage modules/pt/pt_peg_op.man pt_peg_op]
+[key {extended namespace}]
+[manpage modules/namespacex/namespacex.man namespacex]
+[key faq]
+[manpage modules/doctools/docidx_lang_faq.man docidx_lang_faq]
+[manpage modules/doctools/doctoc_lang_faq.man doctoc_lang_faq]
+[manpage modules/doctools/doctools_lang_faq.man doctools_lang_faq]
+[key {fetching information}]
+[manpage modules/uri/uri.man uri]
+[key FFT]
+[manpage modules/math/fourier.man math::fourier]
+[key fifo]
+[manpage modules/virtchannel_base/tcllib_fifo.man tcl::chan::fifo]
+[manpage modules/virtchannel_base/tcllib_fifo2.man tcl::chan::fifo2]
+[manpage modules/virtchannel_base/halfpipe.man tcl::chan::halfpipe]
+[key file]
+[manpage modules/tie/tie.man tie]
+[manpage modules/tie/tie_std.man tie]
+[manpage modules/uri/uri.man uri]
+[key {file recognition}]
+[manpage modules/fumagic/cfront.man fileutil::magic::cfront]
+[manpage modules/fumagic/cgen.man fileutil::magic::cgen]
+[manpage modules/fumagic/filetypes.man fileutil::magic::filetype]
+[manpage modules/fumagic/mimetypes.man fileutil::magic::mimetype]
+[manpage modules/fumagic/rtcore.man fileutil::magic::rt]
+[key {file type}]
+[manpage modules/fumagic/cfront.man fileutil::magic::cfront]
+[manpage modules/fumagic/cgen.man fileutil::magic::cgen]
+[manpage modules/fumagic/filetypes.man fileutil::magic::filetype]
+[manpage modules/fumagic/mimetypes.man fileutil::magic::mimetype]
+[manpage modules/fumagic/rtcore.man fileutil::magic::rt]
+[key {file utilities}]
+[manpage modules/fileutil/fileutil.man fileutil]
+[manpage modules/fumagic/cfront.man fileutil::magic::cfront]
+[manpage modules/fumagic/cgen.man fileutil::magic::cgen]
+[manpage modules/fumagic/filetypes.man fileutil::magic::filetype]
+[manpage modules/fumagic/mimetypes.man fileutil::magic::mimetype]
+[manpage modules/fumagic/rtcore.man fileutil::magic::rt]
+[manpage modules/fileutil/multi.man fileutil::multi]
+[manpage modules/fileutil/multiop.man fileutil::multi::op]
+[key filesystem]
+[manpage modules/map/map_slippy_cache.man map::slippy::cache]
+[key filter]
+[manpage modules/generator/generator.man generator]
+[manpage modules/struct/struct_list.man struct::list]
+[key final]
+[manpage modules/try/tcllib_try.man try]
+[key finance]
+[manpage modules/valtype/cc_amex.man valtype::creditcard::amex]
+[manpage modules/valtype/cc_discover.man valtype::creditcard::discover]
+[manpage modules/valtype/cc_mastercard.man valtype::creditcard::mastercard]
+[manpage modules/valtype/cc_visa.man valtype::creditcard::visa]
+[manpage modules/valtype/iban.man valtype::iban]
+[key find]
+[manpage modules/struct/disjointset.man struct::disjointset]
+[key finite]
+[manpage modules/struct/pool.man struct::pool]
+[key {finite automaton}]
+[manpage modules/grammar_fa/fa.man grammar::fa]
+[manpage modules/grammar_fa/dacceptor.man grammar::fa::dacceptor]
+[manpage modules/grammar_fa/dexec.man grammar::fa::dexec]
+[manpage modules/grammar_fa/faop.man grammar::fa::op]
+[key {FIPS 180-1}]
+[manpage modules/sha1/sha1.man sha1]
+[manpage modules/sha1/sha256.man sha256]
+[key {first permutation}]
+[manpage modules/struct/struct_list.man struct::list]
+[key Fisher-Yates]
+[manpage modules/struct/struct_list.man struct::list]
+[key flatten]
+[manpage modules/struct/struct_list.man struct::list]
+[key floating-point]
+[manpage modules/math/bigfloat.man math::bigfloat]
+[manpage modules/math/fuzzy.man math::fuzzy]
+[key flow]
+[manpage modules/control/control.man control]
+[key {flow network}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key folding]
+[manpage modules/struct/struct_list.man struct::list]
+[key foldl]
+[manpage modules/generator/generator.man generator]
+[key foldr]
+[manpage modules/generator/generator.man generator]
+[key foreach]
+[manpage modules/generator/generator.man generator]
+[key form]
+[manpage modules/html/html.man html]
+[manpage modules/ncgi/ncgi.man ncgi]
+[key {format conversion}]
+[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json]
+[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg]
+[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container]
+[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam]
+[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json]
+[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param]
+[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg]
+[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam]
+[key formatter]
+[manpage modules/doctools/doctools_plugin_apiref.man doctools_plugin_apiref]
+[key formatting]
+[manpage modules/bench/bench_read.man bench::in]
+[manpage modules/bench/bench_wcsv.man bench::out::csv]
+[manpage modules/bench/bench_wtext.man bench::out::text]
+[manpage modules/doctools2idx/idx_introduction.man doctools2idx_introduction]
+[manpage modules/doctools2toc/toc_introduction.man doctools2toc_introduction]
+[manpage modules/doctools2idx/idx_container.man doctools::idx]
+[manpage modules/doctools2idx/idx_export.man doctools::idx::export]
+[manpage modules/doctools2toc/toc_container.man doctools::toc]
+[manpage modules/doctools2toc/toc_export.man doctools::toc::export]
+[manpage modules/textutil/textutil.man textutil]
+[manpage modules/textutil/adjust.man textutil::adjust]
+[manpage modules/textutil/textutil_string.man textutil::string]
+[manpage modules/textutil/tabify.man textutil::tabify]
+[key {formatting engine}]
+[manpage modules/doctools/docidx_plugin_apiref.man docidx_plugin_apiref]
+[manpage modules/doctools/doctoc_plugin_apiref.man doctoc_plugin_apiref]
+[manpage modules/doctools/doctools_plugin_apiref.man doctools_plugin_apiref]
+[key {Fourier transform}]
+[manpage modules/math/fourier.man math::fourier]
+[key FR]
+[manpage modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr]
+[manpage modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr]
+[key frame]
+[manpage modules/term/ansi_cmacros.man term::ansi::code::macros]
+[key ftp]
+[manpage modules/ftp/ftp.man ftp]
+[manpage modules/ftp/ftp_geturl.man ftp::geturl]
+[manpage modules/ftpd/ftpd.man ftpd]
+[manpage modules/uri/uri.man uri]
+[key ftpd]
+[manpage modules/ftpd/ftpd.man ftpd]
+[key ftpserver]
+[manpage modules/ftpd/ftpd.man ftpd]
+[key {full outer join}]
+[manpage modules/struct/struct_list.man struct::list]
+[key {generate event}]
+[manpage modules/uev/uevent.man uevent]
+[key {generate permutations}]
+[manpage modules/struct/struct_list.man struct::list]
+[key generation]
+[manpage modules/doctools2idx/idx_container.man doctools::idx]
+[manpage modules/doctools2idx/idx_export.man doctools::idx::export]
+[manpage modules/doctools2toc/toc_container.man doctools::toc]
+[manpage modules/doctools2toc/toc_export.man doctools::toc::export]
+[key generator]
+[manpage modules/generator/generator.man generator]
+[key geocoding]
+[manpage modules/map/map_geocode_nominatim.man map::geocode::nominatim]
+[key geodesy]
+[manpage modules/map/map_slippy.man map::slippy]
+[manpage modules/mapproj/mapproj.man mapproj]
+[key geography]
+[manpage modules/map/map_slippy.man map::slippy]
+[key {get character}]
+[manpage modules/term/receive.man term::receive]
+[key gets]
+[manpage modules/coroutine/tcllib_coroutine.man coroutine]
+[manpage modules/coroutine/coro_auto.man coroutine::auto]
+[key global]
+[manpage modules/coroutine/tcllib_coroutine.man coroutine]
+[manpage modules/coroutine/coro_auto.man coroutine::auto]
+[key gopher]
+[manpage modules/uri/uri.man uri]
+[key gps]
+[manpage modules/gpx/gpx.man gpx]
+[manpage modules/nmea/nmea.man nmea]
+[key gpx]
+[manpage modules/gpx/gpx.man gpx]
+[key grammar]
+[manpage modules/grammar_aycock/aycock.man grammar::aycock]
+[manpage modules/grammar_fa/fa.man grammar::fa]
+[manpage modules/grammar_fa/dacceptor.man grammar::fa::dacceptor]
+[manpage modules/grammar_fa/dexec.man grammar::fa::dexec]
+[manpage modules/grammar_fa/faop.man grammar::fa::op]
+[manpage modules/grammar_me/me_cpu.man grammar::me::cpu]
+[manpage modules/grammar_me/me_cpucore.man grammar::me::cpu::core]
+[manpage modules/grammar_me/gasm.man grammar::me::cpu::gasm]
+[manpage modules/grammar_me/me_tcl.man grammar::me::tcl]
+[manpage modules/grammar_me/me_intro.man grammar::me_intro]
+[manpage modules/grammar_me/me_vm.man grammar::me_vm]
+[manpage modules/grammar_peg/peg.man grammar::peg]
+[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp]
+[manpage apps/pt.man pt]
+[manpage modules/pt/pt_astree.man pt::ast]
+[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl]
+[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea]
+[manpage modules/pt/pt_json_language.man pt::json_language]
+[manpage modules/pt/pt_param.man pt::param]
+[manpage modules/pt/pt_pexpression.man pt::pe]
+[manpage modules/pt/pt_pexpr_op.man pt::pe::op]
+[manpage modules/pt/pt_pegrammar.man pt::peg]
+[manpage modules/pt/pt_peg_container.man pt::peg::container]
+[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg]
+[manpage modules/pt/pt_peg_export.man pt::peg::export]
+[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container]
+[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json]
+[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg]
+[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container]
+[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json]
+[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg]
+[manpage modules/pt/pt_peg_import.man pt::peg::import]
+[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container]
+[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json]
+[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg]
+[manpage modules/pt/pt_peg_interp.man pt::peg::interp]
+[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container]
+[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam]
+[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json]
+[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param]
+[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg]
+[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam]
+[manpage modules/pt/pt_peg_language.man pt::peg_language]
+[manpage modules/pt/pt_peg_introduction.man pt::pegrammar]
+[manpage modules/pt/pt_pgen.man pt::pgen]
+[manpage modules/pt/pt_rdengine.man pt::rde]
+[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit]
+[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo]
+[manpage modules/pt/pt_util.man pt::util]
+[manpage modules/pt/pt_to_api.man pt_export_api]
+[manpage modules/pt/pt_from_api.man pt_import_api]
+[manpage modules/pt/pt_introduction.man pt_introduction]
+[manpage modules/pt/pt_parse_peg.man pt_parse_peg]
+[manpage modules/pt/pt_parser_api.man pt_parser_api]
+[manpage modules/pt/pt_peg_op.man pt_peg_op]
+[key graph]
+[manpage modules/grammar_me/gasm.man grammar::me::cpu::gasm]
+[manpage modules/struct/graph.man struct::graph]
+[manpage modules/struct/graphops.man struct::graph::op]
+[manpage modules/struct/graph1.man struct::graph_v1]
+[manpage modules/struct/queue.man struct::queue]
+[manpage modules/struct/stack.man struct::stack]
+[key {graph walking}]
+[manpage modules/page/page_util_flow.man page_util_flow]
+[manpage modules/page/page_util_norm_lemon.man page_util_norm_lemon]
+[manpage modules/page/page_util_norm_peg.man page_util_norm_peg]
+[key {green threads}]
+[manpage modules/coroutine/tcllib_coroutine.man coroutine]
+[manpage modules/coroutine/coro_auto.man coroutine::auto]
+[key grep]
+[manpage modules/fileutil/fileutil.man fileutil]
+[key GUID]
+[manpage modules/uuid/uuid.man uuid]
+[key hashing]
+[manpage modules/md4/md4.man md4]
+[manpage modules/md5/md5.man md5]
+[manpage modules/md5crypt/md5crypt.man md5crypt]
+[manpage modules/otp/otp.man otp]
+[manpage modules/ripemd/ripemd128.man ripemd128]
+[manpage modules/ripemd/ripemd160.man ripemd160]
+[manpage modules/sha1/sha1.man sha1]
+[manpage modules/sha1/sha256.man sha256]
+[key heartbeat]
+[manpage modules/debug/debug_heartbeat.man debug::heartbeat]
+[key heuristic]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key hex]
+[manpage modules/base32/base32hex.man base32::hex]
+[key hexadecimal]
+[manpage modules/virtchannel_transform/hex.man tcl::transform::hex]
+[key histogram]
+[manpage modules/counter/counter.man counter]
+[key hook]
+[manpage modules/hook/hook.man hook]
+[manpage modules/uev/uevent.man uevent]
+[key horspool]
+[manpage modules/grammar_aycock/aycock.man grammar::aycock]
+[key HTML]
+[manpage modules/doctools/doctools.man doctools]
+[manpage modules/doctools2base/html_cssdefaults.man doctools::html::cssdefaults]
+[manpage modules/doctools2idx/idx_container.man doctools::idx]
+[manpage modules/doctools/docidx.man doctools::idx]
+[manpage modules/doctools2idx/idx_export.man doctools::idx::export]
+[manpage modules/doctools2idx/idx_export_html.man doctools::idx::export::html]
+[manpage modules/doctools2toc/toc_container.man doctools::toc]
+[manpage modules/doctools/doctoc.man doctools::toc]
+[manpage modules/doctools2toc/toc_export.man doctools::toc::export]
+[manpage modules/doctools2toc/toc_export_html.man doctools::toc::export::html]
+[manpage modules/dtplite/pkg_dtplite.man dtplite]
+[manpage apps/dtplite.man dtplite]
+[manpage modules/doctools/mpexpand.man mpexpand]
+[key html]
+[manpage modules/html/html.man html]
+[manpage modules/htmlparse/htmlparse.man htmlparse]
+[manpage modules/javascript/javascript.man javascript]
+[manpage modules/ncgi/ncgi.man ncgi]
+[key http]
+[manpage modules/http/autoproxy.man autoproxy]
+[manpage modules/map/map_geocode_nominatim.man map::geocode::nominatim]
+[manpage modules/map/map_slippy_fetcher.man map::slippy::fetcher]
+[manpage modules/uri/uri.man uri]
+[manpage modules/websocket/websocket.man websocket]
+[key huddle]
+[manpage modules/yaml/huddle.man huddle]
+[manpage modules/yaml/yaml.man yaml]
+[key {human readable}]
+[manpage modules/bench/bench_read.man bench::in]
+[manpage modules/bench/bench_wtext.man bench::out::text]
+[key hyphenation]
+[manpage modules/textutil/textutil.man textutil]
+[manpage modules/textutil/adjust.man textutil::adjust]
+[key i18n]
+[manpage modules/doctools2base/tcllib_msgcat.man doctools::msgcat]
+[manpage modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c]
+[manpage modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de]
+[manpage modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en]
+[manpage modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr]
+[manpage modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c]
+[manpage modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de]
+[manpage modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en]
+[manpage modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr]
+[key IBAN]
+[manpage modules/valtype/iban.man valtype::iban]
+[key ident]
+[manpage modules/ident/ident.man ident]
+[key identification]
+[manpage modules/ident/ident.man ident]
+[key identity]
+[manpage modules/virtchannel_transform/identity.man tcl::transform::identity]
+[key idle]
+[manpage modules/uev/uevent_onidle.man uevent::onidle]
+[key image]
+[manpage modules/jpeg/jpeg.man jpeg]
+[manpage modules/png/png.man png]
+[manpage modules/tiff/tiff.man tiff]
+[key imap]
+[manpage modules/imap4/imap4.man imap4]
+[key IMEI]
+[manpage modules/valtype/imei.man valtype::imei]
+[key import]
+[manpage modules/doctools2idx/idx_import.man doctools::idx::import]
+[manpage modules/doctools2idx/import_docidx.man doctools::idx::import::docidx]
+[manpage modules/doctools2idx/idx_import_json.man doctools::idx::import::json]
+[manpage modules/doctools2toc/toc_import.man doctools::toc::import]
+[manpage modules/doctools2toc/import_doctoc.man doctools::toc::import::doctoc]
+[manpage modules/doctools2toc/toc_import_json.man doctools::toc::import::json]
+[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json]
+[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg]
+[key {in-memory channel}]
+[manpage modules/virtchannel_base/tcllib_fifo.man tcl::chan::fifo]
+[manpage modules/virtchannel_base/tcllib_fifo2.man tcl::chan::fifo2]
+[manpage modules/virtchannel_base/halfpipe.man tcl::chan::halfpipe]
+[manpage modules/virtchannel_base/tcllib_memchan.man tcl::chan::memchan]
+[manpage modules/virtchannel_base/tcllib_string.man tcl::chan::string]
+[manpage modules/virtchannel_base/tcllib_variable.man tcl::chan::variable]
+[key in-order]
+[manpage modules/struct/struct_tree.man struct::tree]
+[key inclusion]
+[manpage modules/struct/struct_set.man struct::set]
+[key {Incr Tcl}]
+[manpage modules/snit/snit.man snit]
+[manpage modules/snit/snitfaq.man snitfaq]
+[key indenting]
+[manpage modules/textutil/textutil.man textutil]
+[manpage modules/textutil/adjust.man textutil::adjust]
+[key {independent set}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key index]
+[manpage modules/doctools/docidx_intro.man docidx_intro]
+[manpage modules/doctools/docidx_plugin_apiref.man docidx_plugin_apiref]
+[manpage modules/doctools2idx/idx_introduction.man doctools2idx_introduction]
+[manpage modules/doctools2idx/idx_container.man doctools::idx]
+[manpage modules/doctools/docidx.man doctools::idx]
+[manpage modules/doctools2idx/idx_export.man doctools::idx::export]
+[manpage modules/doctools2idx/export_docidx.man doctools::idx::export::docidx]
+[manpage modules/doctools2idx/idx_export_html.man doctools::idx::export::html]
+[manpage modules/doctools2idx/idx_export_json.man doctools::idx::export::json]
+[manpage modules/doctools2idx/idx_export_nroff.man doctools::idx::export::nroff]
+[manpage modules/doctools2idx/idx_export_text.man doctools::idx::export::text]
+[manpage modules/doctools2idx/idx_export_wiki.man doctools::idx::export::wiki]
+[manpage modules/doctools2idx/idx_import.man doctools::idx::import]
+[manpage modules/doctools2idx/import_docidx.man doctools::idx::import::docidx]
+[manpage modules/doctools2idx/idx_import_json.man doctools::idx::import::json]
+[key {index formatter}]
+[manpage modules/doctools/docidx_plugin_apiref.man docidx_plugin_apiref]
+[key info]
+[manpage modules/namespacex/namespacex.man namespacex]
+[key {inner join}]
+[manpage modules/struct/struct_list.man struct::list]
+[key {input mode}]
+[manpage modules/term/ansi_ctrlu.man term::ansi::ctrl::unix]
+[key integer]
+[manpage modules/math/roman.man math::roman]
+[key integration]
+[manpage modules/math/calculus.man math::calculus]
+[key {inter-thread communication}]
+[manpage modules/virtchannel_base/tcllib_fifo2.man tcl::chan::fifo2]
+[key {International Article Number}]
+[manpage modules/valtype/ean13.man valtype::gs1::ean13]
+[manpage modules/valtype/isbn.man valtype::isbn]
+[key {International Bank Account Number}]
+[manpage modules/valtype/iban.man valtype::iban]
+[key {International Mobile Equipment Identity}]
+[manpage modules/valtype/imei.man valtype::imei]
+[key {International Standard Book Number}]
+[manpage modules/valtype/isbn.man valtype::isbn]
+[key internationalization]
+[manpage modules/doctools2base/tcllib_msgcat.man doctools::msgcat]
+[manpage modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c]
+[manpage modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de]
+[manpage modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en]
+[manpage modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr]
+[manpage modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c]
+[manpage modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de]
+[manpage modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en]
+[manpage modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr]
+[key internet]
+[manpage modules/asn/asn.man asn]
+[manpage modules/ftp/ftp.man ftp]
+[manpage modules/ftp/ftp_geturl.man ftp::geturl]
+[manpage modules/imap4/imap4.man imap4]
+[manpage modules/ldap/ldap.man ldap]
+[manpage modules/ldap/ldapx.man ldapx]
+[manpage modules/mime/mime.man mime]
+[manpage modules/pop3d/pop3d.man pop3d]
+[manpage modules/pop3d/pop3d_dbox.man pop3d::dbox]
+[manpage modules/pop3d/pop3d_udb.man pop3d::udb]
+[manpage modules/mime/smtp.man smtp]
+[manpage modules/websocket/websocket.man websocket]
+[key {internet address}]
+[manpage modules/dns/tcllib_ip.man tcllib_ip]
+[key interpolation]
+[manpage modules/math/interpolate.man math::interpolate]
+[key interpreter]
+[manpage modules/interp/deleg_method.man deleg_method]
+[manpage modules/interp/deleg_proc.man deleg_proc]
+[manpage modules/interp/tcllib_interp.man interp]
+[manpage modules/wip/wip.man wip]
+[key intersection]
+[manpage modules/struct/struct_set.man struct::set]
+[key interval]
+[manpage modules/math/bigfloat.man math::bigfloat]
+[key ip]
+[manpage modules/dns/tcllib_ip.man tcllib_ip]
+[key ipc]
+[manpage modules/comm/comm.man comm]
+[manpage modules/comm/comm_wire.man comm_wire]
+[key ipv4]
+[manpage modules/dns/tcllib_ip.man tcllib_ip]
+[key ipv6]
+[manpage modules/dns/tcllib_ip.man tcllib_ip]
+[key irc]
+[manpage modules/irc/irc.man irc]
+[manpage modules/irc/picoirc.man picoirc]
+[key isA]
+[manpage modules/valtype/valtype_common.man valtype::common]
+[manpage modules/valtype/cc_amex.man valtype::creditcard::amex]
+[manpage modules/valtype/cc_discover.man valtype::creditcard::discover]
+[manpage modules/valtype/cc_mastercard.man valtype::creditcard::mastercard]
+[manpage modules/valtype/cc_visa.man valtype::creditcard::visa]
+[manpage modules/valtype/ean13.man valtype::gs1::ean13]
+[manpage modules/valtype/iban.man valtype::iban]
+[manpage modules/valtype/imei.man valtype::imei]
+[manpage modules/valtype/isbn.man valtype::isbn]
+[manpage modules/valtype/luhn.man valtype::luhn]
+[manpage modules/valtype/luhn5.man valtype::luhn5]
+[manpage modules/valtype/usnpi.man valtype::usnpi]
+[manpage modules/valtype/verhoeff.man valtype::verhoeff]
+[key ISBN]
+[manpage modules/valtype/isbn.man valtype::isbn]
+[key isthmus]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key iterator]
+[manpage modules/generator/generator.man generator]
+[key javascript]
+[manpage modules/javascript/javascript.man javascript]
+[manpage modules/json/json.man json]
+[manpage modules/json/json_write.man json::write]
+[key jfif]
+[manpage modules/jpeg/jpeg.man jpeg]
+[key join]
+[manpage modules/struct/struct_list.man struct::list]
+[key jpeg]
+[manpage modules/exif/exif.man exif]
+[manpage modules/jpeg/jpeg.man jpeg]
+[key JSON]
+[manpage modules/doctools2idx/idx_export_json.man doctools::idx::export::json]
+[manpage modules/doctools2idx/idx_import_json.man doctools::idx::import::json]
+[manpage modules/doctools2toc/toc_export_json.man doctools::toc::export::json]
+[manpage modules/doctools2toc/toc_import_json.man doctools::toc::import::json]
+[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json]
+[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json]
+[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json]
+[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json]
+[key json]
+[manpage modules/doctools2idx/idx_container.man doctools::idx]
+[manpage modules/doctools2idx/idx_export.man doctools::idx::export]
+[manpage modules/doctools2idx/idx_import.man doctools::idx::import]
+[manpage modules/doctools2toc/toc_container.man doctools::toc]
+[manpage modules/doctools2toc/toc_export.man doctools::toc::export]
+[manpage modules/doctools2toc/toc_import.man doctools::toc::import]
+[manpage modules/yaml/huddle.man huddle]
+[manpage modules/json/json.man json]
+[manpage modules/json/json_write.man json::write]
+[key justification]
+[manpage modules/textutil/adjust.man textutil::adjust]
+[key {keyword index}]
+[manpage modules/doctools/docidx_intro.man docidx_intro]
+[manpage modules/doctools2idx/idx_introduction.man doctools2idx_introduction]
+[manpage modules/doctools2idx/idx_container.man doctools::idx]
+[manpage modules/doctools/docidx.man doctools::idx]
+[manpage modules/doctools2idx/idx_export.man doctools::idx::export]
+[manpage modules/doctools2idx/idx_import.man doctools::idx::import]
+[key keywords]
+[manpage modules/doctools/docidx_plugin_apiref.man docidx_plugin_apiref]
+[key knuth]
+[manpage modules/soundex/soundex.man soundex]
+[key l10n]
+[manpage modules/doctools2base/tcllib_msgcat.man doctools::msgcat]
+[manpage modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c]
+[manpage modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de]
+[manpage modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en]
+[manpage modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr]
+[manpage modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c]
+[manpage modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de]
+[manpage modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en]
+[manpage modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr]
+[key lambda]
+[manpage modules/lambda/lambda.man lambda]
+[key LaTeX]
+[manpage modules/docstrip/docstrip.man docstrip]
+[manpage modules/docstrip/docstrip_util.man docstrip_util]
+[manpage apps/tcldocstrip.man tcldocstrip]
+[key latex]
+[manpage modules/doctools2idx/idx_container.man doctools::idx]
+[manpage modules/doctools/docidx.man doctools::idx]
+[manpage modules/doctools2toc/toc_container.man doctools::toc]
+[manpage modules/doctools/doctoc.man doctools::toc]
+[key latitute]
+[manpage modules/map/map_slippy.man map::slippy]
+[key ldap]
+[manpage modules/ldap/ldap.man ldap]
+[manpage modules/ldap/ldapx.man ldapx]
+[manpage modules/uri/uri.man uri]
+[key {ldap client}]
+[manpage modules/ldap/ldap.man ldap]
+[manpage modules/ldap/ldapx.man ldapx]
+[key ldif]
+[manpage modules/ldap/ldapx.man ldapx]
+[key {least squares}]
+[manpage modules/math/linalg.man math::linearalgebra]
+[key {left outer join}]
+[manpage modules/struct/struct_list.man struct::list]
+[key lemon]
+[manpage modules/page/page_util_norm_lemon.man page_util_norm_lemon]
+[key {level graph}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key lexer]
+[manpage modules/doctools2idx/idx_parse.man doctools::idx::parse]
+[manpage modules/doctools2toc/toc_parse.man doctools::toc::parse]
+[key lexing]
+[manpage modules/string/token.man string::token]
+[manpage modules/string/token_shell.man string::token::shell]
+[key limitsize]
+[manpage modules/virtchannel_transform/limitsize.man tcl::transform::limitsize]
+[key line]
+[manpage modules/math/math_geometry.man math::geometry]
+[key {linear algebra}]
+[manpage modules/math/linalg.man math::linearalgebra]
+[key {linear equations}]
+[manpage modules/math/linalg.man math::linearalgebra]
+[key {linear program}]
+[manpage modules/math/optimize.man math::optimize]
+[key lines]
+[manpage modules/term/ansi_ctrlu.man term::ansi::ctrl::unix]
+[key list]
+[manpage modules/struct/struct_list.man struct::list]
+[manpage modules/struct/queue.man struct::queue]
+[manpage modules/wip/wip.man wip]
+[key listener]
+[manpage modules/term/receive.man term::receive]
+[manpage modules/term/term_bind.man term::receive::bind]
+[key {literate programming}]
+[manpage modules/docstrip/docstrip.man docstrip]
+[manpage modules/docstrip/docstrip_util.man docstrip_util]
+[manpage apps/tcldocstrip.man tcldocstrip]
+[key LL(k)]
+[manpage modules/grammar_me/me_intro.man grammar::me_intro]
+[manpage modules/grammar_peg/peg.man grammar::peg]
+[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp]
+[manpage apps/pt.man pt]
+[manpage modules/pt/pt_astree.man pt::ast]
+[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl]
+[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea]
+[manpage modules/pt/pt_json_language.man pt::json_language]
+[manpage modules/pt/pt_param.man pt::param]
+[manpage modules/pt/pt_pexpression.man pt::pe]
+[manpage modules/pt/pt_pexpr_op.man pt::pe::op]
+[manpage modules/pt/pt_pegrammar.man pt::peg]
+[manpage modules/pt/pt_peg_container.man pt::peg::container]
+[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg]
+[manpage modules/pt/pt_peg_export.man pt::peg::export]
+[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container]
+[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json]
+[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg]
+[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container]
+[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json]
+[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg]
+[manpage modules/pt/pt_peg_import.man pt::peg::import]
+[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container]
+[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json]
+[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg]
+[manpage modules/pt/pt_peg_interp.man pt::peg::interp]
+[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container]
+[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam]
+[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json]
+[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param]
+[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg]
+[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam]
+[manpage modules/pt/pt_peg_language.man pt::peg_language]
+[manpage modules/pt/pt_peg_introduction.man pt::pegrammar]
+[manpage modules/pt/pt_pgen.man pt::pgen]
+[manpage modules/pt/pt_rdengine.man pt::rde]
+[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit]
+[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo]
+[manpage modules/pt/pt_util.man pt::util]
+[manpage modules/pt/pt_to_api.man pt_export_api]
+[manpage modules/pt/pt_from_api.man pt_import_api]
+[manpage modules/pt/pt_introduction.man pt_introduction]
+[manpage modules/pt/pt_parse_peg.man pt_parse_peg]
+[manpage modules/pt/pt_parser_api.man pt_parser_api]
+[manpage modules/pt/pt_peg_op.man pt_peg_op]
+[key {local searching}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key localization]
+[manpage modules/doctools2base/tcllib_msgcat.man doctools::msgcat]
+[manpage modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c]
+[manpage modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de]
+[manpage modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en]
+[manpage modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr]
+[manpage modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c]
+[manpage modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de]
+[manpage modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en]
+[manpage modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr]
+[key location]
+[manpage modules/map/map_geocode_nominatim.man map::geocode::nominatim]
+[manpage modules/map/map_slippy.man map::slippy]
+[manpage modules/map/map_slippy_cache.man map::slippy::cache]
+[manpage modules/map/map_slippy_fetcher.man map::slippy::fetcher]
+[key log]
+[manpage modules/debug/debug.man debug]
+[manpage modules/debug/debug_caller.man debug::caller]
+[manpage modules/debug/debug_heartbeat.man debug::heartbeat]
+[manpage modules/debug/debug_timestamp.man debug::timestamp]
+[manpage modules/doctools/cvs.man doctools::cvs]
+[manpage modules/log/log.man log]
+[manpage modules/log/logger.man logger]
+[key {log level}]
+[manpage modules/log/log.man log]
+[manpage modules/log/logger.man logger]
+[key logger]
+[manpage modules/log/logger.man logger]
+[manpage modules/log/loggerAppender.man logger::appender]
+[manpage modules/log/loggerUtils.man logger::utils]
+[key {longest common subsequence}]
+[manpage modules/struct/struct_list.man struct::list]
+[key longitude]
+[manpage modules/map/map_slippy.man map::slippy]
+[key loop]
+[manpage modules/struct/graph.man struct::graph]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key luhn]
+[manpage modules/valtype/luhn.man valtype::luhn]
+[manpage modules/valtype/luhn5.man valtype::luhn5]
+[key luhn-5]
+[manpage modules/valtype/luhn5.man valtype::luhn5]
+[key macros]
+[manpage modules/doctools2base/nroff_manmacros.man doctools::nroff::man_macros]
+[key mail]
+[manpage modules/imap4/imap4.man imap4]
+[manpage modules/mime/mime.man mime]
+[manpage modules/pop3/pop3.man pop3]
+[manpage modules/mime/smtp.man smtp]
+[key mailto]
+[manpage modules/uri/uri.man uri]
+[key {maker note}]
+[manpage modules/exif/exif.man exif]
+[key man_macros]
+[manpage modules/doctools2base/nroff_manmacros.man doctools::nroff::man_macros]
+[key manpage]
+[manpage modules/doctools/doctools.man doctools]
+[manpage modules/doctools2idx/idx_container.man doctools::idx]
+[manpage modules/doctools/docidx.man doctools::idx]
+[manpage modules/doctools2idx/idx_export.man doctools::idx::export]
+[manpage modules/doctools2idx/idx_import.man doctools::idx::import]
+[manpage modules/doctools/doctoc.man doctools::toc]
+[manpage modules/doctools2toc/toc_export.man doctools::toc::export]
+[manpage modules/doctools2toc/toc_import.man doctools::toc::import]
+[manpage modules/doctools/doctools_plugin_apiref.man doctools_plugin_apiref]
+[manpage modules/dtplite/pkg_dtplite.man dtplite]
+[manpage apps/dtplite.man dtplite]
+[manpage modules/doctools/mpexpand.man mpexpand]
+[key map]
+[manpage modules/generator/generator.man generator]
+[manpage modules/map/map_geocode_nominatim.man map::geocode::nominatim]
+[manpage modules/map/map_slippy.man map::slippy]
+[manpage modules/map/map_slippy_cache.man map::slippy::cache]
+[manpage modules/map/map_slippy_fetcher.man map::slippy::fetcher]
+[manpage modules/mapproj/mapproj.man mapproj]
+[manpage modules/struct/struct_list.man struct::list]
+[key markup]
+[manpage modules/doctools/docidx_intro.man docidx_intro]
+[manpage modules/doctools/docidx_lang_cmdref.man docidx_lang_cmdref]
+[manpage modules/doctools/docidx_lang_faq.man docidx_lang_faq]
+[manpage modules/doctools/docidx_lang_intro.man docidx_lang_intro]
+[manpage modules/doctools/docidx_lang_syntax.man docidx_lang_syntax]
+[manpage modules/doctools/docidx_plugin_apiref.man docidx_plugin_apiref]
+[manpage modules/doctools/doctoc_intro.man doctoc_intro]
+[manpage modules/doctools/doctoc_lang_cmdref.man doctoc_lang_cmdref]
+[manpage modules/doctools/doctoc_lang_faq.man doctoc_lang_faq]
+[manpage modules/doctools/doctoc_lang_intro.man doctoc_lang_intro]
+[manpage modules/doctools/doctoc_lang_syntax.man doctoc_lang_syntax]
+[manpage modules/doctools/doctoc_plugin_apiref.man doctoc_plugin_apiref]
+[manpage modules/doctools/doctools.man doctools]
+[manpage modules/doctools2idx/idx_introduction.man doctools2idx_introduction]
+[manpage modules/doctools2toc/toc_introduction.man doctools2toc_introduction]
+[manpage modules/doctools2idx/idx_container.man doctools::idx]
+[manpage modules/doctools/docidx.man doctools::idx]
+[manpage modules/doctools2idx/idx_export.man doctools::idx::export]
+[manpage modules/doctools2idx/idx_import.man doctools::idx::import]
+[manpage modules/doctools2toc/toc_container.man doctools::toc]
+[manpage modules/doctools/doctoc.man doctools::toc]
+[manpage modules/doctools2toc/toc_export.man doctools::toc::export]
+[manpage modules/doctools2toc/toc_import.man doctools::toc::import]
+[manpage modules/doctools/doctools_intro.man doctools_intro]
+[manpage modules/doctools/doctools_lang_cmdref.man doctools_lang_cmdref]
+[manpage modules/doctools/doctools_lang_faq.man doctools_lang_faq]
+[manpage modules/doctools/doctools_lang_intro.man doctools_lang_intro]
+[manpage modules/doctools/doctools_lang_syntax.man doctools_lang_syntax]
+[manpage modules/doctools/doctools_plugin_apiref.man doctools_plugin_apiref]
+[manpage modules/dtplite/pkg_dtplite.man dtplite]
+[manpage apps/dtplite.man dtplite]
+[manpage modules/doctools/mpexpand.man mpexpand]
+[manpage apps/tcldocstrip.man tcldocstrip]
+[key MasterCard]
+[manpage modules/valtype/cc_mastercard.man valtype::creditcard::mastercard]
+[key matching]
+[manpage modules/grammar_me/me_intro.man grammar::me_intro]
+[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp]
+[manpage apps/pt.man pt]
+[manpage modules/pt/pt_astree.man pt::ast]
+[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl]
+[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea]
+[manpage modules/pt/pt_json_language.man pt::json_language]
+[manpage modules/pt/pt_param.man pt::param]
+[manpage modules/pt/pt_pexpression.man pt::pe]
+[manpage modules/pt/pt_pexpr_op.man pt::pe::op]
+[manpage modules/pt/pt_pegrammar.man pt::peg]
+[manpage modules/pt/pt_peg_container.man pt::peg::container]
+[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg]
+[manpage modules/pt/pt_peg_export.man pt::peg::export]
+[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container]
+[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json]
+[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg]
+[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container]
+[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json]
+[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg]
+[manpage modules/pt/pt_peg_import.man pt::peg::import]
+[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container]
+[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json]
+[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg]
+[manpage modules/pt/pt_peg_interp.man pt::peg::interp]
+[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container]
+[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam]
+[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json]
+[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param]
+[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg]
+[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam]
+[manpage modules/pt/pt_peg_language.man pt::peg_language]
+[manpage modules/pt/pt_peg_introduction.man pt::pegrammar]
+[manpage modules/pt/pt_pgen.man pt::pgen]
+[manpage modules/pt/pt_rdengine.man pt::rde]
+[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit]
+[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo]
+[manpage modules/pt/pt_util.man pt::util]
+[manpage modules/pt/pt_to_api.man pt_export_api]
+[manpage modules/pt/pt_from_api.man pt_import_api]
+[manpage modules/pt/pt_introduction.man pt_introduction]
+[manpage modules/pt/pt_parse_peg.man pt_parse_peg]
+[manpage modules/pt/pt_parser_api.man pt_parser_api]
+[manpage modules/pt/pt_peg_op.man pt_peg_op]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key math]
+[manpage modules/math/math.man math]
+[manpage modules/math/bigfloat.man math::bigfloat]
+[manpage modules/math/bignum.man math::bignum]
+[manpage modules/math/calculus.man math::calculus]
+[manpage modules/math/qcomplex.man math::complexnumbers]
+[manpage modules/math/constants.man math::constants]
+[manpage modules/math/decimal.man math::decimal]
+[manpage modules/math/fuzzy.man math::fuzzy]
+[manpage modules/math/math_geometry.man math::geometry]
+[manpage modules/math/interpolate.man math::interpolate]
+[manpage modules/math/linalg.man math::linearalgebra]
+[manpage modules/math/optimize.man math::optimize]
+[manpage modules/math/polynomials.man math::polynomials]
+[manpage modules/math/rational_funcs.man math::rationalfunctions]
+[manpage modules/math/special.man math::special]
+[manpage modules/simulation/annealing.man simulation::annealing]
+[manpage modules/simulation/montecarlo.man simulation::montecarlo]
+[manpage modules/simulation/simulation_random.man simulation::random]
+[key mathematics]
+[manpage modules/math/fourier.man math::fourier]
+[manpage modules/math/statistics.man math::statistics]
+[key matrices]
+[manpage modules/math/linalg.man math::linearalgebra]
+[key matrix]
+[manpage modules/csv/csv.man csv]
+[manpage modules/math/linalg.man math::linearalgebra]
+[manpage modules/report/report.man report]
+[manpage modules/struct/matrix.man struct::matrix]
+[manpage modules/struct/matrix1.man struct::matrix_v1]
+[manpage modules/struct/queue.man struct::queue]
+[manpage modules/struct/stack.man struct::stack]
+[key {max cut}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key maximum]
+[manpage modules/math/optimize.man math::optimize]
+[key {maximum flow}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key md4]
+[manpage modules/md4/md4.man md4]
+[manpage modules/ripemd/ripemd128.man ripemd128]
+[manpage modules/ripemd/ripemd160.man ripemd160]
+[key md5]
+[manpage modules/md5/md5.man md5]
+[manpage modules/md5crypt/md5crypt.man md5crypt]
+[key md5crypt]
+[manpage modules/md5crypt/md5crypt.man md5crypt]
+[key medicare]
+[manpage modules/valtype/usnpi.man valtype::usnpi]
+[key {mega widget}]
+[manpage modules/snit/snit.man snit]
+[manpage modules/snit/snitfaq.man snitfaq]
+[key membership]
+[manpage modules/struct/struct_set.man struct::set]
+[key menu]
+[manpage modules/term/ansi_cmacros.man term::ansi::code::macros]
+[manpage modules/term/imenu.man term::interact::menu]
+[key merge]
+[manpage modules/virtchannel_base/randseed.man tcl::randomseed]
+[manpage modules/uev/uevent_onidle.man uevent::onidle]
+[key {merge find}]
+[manpage modules/struct/disjointset.man struct::disjointset]
+[key merging]
+[manpage modules/bench/bench.man bench]
+[key message]
+[manpage modules/comm/comm.man comm]
+[manpage modules/comm/comm_wire.man comm_wire]
+[manpage modules/log/log.man log]
+[key {message catalog}]
+[manpage modules/doctools2base/tcllib_msgcat.man doctools::msgcat]
+[manpage modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c]
+[manpage modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de]
+[manpage modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en]
+[manpage modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr]
+[manpage modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c]
+[manpage modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de]
+[manpage modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en]
+[manpage modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr]
+[key {message level}]
+[manpage modules/log/log.man log]
+[key {message package}]
+[manpage modules/doctools2base/tcllib_msgcat.man doctools::msgcat]
+[manpage modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c]
+[manpage modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de]
+[manpage modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en]
+[manpage modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr]
+[manpage modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c]
+[manpage modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de]
+[manpage modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en]
+[manpage modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr]
+[key message-digest]
+[manpage modules/md4/md4.man md4]
+[manpage modules/md5/md5.man md5]
+[manpage modules/md5crypt/md5crypt.man md5crypt]
+[manpage modules/otp/otp.man otp]
+[manpage modules/ripemd/ripemd128.man ripemd128]
+[manpage modules/ripemd/ripemd160.man ripemd160]
+[manpage modules/sha1/sha1.man sha1]
+[manpage modules/sha1/sha256.man sha256]
+[key metakit]
+[manpage modules/tie/tie.man tie]
+[manpage modules/tie/tie_std.man tie]
+[key method]
+[manpage modules/interp/deleg_method.man deleg_method]
+[manpage modules/interp/tcllib_interp.man interp]
+[key {method reference}]
+[manpage modules/ooutil/ooutil.man oo::util]
+[manpage modules/tool/meta.man oo::util]
+[key mime]
+[manpage modules/fumagic/cfront.man fileutil::magic::cfront]
+[manpage modules/fumagic/cgen.man fileutil::magic::cgen]
+[manpage modules/fumagic/mimetypes.man fileutil::magic::mimetype]
+[manpage modules/fumagic/rtcore.man fileutil::magic::rt]
+[manpage modules/mime/mime.man mime]
+[manpage modules/mime/smtp.man smtp]
+[key {minimal spanning tree}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key minimum]
+[manpage modules/math/optimize.man math::optimize]
+[key {minimum cost flow}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key {minimum degree spanning tree}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key {minimum diameter spanning tree}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key {mobile phone}]
+[manpage modules/valtype/imei.man valtype::imei]
+[key module]
+[manpage modules/docstrip/docstrip_util.man docstrip_util]
+[key {montecarlo simulation}]
+[manpage modules/simulation/montecarlo.man simulation::montecarlo]
+[key move]
+[manpage modules/fileutil/multi.man fileutil::multi]
+[manpage modules/fileutil/multiop.man fileutil::multi::op]
+[key multi-file]
+[manpage modules/fileutil/multi.man fileutil::multi]
+[manpage modules/fileutil/multiop.man fileutil::multi::op]
+[key multiplexer]
+[manpage modules/multiplexer/multiplexer.man multiplexer]
+[key multiprecision]
+[manpage modules/math/bigfloat.man math::bigfloat]
+[manpage modules/math/bignum.man math::bignum]
+[key {my method}]
+[manpage modules/ooutil/ooutil.man oo::util]
+[manpage modules/tool/meta.man oo::util]
+[key {name service}]
+[manpage modules/nns/nns_client.man nameserv]
+[manpage modules/nns/nns_auto.man nameserv::auto]
+[manpage modules/nns/nns_common.man nameserv::common]
+[manpage modules/nns/nns_protocol.man nameserv::protocol]
+[manpage modules/nns/nns_server.man nameserv::server]
+[manpage apps/nns.man nns]
+[manpage modules/nns/nns_intro.man nns_intro]
+[manpage apps/nnsd.man nnsd]
+[manpage apps/nnslog.man nnslog]
+[key {namespace unknown}]
+[manpage modules/namespacex/namespacex.man namespacex]
+[key {namespace utilities}]
+[manpage modules/namespacex/namespacex.man namespacex]
+[key narrative]
+[manpage modules/debug/debug.man debug]
+[manpage modules/debug/debug_caller.man debug::caller]
+[manpage modules/debug/debug_heartbeat.man debug::heartbeat]
+[manpage modules/debug/debug_timestamp.man debug::timestamp]
+[key {National Provider Identifier}]
+[manpage modules/valtype/usnpi.man valtype::usnpi]
+[key neighbour]
+[manpage modules/struct/graph.man struct::graph]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key net]
+[manpage modules/ftp/ftp.man ftp]
+[manpage modules/ftp/ftp_geturl.man ftp::geturl]
+[manpage modules/imap4/imap4.man imap4]
+[manpage modules/mime/mime.man mime]
+[manpage modules/mime/smtp.man smtp]
+[manpage modules/websocket/websocket.man websocket]
+[key nettool]
+[manpage modules/nettool/nettool.man nettool]
+[key network]
+[manpage modules/pop3d/pop3d.man pop3d]
+[manpage modules/pop3d/pop3d_dbox.man pop3d::dbox]
+[manpage modules/pop3d/pop3d_udb.man pop3d::udb]
+[key news]
+[manpage modules/nntp/nntp.man nntp]
+[manpage modules/uri/uri.man uri]
+[key {next permutation}]
+[manpage modules/struct/struct_list.man struct::list]
+[key nmea]
+[manpage modules/nmea/nmea.man nmea]
+[key nntp]
+[manpage modules/nntp/nntp.man nntp]
+[key nntpclient]
+[manpage modules/nntp/nntp.man nntp]
+[key no-op]
+[manpage modules/control/control.man control]
+[key node]
+[manpage modules/struct/graph.man struct::graph]
+[manpage modules/struct/graphops.man struct::graph::op]
+[manpage modules/struct/struct_tree.man struct::tree]
+[key nominatim]
+[manpage modules/map/map_geocode_nominatim.man map::geocode::nominatim]
+[key normalization]
+[manpage modules/bench/bench.man bench]
+[manpage modules/page/page_util_norm_lemon.man page_util_norm_lemon]
+[manpage modules/page/page_util_norm_peg.man page_util_norm_peg]
+[manpage modules/stringprep/unicode.man unicode]
+[key NPI]
+[manpage modules/valtype/usnpi.man valtype::usnpi]
+[key nroff]
+[manpage modules/doctools/doctools.man doctools]
+[manpage modules/doctools2idx/idx_container.man doctools::idx]
+[manpage modules/doctools/docidx.man doctools::idx]
+[manpage modules/doctools2idx/idx_export.man doctools::idx::export]
+[manpage modules/doctools2idx/idx_export_nroff.man doctools::idx::export::nroff]
+[manpage modules/doctools2base/nroff_manmacros.man doctools::nroff::man_macros]
+[manpage modules/doctools2toc/toc_container.man doctools::toc]
+[manpage modules/doctools/doctoc.man doctools::toc]
+[manpage modules/doctools2toc/toc_export.man doctools::toc::export]
+[manpage modules/doctools2toc/toc_export_nroff.man doctools::toc::export::nroff]
+[manpage modules/dtplite/pkg_dtplite.man dtplite]
+[manpage apps/dtplite.man dtplite]
+[manpage modules/doctools/mpexpand.man mpexpand]
+[key NTLM]
+[manpage modules/sasl/ntlm.man SASL::NTLM]
+[key NTP]
+[manpage modules/ntp/ntp_time.man ntp_time]
+[key null]
+[manpage modules/virtchannel_base/tcllib_null.man tcl::chan::null]
+[manpage modules/virtchannel_base/nullzero.man tcl::chan::nullzero]
+[key {number theory}]
+[manpage modules/math/numtheory.man math::numtheory]
+[key oauth]
+[manpage modules/oauth/oauth.man oauth]
+[key object]
+[manpage modules/snit/snit.man snit]
+[manpage modules/snit/snitfaq.man snitfaq]
+[manpage modules/stooop/stooop.man stooop]
+[manpage modules/stooop/switched.man switched]
+[key {object oriented}]
+[manpage modules/snit/snit.man snit]
+[manpage modules/snit/snitfaq.man snitfaq]
+[manpage modules/stooop/stooop.man stooop]
+[manpage modules/stooop/switched.man switched]
+[key observer]
+[manpage modules/hook/hook.man hook]
+[manpage modules/virtchannel_transform/observe.man tcl::transform::observe]
+[key odie]
+[manpage modules/cron/cron.man cron]
+[manpage modules/nettool/nettool.man nettool]
+[manpage modules/processman/processman.man processman]
+[key on-idle]
+[manpage modules/uev/uevent_onidle.man uevent::onidle]
+[key {one time pad}]
+[manpage modules/virtchannel_transform/vt_otp.man tcl::transform::otp]
+[key optimization]
+[manpage modules/math/optimize.man math::optimize]
+[manpage modules/simulation/annealing.man simulation::annealing]
+[key {ordered list}]
+[manpage modules/struct/prioqueue.man struct::prioqueue]
+[key otp]
+[manpage modules/virtchannel_transform/vt_otp.man tcl::transform::otp]
+[key {outer join}]
+[manpage modules/struct/struct_list.man struct::list]
+[key package]
+[manpage modules/csv/csv.man csv]
+[key {package indexing}]
+[manpage modules/docstrip/docstrip_util.man docstrip_util]
+[key page]
+[manpage modules/page/page_intro.man page_intro]
+[manpage modules/page/page_pluginmgr.man page_pluginmgr]
+[manpage modules/page/page_util_flow.man page_util_flow]
+[manpage modules/page/page_util_norm_lemon.man page_util_norm_lemon]
+[manpage modules/page/page_util_norm_peg.man page_util_norm_peg]
+[manpage modules/page/page_util_peg.man page_util_peg]
+[manpage modules/page/page_util_quote.man page_util_quote]
+[key pager]
+[manpage modules/term/ipager.man term::interact::pager]
+[key paragraph]
+[manpage modules/textutil/textutil.man textutil]
+[manpage modules/textutil/adjust.man textutil::adjust]
+[key PARAM]
+[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param]
+[key {parameter entry form}]
+[manpage modules/tepam/tepam_introduction.man tepam]
+[manpage modules/tepam/tepam_argument_dialogbox.man tepam::argument_dialogbox]
+[key parser]
+[manpage modules/doctools2idx/idx_parse.man doctools::idx::parse]
+[manpage modules/doctools2base/tcl_parse.man doctools::tcl::parse]
+[manpage modules/doctools2toc/toc_parse.man doctools::toc::parse]
+[manpage modules/grammar_aycock/aycock.man grammar::aycock]
+[manpage apps/pt.man pt]
+[manpage modules/pt/pt_astree.man pt::ast]
+[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl]
+[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea]
+[manpage modules/pt/pt_json_language.man pt::json_language]
+[manpage modules/pt/pt_param.man pt::param]
+[manpage modules/pt/pt_pexpression.man pt::pe]
+[manpage modules/pt/pt_pexpr_op.man pt::pe::op]
+[manpage modules/pt/pt_pegrammar.man pt::peg]
+[manpage modules/pt/pt_peg_container.man pt::peg::container]
+[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg]
+[manpage modules/pt/pt_peg_export.man pt::peg::export]
+[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container]
+[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json]
+[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg]
+[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container]
+[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json]
+[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg]
+[manpage modules/pt/pt_peg_import.man pt::peg::import]
+[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container]
+[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json]
+[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg]
+[manpage modules/pt/pt_peg_interp.man pt::peg::interp]
+[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container]
+[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam]
+[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json]
+[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param]
+[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg]
+[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam]
+[manpage modules/pt/pt_peg_language.man pt::peg_language]
+[manpage modules/pt/pt_peg_introduction.man pt::pegrammar]
+[manpage modules/pt/pt_pgen.man pt::pgen]
+[manpage modules/pt/pt_rdengine.man pt::rde]
+[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit]
+[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo]
+[manpage modules/pt/pt_util.man pt::util]
+[manpage modules/pt/pt_to_api.man pt_export_api]
+[manpage modules/pt/pt_from_api.man pt_import_api]
+[manpage modules/pt/pt_introduction.man pt_introduction]
+[manpage modules/pt/pt_parse_peg.man pt_parse_peg]
+[manpage modules/pt/pt_parser_api.man pt_parser_api]
+[manpage modules/pt/pt_peg_op.man pt_peg_op]
+[manpage modules/amazon-s3/xsxp.man xsxp]
+[key {parser generator}]
+[manpage apps/page.man page]
+[manpage modules/page/page_intro.man page_intro]
+[manpage modules/page/page_pluginmgr.man page_pluginmgr]
+[manpage modules/page/page_util_flow.man page_util_flow]
+[manpage modules/page/page_util_norm_lemon.man page_util_norm_lemon]
+[manpage modules/page/page_util_norm_peg.man page_util_norm_peg]
+[manpage modules/page/page_util_peg.man page_util_peg]
+[manpage modules/page/page_util_quote.man page_util_quote]
+[key parsing]
+[manpage modules/bench/bench_read.man bench::in]
+[manpage modules/bibtex/bibtex.man bibtex]
+[manpage modules/doctools2idx/idx_introduction.man doctools2idx_introduction]
+[manpage modules/doctools2toc/toc_introduction.man doctools2toc_introduction]
+[manpage modules/doctools2idx/idx_container.man doctools::idx]
+[manpage modules/doctools2idx/idx_import.man doctools::idx::import]
+[manpage modules/doctools2toc/toc_container.man doctools::toc]
+[manpage modules/doctools2toc/toc_import.man doctools::toc::import]
+[manpage modules/grammar_aycock/aycock.man grammar::aycock]
+[manpage modules/grammar_fa/fa.man grammar::fa]
+[manpage modules/grammar_fa/dacceptor.man grammar::fa::dacceptor]
+[manpage modules/grammar_fa/dexec.man grammar::fa::dexec]
+[manpage modules/grammar_fa/faop.man grammar::fa::op]
+[manpage modules/grammar_me/me_cpu.man grammar::me::cpu]
+[manpage modules/grammar_me/me_cpucore.man grammar::me::cpu::core]
+[manpage modules/grammar_me/gasm.man grammar::me::cpu::gasm]
+[manpage modules/grammar_me/me_tcl.man grammar::me::tcl]
+[manpage modules/grammar_me/me_intro.man grammar::me_intro]
+[manpage modules/grammar_me/me_vm.man grammar::me_vm]
+[manpage modules/grammar_peg/peg.man grammar::peg]
+[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp]
+[manpage modules/htmlparse/htmlparse.man htmlparse]
+[manpage modules/yaml/huddle.man huddle]
+[manpage modules/string/token_shell.man string::token::shell]
+[manpage modules/yaml/yaml.man yaml]
+[key {parsing expression}]
+[manpage modules/grammar_peg/peg.man grammar::peg]
+[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp]
+[manpage apps/pt.man pt]
+[manpage modules/pt/pt_astree.man pt::ast]
+[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl]
+[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea]
+[manpage modules/pt/pt_json_language.man pt::json_language]
+[manpage modules/pt/pt_param.man pt::param]
+[manpage modules/pt/pt_pexpression.man pt::pe]
+[manpage modules/pt/pt_pexpr_op.man pt::pe::op]
+[manpage modules/pt/pt_pegrammar.man pt::peg]
+[manpage modules/pt/pt_peg_container.man pt::peg::container]
+[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg]
+[manpage modules/pt/pt_peg_export.man pt::peg::export]
+[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container]
+[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json]
+[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg]
+[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container]
+[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json]
+[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg]
+[manpage modules/pt/pt_peg_import.man pt::peg::import]
+[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container]
+[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json]
+[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg]
+[manpage modules/pt/pt_peg_interp.man pt::peg::interp]
+[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container]
+[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam]
+[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json]
+[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param]
+[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg]
+[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam]
+[manpage modules/pt/pt_peg_language.man pt::peg_language]
+[manpage modules/pt/pt_peg_introduction.man pt::pegrammar]
+[manpage modules/pt/pt_pgen.man pt::pgen]
+[manpage modules/pt/pt_rdengine.man pt::rde]
+[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit]
+[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo]
+[manpage modules/pt/pt_util.man pt::util]
+[manpage modules/pt/pt_to_api.man pt_export_api]
+[manpage modules/pt/pt_from_api.man pt_import_api]
+[manpage modules/pt/pt_introduction.man pt_introduction]
+[manpage modules/pt/pt_parse_peg.man pt_parse_peg]
+[manpage modules/pt/pt_parser_api.man pt_parser_api]
+[manpage modules/pt/pt_peg_op.man pt_peg_op]
+[key {parsing expression grammar}]
+[manpage modules/grammar_me/me_intro.man grammar::me_intro]
+[manpage modules/grammar_peg/peg.man grammar::peg]
+[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp]
+[manpage modules/page/page_util_peg.man page_util_peg]
+[manpage apps/pt.man pt]
+[manpage modules/pt/pt_astree.man pt::ast]
+[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl]
+[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea]
+[manpage modules/pt/pt_json_language.man pt::json_language]
+[manpage modules/pt/pt_param.man pt::param]
+[manpage modules/pt/pt_pexpression.man pt::pe]
+[manpage modules/pt/pt_pexpr_op.man pt::pe::op]
+[manpage modules/pt/pt_pegrammar.man pt::peg]
+[manpage modules/pt/pt_peg_container.man pt::peg::container]
+[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg]
+[manpage modules/pt/pt_peg_export.man pt::peg::export]
+[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container]
+[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json]
+[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg]
+[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container]
+[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json]
+[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg]
+[manpage modules/pt/pt_peg_import.man pt::peg::import]
+[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container]
+[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json]
+[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg]
+[manpage modules/pt/pt_peg_interp.man pt::peg::interp]
+[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container]
+[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam]
+[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json]
+[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param]
+[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg]
+[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam]
+[manpage modules/pt/pt_peg_language.man pt::peg_language]
+[manpage modules/pt/pt_peg_introduction.man pt::pegrammar]
+[manpage modules/pt/pt_pgen.man pt::pgen]
+[manpage modules/pt/pt_rdengine.man pt::rde]
+[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit]
+[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo]
+[manpage modules/pt/pt_util.man pt::util]
+[manpage modules/pt/pt_to_api.man pt_export_api]
+[manpage modules/pt/pt_from_api.man pt_import_api]
+[manpage modules/pt/pt_introduction.man pt_introduction]
+[manpage modules/pt/pt_parse_peg.man pt_parse_peg]
+[manpage modules/pt/pt_parser_api.man pt_parser_api]
+[manpage modules/pt/pt_peg_op.man pt_peg_op]
+[key {partial application}]
+[manpage modules/lambda/lambda.man lambda]
+[key partition]
+[manpage modules/struct/disjointset.man struct::disjointset]
+[key {partitioned set}]
+[manpage modules/struct/disjointset.man struct::disjointset]
+[key passive]
+[manpage modules/transfer/connect.man transfer::connect]
+[key password]
+[manpage modules/otp/otp.man otp]
+[key patch]
+[manpage modules/docstrip/docstrip_util.man docstrip_util]
+[key patching]
+[manpage modules/rcs/rcs.man rcs]
+[key PEG]
+[manpage modules/grammar_me/me_intro.man grammar::me_intro]
+[manpage modules/page/page_util_norm_peg.man page_util_norm_peg]
+[manpage modules/page/page_util_peg.man page_util_peg]
+[manpage apps/pt.man pt]
+[manpage modules/pt/pt_astree.man pt::ast]
+[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl]
+[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea]
+[manpage modules/pt/pt_json_language.man pt::json_language]
+[manpage modules/pt/pt_param.man pt::param]
+[manpage modules/pt/pt_pexpression.man pt::pe]
+[manpage modules/pt/pt_pexpr_op.man pt::pe::op]
+[manpage modules/pt/pt_pegrammar.man pt::peg]
+[manpage modules/pt/pt_peg_container.man pt::peg::container]
+[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg]
+[manpage modules/pt/pt_peg_export.man pt::peg::export]
+[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container]
+[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json]
+[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg]
+[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container]
+[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json]
+[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg]
+[manpage modules/pt/pt_peg_import.man pt::peg::import]
+[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container]
+[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json]
+[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg]
+[manpage modules/pt/pt_peg_interp.man pt::peg::interp]
+[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container]
+[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam]
+[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json]
+[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param]
+[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg]
+[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam]
+[manpage modules/pt/pt_peg_language.man pt::peg_language]
+[manpage modules/pt/pt_peg_introduction.man pt::pegrammar]
+[manpage modules/pt/pt_pgen.man pt::pgen]
+[manpage modules/pt/pt_rdengine.man pt::rde]
+[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit]
+[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo]
+[manpage modules/pt/pt_util.man pt::util]
+[manpage modules/pt/pt_to_api.man pt_export_api]
+[manpage modules/pt/pt_from_api.man pt_import_api]
+[manpage modules/pt/pt_introduction.man pt_introduction]
+[manpage modules/pt/pt_parse_peg.man pt_parse_peg]
+[manpage modules/pt/pt_parser_api.man pt_parser_api]
+[manpage modules/pt/pt_peg_op.man pt_peg_op]
+[key performance]
+[manpage modules/bench/bench.man bench]
+[manpage modules/bench/bench_read.man bench::in]
+[manpage modules/bench/bench_wcsv.man bench::out::csv]
+[manpage modules/bench/bench_wtext.man bench::out::text]
+[manpage modules/bench/bench_intro.man bench_intro]
+[manpage modules/bench/bench_lang_intro.man bench_lang_intro]
+[manpage modules/bench/bench_lang_spec.man bench_lang_spec]
+[manpage modules/profiler/profiler.man profiler]
+[key permutation]
+[manpage modules/struct/struct_list.man struct::list]
+[key persistence]
+[manpage modules/tie/tie.man tie]
+[manpage modules/tie/tie_std.man tie]
+[key phone]
+[manpage modules/valtype/imei.man valtype::imei]
+[key pi]
+[manpage modules/math/constants.man math::constants]
+[key {plain text}]
+[manpage modules/doctools2idx/idx_export_text.man doctools::idx::export::text]
+[manpage modules/doctools2toc/toc_export_text.man doctools::toc::export::text]
+[key {plane geometry}]
+[manpage modules/math/math_geometry.man math::geometry]
+[key plugin]
+[manpage modules/doctools/docidx_plugin_apiref.man docidx_plugin_apiref]
+[manpage modules/doctools/doctoc_plugin_apiref.man doctoc_plugin_apiref]
+[manpage modules/doctools2idx/idx_introduction.man doctools2idx_introduction]
+[manpage modules/doctools2toc/toc_introduction.man doctools2toc_introduction]
+[manpage modules/doctools2base/html_cssdefaults.man doctools::html::cssdefaults]
+[manpage modules/doctools2idx/idx_container.man doctools::idx]
+[manpage modules/doctools2idx/idx_export.man doctools::idx::export]
+[manpage modules/doctools2idx/idx_import.man doctools::idx::import]
+[manpage modules/doctools2base/nroff_manmacros.man doctools::nroff::man_macros]
+[manpage modules/doctools2toc/toc_container.man doctools::toc]
+[manpage modules/doctools2toc/toc_export.man doctools::toc::export]
+[manpage modules/doctools2toc/toc_import.man doctools::toc::import]
+[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container]
+[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json]
+[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg]
+[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json]
+[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg]
+[key {plugin management}]
+[manpage modules/pluginmgr/pluginmgr.man pluginmgr]
+[key {plugin search}]
+[manpage modules/pluginmgr/pluginmgr.man pluginmgr]
+[key png]
+[manpage modules/png/png.man png]
+[key point]
+[manpage modules/math/math_geometry.man math::geometry]
+[key {polynomial functions}]
+[manpage modules/math/polynomials.man math::polynomials]
+[key pool]
+[manpage modules/struct/pool.man struct::pool]
+[manpage modules/struct/queue.man struct::queue]
+[key pop]
+[manpage modules/pop3/pop3.man pop3]
+[key pop3]
+[manpage modules/pop3/pop3.man pop3]
+[manpage modules/pop3d/pop3d.man pop3d]
+[manpage modules/pop3d/pop3d_dbox.man pop3d::dbox]
+[manpage modules/pop3d/pop3d_udb.man pop3d::udb]
+[key post-order]
+[manpage modules/struct/struct_tree.man struct::tree]
+[key pre-order]
+[manpage modules/struct/struct_tree.man struct::tree]
+[key prefix]
+[manpage modules/textutil/textutil_string.man textutil::string]
+[manpage modules/textutil/trim.man textutil::trim]
+[key prime]
+[manpage modules/math/numtheory.man math::numtheory]
+[key prioqueue]
+[manpage modules/struct/prioqueue.man struct::prioqueue]
+[manpage modules/struct/queue.man struct::queue]
+[key {priority queue}]
+[manpage modules/struct/prioqueue.man struct::prioqueue]
+[key proc]
+[manpage modules/lambda/lambda.man lambda]
+[key procedure]
+[manpage modules/interp/deleg_proc.man deleg_proc]
+[manpage modules/tepam/tepam_introduction.man tepam]
+[manpage modules/tepam/tepam_procedure.man tepam::procedure]
+[key {procedure documentation}]
+[manpage modules/tepam/tepam_doc_gen.man tepam::doc_gen]
+[key processman]
+[manpage modules/processman/processman.man processman]
+[key producer]
+[manpage modules/hook/hook.man hook]
+[key profile]
+[manpage modules/profiler/profiler.man profiler]
+[key projection]
+[manpage modules/mapproj/mapproj.man mapproj]
+[key prospero]
+[manpage modules/uri/uri.man uri]
+[key protocol]
+[manpage modules/asn/asn.man asn]
+[manpage modules/ldap/ldap.man ldap]
+[manpage modules/ldap/ldapx.man ldapx]
+[manpage modules/nns/nns_protocol.man nameserv::protocol]
+[manpage modules/pop3d/pop3d.man pop3d]
+[manpage modules/pop3d/pop3d_dbox.man pop3d::dbox]
+[manpage modules/pop3d/pop3d_udb.man pop3d::udb]
+[key proxy]
+[manpage modules/http/autoproxy.man autoproxy]
+[key {public key cipher}]
+[manpage modules/pki/pki.man pki]
+[key publisher]
+[manpage modules/hook/hook.man hook]
+[key {push down automaton}]
+[manpage modules/grammar_me/me_intro.man grammar::me_intro]
+[manpage modules/grammar_peg/peg.man grammar::peg]
+[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp]
+[manpage apps/pt.man pt]
+[manpage modules/pt/pt_astree.man pt::ast]
+[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl]
+[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea]
+[manpage modules/pt/pt_json_language.man pt::json_language]
+[manpage modules/pt/pt_param.man pt::param]
+[manpage modules/pt/pt_pexpression.man pt::pe]
+[manpage modules/pt/pt_pexpr_op.man pt::pe::op]
+[manpage modules/pt/pt_pegrammar.man pt::peg]
+[manpage modules/pt/pt_peg_container.man pt::peg::container]
+[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg]
+[manpage modules/pt/pt_peg_export.man pt::peg::export]
+[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container]
+[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json]
+[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg]
+[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container]
+[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json]
+[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg]
+[manpage modules/pt/pt_peg_import.man pt::peg::import]
+[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container]
+[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json]
+[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg]
+[manpage modules/pt/pt_peg_interp.man pt::peg::interp]
+[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container]
+[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam]
+[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json]
+[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param]
+[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg]
+[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam]
+[manpage modules/pt/pt_peg_language.man pt::peg_language]
+[manpage modules/pt/pt_peg_introduction.man pt::pegrammar]
+[manpage modules/pt/pt_pgen.man pt::pgen]
+[manpage modules/pt/pt_rdengine.man pt::rde]
+[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit]
+[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo]
+[manpage modules/pt/pt_util.man pt::util]
+[manpage modules/pt/pt_to_api.man pt_export_api]
+[manpage modules/pt/pt_from_api.man pt_import_api]
+[manpage modules/pt/pt_introduction.man pt_introduction]
+[manpage modules/pt/pt_parse_peg.man pt_parse_peg]
+[manpage modules/pt/pt_parser_api.man pt_parser_api]
+[manpage modules/pt/pt_peg_op.man pt_peg_op]
+[key queue]
+[manpage modules/csv/csv.man csv]
+[manpage modules/htmlparse/htmlparse.man htmlparse]
+[manpage modules/struct/stack.man struct::stack]
+[manpage modules/transfer/tqueue.man transfer::copy::queue]
+[key quoting]
+[manpage modules/page/page_util_quote.man page_util_quote]
+[key radians]
+[manpage modules/math/constants.man math::constants]
+[manpage modules/units/units.man units]
+[key radiobutton]
+[manpage modules/html/html.man html]
+[key radius]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key random]
+[manpage modules/virtchannel_base/tcllib_random.man tcl::chan::random]
+[manpage modules/virtchannel_base/randseed.man tcl::randomseed]
+[key {random numbers}]
+[manpage modules/simulation/simulation_random.man simulation::random]
+[key {rational functions}]
+[manpage modules/math/rational_funcs.man math::rationalfunctions]
+[key raw]
+[manpage modules/term/ansi_ctrlu.man term::ansi::ctrl::unix]
+[key rc4]
+[manpage modules/rc4/rc4.man rc4]
+[key RCS]
+[manpage modules/rcs/rcs.man rcs]
+[key {RCS patch}]
+[manpage modules/rcs/rcs.man rcs]
+[key read]
+[manpage modules/coroutine/tcllib_coroutine.man coroutine]
+[manpage modules/coroutine/coro_auto.man coroutine::auto]
+[key reading]
+[manpage modules/bench/bench_read.man bench::in]
+[key receiver]
+[manpage modules/term/receive.man term::receive]
+[manpage modules/term/term_bind.man term::receive::bind]
+[manpage modules/transfer/receiver.man transfer::receiver]
+[key reconnect]
+[manpage modules/nns/nns_auto.man nameserv::auto]
+[key record]
+[manpage modules/struct/queue.man struct::queue]
+[manpage modules/struct/record.man struct::record]
+[key {recursive descent}]
+[manpage modules/grammar_me/me_intro.man grammar::me_intro]
+[manpage modules/grammar_peg/peg.man grammar::peg]
+[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp]
+[manpage apps/pt.man pt]
+[manpage modules/pt/pt_astree.man pt::ast]
+[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl]
+[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea]
+[manpage modules/pt/pt_json_language.man pt::json_language]
+[manpage modules/pt/pt_param.man pt::param]
+[manpage modules/pt/pt_pexpression.man pt::pe]
+[manpage modules/pt/pt_pexpr_op.man pt::pe::op]
+[manpage modules/pt/pt_pegrammar.man pt::peg]
+[manpage modules/pt/pt_peg_container.man pt::peg::container]
+[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg]
+[manpage modules/pt/pt_peg_export.man pt::peg::export]
+[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container]
+[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json]
+[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg]
+[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container]
+[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json]
+[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg]
+[manpage modules/pt/pt_peg_import.man pt::peg::import]
+[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container]
+[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json]
+[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg]
+[manpage modules/pt/pt_peg_interp.man pt::peg::interp]
+[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container]
+[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam]
+[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json]
+[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param]
+[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg]
+[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam]
+[manpage modules/pt/pt_peg_language.man pt::peg_language]
+[manpage modules/pt/pt_peg_introduction.man pt::pegrammar]
+[manpage modules/pt/pt_pgen.man pt::pgen]
+[manpage modules/pt/pt_rdengine.man pt::rde]
+[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit]
+[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo]
+[manpage modules/pt/pt_util.man pt::util]
+[manpage modules/pt/pt_to_api.man pt_export_api]
+[manpage modules/pt/pt_from_api.man pt_import_api]
+[manpage modules/pt/pt_introduction.man pt_introduction]
+[manpage modules/pt/pt_parse_peg.man pt_parse_peg]
+[manpage modules/pt/pt_parser_api.man pt_parser_api]
+[manpage modules/pt/pt_peg_op.man pt_peg_op]
+[key reduce]
+[manpage modules/generator/generator.man generator]
+[manpage modules/struct/struct_list.man struct::list]
+[key reference]
+[manpage modules/doctools2idx/idx_container.man doctools::idx]
+[manpage modules/doctools2idx/idx_export.man doctools::idx::export]
+[manpage modules/doctools2idx/idx_import.man doctools::idx::import]
+[manpage modules/doctools2toc/toc_container.man doctools::toc]
+[manpage modules/doctools2toc/toc_export.man doctools::toc::export]
+[manpage modules/doctools2toc/toc_import.man doctools::toc::import]
+[key {reflected channel}]
+[manpage modules/virtchannel_base/cat.man tcl::chan::cat]
+[manpage modules/virtchannel_core/core.man tcl::chan::core]
+[manpage modules/virtchannel_core/events.man tcl::chan::events]
+[manpage modules/virtchannel_base/facade.man tcl::chan::facade]
+[manpage modules/virtchannel_base/tcllib_fifo.man tcl::chan::fifo]
+[manpage modules/virtchannel_base/tcllib_fifo2.man tcl::chan::fifo2]
+[manpage modules/virtchannel_base/halfpipe.man tcl::chan::halfpipe]
+[manpage modules/virtchannel_base/tcllib_memchan.man tcl::chan::memchan]
+[manpage modules/virtchannel_base/tcllib_null.man tcl::chan::null]
+[manpage modules/virtchannel_base/nullzero.man tcl::chan::nullzero]
+[manpage modules/virtchannel_base/tcllib_random.man tcl::chan::random]
+[manpage modules/virtchannel_base/std.man tcl::chan::std]
+[manpage modules/virtchannel_base/tcllib_string.man tcl::chan::string]
+[manpage modules/virtchannel_base/textwindow.man tcl::chan::textwindow]
+[manpage modules/virtchannel_base/tcllib_variable.man tcl::chan::variable]
+[manpage modules/virtchannel_base/tcllib_zero.man tcl::chan::zero]
+[manpage modules/virtchannel_base/randseed.man tcl::randomseed]
+[manpage modules/virtchannel_transform/adler32.man tcl::transform::adler32]
+[manpage modules/virtchannel_transform/vt_base64.man tcl::transform::base64]
+[manpage modules/virtchannel_core/transformcore.man tcl::transform::core]
+[manpage modules/virtchannel_transform/vt_counter.man tcl::transform::counter]
+[manpage modules/virtchannel_transform/vt_crc32.man tcl::transform::crc32]
+[manpage modules/virtchannel_transform/hex.man tcl::transform::hex]
+[manpage modules/virtchannel_transform/identity.man tcl::transform::identity]
+[manpage modules/virtchannel_transform/limitsize.man tcl::transform::limitsize]
+[manpage modules/virtchannel_transform/observe.man tcl::transform::observe]
+[manpage modules/virtchannel_transform/vt_otp.man tcl::transform::otp]
+[manpage modules/virtchannel_transform/rot.man tcl::transform::rot]
+[manpage modules/virtchannel_transform/spacer.man tcl::transform::spacer]
+[manpage modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib]
+[key regex]
+[manpage modules/string/token.man string::token]
+[key {regular expression}]
+[manpage modules/grammar_fa/fa.man grammar::fa]
+[manpage modules/grammar_fa/dacceptor.man grammar::fa::dacceptor]
+[manpage modules/grammar_fa/dexec.man grammar::fa::dexec]
+[manpage modules/grammar_fa/faop.man grammar::fa::op]
+[manpage modules/textutil/textutil.man textutil]
+[manpage modules/textutil/textutil_split.man textutil::split]
+[manpage modules/textutil/trim.man textutil::trim]
+[key {regular grammar}]
+[manpage modules/grammar_fa/fa.man grammar::fa]
+[manpage modules/grammar_fa/dacceptor.man grammar::fa::dacceptor]
+[manpage modules/grammar_fa/dexec.man grammar::fa::dexec]
+[manpage modules/grammar_fa/faop.man grammar::fa::op]
+[key {regular languages}]
+[manpage modules/grammar_fa/fa.man grammar::fa]
+[manpage modules/grammar_fa/dacceptor.man grammar::fa::dacceptor]
+[manpage modules/grammar_fa/dexec.man grammar::fa::dexec]
+[manpage modules/grammar_fa/faop.man grammar::fa::op]
+[key {remote communication}]
+[manpage modules/comm/comm.man comm]
+[manpage modules/comm/comm_wire.man comm_wire]
+[key {remote execution}]
+[manpage modules/comm/comm.man comm]
+[manpage modules/comm/comm_wire.man comm_wire]
+[key remove]
+[manpage modules/fileutil/multi.man fileutil::multi]
+[manpage modules/fileutil/multiop.man fileutil::multi::op]
+[key repeating]
+[manpage modules/struct/struct_list.man struct::list]
+[key repetition]
+[manpage modules/struct/struct_list.man struct::list]
+[manpage modules/textutil/repeat.man textutil::repeat]
+[key report]
+[manpage modules/report/report.man report]
+[key reshuffle]
+[manpage modules/struct/struct_list.man struct::list]
+[key {residual graph}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key resolver]
+[manpage modules/dns/tcllib_dns.man dns]
+[key {resource management}]
+[manpage modules/try/tcllib_try.man try]
+[key restore]
+[manpage modules/nns/nns_auto.man nameserv::auto]
+[key return]
+[manpage modules/try/tcllib_throw.man try]
+[key reverse]
+[manpage modules/struct/struct_list.man struct::list]
+[key {rfc 821}]
+[manpage modules/mime/mime.man mime]
+[manpage modules/mime/smtp.man smtp]
+[manpage modules/smtpd/smtpd.man smtpd]
+[key {rfc 822}]
+[manpage modules/mime/mime.man mime]
+[manpage modules/pop3d/pop3d_dbox.man pop3d::dbox]
+[manpage modules/mime/smtp.man smtp]
+[key {rfc 868}]
+[manpage modules/ntp/ntp_time.man ntp_time]
+[key {rfc 959}]
+[manpage modules/ftp/ftp.man ftp]
+[manpage modules/ftp/ftp_geturl.man ftp::geturl]
+[manpage modules/ftpd/ftpd.man ftpd]
+[key {rfc 977}]
+[manpage modules/nntp/nntp.man nntp]
+[key {rfc 1034}]
+[manpage modules/dns/tcllib_dns.man dns]
+[key {rfc 1035}]
+[manpage modules/dns/tcllib_dns.man dns]
+[key {rfc 1036}]
+[manpage modules/nntp/nntp.man nntp]
+[key {rfc 1320}]
+[manpage modules/md4/md4.man md4]
+[manpage modules/md5/md5.man md5]
+[manpage modules/ripemd/ripemd128.man ripemd128]
+[manpage modules/ripemd/ripemd160.man ripemd160]
+[key {rfc 1321}]
+[manpage modules/md4/md4.man md4]
+[manpage modules/md5/md5.man md5]
+[manpage modules/ripemd/ripemd128.man ripemd128]
+[manpage modules/ripemd/ripemd160.man ripemd160]
+[key {rfc 1413}]
+[manpage modules/ident/ident.man ident]
+[key {rfc 1886}]
+[manpage modules/dns/tcllib_dns.man dns]
+[key {rfc 1939}]
+[manpage modules/pop3/pop3.man pop3]
+[manpage modules/pop3d/pop3d.man pop3d]
+[key {rfc 2030}]
+[manpage modules/ntp/ntp_time.man ntp_time]
+[key {rfc 2045}]
+[manpage modules/mime/mime.man mime]
+[key {rfc 2046}]
+[manpage modules/mime/mime.man mime]
+[key {rfc 2049}]
+[manpage modules/mime/mime.man mime]
+[key {rfc 2104}]
+[manpage modules/md4/md4.man md4]
+[manpage modules/md5/md5.man md5]
+[manpage modules/ripemd/ripemd128.man ripemd128]
+[manpage modules/ripemd/ripemd160.man ripemd160]
+[manpage modules/sha1/sha1.man sha1]
+[manpage modules/sha1/sha256.man sha256]
+[key {rfc 2141}]
+[manpage modules/uri/urn-scheme.man uri_urn]
+[key {rfc 2251}]
+[manpage modules/ldap/ldap.man ldap]
+[manpage modules/ldap/ldapx.man ldapx]
+[key {rfc 2255}]
+[manpage modules/uri/uri.man uri]
+[key {rfc 2289}]
+[manpage modules/otp/otp.man otp]
+[key {rfc 2396}]
+[manpage modules/uri/uri.man uri]
+[key {rfc 2554}]
+[manpage modules/mime/smtp.man smtp]
+[key {RFC 2718}]
+[manpage modules/oauth/oauth.man oauth]
+[key {rfc 2821}]
+[manpage modules/mime/smtp.man smtp]
+[manpage modules/smtpd/smtpd.man smtpd]
+[key {rfc 2849}]
+[manpage modules/ldap/ldapx.man ldapx]
+[key {rfc 3207}]
+[manpage modules/mime/smtp.man smtp]
+[key {rfc 3513}]
+[manpage modules/dns/tcllib_ip.man tcllib_ip]
+[key {rfc 4511}]
+[manpage modules/ldap/ldap.man ldap]
+[key {RFC 5849}]
+[manpage modules/oauth/oauth.man oauth]
+[key {rfc 6455}]
+[manpage modules/websocket/websocket.man websocket]
+[key rfc3501]
+[manpage modules/imap4/imap4.man imap4]
+[key rfc3548]
+[manpage modules/base32/base32.man base32]
+[manpage modules/base32/base32hex.man base32::hex]
+[key {right outer join}]
+[manpage modules/struct/struct_list.man struct::list]
+[key RIPEMD]
+[manpage modules/ripemd/ripemd128.man ripemd128]
+[manpage modules/ripemd/ripemd160.man ripemd160]
+[key {roman numeral}]
+[manpage modules/math/roman.man math::roman]
+[key roots]
+[manpage modules/math/calculus.man math::calculus]
+[key rot]
+[manpage modules/virtchannel_transform/rot.man tcl::transform::rot]
+[key rot13]
+[manpage modules/virtchannel_transform/rot.man tcl::transform::rot]
+[key rounding]
+[manpage modules/math/fuzzy.man math::fuzzy]
+[key rows]
+[manpage modules/term/ansi_ctrlu.man term::ansi::ctrl::unix]
+[key rpc]
+[manpage modules/comm/comm.man comm]
+[manpage modules/comm/comm_wire.man comm_wire]
+[key rsa]
+[manpage modules/pki/pki.man pki]
+[key running]
+[manpage modules/grammar_fa/dexec.man grammar::fa::dexec]
+[key s3]
+[manpage modules/amazon-s3/S3.man S3]
+[key SASL]
+[manpage modules/sasl/sasl.man SASL]
+[manpage modules/sasl/ntlm.man SASL::NTLM]
+[manpage modules/sasl/scram.man SASL::SCRAM]
+[manpage modules/sasl/gtoken.man SASL::XGoogleToken]
+[key scanl]
+[manpage modules/generator/generator.man generator]
+[key SCCS]
+[manpage modules/rcs/rcs.man rcs]
+[key SCRAM]
+[manpage modules/sasl/scram.man SASL::SCRAM]
+[key secure]
+[manpage modules/comm/comm.man comm]
+[manpage modules/pop3/pop3.man pop3]
+[manpage modules/pop3d/pop3d.man pop3d]
+[manpage modules/transfer/connect.man transfer::connect]
+[manpage modules/transfer/receiver.man transfer::receiver]
+[manpage modules/transfer/transmitter.man transfer::transmitter]
+[key security]
+[manpage modules/aes/aes.man aes]
+[manpage modules/blowfish/blowfish.man blowfish]
+[manpage modules/crc/cksum.man cksum]
+[manpage modules/crc/crc16.man crc16]
+[manpage modules/crc/crc32.man crc32]
+[manpage modules/des/des.man des]
+[manpage modules/md4/md4.man md4]
+[manpage modules/md5/md5.man md5]
+[manpage modules/md5crypt/md5crypt.man md5crypt]
+[manpage modules/otp/otp.man otp]
+[manpage modules/pki/pki.man pki]
+[manpage modules/rc4/rc4.man rc4]
+[manpage modules/ripemd/ripemd128.man ripemd128]
+[manpage modules/ripemd/ripemd160.man ripemd160]
+[manpage modules/sha1/sha1.man sha1]
+[manpage modules/sha1/sha256.man sha256]
+[manpage modules/crc/sum.man sum]
+[manpage modules/des/tcldes.man tcldes]
+[manpage modules/des/tcldesjr.man tcldes]
+[key seed]
+[manpage modules/virtchannel_base/randseed.man tcl::randomseed]
+[key selectionbox]
+[manpage modules/javascript/javascript.man javascript]
+[key {semantic markup}]
+[manpage modules/doctools/docidx_intro.man docidx_intro]
+[manpage modules/doctools/docidx_lang_cmdref.man docidx_lang_cmdref]
+[manpage modules/doctools/docidx_lang_faq.man docidx_lang_faq]
+[manpage modules/doctools/docidx_lang_intro.man docidx_lang_intro]
+[manpage modules/doctools/docidx_lang_syntax.man docidx_lang_syntax]
+[manpage modules/doctools/docidx_plugin_apiref.man docidx_plugin_apiref]
+[manpage modules/doctools/doctoc_intro.man doctoc_intro]
+[manpage modules/doctools/doctoc_lang_cmdref.man doctoc_lang_cmdref]
+[manpage modules/doctools/doctoc_lang_faq.man doctoc_lang_faq]
+[manpage modules/doctools/doctoc_lang_intro.man doctoc_lang_intro]
+[manpage modules/doctools/doctoc_lang_syntax.man doctoc_lang_syntax]
+[manpage modules/doctools/doctoc_plugin_apiref.man doctoc_plugin_apiref]
+[manpage modules/doctools2idx/idx_introduction.man doctools2idx_introduction]
+[manpage modules/doctools2toc/toc_introduction.man doctools2toc_introduction]
+[manpage modules/doctools/doctools_intro.man doctools_intro]
+[manpage modules/doctools/doctools_lang_cmdref.man doctools_lang_cmdref]
+[manpage modules/doctools/doctools_lang_faq.man doctools_lang_faq]
+[manpage modules/doctools/doctools_lang_intro.man doctools_lang_intro]
+[manpage modules/doctools/doctools_lang_syntax.man doctools_lang_syntax]
+[manpage modules/doctools/doctools_plugin_apiref.man doctools_plugin_apiref]
+[key send]
+[manpage modules/comm/comm.man comm]
+[key serialization]
+[manpage modules/bee/bee.man bee]
+[manpage modules/doctools2idx/export_docidx.man doctools::idx::export::docidx]
+[manpage modules/doctools2idx/idx_export_html.man doctools::idx::export::html]
+[manpage modules/doctools2idx/idx_export_json.man doctools::idx::export::json]
+[manpage modules/doctools2idx/idx_export_nroff.man doctools::idx::export::nroff]
+[manpage modules/doctools2idx/idx_export_text.man doctools::idx::export::text]
+[manpage modules/doctools2idx/idx_export_wiki.man doctools::idx::export::wiki]
+[manpage modules/doctools2idx/idx_structure.man doctools::idx::structure]
+[manpage modules/doctools2toc/export_doctoc.man doctools::toc::export::doctoc]
+[manpage modules/doctools2toc/toc_export_html.man doctools::toc::export::html]
+[manpage modules/doctools2toc/toc_export_json.man doctools::toc::export::json]
+[manpage modules/doctools2toc/toc_export_nroff.man doctools::toc::export::nroff]
+[manpage modules/doctools2toc/toc_export_text.man doctools::toc::export::text]
+[manpage modules/doctools2toc/toc_export_wiki.man doctools::toc::export::wiki]
+[manpage modules/doctools2toc/toc_structure.man doctools::toc::structure]
+[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container]
+[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json]
+[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg]
+[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json]
+[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg]
+[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json]
+[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg]
+[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container]
+[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam]
+[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json]
+[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param]
+[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg]
+[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam]
+[manpage modules/struct/graph.man struct::graph]
+[manpage modules/struct/struct_tree.man struct::tree]
+[key server]
+[manpage modules/map/map_geocode_nominatim.man map::geocode::nominatim]
+[manpage modules/map/map_slippy_fetcher.man map::slippy::fetcher]
+[manpage modules/nns/nns_common.man nameserv::common]
+[manpage modules/nns/nns_server.man nameserv::server]
+[manpage modules/nns/nns_intro.man nns_intro]
+[manpage apps/nnsd.man nnsd]
+[key service]
+[manpage modules/log/logger.man logger]
+[key services]
+[manpage modules/ftpd/ftpd.man ftpd]
+[manpage modules/smtpd/smtpd.man smtpd]
+[key set]
+[manpage modules/struct/queue.man struct::queue]
+[manpage modules/struct/struct_set.man struct::set]
+[key sha1]
+[manpage modules/sha1/sha1.man sha1]
+[key sha256]
+[manpage modules/sha1/sha256.man sha256]
+[key shell]
+[manpage modules/string/token_shell.man string::token::shell]
+[key {shortest path}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key shuffle]
+[manpage modules/struct/struct_list.man struct::list]
+[key {simulated annealing}]
+[manpage modules/simulation/annealing.man simulation::annealing]
+[key simulation]
+[manpage modules/simulation/simulation_random.man simulation::random]
+[key singleton]
+[manpage modules/ooutil/ooutil.man oo::util]
+[manpage modules/tool/meta.man oo::util]
+[key {size limit}]
+[manpage modules/virtchannel_transform/limitsize.man tcl::transform::limitsize]
+[key skiplist]
+[manpage modules/struct/queue.man struct::queue]
+[manpage modules/struct/skiplist.man struct::skiplist]
+[key slippy]
+[manpage modules/map/map_slippy.man map::slippy]
+[manpage modules/map/map_slippy_cache.man map::slippy::cache]
+[manpage modules/map/map_slippy_fetcher.man map::slippy::fetcher]
+[key smtp]
+[manpage modules/mime/mime.man mime]
+[manpage modules/mime/smtp.man smtp]
+[manpage modules/smtpd/smtpd.man smtpd]
+[key smtpd]
+[manpage modules/smtpd/smtpd.man smtpd]
+[key Snit]
+[manpage modules/snit/snit.man snit]
+[key snit]
+[manpage modules/interp/deleg_method.man deleg_method]
+[manpage modules/interp/tcllib_interp.man interp]
+[key SNTP]
+[manpage modules/ntp/ntp_time.man ntp_time]
+[key socket]
+[manpage modules/comm/comm.man comm]
+[manpage modules/comm/comm_wire.man comm_wire]
+[manpage modules/smtpd/smtpd.man smtpd]
+[key soundex]
+[manpage modules/soundex/soundex.man soundex]
+[key source]
+[manpage modules/docstrip/docstrip.man docstrip]
+[manpage modules/docstrip/docstrip_util.man docstrip_util]
+[manpage apps/tcldocstrip.man tcldocstrip]
+[key spacing]
+[manpage modules/virtchannel_transform/spacer.man tcl::transform::spacer]
+[key {spatial interpolation}]
+[manpage modules/math/interpolate.man math::interpolate]
+[key {special functions}]
+[manpage modules/math/special.man math::special]
+[key specification]
+[manpage modules/bench/bench_lang_spec.man bench_lang_spec]
+[key speed]
+[manpage modules/profiler/profiler.man profiler]
+[key split]
+[manpage modules/textutil/textutil_split.man textutil::split]
+[key {squared graph}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key ssl]
+[manpage modules/comm/comm.man comm]
+[manpage modules/imap4/imap4.man imap4]
+[manpage modules/pop3/pop3.man pop3]
+[manpage modules/pop3d/pop3d.man pop3d]
+[manpage modules/transfer/connect.man transfer::connect]
+[manpage modules/transfer/receiver.man transfer::receiver]
+[manpage modules/transfer/transmitter.man transfer::transmitter]
+[key stack]
+[manpage modules/struct/queue.man struct::queue]
+[key {standard io}]
+[manpage modules/virtchannel_base/std.man tcl::chan::std]
+[key state]
+[manpage modules/grammar_fa/fa.man grammar::fa]
+[manpage modules/grammar_fa/dacceptor.man grammar::fa::dacceptor]
+[manpage modules/grammar_fa/dexec.man grammar::fa::dexec]
+[manpage modules/grammar_fa/faop.man grammar::fa::op]
+[manpage modules/grammar_peg/peg.man grammar::peg]
+[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp]
+[manpage apps/pt.man pt]
+[manpage modules/pt/pt_astree.man pt::ast]
+[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl]
+[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea]
+[manpage modules/pt/pt_json_language.man pt::json_language]
+[manpage modules/pt/pt_param.man pt::param]
+[manpage modules/pt/pt_pexpression.man pt::pe]
+[manpage modules/pt/pt_pexpr_op.man pt::pe::op]
+[manpage modules/pt/pt_pegrammar.man pt::peg]
+[manpage modules/pt/pt_peg_container.man pt::peg::container]
+[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg]
+[manpage modules/pt/pt_peg_export.man pt::peg::export]
+[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container]
+[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json]
+[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg]
+[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container]
+[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json]
+[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg]
+[manpage modules/pt/pt_peg_import.man pt::peg::import]
+[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container]
+[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json]
+[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg]
+[manpage modules/pt/pt_peg_interp.man pt::peg::interp]
+[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container]
+[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam]
+[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json]
+[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param]
+[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg]
+[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam]
+[manpage modules/pt/pt_peg_language.man pt::peg_language]
+[manpage modules/pt/pt_peg_introduction.man pt::pegrammar]
+[manpage modules/pt/pt_pgen.man pt::pgen]
+[manpage modules/pt/pt_rdengine.man pt::rde]
+[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit]
+[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo]
+[manpage modules/pt/pt_util.man pt::util]
+[manpage modules/pt/pt_to_api.man pt_export_api]
+[manpage modules/pt/pt_from_api.man pt_import_api]
+[manpage modules/pt/pt_introduction.man pt_introduction]
+[manpage modules/pt/pt_parse_peg.man pt_parse_peg]
+[manpage modules/pt/pt_parser_api.man pt_parser_api]
+[manpage modules/pt/pt_peg_op.man pt_peg_op]
+[key {state (de)serialization}]
+[manpage modules/namespacex/namespacex.man namespacex]
+[key {statistical distribution}]
+[manpage modules/simulation/simulation_random.man simulation::random]
+[key statistics]
+[manpage modules/counter/counter.man counter]
+[manpage modules/math/math.man math]
+[manpage modules/math/statistics.man math::statistics]
+[key stdin]
+[manpage modules/virtchannel_base/std.man tcl::chan::std]
+[key stdout]
+[manpage modules/virtchannel_base/std.man tcl::chan::std]
+[key {stochastic modelling}]
+[manpage modules/simulation/montecarlo.man simulation::montecarlo]
+[key {stream cipher}]
+[manpage modules/rc4/rc4.man rc4]
+[key {stream copy}]
+[manpage modules/virtchannel_transform/observe.man tcl::transform::observe]
+[key string]
+[manpage modules/string/token.man string::token]
+[manpage modules/string/token_shell.man string::token::shell]
+[manpage modules/textutil/textutil.man textutil]
+[manpage modules/textutil/adjust.man textutil::adjust]
+[manpage modules/textutil/expander.man textutil::expander]
+[manpage modules/textutil/repeat.man textutil::repeat]
+[manpage modules/textutil/textutil_split.man textutil::split]
+[manpage modules/textutil/textutil_string.man textutil::string]
+[manpage modules/textutil/tabify.man textutil::tabify]
+[manpage modules/textutil/trim.man textutil::trim]
+[key stringprep]
+[manpage modules/stringprep/stringprep.man stringprep]
+[manpage modules/stringprep/stringprep_data.man stringprep::data]
+[manpage modules/stringprep/unicode_data.man unicode::data]
+[key {strongly connected component}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key struct]
+[manpage modules/struct/pool.man struct::pool]
+[manpage modules/struct/record.man struct::record]
+[key structure]
+[manpage modules/control/control.man control]
+[key {structured queries}]
+[manpage modules/treeql/treeql.man treeql]
+[key style]
+[manpage modules/doctools2base/html_cssdefaults.man doctools::html::cssdefaults]
+[key subcommand]
+[manpage modules/tepam/tepam_introduction.man tepam]
+[manpage modules/tepam/tepam_procedure.man tepam::procedure]
+[key subgraph]
+[manpage modules/struct/graph.man struct::graph]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key subject]
+[manpage modules/hook/hook.man hook]
+[key submitbutton]
+[manpage modules/javascript/javascript.man javascript]
+[key subscriber]
+[manpage modules/hook/hook.man hook]
+[key subsequence]
+[manpage modules/struct/struct_list.man struct::list]
+[key subst]
+[manpage modules/doctools2base/tcl_parse.man doctools::tcl::parse]
+[key sum]
+[manpage modules/crc/sum.man sum]
+[key swapping]
+[manpage modules/struct/struct_list.man struct::list]
+[key {symmetric difference}]
+[manpage modules/struct/struct_set.man struct::set]
+[key synchronous]
+[manpage modules/cache/async.man cache::async]
+[key {syntax tree}]
+[manpage modules/grammar_me/me_util.man grammar::me::util]
+[key table]
+[manpage modules/doctools2toc/toc_container.man doctools::toc]
+[manpage modules/doctools2toc/toc_export.man doctools::toc::export]
+[manpage modules/doctools2toc/toc_import.man doctools::toc::import]
+[manpage modules/html/html.man html]
+[manpage modules/report/report.man report]
+[key {table of contents}]
+[manpage modules/doctools/doctoc_intro.man doctoc_intro]
+[manpage modules/doctools/doctoc_plugin_apiref.man doctoc_plugin_apiref]
+[manpage modules/doctools2toc/toc_introduction.man doctools2toc_introduction]
+[manpage modules/doctools2toc/toc_container.man doctools::toc]
+[manpage modules/doctools/doctoc.man doctools::toc]
+[manpage modules/doctools2toc/toc_export.man doctools::toc::export]
+[manpage modules/doctools2toc/export_doctoc.man doctools::toc::export::doctoc]
+[manpage modules/doctools2toc/toc_export_html.man doctools::toc::export::html]
+[manpage modules/doctools2toc/toc_export_json.man doctools::toc::export::json]
+[manpage modules/doctools2toc/toc_export_nroff.man doctools::toc::export::nroff]
+[manpage modules/doctools2toc/toc_export_text.man doctools::toc::export::text]
+[manpage modules/doctools2toc/toc_export_wiki.man doctools::toc::export::wiki]
+[manpage modules/doctools2toc/toc_import.man doctools::toc::import]
+[manpage modules/doctools2toc/import_doctoc.man doctools::toc::import::doctoc]
+[manpage modules/doctools2toc/toc_import_json.man doctools::toc::import::json]
+[key tabstops]
+[manpage modules/textutil/tabify.man textutil::tabify]
+[key tallying]
+[manpage modules/counter/counter.man counter]
+[key {tape archive}]
+[manpage modules/tar/tar.man tar]
+[key tar]
+[manpage modules/tar/tar.man tar]
+[key tcl]
+[manpage modules/math/bigfloat.man math::bigfloat]
+[manpage modules/math/bignum.man math::bignum]
+[manpage modules/math/decimal.man math::decimal]
+[key {Tcl module}]
+[manpage modules/docstrip/docstrip_util.man docstrip_util]
+[key {Tcl syntax}]
+[manpage modules/doctools2base/tcl_parse.man doctools::tcl::parse]
+[key {tcler's wiki}]
+[manpage modules/doctools2idx/idx_container.man doctools::idx]
+[manpage modules/doctools2idx/idx_export.man doctools::idx::export]
+[manpage modules/doctools2toc/toc_container.man doctools::toc]
+[manpage modules/doctools2toc/toc_export.man doctools::toc::export]
+[key tcllib]
+[manpage modules/csv/csv.man csv]
+[key TclOO]
+[manpage modules/ooutil/ooutil.man oo::util]
+[manpage modules/tool/meta.man oo::util]
+[manpage modules/tool/tool.man tool]
+[manpage modules/tool/tool_dict_ensemble.man tool::dict_ensemble]
+[key TCLPARAM]
+[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam]
+[key TDPL]
+[manpage modules/grammar_peg/peg.man grammar::peg]
+[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp]
+[manpage apps/pt.man pt]
+[manpage modules/pt/pt_astree.man pt::ast]
+[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl]
+[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea]
+[manpage modules/pt/pt_json_language.man pt::json_language]
+[manpage modules/pt/pt_param.man pt::param]
+[manpage modules/pt/pt_pexpression.man pt::pe]
+[manpage modules/pt/pt_pexpr_op.man pt::pe::op]
+[manpage modules/pt/pt_pegrammar.man pt::peg]
+[manpage modules/pt/pt_peg_container.man pt::peg::container]
+[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg]
+[manpage modules/pt/pt_peg_export.man pt::peg::export]
+[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container]
+[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json]
+[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg]
+[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container]
+[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json]
+[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg]
+[manpage modules/pt/pt_peg_import.man pt::peg::import]
+[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container]
+[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json]
+[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg]
+[manpage modules/pt/pt_peg_interp.man pt::peg::interp]
+[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container]
+[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam]
+[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json]
+[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param]
+[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg]
+[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam]
+[manpage modules/pt/pt_peg_language.man pt::peg_language]
+[manpage modules/pt/pt_peg_introduction.man pt::pegrammar]
+[manpage modules/pt/pt_pgen.man pt::pgen]
+[manpage modules/pt/pt_rdengine.man pt::rde]
+[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit]
+[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo]
+[manpage modules/pt/pt_util.man pt::util]
+[manpage modules/pt/pt_to_api.man pt_export_api]
+[manpage modules/pt/pt_from_api.man pt_import_api]
+[manpage modules/pt/pt_introduction.man pt_introduction]
+[manpage modules/pt/pt_parse_peg.man pt_parse_peg]
+[manpage modules/pt/pt_parser_api.man pt_parser_api]
+[manpage modules/pt/pt_peg_op.man pt_peg_op]
+[key {temp file}]
+[manpage modules/fileutil/fileutil.man fileutil]
+[key {template processing}]
+[manpage modules/textutil/expander.man textutil::expander]
+[key terminal]
+[manpage modules/term/term.man term]
+[manpage modules/term/ansi_code.man term::ansi::code]
+[manpage modules/term/ansi_cattr.man term::ansi::code::attr]
+[manpage modules/term/ansi_cctrl.man term::ansi::code::ctrl]
+[manpage modules/term/ansi_cmacros.man term::ansi::code::macros]
+[manpage modules/term/ansi_ctrlu.man term::ansi::ctrl::unix]
+[manpage modules/term/ansi_send.man term::ansi::send]
+[manpage modules/term/imenu.man term::interact::menu]
+[manpage modules/term/ipager.man term::interact::pager]
+[manpage modules/term/receive.man term::receive]
+[manpage modules/term/term_bind.man term::receive::bind]
+[manpage modules/term/term_send.man term::send]
+[key test]
+[manpage modules/fileutil/fileutil.man fileutil]
+[key Testing]
+[manpage modules/valtype/valtype_common.man valtype::common]
+[manpage modules/valtype/cc_amex.man valtype::creditcard::amex]
+[manpage modules/valtype/cc_discover.man valtype::creditcard::discover]
+[manpage modules/valtype/cc_mastercard.man valtype::creditcard::mastercard]
+[manpage modules/valtype/cc_visa.man valtype::creditcard::visa]
+[manpage modules/valtype/ean13.man valtype::gs1::ean13]
+[manpage modules/valtype/iban.man valtype::iban]
+[manpage modules/valtype/imei.man valtype::imei]
+[manpage modules/valtype/isbn.man valtype::isbn]
+[manpage modules/valtype/luhn.man valtype::luhn]
+[manpage modules/valtype/luhn5.man valtype::luhn5]
+[manpage modules/valtype/usnpi.man valtype::usnpi]
+[manpage modules/valtype/verhoeff.man valtype::verhoeff]
+[key testing]
+[manpage modules/bench/bench.man bench]
+[manpage modules/bench/bench_read.man bench::in]
+[manpage modules/bench/bench_wcsv.man bench::out::csv]
+[manpage modules/bench/bench_wtext.man bench::out::text]
+[manpage modules/bench/bench_intro.man bench_intro]
+[manpage modules/bench/bench_lang_intro.man bench_lang_intro]
+[manpage modules/bench/bench_lang_spec.man bench_lang_spec]
+[key TeX]
+[manpage modules/textutil/textutil.man textutil]
+[manpage modules/textutil/adjust.man textutil::adjust]
+[key text]
+[manpage modules/bench/bench_read.man bench::in]
+[manpage modules/bench/bench_wtext.man bench::out::text]
+[manpage modules/doctools2idx/idx_container.man doctools::idx]
+[manpage modules/doctools2idx/idx_export.man doctools::idx::export]
+[manpage modules/doctools2toc/toc_container.man doctools::toc]
+[manpage modules/doctools2toc/toc_export.man doctools::toc::export]
+[key {text comparison}]
+[manpage modules/soundex/soundex.man soundex]
+[key {text conversion}]
+[manpage modules/rcs/rcs.man rcs]
+[key {text differences}]
+[manpage modules/rcs/rcs.man rcs]
+[key {text display}]
+[manpage modules/term/imenu.man term::interact::menu]
+[manpage modules/term/ipager.man term::interact::pager]
+[key {text expansion}]
+[manpage modules/textutil/expander.man textutil::expander]
+[key {text likeness}]
+[manpage modules/soundex/soundex.man soundex]
+[key {text processing}]
+[manpage modules/bibtex/bibtex.man bibtex]
+[manpage modules/yaml/huddle.man huddle]
+[manpage apps/page.man page]
+[manpage modules/page/page_intro.man page_intro]
+[manpage modules/page/page_pluginmgr.man page_pluginmgr]
+[manpage modules/page/page_util_flow.man page_util_flow]
+[manpage modules/page/page_util_norm_lemon.man page_util_norm_lemon]
+[manpage modules/page/page_util_norm_peg.man page_util_norm_peg]
+[manpage modules/page/page_util_peg.man page_util_peg]
+[manpage modules/page/page_util_quote.man page_util_quote]
+[manpage modules/yaml/yaml.man yaml]
+[key {text widget}]
+[manpage modules/virtchannel_base/textwindow.man tcl::chan::textwindow]
+[key threads]
+[manpage modules/coroutine/tcllib_coroutine.man coroutine]
+[manpage modules/coroutine/coro_auto.man coroutine::auto]
+[key throw]
+[manpage modules/try/tcllib_throw.man try]
+[key thumbnail]
+[manpage modules/jpeg/jpeg.man jpeg]
+[key tie]
+[manpage modules/tie/tie.man tie]
+[manpage modules/tie/tie_std.man tie]
+[key tif]
+[manpage modules/tiff/tiff.man tiff]
+[key tiff]
+[manpage modules/exif/exif.man exif]
+[manpage modules/tiff/tiff.man tiff]
+[key tile]
+[manpage modules/map/map_slippy_cache.man map::slippy::cache]
+[manpage modules/map/map_slippy_fetcher.man map::slippy::fetcher]
+[key time]
+[manpage modules/ntp/ntp_time.man ntp_time]
+[key timestamp]
+[manpage modules/png/png.man png]
+[key timestamps]
+[manpage modules/debug/debug_timestamp.man debug::timestamp]
+[key {tip 219}]
+[manpage modules/virtchannel_base/cat.man tcl::chan::cat]
+[manpage modules/virtchannel_core/core.man tcl::chan::core]
+[manpage modules/virtchannel_core/events.man tcl::chan::events]
+[manpage modules/virtchannel_base/facade.man tcl::chan::facade]
+[manpage modules/virtchannel_base/tcllib_fifo.man tcl::chan::fifo]
+[manpage modules/virtchannel_base/tcllib_fifo2.man tcl::chan::fifo2]
+[manpage modules/virtchannel_base/halfpipe.man tcl::chan::halfpipe]
+[manpage modules/virtchannel_base/tcllib_memchan.man tcl::chan::memchan]
+[manpage modules/virtchannel_base/tcllib_null.man tcl::chan::null]
+[manpage modules/virtchannel_base/nullzero.man tcl::chan::nullzero]
+[manpage modules/virtchannel_base/tcllib_random.man tcl::chan::random]
+[manpage modules/virtchannel_base/std.man tcl::chan::std]
+[manpage modules/virtchannel_base/tcllib_string.man tcl::chan::string]
+[manpage modules/virtchannel_base/textwindow.man tcl::chan::textwindow]
+[manpage modules/virtchannel_base/tcllib_variable.man tcl::chan::variable]
+[manpage modules/virtchannel_base/tcllib_zero.man tcl::chan::zero]
+[manpage modules/virtchannel_base/randseed.man tcl::randomseed]
+[manpage modules/virtchannel_core/transformcore.man tcl::transform::core]
+[key {tip 230}]
+[manpage modules/virtchannel_transform/adler32.man tcl::transform::adler32]
+[manpage modules/virtchannel_transform/vt_base64.man tcl::transform::base64]
+[manpage modules/virtchannel_transform/vt_counter.man tcl::transform::counter]
+[manpage modules/virtchannel_transform/vt_crc32.man tcl::transform::crc32]
+[manpage modules/virtchannel_transform/hex.man tcl::transform::hex]
+[manpage modules/virtchannel_transform/identity.man tcl::transform::identity]
+[manpage modules/virtchannel_transform/limitsize.man tcl::transform::limitsize]
+[manpage modules/virtchannel_transform/observe.man tcl::transform::observe]
+[manpage modules/virtchannel_transform/vt_otp.man tcl::transform::otp]
+[manpage modules/virtchannel_transform/rot.man tcl::transform::rot]
+[manpage modules/virtchannel_transform/spacer.man tcl::transform::spacer]
+[manpage modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib]
+[key {tip 234}]
+[manpage modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib]
+[key {tip 317}]
+[manpage modules/virtchannel_transform/vt_base64.man tcl::transform::base64]
+[key Tk]
+[manpage modules/virtchannel_base/textwindow.man tcl::chan::textwindow]
+[key tls]
+[manpage modules/comm/comm.man comm]
+[manpage modules/imap4/imap4.man imap4]
+[manpage modules/pop3/pop3.man pop3]
+[manpage modules/pop3d/pop3d.man pop3d]
+[manpage modules/mime/smtp.man smtp]
+[manpage modules/transfer/connect.man transfer::connect]
+[manpage modules/transfer/receiver.man transfer::receiver]
+[manpage modules/transfer/transmitter.man transfer::transmitter]
+[key TMML]
+[manpage modules/doctools/doctools.man doctools]
+[manpage modules/doctools2idx/idx_container.man doctools::idx]
+[manpage modules/doctools/docidx.man doctools::idx]
+[manpage modules/doctools2toc/toc_container.man doctools::toc]
+[manpage modules/doctools/doctoc.man doctools::toc]
+[manpage modules/dtplite/pkg_dtplite.man dtplite]
+[manpage apps/dtplite.man dtplite]
+[manpage modules/doctools/mpexpand.man mpexpand]
+[key toc]
+[manpage modules/doctools/doctoc_intro.man doctoc_intro]
+[manpage modules/doctools/doctoc_plugin_apiref.man doctoc_plugin_apiref]
+[manpage modules/doctools/doctoc.man doctools::toc]
+[manpage modules/doctools2toc/export_doctoc.man doctools::toc::export::doctoc]
+[manpage modules/doctools2toc/toc_export_html.man doctools::toc::export::html]
+[manpage modules/doctools2toc/toc_export_json.man doctools::toc::export::json]
+[manpage modules/doctools2toc/toc_export_nroff.man doctools::toc::export::nroff]
+[manpage modules/doctools2toc/toc_export_text.man doctools::toc::export::text]
+[manpage modules/doctools2toc/toc_export_wiki.man doctools::toc::export::wiki]
+[manpage modules/doctools2toc/import_doctoc.man doctools::toc::import::doctoc]
+[manpage modules/doctools2toc/toc_import_json.man doctools::toc::import::json]
+[key {toc formatter}]
+[manpage modules/doctools/doctoc_plugin_apiref.man doctoc_plugin_apiref]
+[key tokenization]
+[manpage modules/string/token.man string::token]
+[manpage modules/string/token_shell.man string::token::shell]
+[key TOOL]
+[manpage modules/tool/tool.man tool]
+[manpage modules/tool/tool_dict_ensemble.man tool::dict_ensemble]
+[key {top-down parsing languages}]
+[manpage modules/grammar_me/me_intro.man grammar::me_intro]
+[manpage modules/grammar_peg/peg.man grammar::peg]
+[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp]
+[manpage apps/pt.man pt]
+[manpage modules/pt/pt_astree.man pt::ast]
+[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl]
+[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea]
+[manpage modules/pt/pt_json_language.man pt::json_language]
+[manpage modules/pt/pt_param.man pt::param]
+[manpage modules/pt/pt_pexpression.man pt::pe]
+[manpage modules/pt/pt_pexpr_op.man pt::pe::op]
+[manpage modules/pt/pt_pegrammar.man pt::peg]
+[manpage modules/pt/pt_peg_container.man pt::peg::container]
+[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg]
+[manpage modules/pt/pt_peg_export.man pt::peg::export]
+[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container]
+[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json]
+[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg]
+[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container]
+[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json]
+[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg]
+[manpage modules/pt/pt_peg_import.man pt::peg::import]
+[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container]
+[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json]
+[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg]
+[manpage modules/pt/pt_peg_interp.man pt::peg::interp]
+[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container]
+[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam]
+[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json]
+[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param]
+[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg]
+[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam]
+[manpage modules/pt/pt_peg_language.man pt::peg_language]
+[manpage modules/pt/pt_peg_introduction.man pt::pegrammar]
+[manpage modules/pt/pt_pgen.man pt::pgen]
+[manpage modules/pt/pt_rdengine.man pt::rde]
+[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit]
+[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo]
+[manpage modules/pt/pt_util.man pt::util]
+[manpage modules/pt/pt_to_api.man pt_export_api]
+[manpage modules/pt/pt_from_api.man pt_import_api]
+[manpage modules/pt/pt_introduction.man pt_introduction]
+[manpage modules/pt/pt_parse_peg.man pt_parse_peg]
+[manpage modules/pt/pt_parser_api.man pt_parser_api]
+[manpage modules/pt/pt_peg_op.man pt_peg_op]
+[key torrent]
+[manpage modules/bee/bee.man bee]
+[key touch]
+[manpage modules/fileutil/fileutil.man fileutil]
+[key TPDL]
+[manpage modules/grammar_me/me_intro.man grammar::me_intro]
+[key trace]
+[manpage modules/debug/debug.man debug]
+[manpage modules/debug/debug_caller.man debug::caller]
+[manpage modules/debug/debug_heartbeat.man debug::heartbeat]
+[manpage modules/debug/debug_timestamp.man debug::timestamp]
+[key transducer]
+[manpage modules/grammar_aycock/aycock.man grammar::aycock]
+[manpage modules/grammar_fa/fa.man grammar::fa]
+[manpage modules/grammar_fa/dacceptor.man grammar::fa::dacceptor]
+[manpage modules/grammar_fa/dexec.man grammar::fa::dexec]
+[manpage modules/grammar_fa/faop.man grammar::fa::op]
+[manpage modules/grammar_me/me_intro.man grammar::me_intro]
+[manpage modules/grammar_peg/peg.man grammar::peg]
+[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp]
+[manpage apps/pt.man pt]
+[manpage modules/pt/pt_astree.man pt::ast]
+[manpage modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl]
+[manpage modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea]
+[manpage modules/pt/pt_json_language.man pt::json_language]
+[manpage modules/pt/pt_param.man pt::param]
+[manpage modules/pt/pt_pexpression.man pt::pe]
+[manpage modules/pt/pt_pexpr_op.man pt::pe::op]
+[manpage modules/pt/pt_pegrammar.man pt::peg]
+[manpage modules/pt/pt_peg_container.man pt::peg::container]
+[manpage modules/pt/pt_peg_container_peg.man pt::peg::container::peg]
+[manpage modules/pt/pt_peg_export.man pt::peg::export]
+[manpage modules/pt/pt_peg_export_container.man pt::peg::export::container]
+[manpage modules/pt/pt_peg_export_json.man pt::peg::export::json]
+[manpage modules/pt/pt_peg_export_peg.man pt::peg::export::peg]
+[manpage modules/pt/pt_peg_from_container.man pt::peg::from::container]
+[manpage modules/pt/pt_peg_from_json.man pt::peg::from::json]
+[manpage modules/pt/pt_peg_from_peg.man pt::peg::from::peg]
+[manpage modules/pt/pt_peg_import.man pt::peg::import]
+[manpage modules/pt/pt_peg_import_container.man pt::peg::import::container]
+[manpage modules/pt/pt_peg_import_json.man pt::peg::import::json]
+[manpage modules/pt/pt_peg_import_peg.man pt::peg::import::peg]
+[manpage modules/pt/pt_peg_interp.man pt::peg::interp]
+[manpage modules/pt/pt_peg_to_container.man pt::peg::to::container]
+[manpage modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam]
+[manpage modules/pt/pt_peg_to_json.man pt::peg::to::json]
+[manpage modules/pt/pt_peg_to_param.man pt::peg::to::param]
+[manpage modules/pt/pt_peg_to_peg.man pt::peg::to::peg]
+[manpage modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam]
+[manpage modules/pt/pt_peg_language.man pt::peg_language]
+[manpage modules/pt/pt_peg_introduction.man pt::pegrammar]
+[manpage modules/pt/pt_pgen.man pt::pgen]
+[manpage modules/pt/pt_rdengine.man pt::rde]
+[manpage modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit]
+[manpage modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo]
+[manpage modules/pt/pt_util.man pt::util]
+[manpage modules/pt/pt_to_api.man pt_export_api]
+[manpage modules/pt/pt_from_api.man pt_import_api]
+[manpage modules/pt/pt_introduction.man pt_introduction]
+[manpage modules/pt/pt_parse_peg.man pt_parse_peg]
+[manpage modules/pt/pt_parser_api.man pt_parser_api]
+[manpage modules/pt/pt_peg_op.man pt_peg_op]
+[key transfer]
+[manpage modules/transfer/connect.man transfer::connect]
+[manpage modules/transfer/copyops.man transfer::copy]
+[manpage modules/transfer/tqueue.man transfer::copy::queue]
+[manpage modules/transfer/ddest.man transfer::data::destination]
+[manpage modules/transfer/dsource.man transfer::data::source]
+[manpage modules/transfer/receiver.man transfer::receiver]
+[manpage modules/transfer/transmitter.man transfer::transmitter]
+[key transformation]
+[manpage modules/page/page_util_peg.man page_util_peg]
+[manpage modules/virtchannel_transform/adler32.man tcl::transform::adler32]
+[manpage modules/virtchannel_transform/vt_base64.man tcl::transform::base64]
+[manpage modules/virtchannel_transform/vt_counter.man tcl::transform::counter]
+[manpage modules/virtchannel_transform/vt_crc32.man tcl::transform::crc32]
+[manpage modules/virtchannel_transform/hex.man tcl::transform::hex]
+[manpage modules/virtchannel_transform/identity.man tcl::transform::identity]
+[manpage modules/virtchannel_transform/limitsize.man tcl::transform::limitsize]
+[manpage modules/virtchannel_transform/observe.man tcl::transform::observe]
+[manpage modules/virtchannel_transform/vt_otp.man tcl::transform::otp]
+[manpage modules/virtchannel_transform/rot.man tcl::transform::rot]
+[manpage modules/virtchannel_transform/spacer.man tcl::transform::spacer]
+[manpage modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib]
+[key transmitter]
+[manpage modules/transfer/transmitter.man transfer::transmitter]
+[key {travelling salesman}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key traversal]
+[manpage modules/fileutil/traverse.man fileutil_traverse]
+[key tree]
+[manpage modules/grammar_me/gasm.man grammar::me::cpu::gasm]
+[manpage modules/grammar_me/me_util.man grammar::me::util]
+[manpage modules/htmlparse/htmlparse.man htmlparse]
+[manpage modules/struct/queue.man struct::queue]
+[manpage modules/struct/stack.man struct::stack]
+[manpage modules/struct/struct_tree.man struct::tree]
+[manpage modules/struct/struct_tree1.man struct::tree_v1]
+[manpage modules/treeql/treeql.man treeql]
+[key {tree query language}]
+[manpage modules/treeql/treeql.man treeql]
+[key {tree walking}]
+[manpage modules/page/page_util_flow.man page_util_flow]
+[manpage modules/page/page_util_norm_lemon.man page_util_norm_lemon]
+[manpage modules/page/page_util_norm_peg.man page_util_norm_peg]
+[key TreeQL]
+[manpage modules/treeql/treeql.man treeql]
+[key trimming]
+[manpage modules/textutil/textutil.man textutil]
+[manpage modules/textutil/trim.man textutil::trim]
+[key twitter]
+[manpage modules/oauth/oauth.man oauth]
+[key type]
+[manpage modules/fileutil/fileutil.man fileutil]
+[manpage modules/fumagic/cfront.man fileutil::magic::cfront]
+[manpage modules/fumagic/cgen.man fileutil::magic::cgen]
+[manpage modules/fumagic/filetypes.man fileutil::magic::filetype]
+[manpage modules/fumagic/mimetypes.man fileutil::magic::mimetype]
+[manpage modules/fumagic/rtcore.man fileutil::magic::rt]
+[manpage modules/snit/snit.man snit]
+[key {Type checking}]
+[manpage modules/valtype/valtype_common.man valtype::common]
+[manpage modules/valtype/cc_amex.man valtype::creditcard::amex]
+[manpage modules/valtype/cc_discover.man valtype::creditcard::discover]
+[manpage modules/valtype/cc_mastercard.man valtype::creditcard::mastercard]
+[manpage modules/valtype/cc_visa.man valtype::creditcard::visa]
+[manpage modules/valtype/ean13.man valtype::gs1::ean13]
+[manpage modules/valtype/iban.man valtype::iban]
+[manpage modules/valtype/imei.man valtype::imei]
+[manpage modules/valtype/isbn.man valtype::isbn]
+[manpage modules/valtype/luhn.man valtype::luhn]
+[manpage modules/valtype/luhn5.man valtype::luhn5]
+[manpage modules/valtype/usnpi.man valtype::usnpi]
+[manpage modules/valtype/verhoeff.man valtype::verhoeff]
+[key uevent]
+[manpage modules/hook/hook.man hook]
+[key unbind]
+[manpage modules/uev/uevent.man uevent]
+[key uncapitalize]
+[manpage modules/textutil/textutil_string.man textutil::string]
+[key undenting]
+[manpage modules/textutil/adjust.man textutil::adjust]
+[key unicode]
+[manpage modules/stringprep/stringprep.man stringprep]
+[manpage modules/stringprep/stringprep_data.man stringprep::data]
+[manpage modules/stringprep/unicode.man unicode]
+[manpage modules/stringprep/unicode_data.man unicode::data]
+[key union]
+[manpage modules/struct/disjointset.man struct::disjointset]
+[manpage modules/struct/struct_set.man struct::set]
+[key unit]
+[manpage modules/units/units.man units]
+[key {unknown hooking}]
+[manpage modules/namespacex/namespacex.man namespacex]
+[key untie]
+[manpage modules/tie/tie.man tie]
+[manpage modules/tie/tie_std.man tie]
+[key update]
+[manpage modules/coroutine/tcllib_coroutine.man coroutine]
+[manpage modules/coroutine/coro_auto.man coroutine::auto]
+[key uri]
+[manpage modules/uri/uri.man uri]
+[manpage modules/uri/urn-scheme.man uri_urn]
+[key url]
+[manpage modules/doctools2idx/idx_container.man doctools::idx]
+[manpage modules/doctools2idx/idx_export.man doctools::idx::export]
+[manpage modules/doctools2idx/idx_import.man doctools::idx::import]
+[manpage modules/doctools2toc/toc_export.man doctools::toc::export]
+[manpage modules/doctools2toc/toc_import.man doctools::toc::import]
+[manpage modules/map/map_geocode_nominatim.man map::geocode::nominatim]
+[manpage modules/map/map_slippy_fetcher.man map::slippy::fetcher]
+[manpage modules/uri/uri.man uri]
+[manpage modules/uri/urn-scheme.man uri_urn]
+[key urn]
+[manpage modules/uri/urn-scheme.man uri_urn]
+[key US-NPI]
+[manpage modules/valtype/usnpi.man valtype::usnpi]
+[key utilities]
+[manpage modules/namespacex/namespacex.man namespacex]
+[key uuencode]
+[manpage modules/base64/uuencode.man uuencode]
+[key UUID]
+[manpage modules/uuid/uuid.man uuid]
+[key Validation]
+[manpage modules/valtype/valtype_common.man valtype::common]
+[manpage modules/valtype/cc_amex.man valtype::creditcard::amex]
+[manpage modules/valtype/cc_discover.man valtype::creditcard::discover]
+[manpage modules/valtype/cc_mastercard.man valtype::creditcard::mastercard]
+[manpage modules/valtype/cc_visa.man valtype::creditcard::visa]
+[manpage modules/valtype/ean13.man valtype::gs1::ean13]
+[manpage modules/valtype/iban.man valtype::iban]
+[manpage modules/valtype/imei.man valtype::imei]
+[manpage modules/valtype/isbn.man valtype::isbn]
+[manpage modules/valtype/luhn.man valtype::luhn]
+[manpage modules/valtype/luhn5.man valtype::luhn5]
+[manpage modules/valtype/usnpi.man valtype::usnpi]
+[manpage modules/valtype/verhoeff.man valtype::verhoeff]
+[key {Value checking}]
+[manpage modules/valtype/valtype_common.man valtype::common]
+[manpage modules/valtype/cc_amex.man valtype::creditcard::amex]
+[manpage modules/valtype/cc_discover.man valtype::creditcard::discover]
+[manpage modules/valtype/cc_mastercard.man valtype::creditcard::mastercard]
+[manpage modules/valtype/cc_visa.man valtype::creditcard::visa]
+[manpage modules/valtype/ean13.man valtype::gs1::ean13]
+[manpage modules/valtype/iban.man valtype::iban]
+[manpage modules/valtype/imei.man valtype::imei]
+[manpage modules/valtype/isbn.man valtype::isbn]
+[manpage modules/valtype/luhn.man valtype::luhn]
+[manpage modules/valtype/luhn5.man valtype::luhn5]
+[manpage modules/valtype/usnpi.man valtype::usnpi]
+[manpage modules/valtype/verhoeff.man valtype::verhoeff]
+[key vectors]
+[manpage modules/math/linalg.man math::linearalgebra]
+[key verhoeff]
+[manpage modules/valtype/verhoeff.man valtype::verhoeff]
+[key vertex]
+[manpage modules/struct/graph.man struct::graph]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key {vertex cover}]
+[manpage modules/struct/graphops.man struct::graph::op]
+[key {virtual channel}]
+[manpage modules/virtchannel_base/cat.man tcl::chan::cat]
+[manpage modules/virtchannel_core/core.man tcl::chan::core]
+[manpage modules/virtchannel_core/events.man tcl::chan::events]
+[manpage modules/virtchannel_base/facade.man tcl::chan::facade]
+[manpage modules/virtchannel_base/tcllib_fifo.man tcl::chan::fifo]
+[manpage modules/virtchannel_base/tcllib_fifo2.man tcl::chan::fifo2]
+[manpage modules/virtchannel_base/halfpipe.man tcl::chan::halfpipe]
+[manpage modules/virtchannel_base/tcllib_memchan.man tcl::chan::memchan]
+[manpage modules/virtchannel_base/tcllib_null.man tcl::chan::null]
+[manpage modules/virtchannel_base/nullzero.man tcl::chan::nullzero]
+[manpage modules/virtchannel_base/tcllib_random.man tcl::chan::random]
+[manpage modules/virtchannel_base/std.man tcl::chan::std]
+[manpage modules/virtchannel_base/tcllib_string.man tcl::chan::string]
+[manpage modules/virtchannel_base/textwindow.man tcl::chan::textwindow]
+[manpage modules/virtchannel_base/tcllib_variable.man tcl::chan::variable]
+[manpage modules/virtchannel_base/tcllib_zero.man tcl::chan::zero]
+[manpage modules/virtchannel_base/randseed.man tcl::randomseed]
+[manpage modules/virtchannel_transform/adler32.man tcl::transform::adler32]
+[manpage modules/virtchannel_transform/vt_base64.man tcl::transform::base64]
+[manpage modules/virtchannel_core/transformcore.man tcl::transform::core]
+[manpage modules/virtchannel_transform/vt_counter.man tcl::transform::counter]
+[manpage modules/virtchannel_transform/vt_crc32.man tcl::transform::crc32]
+[manpage modules/virtchannel_transform/hex.man tcl::transform::hex]
+[manpage modules/virtchannel_transform/identity.man tcl::transform::identity]
+[manpage modules/virtchannel_transform/limitsize.man tcl::transform::limitsize]
+[manpage modules/virtchannel_transform/observe.man tcl::transform::observe]
+[manpage modules/virtchannel_transform/vt_otp.man tcl::transform::otp]
+[manpage modules/virtchannel_transform/rot.man tcl::transform::rot]
+[manpage modules/virtchannel_transform/spacer.man tcl::transform::spacer]
+[manpage modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib]
+[key {virtual machine}]
+[manpage modules/grammar_me/me_cpu.man grammar::me::cpu]
+[manpage modules/grammar_me/me_cpucore.man grammar::me::cpu::core]
+[manpage modules/grammar_me/gasm.man grammar::me::cpu::gasm]
+[manpage modules/grammar_me/me_tcl.man grammar::me::tcl]
+[manpage modules/grammar_me/me_intro.man grammar::me_intro]
+[manpage modules/grammar_me/me_vm.man grammar::me_vm]
+[manpage modules/grammar_peg/peg_interp.man grammar::peg::interp]
+[manpage modules/pt/pt_param.man pt::param]
+[key VISA]
+[manpage modules/valtype/cc_visa.man valtype::creditcard::visa]
+[key vwait]
+[manpage modules/coroutine/tcllib_coroutine.man coroutine]
+[manpage modules/coroutine/coro_auto.man coroutine::auto]
+[manpage modules/smtpd/smtpd.man smtpd]
+[key wais]
+[manpage modules/uri/uri.man uri]
+[key widget]
+[manpage modules/snit/snit.man snit]
+[manpage modules/snit/snitfaq.man snitfaq]
+[key {widget adaptors}]
+[manpage modules/snit/snit.man snit]
+[manpage modules/snit/snitfaq.man snitfaq]
+[key wiki]
+[manpage modules/doctools2idx/idx_container.man doctools::idx]
+[manpage modules/doctools/docidx.man doctools::idx]
+[manpage modules/doctools2idx/idx_export.man doctools::idx::export]
+[manpage modules/doctools2idx/idx_export_wiki.man doctools::idx::export::wiki]
+[manpage modules/doctools2toc/toc_container.man doctools::toc]
+[manpage modules/doctools/doctoc.man doctools::toc]
+[manpage modules/doctools2toc/toc_export.man doctools::toc::export]
+[manpage modules/doctools2toc/toc_export_wiki.man doctools::toc::export::wiki]
+[key word]
+[manpage modules/doctools2base/tcl_parse.man doctools::tcl::parse]
+[manpage modules/wip/wip.man wip]
+[key www]
+[manpage modules/uri/uri.man uri]
+[key x.208]
+[manpage modules/asn/asn.man asn]
+[key x.209]
+[manpage modules/asn/asn.man asn]
+[key x.500]
+[manpage modules/ldap/ldap.man ldap]
+[key XGoogleToken]
+[manpage modules/sasl/gtoken.man SASL::XGoogleToken]
+[key xml]
+[manpage modules/amazon-s3/xsxp.man xsxp]
+[key xor]
+[manpage modules/virtchannel_transform/vt_otp.man tcl::transform::otp]
+[key XPath]
+[manpage modules/treeql/treeql.man treeql]
+[key XSLT]
+[manpage modules/treeql/treeql.man treeql]
+[key yaml]
+[manpage modules/yaml/huddle.man huddle]
+[manpage modules/yaml/yaml.man yaml]
+[key ydecode]
+[manpage modules/base64/yencode.man yencode]
+[key yEnc]
+[manpage modules/base64/yencode.man yencode]
+[key yencode]
+[manpage modules/base64/yencode.man yencode]
+[key zero]
+[manpage modules/virtchannel_base/nullzero.man tcl::chan::nullzero]
+[manpage modules/virtchannel_base/tcllib_zero.man tcl::chan::zero]
+[key zip]
+[manpage modules/zip/decode.man zipfile::decode]
+[manpage modules/zip/encode.man zipfile::encode]
+[manpage modules/zip/mkzip.man zipfile::mkzip]
+[key zlib]
+[manpage modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib]
+[key zoom]
+[manpage modules/map/map_slippy.man map::slippy]
+[manpage modules/map/map_slippy_cache.man map::slippy::cache]
+[manpage modules/map/map_slippy_fetcher.man map::slippy::fetcher]
+[index_end] \ No newline at end of file
diff --git a/tcllib/support/devel/sak/doc/manpages.txt b/tcllib/support/devel/sak/doc/manpages.txt
new file mode 100644
index 0000000..6390ed6
--- /dev/null
+++ b/tcllib/support/devel/sak/doc/manpages.txt
@@ -0,0 +1,421 @@
+apps/dtplite.man
+apps/nns.man
+apps/nnsd.man
+apps/nnslog.man
+apps/page.man
+apps/pt.man
+apps/tcldocstrip.man
+modules/aes/aes.man
+modules/amazon-s3/S3.man
+modules/amazon-s3/xsxp.man
+modules/asn/asn.man
+modules/base32/base32.man
+modules/base32/base32core.man
+modules/base32/base32hex.man
+modules/base64/ascii85.man
+modules/base64/base64.man
+modules/base64/uuencode.man
+modules/base64/yencode.man
+modules/bee/bee.man
+modules/bench/bench.man
+modules/bench/bench_intro.man
+modules/bench/bench_lang_intro.man
+modules/bench/bench_lang_spec.man
+modules/bench/bench_read.man
+modules/bench/bench_wcsv.man
+modules/bench/bench_wtext.man
+modules/bibtex/bibtex.man
+modules/blowfish/blowfish.man
+modules/cache/async.man
+modules/clock/iso8601.man
+modules/clock/rfc2822.man
+modules/cmdline/cmdline.man
+modules/comm/comm.man
+modules/comm/comm_wire.man
+modules/control/control.man
+modules/coroutine/coro_auto.man
+modules/coroutine/tcllib_coroutine.man
+modules/counter/counter.man
+modules/crc/cksum.man
+modules/crc/crc16.man
+modules/crc/crc32.man
+modules/crc/sum.man
+modules/cron/cron.man
+modules/csv/csv.man
+modules/debug/debug.man
+modules/debug/debug_caller.man
+modules/debug/debug_heartbeat.man
+modules/debug/debug_timestamp.man
+modules/des/des.man
+modules/des/tcldes.man
+modules/des/tcldesjr.man
+modules/dicttool/dicttool.man
+modules/dns/tcllib_dns.man
+modules/dns/tcllib_ip.man
+modules/docstrip/docstrip.man
+modules/docstrip/docstrip_util.man
+modules/doctools/changelog.man
+modules/doctools/cvs.man
+modules/doctools/docidx.man
+modules/doctools/docidx_intro.man
+modules/doctools/docidx_lang_cmdref.man
+modules/doctools/docidx_lang_faq.man
+modules/doctools/docidx_lang_intro.man
+modules/doctools/docidx_lang_syntax.man
+modules/doctools/docidx_plugin_apiref.man
+modules/doctools/doctoc.man
+modules/doctools/doctoc_intro.man
+modules/doctools/doctoc_lang_cmdref.man
+modules/doctools/doctoc_lang_faq.man
+modules/doctools/doctoc_lang_intro.man
+modules/doctools/doctoc_lang_syntax.man
+modules/doctools/doctoc_plugin_apiref.man
+modules/doctools/doctools.man
+modules/doctools/doctools_intro.man
+modules/doctools/doctools_lang_cmdref.man
+modules/doctools/doctools_lang_faq.man
+modules/doctools/doctools_lang_intro.man
+modules/doctools/doctools_lang_syntax.man
+modules/doctools/doctools_plugin_apiref.man
+modules/doctools/mpexpand.man
+modules/doctools2base/html_cssdefaults.man
+modules/doctools2base/nroff_manmacros.man
+modules/doctools2base/tcl_parse.man
+modules/doctools2base/tcllib_msgcat.man
+modules/doctools2idx/export_docidx.man
+modules/doctools2idx/idx_container.man
+modules/doctools2idx/idx_export.man
+modules/doctools2idx/idx_export_html.man
+modules/doctools2idx/idx_export_json.man
+modules/doctools2idx/idx_export_nroff.man
+modules/doctools2idx/idx_export_text.man
+modules/doctools2idx/idx_export_wiki.man
+modules/doctools2idx/idx_import.man
+modules/doctools2idx/idx_import_json.man
+modules/doctools2idx/idx_introduction.man
+modules/doctools2idx/idx_msgcat_c.man
+modules/doctools2idx/idx_msgcat_de.man
+modules/doctools2idx/idx_msgcat_en.man
+modules/doctools2idx/idx_msgcat_fr.man
+modules/doctools2idx/idx_parse.man
+modules/doctools2idx/idx_structure.man
+modules/doctools2idx/import_docidx.man
+modules/doctools2toc/export_doctoc.man
+modules/doctools2toc/import_doctoc.man
+modules/doctools2toc/toc_container.man
+modules/doctools2toc/toc_export.man
+modules/doctools2toc/toc_export_html.man
+modules/doctools2toc/toc_export_json.man
+modules/doctools2toc/toc_export_nroff.man
+modules/doctools2toc/toc_export_text.man
+modules/doctools2toc/toc_export_wiki.man
+modules/doctools2toc/toc_import.man
+modules/doctools2toc/toc_import_json.man
+modules/doctools2toc/toc_introduction.man
+modules/doctools2toc/toc_msgcat_c.man
+modules/doctools2toc/toc_msgcat_de.man
+modules/doctools2toc/toc_msgcat_en.man
+modules/doctools2toc/toc_msgcat_fr.man
+modules/doctools2toc/toc_parse.man
+modules/doctools2toc/toc_structure.man
+modules/dtplite/pkg_dtplite.man
+modules/exif/exif.man
+modules/fileutil/fileutil.man
+modules/fileutil/multi.man
+modules/fileutil/multiop.man
+modules/fileutil/traverse.man
+modules/ftp/ftp.man
+modules/ftp/ftp_geturl.man
+modules/ftpd/ftpd.man
+modules/fumagic/cfront.man
+modules/fumagic/cgen.man
+modules/fumagic/filetypes.man
+modules/fumagic/mimetypes.man
+modules/fumagic/rtcore.man
+modules/generator/generator.man
+modules/gpx/gpx.man
+modules/grammar_aycock/aycock.man
+modules/grammar_fa/dacceptor.man
+modules/grammar_fa/dexec.man
+modules/grammar_fa/fa.man
+modules/grammar_fa/faop.man
+modules/grammar_me/gasm.man
+modules/grammar_me/me_ast.man
+modules/grammar_me/me_cpu.man
+modules/grammar_me/me_cpucore.man
+modules/grammar_me/me_intro.man
+modules/grammar_me/me_tcl.man
+modules/grammar_me/me_util.man
+modules/grammar_me/me_vm.man
+modules/grammar_peg/peg.man
+modules/grammar_peg/peg_interp.man
+modules/hook/hook.man
+modules/html/html.man
+modules/htmlparse/htmlparse.man
+modules/http/autoproxy.man
+modules/ident/ident.man
+modules/imap4/imap4.man
+modules/inifile/ini.man
+modules/interp/deleg_method.man
+modules/interp/deleg_proc.man
+modules/interp/tcllib_interp.man
+modules/irc/irc.man
+modules/irc/picoirc.man
+modules/javascript/javascript.man
+modules/jpeg/jpeg.man
+modules/json/json.man
+modules/json/json_write.man
+modules/lambda/lambda.man
+modules/ldap/ldap.man
+modules/ldap/ldapx.man
+modules/log/log.man
+modules/log/logger.man
+modules/log/loggerAppender.man
+modules/log/loggerUtils.man
+modules/map/map_geocode_nominatim.man
+modules/map/map_slippy.man
+modules/map/map_slippy_cache.man
+modules/map/map_slippy_fetcher.man
+modules/mapproj/mapproj.man
+modules/math/bigfloat.man
+modules/math/bignum.man
+modules/math/calculus.man
+modules/math/combinatorics.man
+modules/math/constants.man
+modules/math/decimal.man
+modules/math/exact.man
+modules/math/fourier.man
+modules/math/fuzzy.man
+modules/math/interpolate.man
+modules/math/linalg.man
+modules/math/machineparameters.man
+modules/math/math.man
+modules/math/math_geometry.man
+modules/math/numtheory.man
+modules/math/optimize.man
+modules/math/polynomials.man
+modules/math/qcomplex.man
+modules/math/rational_funcs.man
+modules/math/roman.man
+modules/math/romberg.man
+modules/math/special.man
+modules/math/statistics.man
+modules/math/symdiff.man
+modules/md4/md4.man
+modules/md5/md5.man
+modules/md5crypt/md5crypt.man
+modules/mime/mime.man
+modules/mime/smtp.man
+modules/multiplexer/multiplexer.man
+modules/namespacex/namespacex.man
+modules/ncgi/ncgi.man
+modules/nettool/nettool.man
+modules/nmea/nmea.man
+modules/nns/nns_auto.man
+modules/nns/nns_client.man
+modules/nns/nns_common.man
+modules/nns/nns_intro.man
+modules/nns/nns_protocol.man
+modules/nns/nns_server.man
+modules/nntp/nntp.man
+modules/ntp/ntp_time.man
+modules/oauth/oauth.man
+modules/ooutil/ooutil.man
+modules/otp/otp.man
+modules/page/page_intro.man
+modules/page/page_pluginmgr.man
+modules/page/page_util_flow.man
+modules/page/page_util_norm_lemon.man
+modules/page/page_util_norm_peg.man
+modules/page/page_util_peg.man
+modules/page/page_util_quote.man
+modules/pki/pki.man
+modules/pluginmgr/pluginmgr.man
+modules/png/png.man
+modules/pop3/pop3.man
+modules/pop3d/pop3d.man
+modules/pop3d/pop3d_dbox.man
+modules/pop3d/pop3d_udb.man
+modules/processman/processman.man
+modules/profiler/profiler.man
+modules/pt/pt_astree.man
+modules/pt/pt_cparam_config_critcl.man
+modules/pt/pt_cparam_config_tea.man
+modules/pt/pt_from_api.man
+modules/pt/pt_introduction.man
+modules/pt/pt_json_language.man
+modules/pt/pt_param.man
+modules/pt/pt_parse_peg.man
+modules/pt/pt_parser_api.man
+modules/pt/pt_peg_container.man
+modules/pt/pt_peg_container_peg.man
+modules/pt/pt_peg_export.man
+modules/pt/pt_peg_export_container.man
+modules/pt/pt_peg_export_json.man
+modules/pt/pt_peg_export_peg.man
+modules/pt/pt_peg_from_container.man
+modules/pt/pt_peg_from_json.man
+modules/pt/pt_peg_from_peg.man
+modules/pt/pt_peg_import.man
+modules/pt/pt_peg_import_container.man
+modules/pt/pt_peg_import_json.man
+modules/pt/pt_peg_import_peg.man
+modules/pt/pt_peg_interp.man
+modules/pt/pt_peg_introduction.man
+modules/pt/pt_peg_language.man
+modules/pt/pt_peg_op.man
+modules/pt/pt_peg_to_container.man
+modules/pt/pt_peg_to_cparam.man
+modules/pt/pt_peg_to_json.man
+modules/pt/pt_peg_to_param.man
+modules/pt/pt_peg_to_peg.man
+modules/pt/pt_peg_to_tclparam.man
+modules/pt/pt_pegrammar.man
+modules/pt/pt_pexpr_op.man
+modules/pt/pt_pexpression.man
+modules/pt/pt_pgen.man
+modules/pt/pt_rdengine.man
+modules/pt/pt_tclparam_config_snit.man
+modules/pt/pt_tclparam_config_tcloo.man
+modules/pt/pt_to_api.man
+modules/pt/pt_util.man
+modules/rc4/rc4.man
+modules/rcs/rcs.man
+modules/report/report.man
+modules/rest/rest.man
+modules/ripemd/ripemd128.man
+modules/ripemd/ripemd160.man
+modules/sasl/gtoken.man
+modules/sasl/ntlm.man
+modules/sasl/sasl.man
+modules/sasl/scram.man
+modules/sha1/sha1.man
+modules/sha1/sha256.man
+modules/simulation/annealing.man
+modules/simulation/montecarlo.man
+modules/simulation/simulation_random.man
+modules/smtpd/smtpd.man
+modules/snit/snit.man
+modules/snit/snitfaq.man
+modules/soundex/soundex.man
+modules/stooop/stooop.man
+modules/stooop/switched.man
+modules/string/token.man
+modules/string/token_shell.man
+modules/stringprep/stringprep.man
+modules/stringprep/stringprep_data.man
+modules/stringprep/unicode.man
+modules/stringprep/unicode_data.man
+modules/struct/disjointset.man
+modules/struct/graph.man
+modules/struct/graph1.man
+modules/struct/graphops.man
+modules/struct/matrix.man
+modules/struct/matrix1.man
+modules/struct/pool.man
+modules/struct/prioqueue.man
+modules/struct/queue.man
+modules/struct/record.man
+modules/struct/skiplist.man
+modules/struct/stack.man
+modules/struct/struct_list.man
+modules/struct/struct_set.man
+modules/struct/struct_tree.man
+modules/struct/struct_tree1.man
+modules/tar/tar.man
+modules/tepam/tepam_argument_dialogbox.man
+modules/tepam/tepam_doc_gen.man
+modules/tepam/tepam_introduction.man
+modules/tepam/tepam_procedure.man
+modules/term/ansi_cattr.man
+modules/term/ansi_cctrl.man
+modules/term/ansi_cmacros.man
+modules/term/ansi_code.man
+modules/term/ansi_ctrlu.man
+modules/term/ansi_send.man
+modules/term/imenu.man
+modules/term/ipager.man
+modules/term/receive.man
+modules/term/term.man
+modules/term/term_bind.man
+modules/term/term_send.man
+modules/textutil/adjust.man
+modules/textutil/expander.man
+modules/textutil/repeat.man
+modules/textutil/tabify.man
+modules/textutil/textutil.man
+modules/textutil/textutil_split.man
+modules/textutil/textutil_string.man
+modules/textutil/trim.man
+modules/tie/tie.man
+modules/tie/tie_std.man
+modules/tiff/tiff.man
+modules/tool/meta.man
+modules/tool/tool.man
+modules/tool/tool_dict_ensemble.man
+modules/transfer/connect.man
+modules/transfer/copyops.man
+modules/transfer/ddest.man
+modules/transfer/dsource.man
+modules/transfer/receiver.man
+modules/transfer/tqueue.man
+modules/transfer/transmitter.man
+modules/treeql/treeql.man
+modules/try/tcllib_throw.man
+modules/try/tcllib_try.man
+modules/uev/uevent.man
+modules/uev/uevent_onidle.man
+modules/units/units.man
+modules/uri/uri.man
+modules/uri/urn-scheme.man
+modules/uuid/uuid.man
+modules/valtype/cc_amex.man
+modules/valtype/cc_discover.man
+modules/valtype/cc_mastercard.man
+modules/valtype/cc_visa.man
+modules/valtype/ean13.man
+modules/valtype/iban.man
+modules/valtype/imei.man
+modules/valtype/isbn.man
+modules/valtype/luhn.man
+modules/valtype/luhn5.man
+modules/valtype/usnpi.man
+modules/valtype/valtype_common.man
+modules/valtype/verhoeff.man
+modules/virtchannel_base/cat.man
+modules/virtchannel_base/facade.man
+modules/virtchannel_base/halfpipe.man
+modules/virtchannel_base/nullzero.man
+modules/virtchannel_base/randseed.man
+modules/virtchannel_base/std.man
+modules/virtchannel_base/tcllib_fifo.man
+modules/virtchannel_base/tcllib_fifo2.man
+modules/virtchannel_base/tcllib_memchan.man
+modules/virtchannel_base/tcllib_null.man
+modules/virtchannel_base/tcllib_random.man
+modules/virtchannel_base/tcllib_string.man
+modules/virtchannel_base/tcllib_variable.man
+modules/virtchannel_base/tcllib_zero.man
+modules/virtchannel_base/textwindow.man
+modules/virtchannel_core/core.man
+modules/virtchannel_core/events.man
+modules/virtchannel_core/transformcore.man
+modules/virtchannel_transform/adler32.man
+modules/virtchannel_transform/hex.man
+modules/virtchannel_transform/identity.man
+modules/virtchannel_transform/limitsize.man
+modules/virtchannel_transform/observe.man
+modules/virtchannel_transform/rot.man
+modules/virtchannel_transform/spacer.man
+modules/virtchannel_transform/tcllib_zlib.man
+modules/virtchannel_transform/vt_base64.man
+modules/virtchannel_transform/vt_counter.man
+modules/virtchannel_transform/vt_crc32.man
+modules/virtchannel_transform/vt_otp.man
+modules/websocket/websocket.man
+modules/wip/wip.man
+modules/yaml/huddle.man
+modules/yaml/yaml.man
+modules/zip/decode.man
+modules/zip/encode.man
+modules/zip/mkzip.man
diff --git a/tcllib/support/devel/sak/doc/pkgIndex.tcl b/tcllib/support/devel/sak/doc/pkgIndex.tcl
new file mode 100644
index 0000000..4187efe
--- /dev/null
+++ b/tcllib/support/devel/sak/doc/pkgIndex.tcl
@@ -0,0 +1,4 @@
+if {![package vsatisfies [package provide Tcl] 8.2]} return
+package ifneeded sak::doc 1.0 [list source [file join $dir doc.tcl]]
+package ifneeded sak::doc::auto 1.0 [list source [file join $dir doc_auto.tcl]]
+
diff --git a/tcllib/support/devel/sak/doc/toc.txt b/tcllib/support/devel/sak/doc/toc.txt
new file mode 100644
index 0000000..d15a9d5
--- /dev/null
+++ b/tcllib/support/devel/sak/doc/toc.txt
@@ -0,0 +1,1144 @@
+[toc_begin {Table Of Contents} {}]
+[division_start {By Categories}]
+[division_start {Argument entry form, mega widget}]
+[item modules/tepam/tepam_argument_dialogbox.man tepam::argument_dialogbox {TEPAM argument_dialogbox, reference manual}]
+[division_end]
+[division_start {Benchmark tools}]
+[item modules/bench/bench.man bench {bench - Processing benchmark suites}]
+[item modules/bench/bench_read.man bench::in {bench::in - Reading benchmark results}]
+[item modules/bench/bench_wcsv.man bench::out::csv {bench::out::csv - Formatting benchmark results as CSV}]
+[item modules/bench/bench_wtext.man bench::out::text {bench::out::text - Formatting benchmark results as human readable text}]
+[item modules/bench/bench_intro.man bench_intro {bench introduction}]
+[item modules/bench/bench_lang_intro.man bench_lang_intro {bench language introduction}]
+[item modules/bench/bench_lang_spec.man bench_lang_spec {bench language specification}]
+[division_end]
+[division_start {CGI programming}]
+[item modules/html/html.man html {Procedures to generate HTML structures}]
+[item modules/javascript/javascript.man javascript {Procedures to generate HTML and Java Script structures.}]
+[item modules/json/json.man json {JSON parser}]
+[item modules/json/json_write.man json::write {JSON generation}]
+[item modules/ncgi/ncgi.man ncgi {Procedures to manipulate CGI values.}]
+[division_end]
+[division_start Channels]
+[item modules/virtchannel_base/cat.man tcl::chan::cat {Concatenation channel}]
+[item modules/virtchannel_core/core.man tcl::chan::core {Basic reflected/virtual channel support}]
+[item modules/virtchannel_core/events.man tcl::chan::events {Event support for reflected/virtual channels}]
+[item modules/virtchannel_base/facade.man tcl::chan::facade {Facade channel}]
+[item modules/virtchannel_base/tcllib_fifo.man tcl::chan::fifo {In-memory fifo channel}]
+[item modules/virtchannel_base/tcllib_fifo2.man tcl::chan::fifo2 {In-memory interconnected fifo channels}]
+[item modules/virtchannel_base/halfpipe.man tcl::chan::halfpipe {In-memory channel, half of a fifo2}]
+[item modules/virtchannel_base/tcllib_memchan.man tcl::chan::memchan {In-memory channel}]
+[item modules/virtchannel_base/tcllib_null.man tcl::chan::null {Null channel}]
+[item modules/virtchannel_base/nullzero.man tcl::chan::nullzero {Null/Zero channel combination}]
+[item modules/virtchannel_base/tcllib_random.man tcl::chan::random {Random channel}]
+[item modules/virtchannel_base/std.man tcl::chan::std {Standard I/O, unification of stdin and stdout}]
+[item modules/virtchannel_base/tcllib_string.man tcl::chan::string {Read-only in-memory channel}]
+[item modules/virtchannel_base/textwindow.man tcl::chan::textwindow {Textwindow channel}]
+[item modules/virtchannel_base/tcllib_variable.man tcl::chan::variable {In-memory channel using variable for storage}]
+[item modules/virtchannel_base/tcllib_zero.man tcl::chan::zero {Zero channel}]
+[item modules/virtchannel_base/randseed.man tcl::randomseed {Utilities for random channels}]
+[item modules/virtchannel_transform/adler32.man tcl::transform::adler32 {Adler32 transformation}]
+[item modules/virtchannel_transform/vt_base64.man tcl::transform::base64 {Base64 encoding transformation}]
+[item modules/virtchannel_core/transformcore.man tcl::transform::core {Basic reflected/virtual channel transform support}]
+[item modules/virtchannel_transform/vt_counter.man tcl::transform::counter {Counter transformation}]
+[item modules/virtchannel_transform/vt_crc32.man tcl::transform::crc32 {Crc32 transformation}]
+[item modules/virtchannel_transform/hex.man tcl::transform::hex {Hexadecimal encoding transformation}]
+[item modules/virtchannel_transform/identity.man tcl::transform::identity {Identity transformation}]
+[item modules/virtchannel_transform/limitsize.man tcl::transform::limitsize {limiting input}]
+[item modules/virtchannel_transform/observe.man tcl::transform::observe {Observer transformation, stream copy}]
+[item modules/virtchannel_transform/vt_otp.man tcl::transform::otp {Encryption via one-time pad}]
+[item modules/virtchannel_transform/rot.man tcl::transform::rot rot-encryption]
+[item modules/virtchannel_transform/spacer.man tcl::transform::spacer {Space insertation and removal}]
+[item modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib {zlib (de)compression}]
+[division_end]
+[division_start Coroutine]
+[item modules/coroutine/tcllib_coroutine.man coroutine {Coroutine based event and IO handling}]
+[item modules/coroutine/coro_auto.man coroutine::auto {Automatic event and IO coroutine awareness}]
+[division_end]
+[division_start {Data structures}]
+[item modules/counter/counter.man counter {Procedures for counters and histograms}]
+[item modules/report/report.man report {Create and manipulate report objects}]
+[item modules/struct/disjointset.man struct::disjointset {Disjoint set data structure}]
+[item modules/struct/graph.man struct::graph {Create and manipulate directed graph objects}]
+[item modules/struct/graphops.man struct::graph::op {Operation for (un)directed graph objects}]
+[item modules/struct/graph1.man struct::graph_v1 {Create and manipulate directed graph objects}]
+[item modules/struct/struct_list.man struct::list {Procedures for manipulating lists}]
+[item modules/struct/matrix.man struct::matrix {Create and manipulate matrix objects}]
+[item modules/struct/matrix1.man struct::matrix_v1 {Create and manipulate matrix objects}]
+[item modules/struct/pool.man struct::pool {Create and manipulate pool objects (of discrete items)}]
+[item modules/struct/prioqueue.man struct::prioqueue {Create and manipulate prioqueue objects}]
+[item modules/struct/queue.man struct::queue {Create and manipulate queue objects}]
+[item modules/struct/record.man struct::record {Define and create records (similar to 'C' structures)}]
+[item modules/struct/struct_set.man struct::set {Procedures for manipulating sets}]
+[item modules/struct/skiplist.man struct::skiplist {Create and manipulate skiplists}]
+[item modules/struct/stack.man struct::stack {Create and manipulate stack objects}]
+[item modules/struct/struct_tree.man struct::tree {Create and manipulate tree objects}]
+[item modules/struct/struct_tree1.man struct::tree_v1 {Create and manipulate tree objects}]
+[item modules/treeql/treeql.man treeql {Query tree objects}]
+[division_end]
+[division_start {debugging, tracing, and logging}]
+[item modules/debug/debug.man debug {debug narrative - core}]
+[item modules/debug/debug_caller.man debug::caller {debug narrative - caller}]
+[item modules/debug/debug_heartbeat.man debug::heartbeat {debug narrative - heartbeat}]
+[item modules/debug/debug_timestamp.man debug::timestamp {debug narrative - timestamping}]
+[division_end]
+[division_start {Documentation tools}]
+[item modules/doctools/docidx_intro.man docidx_intro {docidx introduction}]
+[item modules/doctools/docidx_lang_cmdref.man docidx_lang_cmdref {docidx language command reference}]
+[item modules/doctools/docidx_lang_faq.man docidx_lang_faq {docidx language faq}]
+[item modules/doctools/docidx_lang_intro.man docidx_lang_intro {docidx language introduction}]
+[item modules/doctools/docidx_lang_syntax.man docidx_lang_syntax {docidx language syntax}]
+[item modules/doctools/docidx_plugin_apiref.man docidx_plugin_apiref {docidx plugin API reference}]
+[item modules/docstrip/docstrip.man docstrip {Docstrip style source code extraction}]
+[item modules/docstrip/docstrip_util.man docstrip_util {Docstrip-related utilities}]
+[item modules/doctools/doctoc_intro.man doctoc_intro {doctoc introduction}]
+[item modules/doctools/doctoc_lang_cmdref.man doctoc_lang_cmdref {doctoc language command reference}]
+[item modules/doctools/doctoc_lang_faq.man doctoc_lang_faq {doctoc language faq}]
+[item modules/doctools/doctoc_lang_intro.man doctoc_lang_intro {doctoc language introduction}]
+[item modules/doctools/doctoc_lang_syntax.man doctoc_lang_syntax {doctoc language syntax}]
+[item modules/doctools/doctoc_plugin_apiref.man doctoc_plugin_apiref {doctoc plugin API reference}]
+[item modules/doctools/doctools.man doctools {doctools - Processing documents}]
+[item modules/doctools2idx/idx_introduction.man doctools2idx_introduction {DocTools - Keyword indices}]
+[item modules/doctools2toc/toc_introduction.man doctools2toc_introduction {DocTools - Tables of Contents}]
+[item modules/doctools/changelog.man doctools::changelog {Processing text in Emacs ChangeLog format}]
+[item modules/doctools/cvs.man doctools::cvs {Processing text in 'cvs log' format}]
+[item modules/doctools2base/html_cssdefaults.man doctools::html::cssdefaults {Default CSS style for HTML export plugins}]
+[item modules/doctools2idx/idx_container.man doctools::idx {Holding keyword indices}]
+[item modules/doctools/docidx.man doctools::idx {docidx - Processing indices}]
+[item modules/doctools2idx/idx_export.man doctools::idx::export {Exporting keyword indices}]
+[item modules/doctools2idx/idx_import.man doctools::idx::import {Importing keyword indices}]
+[item modules/doctools2idx/idx_parse.man doctools::idx::parse {Parsing text in docidx format}]
+[item modules/doctools2idx/idx_structure.man doctools::idx::structure {Docidx serialization utilities}]
+[item modules/doctools2base/tcllib_msgcat.man doctools::msgcat {Message catalog management for the various document parsers}]
+[item modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c {Message catalog for the docidx parser (C)}]
+[item modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de {Message catalog for the docidx parser (DE)}]
+[item modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en {Message catalog for the docidx parser (EN)}]
+[item modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr {Message catalog for the docidx parser (FR)}]
+[item modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c {Message catalog for the doctoc parser (C)}]
+[item modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de {Message catalog for the doctoc parser (DE)}]
+[item modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en {Message catalog for the doctoc parser (EN)}]
+[item modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr {Message catalog for the doctoc parser (FR)}]
+[item modules/doctools2base/nroff_manmacros.man doctools::nroff::man_macros {Default CSS style for NROFF export plugins}]
+[item modules/doctools2base/tcl_parse.man doctools::tcl::parse {Processing text in 'subst -novariables' format}]
+[item modules/doctools2toc/toc_container.man doctools::toc {Holding tables of contents}]
+[item modules/doctools/doctoc.man doctools::toc {doctoc - Processing tables of contents}]
+[item modules/doctools2toc/toc_export.man doctools::toc::export {Exporting tables of contents}]
+[item modules/doctools2toc/toc_import.man doctools::toc::import {Importing keyword indices}]
+[item modules/doctools2toc/toc_parse.man doctools::toc::parse {Parsing text in doctoc format}]
+[item modules/doctools2toc/toc_structure.man doctools::toc::structure {Doctoc serialization utilities}]
+[item modules/doctools/doctools_intro.man doctools_intro {doctools introduction}]
+[item modules/doctools/doctools_lang_cmdref.man doctools_lang_cmdref {doctools language command reference}]
+[item modules/doctools/doctools_lang_faq.man doctools_lang_faq {doctools language faq}]
+[item modules/doctools/doctools_lang_intro.man doctools_lang_intro {doctools language introduction}]
+[item modules/doctools/doctools_lang_syntax.man doctools_lang_syntax {doctools language syntax}]
+[item modules/doctools/doctools_plugin_apiref.man doctools_plugin_apiref {doctools plugin API reference}]
+[item modules/dtplite/pkg_dtplite.man dtplite {Lightweight DocTools Markup Processor}]
+[item apps/dtplite.man dtplite {Lightweight DocTools Markup Processor}]
+[item modules/doctools/mpexpand.man mpexpand {Markup processor}]
+[item apps/tcldocstrip.man tcldocstrip {Tcl-based Docstrip Processor}]
+[item modules/tepam/tepam_doc_gen.man tepam::doc_gen {TEPAM DOC Generation, reference manual}]
+[item modules/textutil/expander.man textutil::expander {Procedures to process templates and expand text.}]
+[division_end]
+[division_start File]
+[item modules/zip/decode.man zipfile::decode {Access to zip archives}]
+[item modules/zip/encode.man zipfile::encode {Generation of zip archives}]
+[item modules/zip/mkzip.man zipfile::mkzip {Build a zip archive}]
+[division_end]
+[division_start {File formats}]
+[item modules/exif/exif.man exif {Tcl EXIF extracts and parses EXIF fields from digital images}]
+[item modules/gpx/gpx.man gpx {Extracts waypoints, tracks and routes from GPX files}]
+[item modules/jpeg/jpeg.man jpeg {JPEG querying and manipulation of meta data}]
+[item modules/png/png.man png {PNG querying and manipulation of meta data}]
+[item modules/tar/tar.man tar {Tar file creation, extraction & manipulation}]
+[item modules/tiff/tiff.man tiff {TIFF reading, writing, and querying and manipulation of meta data}]
+[division_end]
+[division_start {Grammars and finite automata}]
+[item modules/grammar_aycock/aycock.man grammar::aycock {Aycock-Horspool-Earley parser generator for Tcl}]
+[item modules/grammar_fa/fa.man grammar::fa {Create and manipulate finite automatons}]
+[item modules/grammar_fa/dacceptor.man grammar::fa::dacceptor {Create and use deterministic acceptors}]
+[item modules/grammar_fa/dexec.man grammar::fa::dexec {Execute deterministic finite automatons}]
+[item modules/grammar_fa/faop.man grammar::fa::op {Operations on finite automatons}]
+[item modules/grammar_me/me_cpu.man grammar::me::cpu {Virtual machine implementation II for parsing token streams}]
+[item modules/grammar_me/me_cpucore.man grammar::me::cpu::core {ME virtual machine state manipulation}]
+[item modules/grammar_me/gasm.man grammar::me::cpu::gasm {ME assembler}]
+[item modules/grammar_me/me_tcl.man grammar::me::tcl {Virtual machine implementation I for parsing token streams}]
+[item modules/grammar_me/me_util.man grammar::me::util {AST utilities}]
+[item modules/grammar_me/me_ast.man grammar::me_ast {Various representations of ASTs}]
+[item modules/grammar_me/me_intro.man grammar::me_intro {Introduction to virtual machines for parsing token streams}]
+[item modules/grammar_me/me_vm.man grammar::me_vm {Virtual machine for parsing token streams}]
+[item modules/grammar_peg/peg.man grammar::peg {Create and manipulate parsing expression grammars}]
+[item modules/grammar_peg/peg_interp.man grammar::peg::interp {Interpreter for parsing expression grammars}]
+[division_end]
+[division_start {Hashes, checksums, and encryption}]
+[item modules/aes/aes.man aes {Implementation of the AES block cipher}]
+[item modules/blowfish/blowfish.man blowfish {Implementation of the Blowfish block cipher}]
+[item modules/crc/cksum.man cksum {Calculate a cksum(1) compatible checksum}]
+[item modules/crc/crc16.man crc16 {Perform a 16bit Cyclic Redundancy Check}]
+[item modules/crc/crc32.man crc32 {Perform a 32bit Cyclic Redundancy Check}]
+[item modules/des/des.man des {Implementation of the DES and triple-DES ciphers}]
+[item modules/md4/md4.man md4 {MD4 Message-Digest Algorithm}]
+[item modules/md5/md5.man md5 {MD5 Message-Digest Algorithm}]
+[item modules/md5crypt/md5crypt.man md5crypt {MD5-based password encryption}]
+[item modules/otp/otp.man otp {One-Time Passwords}]
+[item modules/pki/pki.man pki {Implementation of the public key cipher}]
+[item modules/rc4/rc4.man rc4 {Implementation of the RC4 stream cipher}]
+[item modules/ripemd/ripemd128.man ripemd128 {RIPEMD-128 Message-Digest Algorithm}]
+[item modules/ripemd/ripemd160.man ripemd160 {RIPEMD-160 Message-Digest Algorithm}]
+[item modules/sha1/sha1.man sha1 {SHA1 Message-Digest Algorithm}]
+[item modules/sha1/sha256.man sha256 {SHA256 Message-Digest Algorithm}]
+[item modules/soundex/soundex.man soundex Soundex]
+[item modules/crc/sum.man sum {Calculate a sum(1) compatible checksum}]
+[item modules/des/tcldes.man tcldes {Implementation of the DES and triple-DES ciphers}]
+[item modules/des/tcldesjr.man tcldes {Implementation of the DES and triple-DES ciphers}]
+[item modules/uuid/uuid.man uuid {UUID generation and comparison}]
+[division_end]
+[division_start Mathematics]
+[item modules/math/math.man math {Tcl Math Library}]
+[item modules/math/bigfloat.man math::bigfloat {Arbitrary precision floating-point numbers}]
+[item modules/math/bignum.man math::bignum {Arbitrary precision integer numbers}]
+[item modules/math/calculus.man math::calculus {Integration and ordinary differential equations}]
+[item modules/math/romberg.man math::calculus::romberg {Romberg integration}]
+[item modules/math/combinatorics.man math::combinatorics {Combinatorial functions in the Tcl Math Library}]
+[item modules/math/qcomplex.man math::complexnumbers {Straightforward complex number package}]
+[item modules/math/constants.man math::constants {Mathematical and numerical constants}]
+[item modules/math/decimal.man math::decimal {General decimal arithmetic}]
+[item modules/math/exact.man math::exact {Exact Real Arithmetic}]
+[item modules/math/fourier.man math::fourier {Discrete and fast fourier transforms}]
+[item modules/math/fuzzy.man math::fuzzy {Fuzzy comparison of floating-point numbers}]
+[item modules/math/math_geometry.man math::geometry {Geometrical computations}]
+[item modules/math/interpolate.man math::interpolate {Interpolation routines}]
+[item modules/math/linalg.man math::linearalgebra {Linear Algebra}]
+[item modules/math/numtheory.man math::numtheory {Number Theory}]
+[item modules/math/optimize.man math::optimize {Optimisation routines}]
+[item modules/math/polynomials.man math::polynomials {Polynomial functions}]
+[item modules/math/rational_funcs.man math::rationalfunctions {Polynomial functions}]
+[item modules/math/roman.man math::roman {Tools for creating and manipulating roman numerals}]
+[item modules/math/special.man math::special {Special mathematical functions}]
+[item modules/math/statistics.man math::statistics {Basic statistical functions and procedures}]
+[item modules/simulation/annealing.man simulation::annealing {Simulated annealing}]
+[item modules/simulation/montecarlo.man simulation::montecarlo {Monte Carlo simulations}]
+[item modules/simulation/simulation_random.man simulation::random {Pseudo-random number generators}]
+[division_end]
+[division_start Networking]
+[item modules/asn/asn.man asn {ASN.1 BER encoder/decoder}]
+[item modules/http/autoproxy.man autoproxy {Automatic HTTP proxy usage and authentication}]
+[item modules/bee/bee.man bee {BitTorrent Serialization Format Encoder/Decoder}]
+[item modules/dns/tcllib_dns.man dns {Tcl Domain Name Service Client}]
+[item modules/ftp/ftp.man ftp {Client-side tcl implementation of the ftp protocol}]
+[item modules/ftp/ftp_geturl.man ftp::geturl {Uri handler for ftp urls}]
+[item modules/ftpd/ftpd.man ftpd {Tcl FTP server implementation}]
+[item modules/ident/ident.man ident {Ident protocol client}]
+[item modules/irc/irc.man irc {Create IRC connection and interface.}]
+[item modules/ldap/ldap.man ldap {LDAP client}]
+[item modules/ldap/ldapx.man ldapx {LDAP extended object interface}]
+[item modules/nns/nns_client.man nameserv {Name service facility, Client}]
+[item modules/nns/nns_auto.man nameserv::auto {Name service facility, Client Extension}]
+[item modules/nns/nns_common.man nameserv::common {Name service facility, shared definitions}]
+[item modules/nns/nns_protocol.man nameserv::protocol {Name service facility, client/server protocol}]
+[item modules/nns/nns_server.man nameserv::server {Name service facility, Server}]
+[item modules/nmea/nmea.man nmea {Process NMEA data}]
+[item apps/nns.man nns {Name service facility, Commandline Client Application}]
+[item modules/nns/nns_intro.man nns_intro {Name service facility, introduction}]
+[item apps/nnsd.man nnsd {Name service facility, Commandline Server Application}]
+[item apps/nnslog.man nnslog {Name service facility, Commandline Logging Client Application}]
+[item modules/nntp/nntp.man nntp {Tcl client for the NNTP protocol}]
+[item modules/ntp/ntp_time.man ntp_time {Tcl Time Service Client}]
+[item modules/oauth/oauth.man oauth {oauth API base signature}]
+[item modules/irc/picoirc.man picoirc {Small and simple embeddable IRC client.}]
+[item modules/pop3/pop3.man pop3 {Tcl client for POP3 email protocol}]
+[item modules/pop3d/pop3d.man pop3d {Tcl POP3 server implementation}]
+[item modules/pop3d/pop3d_dbox.man pop3d::dbox {Simple mailbox database for pop3d}]
+[item modules/pop3d/pop3d_udb.man pop3d::udb {Simple user database for pop3d}]
+[item modules/amazon-s3/S3.man S3 {Amazon S3 Web Service Interface}]
+[item modules/sasl/sasl.man SASL {Implementation of SASL mechanisms for Tcl}]
+[item modules/sasl/ntlm.man SASL::NTLM {Implementation of SASL NTLM mechanism for Tcl}]
+[item modules/sasl/scram.man SASL::SCRAM {Implementation of SASL SCRAM mechanism for Tcl}]
+[item modules/sasl/gtoken.man SASL::XGoogleToken {Implementation of SASL NTLM mechanism for Tcl}]
+[item modules/mime/smtp.man smtp {Client-side tcl implementation of the smtp protocol}]
+[item modules/smtpd/smtpd.man smtpd {Tcl SMTP server implementation}]
+[item modules/dns/tcllib_ip.man tcllib_ip {IPv4 and IPv6 address manipulation}]
+[item modules/uri/uri.man uri {URI utilities}]
+[item modules/uri/urn-scheme.man uri_urn {URI utilities, URN scheme}]
+[item modules/websocket/websocket.man websocket {Tcl implementation of the websocket protocol}]
+[division_end]
+[division_start {Page Parser Generator}]
+[item apps/page.man page {Parser Generator}]
+[item modules/page/page_intro.man page_intro {page introduction}]
+[item modules/page/page_pluginmgr.man page_pluginmgr {page plugin manager}]
+[item modules/page/page_util_flow.man page_util_flow {page dataflow/treewalker utility}]
+[item modules/page/page_util_norm_lemon.man page_util_norm_lemon {page AST normalization, LEMON}]
+[item modules/page/page_util_norm_peg.man page_util_norm_peg {page AST normalization, PEG}]
+[item modules/page/page_util_peg.man page_util_peg {page PEG transformation utilities}]
+[item modules/page/page_util_quote.man page_util_quote {page character quoting utilities}]
+[division_end]
+[division_start {Parsing and Grammars}]
+[item apps/pt.man pt {Parser Tools Application}]
+[item modules/pt/pt_astree.man pt::ast {Abstract Syntax Tree Serialization}]
+[item modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl {C/PARAM, Canned configuration, Critcl}]
+[item modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea {C/PARAM, Canned configuration, TEA}]
+[item modules/pt/pt_json_language.man pt::json_language {The JSON Grammar Exchange Format}]
+[item modules/pt/pt_param.man pt::param {PackRat Machine Specification}]
+[item modules/pt/pt_pexpression.man pt::pe {Parsing Expression Serialization}]
+[item modules/pt/pt_pexpr_op.man pt::pe::op {Parsing Expression Utilities}]
+[item modules/pt/pt_pegrammar.man pt::peg {Parsing Expression Grammar Serialization}]
+[item modules/pt/pt_peg_container.man pt::peg::container {PEG Storage}]
+[item modules/pt/pt_peg_container_peg.man pt::peg::container::peg {PEG Storage. Canned PEG grammar specification}]
+[item modules/pt/pt_peg_export.man pt::peg::export {PEG Export}]
+[item modules/pt/pt_peg_export_container.man pt::peg::export::container {PEG Export Plugin. Write CONTAINER format}]
+[item modules/pt/pt_peg_export_json.man pt::peg::export::json {PEG Export Plugin. Write JSON format}]
+[item modules/pt/pt_peg_export_peg.man pt::peg::export::peg {PEG Export Plugin. Write PEG format}]
+[item modules/pt/pt_peg_from_container.man pt::peg::from::container {PEG Conversion. From CONTAINER format}]
+[item modules/pt/pt_peg_from_json.man pt::peg::from::json {PEG Conversion. Read JSON format}]
+[item modules/pt/pt_peg_from_peg.man pt::peg::from::peg {PEG Conversion. Read PEG format}]
+[item modules/pt/pt_peg_import.man pt::peg::import {PEG Import}]
+[item modules/pt/pt_peg_import_container.man pt::peg::import::container {PEG Import Plugin. From CONTAINER format}]
+[item modules/pt/pt_peg_import_json.man pt::peg::import::json {PEG Import Plugin. Read JSON format}]
+[item modules/pt/pt_peg_import_peg.man pt::peg::import::peg {PEG Import Plugin. Read PEG format}]
+[item modules/pt/pt_peg_interp.man pt::peg::interp {Interpreter for parsing expression grammars}]
+[item modules/pt/pt_peg_to_container.man pt::peg::to::container {PEG Conversion. Write CONTAINER format}]
+[item modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam {PEG Conversion. Write CPARAM format}]
+[item modules/pt/pt_peg_to_json.man pt::peg::to::json {PEG Conversion. Write JSON format}]
+[item modules/pt/pt_peg_to_param.man pt::peg::to::param {PEG Conversion. Write PARAM format}]
+[item modules/pt/pt_peg_to_peg.man pt::peg::to::peg {PEG Conversion. Write PEG format}]
+[item modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam {PEG Conversion. Write TCLPARAM format}]
+[item modules/pt/pt_peg_language.man pt::peg_language {PEG Language Tutorial}]
+[item modules/pt/pt_peg_introduction.man pt::pegrammar {Introduction to Parsing Expression Grammars}]
+[item modules/pt/pt_pgen.man pt::pgen {Parser Generator}]
+[item modules/pt/pt_rdengine.man pt::rde {Parsing Runtime Support, PARAM based}]
+[item modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit {Tcl/PARAM, Canned configuration, Snit}]
+[item modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo {Tcl/PARAM, Canned configuration, Tcloo}]
+[item modules/pt/pt_util.man pt::util {General utilities}]
+[item modules/pt/pt_to_api.man pt_export_api {Parser Tools Export API}]
+[item modules/pt/pt_from_api.man pt_import_api {Parser Tools Import API}]
+[item modules/pt/pt_introduction.man pt_introduction {Introduction to Parser Tools}]
+[item modules/pt/pt_parse_peg.man pt_parse_peg {Parser Tools PEG Parser}]
+[item modules/pt/pt_parser_api.man pt_parser_api {Parser API}]
+[item modules/pt/pt_peg_op.man pt_peg_op {Parser Tools PE Grammar Utility Operations}]
+[division_end]
+[division_start {Procedures, arguments, parameters, options}]
+[item modules/tepam/tepam_introduction.man tepam {An introduction into TEPAM, Tcl's Enhanced Procedure and Argument Manager}]
+[item modules/tepam/tepam_procedure.man tepam::procedure {TEPAM procedure, reference manual}]
+[division_end]
+[division_start {Programming tools}]
+[item modules/cmdline/cmdline.man cmdline {Procedures to process command lines and options.}]
+[item modules/comm/comm.man comm {A remote communication facility for Tcl (8.3 and later)}]
+[item modules/comm/comm_wire.man comm_wire {The comm wire protocol}]
+[item modules/control/control.man control {Procedures for control flow structures.}]
+[item modules/interp/deleg_method.man deleg_method {Creation of comm delegates (snit methods)}]
+[item modules/interp/deleg_proc.man deleg_proc {Creation of comm delegates (procedures)}]
+[item modules/fileutil/fileutil.man fileutil {Procedures implementing some file utilities}]
+[item modules/fumagic/cfront.man fileutil::magic::cfront {Generator core for compiler of magic(5) files}]
+[item modules/fumagic/cgen.man fileutil::magic::cgen {Generator core for compiler of magic(5) files}]
+[item modules/fumagic/filetypes.man fileutil::magic::filetype {Procedures implementing file-type recognition}]
+[item modules/fumagic/mimetypes.man fileutil::magic::mimetype {Procedures implementing mime-type recognition}]
+[item modules/fumagic/rtcore.man fileutil::magic::rt {Runtime core for file type recognition engines written in pure Tcl}]
+[item modules/fileutil/multi.man fileutil::multi {Multi-file operation, scatter/gather, standard object}]
+[item modules/fileutil/multiop.man fileutil::multi::op {Multi-file operation, scatter/gather}]
+[item modules/fileutil/traverse.man fileutil_traverse {Iterative directory traversal}]
+[item modules/hook/hook.man hook Hooks]
+[item modules/interp/tcllib_interp.man interp {Interp creation and aliasing}]
+[item modules/log/log.man log {Procedures to log messages of libraries and applications.}]
+[item modules/log/logger.man logger {System to control logging of events.}]
+[item modules/log/loggerAppender.man logger::appender {Collection of predefined appenders for logger}]
+[item modules/log/loggerUtils.man logger::utils {Utilities for logger}]
+[item modules/multiplexer/multiplexer.man multiplexer {One-to-many communication with sockets.}]
+[item modules/pluginmgr/pluginmgr.man pluginmgr {Manage a plugin}]
+[item modules/profiler/profiler.man profiler {Tcl source code profiler}]
+[item modules/snit/snit.man snit {Snit's Not Incr Tcl}]
+[item modules/snit/snitfaq.man snitfaq {Snit Frequently Asked Questions}]
+[item modules/stooop/stooop.man stooop {Object oriented extension.}]
+[item modules/stooop/switched.man switched {switch/option management.}]
+[item modules/tie/tie.man tie {Array persistence}]
+[item modules/tie/tie_std.man tie {Array persistence, standard data sources}]
+[item modules/uev/uevent.man uevent {User events}]
+[item modules/wip/wip.man wip {Word Interpreter}]
+[division_end]
+[division_start System]
+[item modules/cron/cron.man cron {Tool for automating the period callback of commands}]
+[item modules/nettool/nettool.man nettool {Tools for networked applications}]
+[item modules/processman/processman.man processman {Tool for automating the period callback of commands}]
+[division_end]
+[division_start {Terminal control}]
+[item modules/term/term.man term {General terminal control}]
+[item modules/term/ansi_code.man term::ansi::code {Helper for control sequences}]
+[item modules/term/ansi_cattr.man term::ansi::code::attr {ANSI attribute sequences}]
+[item modules/term/ansi_cctrl.man term::ansi::code::ctrl {ANSI control sequences}]
+[item modules/term/ansi_cmacros.man term::ansi::code::macros {Macro sequences}]
+[item modules/term/ansi_ctrlu.man term::ansi::ctrl::unix {Control operations and queries}]
+[item modules/term/ansi_send.man term::ansi::send {Output of ANSI control sequences to terminals}]
+[item modules/term/imenu.man term::interact::menu {Terminal widget, menu}]
+[item modules/term/ipager.man term::interact::pager {Terminal widget, paging}]
+[item modules/term/receive.man term::receive {General input from terminals}]
+[item modules/term/term_bind.man term::receive::bind {Keyboard dispatch from terminals}]
+[item modules/term/term_send.man term::send {General output to terminals}]
+[division_end]
+[division_start {Text formatter plugin}]
+[item modules/doctools2idx/export_docidx.man doctools::idx::export::docidx {docidx export plugin}]
+[item modules/doctools2idx/idx_export_html.man doctools::idx::export::html {HTML export plugin}]
+[item modules/doctools2idx/idx_export_json.man doctools::idx::export::json {JSON export plugin}]
+[item modules/doctools2idx/idx_export_nroff.man doctools::idx::export::nroff {nroff export plugin}]
+[item modules/doctools2idx/idx_export_text.man doctools::idx::export::text {plain text export plugin}]
+[item modules/doctools2idx/idx_export_wiki.man doctools::idx::export::wiki {wiki export plugin}]
+[item modules/doctools2idx/import_docidx.man doctools::idx::import::docidx {docidx import plugin}]
+[item modules/doctools2idx/idx_import_json.man doctools::idx::import::json {JSON import plugin}]
+[item modules/doctools2toc/export_doctoc.man doctools::toc::export::doctoc {doctoc export plugin}]
+[item modules/doctools2toc/toc_export_html.man doctools::toc::export::html {HTML export plugin}]
+[item modules/doctools2toc/toc_export_json.man doctools::toc::export::json {JSON export plugin}]
+[item modules/doctools2toc/toc_export_nroff.man doctools::toc::export::nroff {nroff export plugin}]
+[item modules/doctools2toc/toc_export_text.man doctools::toc::export::text {plain text export plugin}]
+[item modules/doctools2toc/toc_export_wiki.man doctools::toc::export::wiki {wiki export plugin}]
+[item modules/doctools2toc/import_doctoc.man doctools::toc::import::doctoc {doctoc import plugin}]
+[item modules/doctools2toc/toc_import_json.man doctools::toc::import::json {JSON import plugin}]
+[division_end]
+[division_start {Text processing}]
+[item modules/base64/ascii85.man ascii85 {ascii85-encode/decode binary data}]
+[item modules/base32/base32.man base32 {base32 standard encoding}]
+[item modules/base32/base32core.man base32::core {Expanding basic base32 maps}]
+[item modules/base32/base32hex.man base32::hex {base32 extended hex encoding}]
+[item modules/base64/base64.man base64 {base64-encode/decode binary data}]
+[item modules/bibtex/bibtex.man bibtex {Parse bibtex files}]
+[item modules/clock/iso8601.man clock_iso8601 {Parsing ISO 8601 dates/times}]
+[item modules/clock/rfc2822.man clock_rfc2822 {Parsing ISO 8601 dates/times}]
+[item modules/csv/csv.man csv {Procedures to handle CSV data.}]
+[item modules/htmlparse/htmlparse.man htmlparse {Procedures to parse HTML strings}]
+[item modules/inifile/ini.man inifile {Parsing of Windows INI files}]
+[item modules/mime/mime.man mime {Manipulation of MIME body parts}]
+[item modules/rcs/rcs.man rcs {RCS low level utilities}]
+[item modules/string/token.man string::token {Regex based iterative lexing}]
+[item modules/string/token_shell.man string::token::shell {Parsing of shell command line}]
+[item modules/textutil/textutil.man textutil {Procedures to manipulate texts and strings.}]
+[item modules/textutil/adjust.man textutil::adjust {Procedures to adjust, indent, and undent paragraphs}]
+[item modules/textutil/repeat.man textutil::repeat {Procedures to repeat strings.}]
+[item modules/textutil/textutil_split.man textutil::split {Procedures to split texts}]
+[item modules/textutil/textutil_string.man textutil::string {Procedures to manipulate texts and strings.}]
+[item modules/textutil/tabify.man textutil::tabify {Procedures to (un)tabify strings}]
+[item modules/textutil/trim.man textutil::trim {Procedures to trim strings}]
+[item modules/base64/uuencode.man uuencode {UU-encode/decode binary data}]
+[item modules/amazon-s3/xsxp.man xsxp {eXtremely Simple Xml Parser}]
+[item modules/base64/yencode.man yencode {Y-encode/decode binary data}]
+[division_end]
+[division_start {Transfer module}]
+[item modules/transfer/connect.man transfer::connect {Connection setup}]
+[item modules/transfer/copyops.man transfer::copy {Data transfer foundation}]
+[item modules/transfer/tqueue.man transfer::copy::queue {Queued transfers}]
+[item modules/transfer/ddest.man transfer::data::destination {Data destination}]
+[item modules/transfer/dsource.man transfer::data::source {Data source}]
+[item modules/transfer/receiver.man transfer::receiver {Data source}]
+[item modules/transfer/transmitter.man transfer::transmitter {Data source}]
+[division_end]
+[division_start Unfiled]
+[item modules/cache/async.man cache::async {Asynchronous in-memory cache}]
+[item modules/generator/generator.man generator {Procedures for creating and using generators.}]
+[item modules/yaml/huddle.man huddle {Create and manipulate huddle object}]
+[item modules/imap4/imap4.man imap4 {imap client-side tcl implementation of imap protocol}]
+[item modules/map/map_geocode_nominatim.man map::geocode::nominatim {Resolving geographical names with a Nominatim service}]
+[item modules/map/map_slippy.man map::slippy {Common code for slippy based map packages}]
+[item modules/map/map_slippy_cache.man map::slippy::cache {Management of a tile cache in the local filesystem}]
+[item modules/map/map_slippy_fetcher.man map::slippy::fetcher {Accessing a server providing tiles for slippy-based maps}]
+[item modules/mapproj/mapproj.man mapproj {Map projection routines}]
+[item modules/math/symdiff.man math::calculus::symdiff {Symbolic differentiation for Tcl}]
+[item modules/namespacex/namespacex.man namespacex {Namespace utility commands}]
+[item modules/rest/rest.man rest {define REST web APIs and call them inline or asychronously}]
+[item modules/stringprep/stringprep.man stringprep {Implementation of stringprep}]
+[item modules/stringprep/stringprep_data.man stringprep::data {stringprep data tables, generated, internal}]
+[item modules/math/machineparameters.man tclrep/machineparameters {Compute double precision machine parameters.}]
+[item modules/uev/uevent_onidle.man uevent::onidle {Request merging and deferal to idle time}]
+[item modules/stringprep/unicode.man unicode {Implementation of Unicode normalization}]
+[item modules/stringprep/unicode_data.man unicode::data {unicode data tables, generated, internal}]
+[item modules/units/units.man units {unit conversion}]
+[item modules/yaml/yaml.man yaml {YAML Format Encoder/Decoder}]
+[division_end]
+[division_start Utilites]
+[item modules/dicttool/dicttool.man dicttool {Dictionary Tools}]
+[division_end]
+[division_start Utility]
+[item modules/lambda/lambda.man lambda {Utility commands for anonymous procedures}]
+[item modules/ooutil/ooutil.man oo::util {Utility commands for TclOO}]
+[item modules/tool/meta.man oo::util {Utility commands for TclOO}]
+[item modules/tool/tool.man tool {Dictionary Tools}]
+[item modules/tool/tool_dict_ensemble.man tool::dict_ensemble {Dictionary Tools}]
+[item modules/try/tcllib_throw.man try {throw - Throw an error exception with a message}]
+[item modules/try/tcllib_try.man try {try - Trap and process errors and exceptions}]
+[division_end]
+[division_start {Validation, Type checking}]
+[item modules/valtype/valtype_common.man valtype::common {Validation, common code}]
+[item modules/valtype/cc_amex.man valtype::creditcard::amex {Validation for AMEX creditcard number}]
+[item modules/valtype/cc_discover.man valtype::creditcard::discover {Validation for Discover creditcard number}]
+[item modules/valtype/cc_mastercard.man valtype::creditcard::mastercard {Validation for Mastercard creditcard number}]
+[item modules/valtype/cc_visa.man valtype::creditcard::visa {Validation for VISA creditcard number}]
+[item modules/valtype/ean13.man valtype::gs1::ean13 {Validation for EAN13}]
+[item modules/valtype/iban.man valtype::iban {Validation for IBAN}]
+[item modules/valtype/imei.man valtype::imei {Validation for IMEI}]
+[item modules/valtype/isbn.man valtype::isbn {Validation for ISBN}]
+[item modules/valtype/luhn.man valtype::luhn {Validation for plain number with a LUHN checkdigit}]
+[item modules/valtype/luhn5.man valtype::luhn5 {Validation for plain number with a LUHN5 checkdigit}]
+[item modules/valtype/usnpi.man valtype::usnpi {Validation for USNPI}]
+[item modules/valtype/verhoeff.man valtype::verhoeff {Validation for plain number with a VERHOEFF checkdigit}]
+[division_end]
+[division_end]
+[division_start {By Type}]
+[division_start Applications]
+[item apps/dtplite.man dtplite {Lightweight DocTools Markup Processor}]
+[item apps/nns.man nns {Name service facility, Commandline Client Application}]
+[item apps/nnsd.man nnsd {Name service facility, Commandline Server Application}]
+[item apps/nnslog.man nnslog {Name service facility, Commandline Logging Client Application}]
+[item apps/page.man page {Parser Generator}]
+[item apps/pt.man pt {Parser Tools Application}]
+[item apps/tcldocstrip.man tcldocstrip {Tcl-based Docstrip Processor}]
+[division_end]
+[division_start Modules]
+[division_start aes]
+[item modules/aes/aes.man aes {Implementation of the AES block cipher}]
+[division_end]
+[division_start amazon-s3]
+[item modules/amazon-s3/S3.man S3 {Amazon S3 Web Service Interface}]
+[item modules/amazon-s3/xsxp.man xsxp {eXtremely Simple Xml Parser}]
+[division_end]
+[division_start asn]
+[item modules/asn/asn.man asn {ASN.1 BER encoder/decoder}]
+[division_end]
+[division_start base32]
+[item modules/base32/base32.man base32 {base32 standard encoding}]
+[item modules/base32/base32core.man base32::core {Expanding basic base32 maps}]
+[item modules/base32/base32hex.man base32::hex {base32 extended hex encoding}]
+[division_end]
+[division_start base64]
+[item modules/base64/ascii85.man ascii85 {ascii85-encode/decode binary data}]
+[item modules/base64/base64.man base64 {base64-encode/decode binary data}]
+[item modules/base64/uuencode.man uuencode {UU-encode/decode binary data}]
+[item modules/base64/yencode.man yencode {Y-encode/decode binary data}]
+[division_end]
+[division_start bee]
+[item modules/bee/bee.man bee {BitTorrent Serialization Format Encoder/Decoder}]
+[division_end]
+[division_start bench]
+[item modules/bench/bench.man bench {bench - Processing benchmark suites}]
+[item modules/bench/bench_read.man bench::in {bench::in - Reading benchmark results}]
+[item modules/bench/bench_wcsv.man bench::out::csv {bench::out::csv - Formatting benchmark results as CSV}]
+[item modules/bench/bench_wtext.man bench::out::text {bench::out::text - Formatting benchmark results as human readable text}]
+[item modules/bench/bench_intro.man bench_intro {bench introduction}]
+[item modules/bench/bench_lang_intro.man bench_lang_intro {bench language introduction}]
+[item modules/bench/bench_lang_spec.man bench_lang_spec {bench language specification}]
+[division_end]
+[division_start bibtex]
+[item modules/bibtex/bibtex.man bibtex {Parse bibtex files}]
+[division_end]
+[division_start blowfish]
+[item modules/blowfish/blowfish.man blowfish {Implementation of the Blowfish block cipher}]
+[division_end]
+[division_start cache]
+[item modules/cache/async.man cache::async {Asynchronous in-memory cache}]
+[division_end]
+[division_start clock]
+[item modules/clock/iso8601.man clock_iso8601 {Parsing ISO 8601 dates/times}]
+[item modules/clock/rfc2822.man clock_rfc2822 {Parsing ISO 8601 dates/times}]
+[division_end]
+[division_start cmdline]
+[item modules/cmdline/cmdline.man cmdline {Procedures to process command lines and options.}]
+[division_end]
+[division_start comm]
+[item modules/comm/comm.man comm {A remote communication facility for Tcl (8.3 and later)}]
+[item modules/comm/comm_wire.man comm_wire {The comm wire protocol}]
+[division_end]
+[division_start control]
+[item modules/control/control.man control {Procedures for control flow structures.}]
+[division_end]
+[division_start coroutine]
+[item modules/coroutine/tcllib_coroutine.man coroutine {Coroutine based event and IO handling}]
+[item modules/coroutine/coro_auto.man coroutine::auto {Automatic event and IO coroutine awareness}]
+[division_end]
+[division_start counter]
+[item modules/counter/counter.man counter {Procedures for counters and histograms}]
+[division_end]
+[division_start crc]
+[item modules/crc/cksum.man cksum {Calculate a cksum(1) compatible checksum}]
+[item modules/crc/crc16.man crc16 {Perform a 16bit Cyclic Redundancy Check}]
+[item modules/crc/crc32.man crc32 {Perform a 32bit Cyclic Redundancy Check}]
+[item modules/crc/sum.man sum {Calculate a sum(1) compatible checksum}]
+[division_end]
+[division_start cron]
+[item modules/cron/cron.man cron {Tool for automating the period callback of commands}]
+[division_end]
+[division_start csv]
+[item modules/csv/csv.man csv {Procedures to handle CSV data.}]
+[division_end]
+[division_start debug]
+[item modules/debug/debug.man debug {debug narrative - core}]
+[item modules/debug/debug_caller.man debug::caller {debug narrative - caller}]
+[item modules/debug/debug_heartbeat.man debug::heartbeat {debug narrative - heartbeat}]
+[item modules/debug/debug_timestamp.man debug::timestamp {debug narrative - timestamping}]
+[division_end]
+[division_start des]
+[item modules/des/des.man des {Implementation of the DES and triple-DES ciphers}]
+[item modules/des/tcldes.man tcldes {Implementation of the DES and triple-DES ciphers}]
+[item modules/des/tcldesjr.man tcldes {Implementation of the DES and triple-DES ciphers}]
+[division_end]
+[division_start dicttool]
+[item modules/dicttool/dicttool.man dicttool {Dictionary Tools}]
+[division_end]
+[division_start dns]
+[item modules/dns/tcllib_dns.man dns {Tcl Domain Name Service Client}]
+[item modules/dns/tcllib_ip.man tcllib_ip {IPv4 and IPv6 address manipulation}]
+[division_end]
+[division_start docstrip]
+[item modules/docstrip/docstrip.man docstrip {Docstrip style source code extraction}]
+[item modules/docstrip/docstrip_util.man docstrip_util {Docstrip-related utilities}]
+[division_end]
+[division_start doctools]
+[item modules/doctools/docidx_intro.man docidx_intro {docidx introduction}]
+[item modules/doctools/docidx_lang_cmdref.man docidx_lang_cmdref {docidx language command reference}]
+[item modules/doctools/docidx_lang_faq.man docidx_lang_faq {docidx language faq}]
+[item modules/doctools/docidx_lang_intro.man docidx_lang_intro {docidx language introduction}]
+[item modules/doctools/docidx_lang_syntax.man docidx_lang_syntax {docidx language syntax}]
+[item modules/doctools/docidx_plugin_apiref.man docidx_plugin_apiref {docidx plugin API reference}]
+[item modules/doctools/doctoc_intro.man doctoc_intro {doctoc introduction}]
+[item modules/doctools/doctoc_lang_cmdref.man doctoc_lang_cmdref {doctoc language command reference}]
+[item modules/doctools/doctoc_lang_faq.man doctoc_lang_faq {doctoc language faq}]
+[item modules/doctools/doctoc_lang_intro.man doctoc_lang_intro {doctoc language introduction}]
+[item modules/doctools/doctoc_lang_syntax.man doctoc_lang_syntax {doctoc language syntax}]
+[item modules/doctools/doctoc_plugin_apiref.man doctoc_plugin_apiref {doctoc plugin API reference}]
+[item modules/doctools/doctools.man doctools {doctools - Processing documents}]
+[item modules/doctools/changelog.man doctools::changelog {Processing text in Emacs ChangeLog format}]
+[item modules/doctools/cvs.man doctools::cvs {Processing text in 'cvs log' format}]
+[item modules/doctools/docidx.man doctools::idx {docidx - Processing indices}]
+[item modules/doctools/doctoc.man doctools::toc {doctoc - Processing tables of contents}]
+[item modules/doctools/doctools_intro.man doctools_intro {doctools introduction}]
+[item modules/doctools/doctools_lang_cmdref.man doctools_lang_cmdref {doctools language command reference}]
+[item modules/doctools/doctools_lang_faq.man doctools_lang_faq {doctools language faq}]
+[item modules/doctools/doctools_lang_intro.man doctools_lang_intro {doctools language introduction}]
+[item modules/doctools/doctools_lang_syntax.man doctools_lang_syntax {doctools language syntax}]
+[item modules/doctools/doctools_plugin_apiref.man doctools_plugin_apiref {doctools plugin API reference}]
+[item modules/doctools/mpexpand.man mpexpand {Markup processor}]
+[division_end]
+[division_start doctools2base]
+[item modules/doctools2base/html_cssdefaults.man doctools::html::cssdefaults {Default CSS style for HTML export plugins}]
+[item modules/doctools2base/tcllib_msgcat.man doctools::msgcat {Message catalog management for the various document parsers}]
+[item modules/doctools2base/nroff_manmacros.man doctools::nroff::man_macros {Default CSS style for NROFF export plugins}]
+[item modules/doctools2base/tcl_parse.man doctools::tcl::parse {Processing text in 'subst -novariables' format}]
+[division_end]
+[division_start doctools2idx]
+[item modules/doctools2idx/idx_introduction.man doctools2idx_introduction {DocTools - Keyword indices}]
+[item modules/doctools2idx/idx_container.man doctools::idx {Holding keyword indices}]
+[item modules/doctools2idx/idx_export.man doctools::idx::export {Exporting keyword indices}]
+[item modules/doctools2idx/export_docidx.man doctools::idx::export::docidx {docidx export plugin}]
+[item modules/doctools2idx/idx_export_html.man doctools::idx::export::html {HTML export plugin}]
+[item modules/doctools2idx/idx_export_json.man doctools::idx::export::json {JSON export plugin}]
+[item modules/doctools2idx/idx_export_nroff.man doctools::idx::export::nroff {nroff export plugin}]
+[item modules/doctools2idx/idx_export_text.man doctools::idx::export::text {plain text export plugin}]
+[item modules/doctools2idx/idx_export_wiki.man doctools::idx::export::wiki {wiki export plugin}]
+[item modules/doctools2idx/idx_import.man doctools::idx::import {Importing keyword indices}]
+[item modules/doctools2idx/import_docidx.man doctools::idx::import::docidx {docidx import plugin}]
+[item modules/doctools2idx/idx_import_json.man doctools::idx::import::json {JSON import plugin}]
+[item modules/doctools2idx/idx_parse.man doctools::idx::parse {Parsing text in docidx format}]
+[item modules/doctools2idx/idx_structure.man doctools::idx::structure {Docidx serialization utilities}]
+[item modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c {Message catalog for the docidx parser (C)}]
+[item modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de {Message catalog for the docidx parser (DE)}]
+[item modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en {Message catalog for the docidx parser (EN)}]
+[item modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr {Message catalog for the docidx parser (FR)}]
+[division_end]
+[division_start doctools2toc]
+[item modules/doctools2toc/toc_introduction.man doctools2toc_introduction {DocTools - Tables of Contents}]
+[item modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c {Message catalog for the doctoc parser (C)}]
+[item modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de {Message catalog for the doctoc parser (DE)}]
+[item modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en {Message catalog for the doctoc parser (EN)}]
+[item modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr {Message catalog for the doctoc parser (FR)}]
+[item modules/doctools2toc/toc_container.man doctools::toc {Holding tables of contents}]
+[item modules/doctools2toc/toc_export.man doctools::toc::export {Exporting tables of contents}]
+[item modules/doctools2toc/export_doctoc.man doctools::toc::export::doctoc {doctoc export plugin}]
+[item modules/doctools2toc/toc_export_html.man doctools::toc::export::html {HTML export plugin}]
+[item modules/doctools2toc/toc_export_json.man doctools::toc::export::json {JSON export plugin}]
+[item modules/doctools2toc/toc_export_nroff.man doctools::toc::export::nroff {nroff export plugin}]
+[item modules/doctools2toc/toc_export_text.man doctools::toc::export::text {plain text export plugin}]
+[item modules/doctools2toc/toc_export_wiki.man doctools::toc::export::wiki {wiki export plugin}]
+[item modules/doctools2toc/toc_import.man doctools::toc::import {Importing keyword indices}]
+[item modules/doctools2toc/import_doctoc.man doctools::toc::import::doctoc {doctoc import plugin}]
+[item modules/doctools2toc/toc_import_json.man doctools::toc::import::json {JSON import plugin}]
+[item modules/doctools2toc/toc_parse.man doctools::toc::parse {Parsing text in doctoc format}]
+[item modules/doctools2toc/toc_structure.man doctools::toc::structure {Doctoc serialization utilities}]
+[division_end]
+[division_start dtplite]
+[item modules/dtplite/pkg_dtplite.man dtplite {Lightweight DocTools Markup Processor}]
+[division_end]
+[division_start exif]
+[item modules/exif/exif.man exif {Tcl EXIF extracts and parses EXIF fields from digital images}]
+[division_end]
+[division_start fileutil]
+[item modules/fileutil/fileutil.man fileutil {Procedures implementing some file utilities}]
+[item modules/fileutil/multi.man fileutil::multi {Multi-file operation, scatter/gather, standard object}]
+[item modules/fileutil/multiop.man fileutil::multi::op {Multi-file operation, scatter/gather}]
+[item modules/fileutil/traverse.man fileutil_traverse {Iterative directory traversal}]
+[division_end]
+[division_start ftp]
+[item modules/ftp/ftp.man ftp {Client-side tcl implementation of the ftp protocol}]
+[item modules/ftp/ftp_geturl.man ftp::geturl {Uri handler for ftp urls}]
+[division_end]
+[division_start ftpd]
+[item modules/ftpd/ftpd.man ftpd {Tcl FTP server implementation}]
+[division_end]
+[division_start fumagic]
+[item modules/fumagic/cfront.man fileutil::magic::cfront {Generator core for compiler of magic(5) files}]
+[item modules/fumagic/cgen.man fileutil::magic::cgen {Generator core for compiler of magic(5) files}]
+[item modules/fumagic/filetypes.man fileutil::magic::filetype {Procedures implementing file-type recognition}]
+[item modules/fumagic/mimetypes.man fileutil::magic::mimetype {Procedures implementing mime-type recognition}]
+[item modules/fumagic/rtcore.man fileutil::magic::rt {Runtime core for file type recognition engines written in pure Tcl}]
+[division_end]
+[division_start generator]
+[item modules/generator/generator.man generator {Procedures for creating and using generators.}]
+[division_end]
+[division_start gpx]
+[item modules/gpx/gpx.man gpx {Extracts waypoints, tracks and routes from GPX files}]
+[division_end]
+[division_start grammar_aycock]
+[item modules/grammar_aycock/aycock.man grammar::aycock {Aycock-Horspool-Earley parser generator for Tcl}]
+[division_end]
+[division_start grammar_fa]
+[item modules/grammar_fa/fa.man grammar::fa {Create and manipulate finite automatons}]
+[item modules/grammar_fa/dacceptor.man grammar::fa::dacceptor {Create and use deterministic acceptors}]
+[item modules/grammar_fa/dexec.man grammar::fa::dexec {Execute deterministic finite automatons}]
+[item modules/grammar_fa/faop.man grammar::fa::op {Operations on finite automatons}]
+[division_end]
+[division_start grammar_me]
+[item modules/grammar_me/me_cpu.man grammar::me::cpu {Virtual machine implementation II for parsing token streams}]
+[item modules/grammar_me/me_cpucore.man grammar::me::cpu::core {ME virtual machine state manipulation}]
+[item modules/grammar_me/gasm.man grammar::me::cpu::gasm {ME assembler}]
+[item modules/grammar_me/me_tcl.man grammar::me::tcl {Virtual machine implementation I for parsing token streams}]
+[item modules/grammar_me/me_util.man grammar::me::util {AST utilities}]
+[item modules/grammar_me/me_ast.man grammar::me_ast {Various representations of ASTs}]
+[item modules/grammar_me/me_intro.man grammar::me_intro {Introduction to virtual machines for parsing token streams}]
+[item modules/grammar_me/me_vm.man grammar::me_vm {Virtual machine for parsing token streams}]
+[division_end]
+[division_start grammar_peg]
+[item modules/grammar_peg/peg.man grammar::peg {Create and manipulate parsing expression grammars}]
+[item modules/grammar_peg/peg_interp.man grammar::peg::interp {Interpreter for parsing expression grammars}]
+[division_end]
+[division_start hook]
+[item modules/hook/hook.man hook Hooks]
+[division_end]
+[division_start html]
+[item modules/html/html.man html {Procedures to generate HTML structures}]
+[division_end]
+[division_start htmlparse]
+[item modules/htmlparse/htmlparse.man htmlparse {Procedures to parse HTML strings}]
+[division_end]
+[division_start http]
+[item modules/http/autoproxy.man autoproxy {Automatic HTTP proxy usage and authentication}]
+[division_end]
+[division_start ident]
+[item modules/ident/ident.man ident {Ident protocol client}]
+[division_end]
+[division_start imap4]
+[item modules/imap4/imap4.man imap4 {imap client-side tcl implementation of imap protocol}]
+[division_end]
+[division_start inifile]
+[item modules/inifile/ini.man inifile {Parsing of Windows INI files}]
+[division_end]
+[division_start interp]
+[item modules/interp/deleg_method.man deleg_method {Creation of comm delegates (snit methods)}]
+[item modules/interp/deleg_proc.man deleg_proc {Creation of comm delegates (procedures)}]
+[item modules/interp/tcllib_interp.man interp {Interp creation and aliasing}]
+[division_end]
+[division_start irc]
+[item modules/irc/irc.man irc {Create IRC connection and interface.}]
+[item modules/irc/picoirc.man picoirc {Small and simple embeddable IRC client.}]
+[division_end]
+[division_start javascript]
+[item modules/javascript/javascript.man javascript {Procedures to generate HTML and Java Script structures.}]
+[division_end]
+[division_start jpeg]
+[item modules/jpeg/jpeg.man jpeg {JPEG querying and manipulation of meta data}]
+[division_end]
+[division_start json]
+[item modules/json/json.man json {JSON parser}]
+[item modules/json/json_write.man json::write {JSON generation}]
+[division_end]
+[division_start lambda]
+[item modules/lambda/lambda.man lambda {Utility commands for anonymous procedures}]
+[division_end]
+[division_start ldap]
+[item modules/ldap/ldap.man ldap {LDAP client}]
+[item modules/ldap/ldapx.man ldapx {LDAP extended object interface}]
+[division_end]
+[division_start log]
+[item modules/log/log.man log {Procedures to log messages of libraries and applications.}]
+[item modules/log/logger.man logger {System to control logging of events.}]
+[item modules/log/loggerAppender.man logger::appender {Collection of predefined appenders for logger}]
+[item modules/log/loggerUtils.man logger::utils {Utilities for logger}]
+[division_end]
+[division_start map]
+[item modules/map/map_geocode_nominatim.man map::geocode::nominatim {Resolving geographical names with a Nominatim service}]
+[item modules/map/map_slippy.man map::slippy {Common code for slippy based map packages}]
+[item modules/map/map_slippy_cache.man map::slippy::cache {Management of a tile cache in the local filesystem}]
+[item modules/map/map_slippy_fetcher.man map::slippy::fetcher {Accessing a server providing tiles for slippy-based maps}]
+[division_end]
+[division_start mapproj]
+[item modules/mapproj/mapproj.man mapproj {Map projection routines}]
+[division_end]
+[division_start math]
+[item modules/math/math.man math {Tcl Math Library}]
+[item modules/math/bigfloat.man math::bigfloat {Arbitrary precision floating-point numbers}]
+[item modules/math/bignum.man math::bignum {Arbitrary precision integer numbers}]
+[item modules/math/calculus.man math::calculus {Integration and ordinary differential equations}]
+[item modules/math/romberg.man math::calculus::romberg {Romberg integration}]
+[item modules/math/symdiff.man math::calculus::symdiff {Symbolic differentiation for Tcl}]
+[item modules/math/combinatorics.man math::combinatorics {Combinatorial functions in the Tcl Math Library}]
+[item modules/math/qcomplex.man math::complexnumbers {Straightforward complex number package}]
+[item modules/math/constants.man math::constants {Mathematical and numerical constants}]
+[item modules/math/decimal.man math::decimal {General decimal arithmetic}]
+[item modules/math/exact.man math::exact {Exact Real Arithmetic}]
+[item modules/math/fourier.man math::fourier {Discrete and fast fourier transforms}]
+[item modules/math/fuzzy.man math::fuzzy {Fuzzy comparison of floating-point numbers}]
+[item modules/math/math_geometry.man math::geometry {Geometrical computations}]
+[item modules/math/interpolate.man math::interpolate {Interpolation routines}]
+[item modules/math/linalg.man math::linearalgebra {Linear Algebra}]
+[item modules/math/numtheory.man math::numtheory {Number Theory}]
+[item modules/math/optimize.man math::optimize {Optimisation routines}]
+[item modules/math/polynomials.man math::polynomials {Polynomial functions}]
+[item modules/math/rational_funcs.man math::rationalfunctions {Polynomial functions}]
+[item modules/math/roman.man math::roman {Tools for creating and manipulating roman numerals}]
+[item modules/math/special.man math::special {Special mathematical functions}]
+[item modules/math/statistics.man math::statistics {Basic statistical functions and procedures}]
+[item modules/math/machineparameters.man tclrep/machineparameters {Compute double precision machine parameters.}]
+[division_end]
+[division_start md4]
+[item modules/md4/md4.man md4 {MD4 Message-Digest Algorithm}]
+[division_end]
+[division_start md5]
+[item modules/md5/md5.man md5 {MD5 Message-Digest Algorithm}]
+[division_end]
+[division_start md5crypt]
+[item modules/md5crypt/md5crypt.man md5crypt {MD5-based password encryption}]
+[division_end]
+[division_start mime]
+[item modules/mime/mime.man mime {Manipulation of MIME body parts}]
+[item modules/mime/smtp.man smtp {Client-side tcl implementation of the smtp protocol}]
+[division_end]
+[division_start multiplexer]
+[item modules/multiplexer/multiplexer.man multiplexer {One-to-many communication with sockets.}]
+[division_end]
+[division_start namespacex]
+[item modules/namespacex/namespacex.man namespacex {Namespace utility commands}]
+[division_end]
+[division_start ncgi]
+[item modules/ncgi/ncgi.man ncgi {Procedures to manipulate CGI values.}]
+[division_end]
+[division_start nettool]
+[item modules/nettool/nettool.man nettool {Tools for networked applications}]
+[division_end]
+[division_start nmea]
+[item modules/nmea/nmea.man nmea {Process NMEA data}]
+[division_end]
+[division_start nns]
+[item modules/nns/nns_client.man nameserv {Name service facility, Client}]
+[item modules/nns/nns_auto.man nameserv::auto {Name service facility, Client Extension}]
+[item modules/nns/nns_common.man nameserv::common {Name service facility, shared definitions}]
+[item modules/nns/nns_protocol.man nameserv::protocol {Name service facility, client/server protocol}]
+[item modules/nns/nns_server.man nameserv::server {Name service facility, Server}]
+[item modules/nns/nns_intro.man nns_intro {Name service facility, introduction}]
+[division_end]
+[division_start nntp]
+[item modules/nntp/nntp.man nntp {Tcl client for the NNTP protocol}]
+[division_end]
+[division_start ntp]
+[item modules/ntp/ntp_time.man ntp_time {Tcl Time Service Client}]
+[division_end]
+[division_start oauth]
+[item modules/oauth/oauth.man oauth {oauth API base signature}]
+[division_end]
+[division_start ooutil]
+[item modules/ooutil/ooutil.man oo::util {Utility commands for TclOO}]
+[division_end]
+[division_start otp]
+[item modules/otp/otp.man otp {One-Time Passwords}]
+[division_end]
+[division_start page]
+[item modules/page/page_intro.man page_intro {page introduction}]
+[item modules/page/page_pluginmgr.man page_pluginmgr {page plugin manager}]
+[item modules/page/page_util_flow.man page_util_flow {page dataflow/treewalker utility}]
+[item modules/page/page_util_norm_lemon.man page_util_norm_lemon {page AST normalization, LEMON}]
+[item modules/page/page_util_norm_peg.man page_util_norm_peg {page AST normalization, PEG}]
+[item modules/page/page_util_peg.man page_util_peg {page PEG transformation utilities}]
+[item modules/page/page_util_quote.man page_util_quote {page character quoting utilities}]
+[division_end]
+[division_start pki]
+[item modules/pki/pki.man pki {Implementation of the public key cipher}]
+[division_end]
+[division_start pluginmgr]
+[item modules/pluginmgr/pluginmgr.man pluginmgr {Manage a plugin}]
+[division_end]
+[division_start png]
+[item modules/png/png.man png {PNG querying and manipulation of meta data}]
+[division_end]
+[division_start pop3]
+[item modules/pop3/pop3.man pop3 {Tcl client for POP3 email protocol}]
+[division_end]
+[division_start pop3d]
+[item modules/pop3d/pop3d.man pop3d {Tcl POP3 server implementation}]
+[item modules/pop3d/pop3d_dbox.man pop3d::dbox {Simple mailbox database for pop3d}]
+[item modules/pop3d/pop3d_udb.man pop3d::udb {Simple user database for pop3d}]
+[division_end]
+[division_start processman]
+[item modules/processman/processman.man processman {Tool for automating the period callback of commands}]
+[division_end]
+[division_start profiler]
+[item modules/profiler/profiler.man profiler {Tcl source code profiler}]
+[division_end]
+[division_start pt]
+[item modules/pt/pt_astree.man pt::ast {Abstract Syntax Tree Serialization}]
+[item modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl {C/PARAM, Canned configuration, Critcl}]
+[item modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea {C/PARAM, Canned configuration, TEA}]
+[item modules/pt/pt_json_language.man pt::json_language {The JSON Grammar Exchange Format}]
+[item modules/pt/pt_param.man pt::param {PackRat Machine Specification}]
+[item modules/pt/pt_pexpression.man pt::pe {Parsing Expression Serialization}]
+[item modules/pt/pt_pexpr_op.man pt::pe::op {Parsing Expression Utilities}]
+[item modules/pt/pt_pegrammar.man pt::peg {Parsing Expression Grammar Serialization}]
+[item modules/pt/pt_peg_container.man pt::peg::container {PEG Storage}]
+[item modules/pt/pt_peg_container_peg.man pt::peg::container::peg {PEG Storage. Canned PEG grammar specification}]
+[item modules/pt/pt_peg_export.man pt::peg::export {PEG Export}]
+[item modules/pt/pt_peg_export_container.man pt::peg::export::container {PEG Export Plugin. Write CONTAINER format}]
+[item modules/pt/pt_peg_export_json.man pt::peg::export::json {PEG Export Plugin. Write JSON format}]
+[item modules/pt/pt_peg_export_peg.man pt::peg::export::peg {PEG Export Plugin. Write PEG format}]
+[item modules/pt/pt_peg_from_container.man pt::peg::from::container {PEG Conversion. From CONTAINER format}]
+[item modules/pt/pt_peg_from_json.man pt::peg::from::json {PEG Conversion. Read JSON format}]
+[item modules/pt/pt_peg_from_peg.man pt::peg::from::peg {PEG Conversion. Read PEG format}]
+[item modules/pt/pt_peg_import.man pt::peg::import {PEG Import}]
+[item modules/pt/pt_peg_import_container.man pt::peg::import::container {PEG Import Plugin. From CONTAINER format}]
+[item modules/pt/pt_peg_import_json.man pt::peg::import::json {PEG Import Plugin. Read JSON format}]
+[item modules/pt/pt_peg_import_peg.man pt::peg::import::peg {PEG Import Plugin. Read PEG format}]
+[item modules/pt/pt_peg_interp.man pt::peg::interp {Interpreter for parsing expression grammars}]
+[item modules/pt/pt_peg_to_container.man pt::peg::to::container {PEG Conversion. Write CONTAINER format}]
+[item modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam {PEG Conversion. Write CPARAM format}]
+[item modules/pt/pt_peg_to_json.man pt::peg::to::json {PEG Conversion. Write JSON format}]
+[item modules/pt/pt_peg_to_param.man pt::peg::to::param {PEG Conversion. Write PARAM format}]
+[item modules/pt/pt_peg_to_peg.man pt::peg::to::peg {PEG Conversion. Write PEG format}]
+[item modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam {PEG Conversion. Write TCLPARAM format}]
+[item modules/pt/pt_peg_language.man pt::peg_language {PEG Language Tutorial}]
+[item modules/pt/pt_peg_introduction.man pt::pegrammar {Introduction to Parsing Expression Grammars}]
+[item modules/pt/pt_pgen.man pt::pgen {Parser Generator}]
+[item modules/pt/pt_rdengine.man pt::rde {Parsing Runtime Support, PARAM based}]
+[item modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit {Tcl/PARAM, Canned configuration, Snit}]
+[item modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo {Tcl/PARAM, Canned configuration, Tcloo}]
+[item modules/pt/pt_util.man pt::util {General utilities}]
+[item modules/pt/pt_to_api.man pt_export_api {Parser Tools Export API}]
+[item modules/pt/pt_from_api.man pt_import_api {Parser Tools Import API}]
+[item modules/pt/pt_introduction.man pt_introduction {Introduction to Parser Tools}]
+[item modules/pt/pt_parse_peg.man pt_parse_peg {Parser Tools PEG Parser}]
+[item modules/pt/pt_parser_api.man pt_parser_api {Parser API}]
+[item modules/pt/pt_peg_op.man pt_peg_op {Parser Tools PE Grammar Utility Operations}]
+[division_end]
+[division_start rc4]
+[item modules/rc4/rc4.man rc4 {Implementation of the RC4 stream cipher}]
+[division_end]
+[division_start rcs]
+[item modules/rcs/rcs.man rcs {RCS low level utilities}]
+[division_end]
+[division_start report]
+[item modules/report/report.man report {Create and manipulate report objects}]
+[division_end]
+[division_start rest]
+[item modules/rest/rest.man rest {define REST web APIs and call them inline or asychronously}]
+[division_end]
+[division_start ripemd]
+[item modules/ripemd/ripemd128.man ripemd128 {RIPEMD-128 Message-Digest Algorithm}]
+[item modules/ripemd/ripemd160.man ripemd160 {RIPEMD-160 Message-Digest Algorithm}]
+[division_end]
+[division_start sasl]
+[item modules/sasl/sasl.man SASL {Implementation of SASL mechanisms for Tcl}]
+[item modules/sasl/ntlm.man SASL::NTLM {Implementation of SASL NTLM mechanism for Tcl}]
+[item modules/sasl/scram.man SASL::SCRAM {Implementation of SASL SCRAM mechanism for Tcl}]
+[item modules/sasl/gtoken.man SASL::XGoogleToken {Implementation of SASL NTLM mechanism for Tcl}]
+[division_end]
+[division_start sha1]
+[item modules/sha1/sha1.man sha1 {SHA1 Message-Digest Algorithm}]
+[item modules/sha1/sha256.man sha256 {SHA256 Message-Digest Algorithm}]
+[division_end]
+[division_start simulation]
+[item modules/simulation/annealing.man simulation::annealing {Simulated annealing}]
+[item modules/simulation/montecarlo.man simulation::montecarlo {Monte Carlo simulations}]
+[item modules/simulation/simulation_random.man simulation::random {Pseudo-random number generators}]
+[division_end]
+[division_start smtpd]
+[item modules/smtpd/smtpd.man smtpd {Tcl SMTP server implementation}]
+[division_end]
+[division_start snit]
+[item modules/snit/snit.man snit {Snit's Not Incr Tcl}]
+[item modules/snit/snitfaq.man snitfaq {Snit Frequently Asked Questions}]
+[division_end]
+[division_start soundex]
+[item modules/soundex/soundex.man soundex Soundex]
+[division_end]
+[division_start stooop]
+[item modules/stooop/stooop.man stooop {Object oriented extension.}]
+[item modules/stooop/switched.man switched {switch/option management.}]
+[division_end]
+[division_start string]
+[item modules/string/token.man string::token {Regex based iterative lexing}]
+[item modules/string/token_shell.man string::token::shell {Parsing of shell command line}]
+[division_end]
+[division_start stringprep]
+[item modules/stringprep/stringprep.man stringprep {Implementation of stringprep}]
+[item modules/stringprep/stringprep_data.man stringprep::data {stringprep data tables, generated, internal}]
+[item modules/stringprep/unicode.man unicode {Implementation of Unicode normalization}]
+[item modules/stringprep/unicode_data.man unicode::data {unicode data tables, generated, internal}]
+[division_end]
+[division_start struct]
+[item modules/struct/disjointset.man struct::disjointset {Disjoint set data structure}]
+[item modules/struct/graph.man struct::graph {Create and manipulate directed graph objects}]
+[item modules/struct/graphops.man struct::graph::op {Operation for (un)directed graph objects}]
+[item modules/struct/graph1.man struct::graph_v1 {Create and manipulate directed graph objects}]
+[item modules/struct/struct_list.man struct::list {Procedures for manipulating lists}]
+[item modules/struct/matrix.man struct::matrix {Create and manipulate matrix objects}]
+[item modules/struct/matrix1.man struct::matrix_v1 {Create and manipulate matrix objects}]
+[item modules/struct/pool.man struct::pool {Create and manipulate pool objects (of discrete items)}]
+[item modules/struct/prioqueue.man struct::prioqueue {Create and manipulate prioqueue objects}]
+[item modules/struct/queue.man struct::queue {Create and manipulate queue objects}]
+[item modules/struct/record.man struct::record {Define and create records (similar to 'C' structures)}]
+[item modules/struct/struct_set.man struct::set {Procedures for manipulating sets}]
+[item modules/struct/skiplist.man struct::skiplist {Create and manipulate skiplists}]
+[item modules/struct/stack.man struct::stack {Create and manipulate stack objects}]
+[item modules/struct/struct_tree.man struct::tree {Create and manipulate tree objects}]
+[item modules/struct/struct_tree1.man struct::tree_v1 {Create and manipulate tree objects}]
+[division_end]
+[division_start tar]
+[item modules/tar/tar.man tar {Tar file creation, extraction & manipulation}]
+[division_end]
+[division_start tepam]
+[item modules/tepam/tepam_introduction.man tepam {An introduction into TEPAM, Tcl's Enhanced Procedure and Argument Manager}]
+[item modules/tepam/tepam_argument_dialogbox.man tepam::argument_dialogbox {TEPAM argument_dialogbox, reference manual}]
+[item modules/tepam/tepam_doc_gen.man tepam::doc_gen {TEPAM DOC Generation, reference manual}]
+[item modules/tepam/tepam_procedure.man tepam::procedure {TEPAM procedure, reference manual}]
+[division_end]
+[division_start term]
+[item modules/term/term.man term {General terminal control}]
+[item modules/term/ansi_code.man term::ansi::code {Helper for control sequences}]
+[item modules/term/ansi_cattr.man term::ansi::code::attr {ANSI attribute sequences}]
+[item modules/term/ansi_cctrl.man term::ansi::code::ctrl {ANSI control sequences}]
+[item modules/term/ansi_cmacros.man term::ansi::code::macros {Macro sequences}]
+[item modules/term/ansi_ctrlu.man term::ansi::ctrl::unix {Control operations and queries}]
+[item modules/term/ansi_send.man term::ansi::send {Output of ANSI control sequences to terminals}]
+[item modules/term/imenu.man term::interact::menu {Terminal widget, menu}]
+[item modules/term/ipager.man term::interact::pager {Terminal widget, paging}]
+[item modules/term/receive.man term::receive {General input from terminals}]
+[item modules/term/term_bind.man term::receive::bind {Keyboard dispatch from terminals}]
+[item modules/term/term_send.man term::send {General output to terminals}]
+[division_end]
+[division_start textutil]
+[item modules/textutil/textutil.man textutil {Procedures to manipulate texts and strings.}]
+[item modules/textutil/adjust.man textutil::adjust {Procedures to adjust, indent, and undent paragraphs}]
+[item modules/textutil/expander.man textutil::expander {Procedures to process templates and expand text.}]
+[item modules/textutil/repeat.man textutil::repeat {Procedures to repeat strings.}]
+[item modules/textutil/textutil_split.man textutil::split {Procedures to split texts}]
+[item modules/textutil/textutil_string.man textutil::string {Procedures to manipulate texts and strings.}]
+[item modules/textutil/tabify.man textutil::tabify {Procedures to (un)tabify strings}]
+[item modules/textutil/trim.man textutil::trim {Procedures to trim strings}]
+[division_end]
+[division_start tie]
+[item modules/tie/tie.man tie {Array persistence}]
+[item modules/tie/tie_std.man tie {Array persistence, standard data sources}]
+[division_end]
+[division_start tiff]
+[item modules/tiff/tiff.man tiff {TIFF reading, writing, and querying and manipulation of meta data}]
+[division_end]
+[division_start tool]
+[item modules/tool/meta.man oo::util {Utility commands for TclOO}]
+[item modules/tool/tool.man tool {Dictionary Tools}]
+[item modules/tool/tool_dict_ensemble.man tool::dict_ensemble {Dictionary Tools}]
+[division_end]
+[division_start transfer]
+[item modules/transfer/connect.man transfer::connect {Connection setup}]
+[item modules/transfer/copyops.man transfer::copy {Data transfer foundation}]
+[item modules/transfer/tqueue.man transfer::copy::queue {Queued transfers}]
+[item modules/transfer/ddest.man transfer::data::destination {Data destination}]
+[item modules/transfer/dsource.man transfer::data::source {Data source}]
+[item modules/transfer/receiver.man transfer::receiver {Data source}]
+[item modules/transfer/transmitter.man transfer::transmitter {Data source}]
+[division_end]
+[division_start treeql]
+[item modules/treeql/treeql.man treeql {Query tree objects}]
+[division_end]
+[division_start try]
+[item modules/try/tcllib_throw.man try {throw - Throw an error exception with a message}]
+[item modules/try/tcllib_try.man try {try - Trap and process errors and exceptions}]
+[division_end]
+[division_start uev]
+[item modules/uev/uevent.man uevent {User events}]
+[item modules/uev/uevent_onidle.man uevent::onidle {Request merging and deferal to idle time}]
+[division_end]
+[division_start units]
+[item modules/units/units.man units {unit conversion}]
+[division_end]
+[division_start uri]
+[item modules/uri/uri.man uri {URI utilities}]
+[item modules/uri/urn-scheme.man uri_urn {URI utilities, URN scheme}]
+[division_end]
+[division_start uuid]
+[item modules/uuid/uuid.man uuid {UUID generation and comparison}]
+[division_end]
+[division_start valtype]
+[item modules/valtype/valtype_common.man valtype::common {Validation, common code}]
+[item modules/valtype/cc_amex.man valtype::creditcard::amex {Validation for AMEX creditcard number}]
+[item modules/valtype/cc_discover.man valtype::creditcard::discover {Validation for Discover creditcard number}]
+[item modules/valtype/cc_mastercard.man valtype::creditcard::mastercard {Validation for Mastercard creditcard number}]
+[item modules/valtype/cc_visa.man valtype::creditcard::visa {Validation for VISA creditcard number}]
+[item modules/valtype/ean13.man valtype::gs1::ean13 {Validation for EAN13}]
+[item modules/valtype/iban.man valtype::iban {Validation for IBAN}]
+[item modules/valtype/imei.man valtype::imei {Validation for IMEI}]
+[item modules/valtype/isbn.man valtype::isbn {Validation for ISBN}]
+[item modules/valtype/luhn.man valtype::luhn {Validation for plain number with a LUHN checkdigit}]
+[item modules/valtype/luhn5.man valtype::luhn5 {Validation for plain number with a LUHN5 checkdigit}]
+[item modules/valtype/usnpi.man valtype::usnpi {Validation for USNPI}]
+[item modules/valtype/verhoeff.man valtype::verhoeff {Validation for plain number with a VERHOEFF checkdigit}]
+[division_end]
+[division_start virtchannel_base]
+[item modules/virtchannel_base/cat.man tcl::chan::cat {Concatenation channel}]
+[item modules/virtchannel_base/facade.man tcl::chan::facade {Facade channel}]
+[item modules/virtchannel_base/tcllib_fifo.man tcl::chan::fifo {In-memory fifo channel}]
+[item modules/virtchannel_base/tcllib_fifo2.man tcl::chan::fifo2 {In-memory interconnected fifo channels}]
+[item modules/virtchannel_base/halfpipe.man tcl::chan::halfpipe {In-memory channel, half of a fifo2}]
+[item modules/virtchannel_base/tcllib_memchan.man tcl::chan::memchan {In-memory channel}]
+[item modules/virtchannel_base/tcllib_null.man tcl::chan::null {Null channel}]
+[item modules/virtchannel_base/nullzero.man tcl::chan::nullzero {Null/Zero channel combination}]
+[item modules/virtchannel_base/tcllib_random.man tcl::chan::random {Random channel}]
+[item modules/virtchannel_base/std.man tcl::chan::std {Standard I/O, unification of stdin and stdout}]
+[item modules/virtchannel_base/tcllib_string.man tcl::chan::string {Read-only in-memory channel}]
+[item modules/virtchannel_base/textwindow.man tcl::chan::textwindow {Textwindow channel}]
+[item modules/virtchannel_base/tcllib_variable.man tcl::chan::variable {In-memory channel using variable for storage}]
+[item modules/virtchannel_base/tcllib_zero.man tcl::chan::zero {Zero channel}]
+[item modules/virtchannel_base/randseed.man tcl::randomseed {Utilities for random channels}]
+[division_end]
+[division_start virtchannel_core]
+[item modules/virtchannel_core/core.man tcl::chan::core {Basic reflected/virtual channel support}]
+[item modules/virtchannel_core/events.man tcl::chan::events {Event support for reflected/virtual channels}]
+[item modules/virtchannel_core/transformcore.man tcl::transform::core {Basic reflected/virtual channel transform support}]
+[division_end]
+[division_start virtchannel_transform]
+[item modules/virtchannel_transform/adler32.man tcl::transform::adler32 {Adler32 transformation}]
+[item modules/virtchannel_transform/vt_base64.man tcl::transform::base64 {Base64 encoding transformation}]
+[item modules/virtchannel_transform/vt_counter.man tcl::transform::counter {Counter transformation}]
+[item modules/virtchannel_transform/vt_crc32.man tcl::transform::crc32 {Crc32 transformation}]
+[item modules/virtchannel_transform/hex.man tcl::transform::hex {Hexadecimal encoding transformation}]
+[item modules/virtchannel_transform/identity.man tcl::transform::identity {Identity transformation}]
+[item modules/virtchannel_transform/limitsize.man tcl::transform::limitsize {limiting input}]
+[item modules/virtchannel_transform/observe.man tcl::transform::observe {Observer transformation, stream copy}]
+[item modules/virtchannel_transform/vt_otp.man tcl::transform::otp {Encryption via one-time pad}]
+[item modules/virtchannel_transform/rot.man tcl::transform::rot rot-encryption]
+[item modules/virtchannel_transform/spacer.man tcl::transform::spacer {Space insertation and removal}]
+[item modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib {zlib (de)compression}]
+[division_end]
+[division_start websocket]
+[item modules/websocket/websocket.man websocket {Tcl implementation of the websocket protocol}]
+[division_end]
+[division_start wip]
+[item modules/wip/wip.man wip {Word Interpreter}]
+[division_end]
+[division_start yaml]
+[item modules/yaml/huddle.man huddle {Create and manipulate huddle object}]
+[item modules/yaml/yaml.man yaml {YAML Format Encoder/Decoder}]
+[division_end]
+[division_start zip]
+[item modules/zip/decode.man zipfile::decode {Access to zip archives}]
+[item modules/zip/encode.man zipfile::encode {Generation of zip archives}]
+[item modules/zip/mkzip.man zipfile::mkzip {Build a zip archive}]
+[division_end]
+[division_end]
+[division_end]
+[toc_end] \ No newline at end of file
diff --git a/tcllib/support/devel/sak/doc/toc_apps.txt b/tcllib/support/devel/sak/doc/toc_apps.txt
new file mode 100644
index 0000000..cb85b0f
--- /dev/null
+++ b/tcllib/support/devel/sak/doc/toc_apps.txt
@@ -0,0 +1,11 @@
+[toc_begin {Table Of Contents} {}]
+[division_start Applications]
+[item apps/dtplite.man dtplite {Lightweight DocTools Markup Processor}]
+[item apps/nns.man nns {Name service facility, Commandline Client Application}]
+[item apps/nnsd.man nnsd {Name service facility, Commandline Server Application}]
+[item apps/nnslog.man nnslog {Name service facility, Commandline Logging Client Application}]
+[item apps/page.man page {Parser Generator}]
+[item apps/pt.man pt {Parser Tools Application}]
+[item apps/tcldocstrip.man tcldocstrip {Tcl-based Docstrip Processor}]
+[division_end]
+[toc_end] \ No newline at end of file
diff --git a/tcllib/support/devel/sak/doc/toc_cats.txt b/tcllib/support/devel/sak/doc/toc_cats.txt
new file mode 100644
index 0000000..d40c4de
--- /dev/null
+++ b/tcllib/support/devel/sak/doc/toc_cats.txt
@@ -0,0 +1,479 @@
+[toc_begin {Table Of Contents} {}]
+[division_start {By Categories}]
+[division_start {Argument entry form, mega widget}]
+[item modules/tepam/tepam_argument_dialogbox.man tepam::argument_dialogbox {TEPAM argument_dialogbox, reference manual}]
+[division_end]
+[division_start {Benchmark tools}]
+[item modules/bench/bench.man bench {bench - Processing benchmark suites}]
+[item modules/bench/bench_read.man bench::in {bench::in - Reading benchmark results}]
+[item modules/bench/bench_wcsv.man bench::out::csv {bench::out::csv - Formatting benchmark results as CSV}]
+[item modules/bench/bench_wtext.man bench::out::text {bench::out::text - Formatting benchmark results as human readable text}]
+[item modules/bench/bench_intro.man bench_intro {bench introduction}]
+[item modules/bench/bench_lang_intro.man bench_lang_intro {bench language introduction}]
+[item modules/bench/bench_lang_spec.man bench_lang_spec {bench language specification}]
+[division_end]
+[division_start {CGI programming}]
+[item modules/html/html.man html {Procedures to generate HTML structures}]
+[item modules/javascript/javascript.man javascript {Procedures to generate HTML and Java Script structures.}]
+[item modules/json/json.man json {JSON parser}]
+[item modules/json/json_write.man json::write {JSON generation}]
+[item modules/ncgi/ncgi.man ncgi {Procedures to manipulate CGI values.}]
+[division_end]
+[division_start Channels]
+[item modules/virtchannel_base/cat.man tcl::chan::cat {Concatenation channel}]
+[item modules/virtchannel_core/core.man tcl::chan::core {Basic reflected/virtual channel support}]
+[item modules/virtchannel_core/events.man tcl::chan::events {Event support for reflected/virtual channels}]
+[item modules/virtchannel_base/facade.man tcl::chan::facade {Facade channel}]
+[item modules/virtchannel_base/tcllib_fifo.man tcl::chan::fifo {In-memory fifo channel}]
+[item modules/virtchannel_base/tcllib_fifo2.man tcl::chan::fifo2 {In-memory interconnected fifo channels}]
+[item modules/virtchannel_base/halfpipe.man tcl::chan::halfpipe {In-memory channel, half of a fifo2}]
+[item modules/virtchannel_base/tcllib_memchan.man tcl::chan::memchan {In-memory channel}]
+[item modules/virtchannel_base/tcllib_null.man tcl::chan::null {Null channel}]
+[item modules/virtchannel_base/nullzero.man tcl::chan::nullzero {Null/Zero channel combination}]
+[item modules/virtchannel_base/tcllib_random.man tcl::chan::random {Random channel}]
+[item modules/virtchannel_base/std.man tcl::chan::std {Standard I/O, unification of stdin and stdout}]
+[item modules/virtchannel_base/tcllib_string.man tcl::chan::string {Read-only in-memory channel}]
+[item modules/virtchannel_base/textwindow.man tcl::chan::textwindow {Textwindow channel}]
+[item modules/virtchannel_base/tcllib_variable.man tcl::chan::variable {In-memory channel using variable for storage}]
+[item modules/virtchannel_base/tcllib_zero.man tcl::chan::zero {Zero channel}]
+[item modules/virtchannel_base/randseed.man tcl::randomseed {Utilities for random channels}]
+[item modules/virtchannel_transform/adler32.man tcl::transform::adler32 {Adler32 transformation}]
+[item modules/virtchannel_transform/vt_base64.man tcl::transform::base64 {Base64 encoding transformation}]
+[item modules/virtchannel_core/transformcore.man tcl::transform::core {Basic reflected/virtual channel transform support}]
+[item modules/virtchannel_transform/vt_counter.man tcl::transform::counter {Counter transformation}]
+[item modules/virtchannel_transform/vt_crc32.man tcl::transform::crc32 {Crc32 transformation}]
+[item modules/virtchannel_transform/hex.man tcl::transform::hex {Hexadecimal encoding transformation}]
+[item modules/virtchannel_transform/identity.man tcl::transform::identity {Identity transformation}]
+[item modules/virtchannel_transform/limitsize.man tcl::transform::limitsize {limiting input}]
+[item modules/virtchannel_transform/observe.man tcl::transform::observe {Observer transformation, stream copy}]
+[item modules/virtchannel_transform/vt_otp.man tcl::transform::otp {Encryption via one-time pad}]
+[item modules/virtchannel_transform/rot.man tcl::transform::rot rot-encryption]
+[item modules/virtchannel_transform/spacer.man tcl::transform::spacer {Space insertation and removal}]
+[item modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib {zlib (de)compression}]
+[division_end]
+[division_start Coroutine]
+[item modules/coroutine/tcllib_coroutine.man coroutine {Coroutine based event and IO handling}]
+[item modules/coroutine/coro_auto.man coroutine::auto {Automatic event and IO coroutine awareness}]
+[division_end]
+[division_start {Data structures}]
+[item modules/counter/counter.man counter {Procedures for counters and histograms}]
+[item modules/report/report.man report {Create and manipulate report objects}]
+[item modules/struct/disjointset.man struct::disjointset {Disjoint set data structure}]
+[item modules/struct/graph.man struct::graph {Create and manipulate directed graph objects}]
+[item modules/struct/graphops.man struct::graph::op {Operation for (un)directed graph objects}]
+[item modules/struct/graph1.man struct::graph_v1 {Create and manipulate directed graph objects}]
+[item modules/struct/struct_list.man struct::list {Procedures for manipulating lists}]
+[item modules/struct/matrix.man struct::matrix {Create and manipulate matrix objects}]
+[item modules/struct/matrix1.man struct::matrix_v1 {Create and manipulate matrix objects}]
+[item modules/struct/pool.man struct::pool {Create and manipulate pool objects (of discrete items)}]
+[item modules/struct/prioqueue.man struct::prioqueue {Create and manipulate prioqueue objects}]
+[item modules/struct/queue.man struct::queue {Create and manipulate queue objects}]
+[item modules/struct/record.man struct::record {Define and create records (similar to 'C' structures)}]
+[item modules/struct/struct_set.man struct::set {Procedures for manipulating sets}]
+[item modules/struct/skiplist.man struct::skiplist {Create and manipulate skiplists}]
+[item modules/struct/stack.man struct::stack {Create and manipulate stack objects}]
+[item modules/struct/struct_tree.man struct::tree {Create and manipulate tree objects}]
+[item modules/struct/struct_tree1.man struct::tree_v1 {Create and manipulate tree objects}]
+[item modules/treeql/treeql.man treeql {Query tree objects}]
+[division_end]
+[division_start {debugging, tracing, and logging}]
+[item modules/debug/debug.man debug {debug narrative - core}]
+[item modules/debug/debug_caller.man debug::caller {debug narrative - caller}]
+[item modules/debug/debug_heartbeat.man debug::heartbeat {debug narrative - heartbeat}]
+[item modules/debug/debug_timestamp.man debug::timestamp {debug narrative - timestamping}]
+[division_end]
+[division_start {Documentation tools}]
+[item modules/doctools/docidx_intro.man docidx_intro {docidx introduction}]
+[item modules/doctools/docidx_lang_cmdref.man docidx_lang_cmdref {docidx language command reference}]
+[item modules/doctools/docidx_lang_faq.man docidx_lang_faq {docidx language faq}]
+[item modules/doctools/docidx_lang_intro.man docidx_lang_intro {docidx language introduction}]
+[item modules/doctools/docidx_lang_syntax.man docidx_lang_syntax {docidx language syntax}]
+[item modules/doctools/docidx_plugin_apiref.man docidx_plugin_apiref {docidx plugin API reference}]
+[item modules/docstrip/docstrip.man docstrip {Docstrip style source code extraction}]
+[item modules/docstrip/docstrip_util.man docstrip_util {Docstrip-related utilities}]
+[item modules/doctools/doctoc_intro.man doctoc_intro {doctoc introduction}]
+[item modules/doctools/doctoc_lang_cmdref.man doctoc_lang_cmdref {doctoc language command reference}]
+[item modules/doctools/doctoc_lang_faq.man doctoc_lang_faq {doctoc language faq}]
+[item modules/doctools/doctoc_lang_intro.man doctoc_lang_intro {doctoc language introduction}]
+[item modules/doctools/doctoc_lang_syntax.man doctoc_lang_syntax {doctoc language syntax}]
+[item modules/doctools/doctoc_plugin_apiref.man doctoc_plugin_apiref {doctoc plugin API reference}]
+[item modules/doctools/doctools.man doctools {doctools - Processing documents}]
+[item modules/doctools2idx/idx_introduction.man doctools2idx_introduction {DocTools - Keyword indices}]
+[item modules/doctools2toc/toc_introduction.man doctools2toc_introduction {DocTools - Tables of Contents}]
+[item modules/doctools/changelog.man doctools::changelog {Processing text in Emacs ChangeLog format}]
+[item modules/doctools/cvs.man doctools::cvs {Processing text in 'cvs log' format}]
+[item modules/doctools2base/html_cssdefaults.man doctools::html::cssdefaults {Default CSS style for HTML export plugins}]
+[item modules/doctools2idx/idx_container.man doctools::idx {Holding keyword indices}]
+[item modules/doctools/docidx.man doctools::idx {docidx - Processing indices}]
+[item modules/doctools2idx/idx_export.man doctools::idx::export {Exporting keyword indices}]
+[item modules/doctools2idx/idx_import.man doctools::idx::import {Importing keyword indices}]
+[item modules/doctools2idx/idx_parse.man doctools::idx::parse {Parsing text in docidx format}]
+[item modules/doctools2idx/idx_structure.man doctools::idx::structure {Docidx serialization utilities}]
+[item modules/doctools2base/tcllib_msgcat.man doctools::msgcat {Message catalog management for the various document parsers}]
+[item modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c {Message catalog for the docidx parser (C)}]
+[item modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de {Message catalog for the docidx parser (DE)}]
+[item modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en {Message catalog for the docidx parser (EN)}]
+[item modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr {Message catalog for the docidx parser (FR)}]
+[item modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c {Message catalog for the doctoc parser (C)}]
+[item modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de {Message catalog for the doctoc parser (DE)}]
+[item modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en {Message catalog for the doctoc parser (EN)}]
+[item modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr {Message catalog for the doctoc parser (FR)}]
+[item modules/doctools2base/nroff_manmacros.man doctools::nroff::man_macros {Default CSS style for NROFF export plugins}]
+[item modules/doctools2base/tcl_parse.man doctools::tcl::parse {Processing text in 'subst -novariables' format}]
+[item modules/doctools2toc/toc_container.man doctools::toc {Holding tables of contents}]
+[item modules/doctools/doctoc.man doctools::toc {doctoc - Processing tables of contents}]
+[item modules/doctools2toc/toc_export.man doctools::toc::export {Exporting tables of contents}]
+[item modules/doctools2toc/toc_import.man doctools::toc::import {Importing keyword indices}]
+[item modules/doctools2toc/toc_parse.man doctools::toc::parse {Parsing text in doctoc format}]
+[item modules/doctools2toc/toc_structure.man doctools::toc::structure {Doctoc serialization utilities}]
+[item modules/doctools/doctools_intro.man doctools_intro {doctools introduction}]
+[item modules/doctools/doctools_lang_cmdref.man doctools_lang_cmdref {doctools language command reference}]
+[item modules/doctools/doctools_lang_faq.man doctools_lang_faq {doctools language faq}]
+[item modules/doctools/doctools_lang_intro.man doctools_lang_intro {doctools language introduction}]
+[item modules/doctools/doctools_lang_syntax.man doctools_lang_syntax {doctools language syntax}]
+[item modules/doctools/doctools_plugin_apiref.man doctools_plugin_apiref {doctools plugin API reference}]
+[item modules/dtplite/pkg_dtplite.man dtplite {Lightweight DocTools Markup Processor}]
+[item apps/dtplite.man dtplite {Lightweight DocTools Markup Processor}]
+[item modules/doctools/mpexpand.man mpexpand {Markup processor}]
+[item apps/tcldocstrip.man tcldocstrip {Tcl-based Docstrip Processor}]
+[item modules/tepam/tepam_doc_gen.man tepam::doc_gen {TEPAM DOC Generation, reference manual}]
+[item modules/textutil/expander.man textutil::expander {Procedures to process templates and expand text.}]
+[division_end]
+[division_start File]
+[item modules/zip/decode.man zipfile::decode {Access to zip archives}]
+[item modules/zip/encode.man zipfile::encode {Generation of zip archives}]
+[item modules/zip/mkzip.man zipfile::mkzip {Build a zip archive}]
+[division_end]
+[division_start {File formats}]
+[item modules/exif/exif.man exif {Tcl EXIF extracts and parses EXIF fields from digital images}]
+[item modules/gpx/gpx.man gpx {Extracts waypoints, tracks and routes from GPX files}]
+[item modules/jpeg/jpeg.man jpeg {JPEG querying and manipulation of meta data}]
+[item modules/png/png.man png {PNG querying and manipulation of meta data}]
+[item modules/tar/tar.man tar {Tar file creation, extraction & manipulation}]
+[item modules/tiff/tiff.man tiff {TIFF reading, writing, and querying and manipulation of meta data}]
+[division_end]
+[division_start {Grammars and finite automata}]
+[item modules/grammar_aycock/aycock.man grammar::aycock {Aycock-Horspool-Earley parser generator for Tcl}]
+[item modules/grammar_fa/fa.man grammar::fa {Create and manipulate finite automatons}]
+[item modules/grammar_fa/dacceptor.man grammar::fa::dacceptor {Create and use deterministic acceptors}]
+[item modules/grammar_fa/dexec.man grammar::fa::dexec {Execute deterministic finite automatons}]
+[item modules/grammar_fa/faop.man grammar::fa::op {Operations on finite automatons}]
+[item modules/grammar_me/me_cpu.man grammar::me::cpu {Virtual machine implementation II for parsing token streams}]
+[item modules/grammar_me/me_cpucore.man grammar::me::cpu::core {ME virtual machine state manipulation}]
+[item modules/grammar_me/gasm.man grammar::me::cpu::gasm {ME assembler}]
+[item modules/grammar_me/me_tcl.man grammar::me::tcl {Virtual machine implementation I for parsing token streams}]
+[item modules/grammar_me/me_util.man grammar::me::util {AST utilities}]
+[item modules/grammar_me/me_ast.man grammar::me_ast {Various representations of ASTs}]
+[item modules/grammar_me/me_intro.man grammar::me_intro {Introduction to virtual machines for parsing token streams}]
+[item modules/grammar_me/me_vm.man grammar::me_vm {Virtual machine for parsing token streams}]
+[item modules/grammar_peg/peg.man grammar::peg {Create and manipulate parsing expression grammars}]
+[item modules/grammar_peg/peg_interp.man grammar::peg::interp {Interpreter for parsing expression grammars}]
+[division_end]
+[division_start {Hashes, checksums, and encryption}]
+[item modules/aes/aes.man aes {Implementation of the AES block cipher}]
+[item modules/blowfish/blowfish.man blowfish {Implementation of the Blowfish block cipher}]
+[item modules/crc/cksum.man cksum {Calculate a cksum(1) compatible checksum}]
+[item modules/crc/crc16.man crc16 {Perform a 16bit Cyclic Redundancy Check}]
+[item modules/crc/crc32.man crc32 {Perform a 32bit Cyclic Redundancy Check}]
+[item modules/des/des.man des {Implementation of the DES and triple-DES ciphers}]
+[item modules/md4/md4.man md4 {MD4 Message-Digest Algorithm}]
+[item modules/md5/md5.man md5 {MD5 Message-Digest Algorithm}]
+[item modules/md5crypt/md5crypt.man md5crypt {MD5-based password encryption}]
+[item modules/otp/otp.man otp {One-Time Passwords}]
+[item modules/pki/pki.man pki {Implementation of the public key cipher}]
+[item modules/rc4/rc4.man rc4 {Implementation of the RC4 stream cipher}]
+[item modules/ripemd/ripemd128.man ripemd128 {RIPEMD-128 Message-Digest Algorithm}]
+[item modules/ripemd/ripemd160.man ripemd160 {RIPEMD-160 Message-Digest Algorithm}]
+[item modules/sha1/sha1.man sha1 {SHA1 Message-Digest Algorithm}]
+[item modules/sha1/sha256.man sha256 {SHA256 Message-Digest Algorithm}]
+[item modules/soundex/soundex.man soundex Soundex]
+[item modules/crc/sum.man sum {Calculate a sum(1) compatible checksum}]
+[item modules/des/tcldes.man tcldes {Implementation of the DES and triple-DES ciphers}]
+[item modules/des/tcldesjr.man tcldes {Implementation of the DES and triple-DES ciphers}]
+[item modules/uuid/uuid.man uuid {UUID generation and comparison}]
+[division_end]
+[division_start Mathematics]
+[item modules/math/math.man math {Tcl Math Library}]
+[item modules/math/bigfloat.man math::bigfloat {Arbitrary precision floating-point numbers}]
+[item modules/math/bignum.man math::bignum {Arbitrary precision integer numbers}]
+[item modules/math/calculus.man math::calculus {Integration and ordinary differential equations}]
+[item modules/math/romberg.man math::calculus::romberg {Romberg integration}]
+[item modules/math/combinatorics.man math::combinatorics {Combinatorial functions in the Tcl Math Library}]
+[item modules/math/qcomplex.man math::complexnumbers {Straightforward complex number package}]
+[item modules/math/constants.man math::constants {Mathematical and numerical constants}]
+[item modules/math/decimal.man math::decimal {General decimal arithmetic}]
+[item modules/math/exact.man math::exact {Exact Real Arithmetic}]
+[item modules/math/fourier.man math::fourier {Discrete and fast fourier transforms}]
+[item modules/math/fuzzy.man math::fuzzy {Fuzzy comparison of floating-point numbers}]
+[item modules/math/math_geometry.man math::geometry {Geometrical computations}]
+[item modules/math/interpolate.man math::interpolate {Interpolation routines}]
+[item modules/math/linalg.man math::linearalgebra {Linear Algebra}]
+[item modules/math/numtheory.man math::numtheory {Number Theory}]
+[item modules/math/optimize.man math::optimize {Optimisation routines}]
+[item modules/math/polynomials.man math::polynomials {Polynomial functions}]
+[item modules/math/rational_funcs.man math::rationalfunctions {Polynomial functions}]
+[item modules/math/roman.man math::roman {Tools for creating and manipulating roman numerals}]
+[item modules/math/special.man math::special {Special mathematical functions}]
+[item modules/math/statistics.man math::statistics {Basic statistical functions and procedures}]
+[item modules/simulation/annealing.man simulation::annealing {Simulated annealing}]
+[item modules/simulation/montecarlo.man simulation::montecarlo {Monte Carlo simulations}]
+[item modules/simulation/simulation_random.man simulation::random {Pseudo-random number generators}]
+[division_end]
+[division_start Networking]
+[item modules/asn/asn.man asn {ASN.1 BER encoder/decoder}]
+[item modules/http/autoproxy.man autoproxy {Automatic HTTP proxy usage and authentication}]
+[item modules/bee/bee.man bee {BitTorrent Serialization Format Encoder/Decoder}]
+[item modules/dns/tcllib_dns.man dns {Tcl Domain Name Service Client}]
+[item modules/ftp/ftp.man ftp {Client-side tcl implementation of the ftp protocol}]
+[item modules/ftp/ftp_geturl.man ftp::geturl {Uri handler for ftp urls}]
+[item modules/ftpd/ftpd.man ftpd {Tcl FTP server implementation}]
+[item modules/ident/ident.man ident {Ident protocol client}]
+[item modules/irc/irc.man irc {Create IRC connection and interface.}]
+[item modules/ldap/ldap.man ldap {LDAP client}]
+[item modules/ldap/ldapx.man ldapx {LDAP extended object interface}]
+[item modules/nns/nns_client.man nameserv {Name service facility, Client}]
+[item modules/nns/nns_auto.man nameserv::auto {Name service facility, Client Extension}]
+[item modules/nns/nns_common.man nameserv::common {Name service facility, shared definitions}]
+[item modules/nns/nns_protocol.man nameserv::protocol {Name service facility, client/server protocol}]
+[item modules/nns/nns_server.man nameserv::server {Name service facility, Server}]
+[item modules/nmea/nmea.man nmea {Process NMEA data}]
+[item apps/nns.man nns {Name service facility, Commandline Client Application}]
+[item modules/nns/nns_intro.man nns_intro {Name service facility, introduction}]
+[item apps/nnsd.man nnsd {Name service facility, Commandline Server Application}]
+[item apps/nnslog.man nnslog {Name service facility, Commandline Logging Client Application}]
+[item modules/nntp/nntp.man nntp {Tcl client for the NNTP protocol}]
+[item modules/ntp/ntp_time.man ntp_time {Tcl Time Service Client}]
+[item modules/oauth/oauth.man oauth {oauth API base signature}]
+[item modules/irc/picoirc.man picoirc {Small and simple embeddable IRC client.}]
+[item modules/pop3/pop3.man pop3 {Tcl client for POP3 email protocol}]
+[item modules/pop3d/pop3d.man pop3d {Tcl POP3 server implementation}]
+[item modules/pop3d/pop3d_dbox.man pop3d::dbox {Simple mailbox database for pop3d}]
+[item modules/pop3d/pop3d_udb.man pop3d::udb {Simple user database for pop3d}]
+[item modules/amazon-s3/S3.man S3 {Amazon S3 Web Service Interface}]
+[item modules/sasl/sasl.man SASL {Implementation of SASL mechanisms for Tcl}]
+[item modules/sasl/ntlm.man SASL::NTLM {Implementation of SASL NTLM mechanism for Tcl}]
+[item modules/sasl/scram.man SASL::SCRAM {Implementation of SASL SCRAM mechanism for Tcl}]
+[item modules/sasl/gtoken.man SASL::XGoogleToken {Implementation of SASL NTLM mechanism for Tcl}]
+[item modules/mime/smtp.man smtp {Client-side tcl implementation of the smtp protocol}]
+[item modules/smtpd/smtpd.man smtpd {Tcl SMTP server implementation}]
+[item modules/dns/tcllib_ip.man tcllib_ip {IPv4 and IPv6 address manipulation}]
+[item modules/uri/uri.man uri {URI utilities}]
+[item modules/uri/urn-scheme.man uri_urn {URI utilities, URN scheme}]
+[item modules/websocket/websocket.man websocket {Tcl implementation of the websocket protocol}]
+[division_end]
+[division_start {Page Parser Generator}]
+[item apps/page.man page {Parser Generator}]
+[item modules/page/page_intro.man page_intro {page introduction}]
+[item modules/page/page_pluginmgr.man page_pluginmgr {page plugin manager}]
+[item modules/page/page_util_flow.man page_util_flow {page dataflow/treewalker utility}]
+[item modules/page/page_util_norm_lemon.man page_util_norm_lemon {page AST normalization, LEMON}]
+[item modules/page/page_util_norm_peg.man page_util_norm_peg {page AST normalization, PEG}]
+[item modules/page/page_util_peg.man page_util_peg {page PEG transformation utilities}]
+[item modules/page/page_util_quote.man page_util_quote {page character quoting utilities}]
+[division_end]
+[division_start {Parsing and Grammars}]
+[item apps/pt.man pt {Parser Tools Application}]
+[item modules/pt/pt_astree.man pt::ast {Abstract Syntax Tree Serialization}]
+[item modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl {C/PARAM, Canned configuration, Critcl}]
+[item modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea {C/PARAM, Canned configuration, TEA}]
+[item modules/pt/pt_json_language.man pt::json_language {The JSON Grammar Exchange Format}]
+[item modules/pt/pt_param.man pt::param {PackRat Machine Specification}]
+[item modules/pt/pt_pexpression.man pt::pe {Parsing Expression Serialization}]
+[item modules/pt/pt_pexpr_op.man pt::pe::op {Parsing Expression Utilities}]
+[item modules/pt/pt_pegrammar.man pt::peg {Parsing Expression Grammar Serialization}]
+[item modules/pt/pt_peg_container.man pt::peg::container {PEG Storage}]
+[item modules/pt/pt_peg_container_peg.man pt::peg::container::peg {PEG Storage. Canned PEG grammar specification}]
+[item modules/pt/pt_peg_export.man pt::peg::export {PEG Export}]
+[item modules/pt/pt_peg_export_container.man pt::peg::export::container {PEG Export Plugin. Write CONTAINER format}]
+[item modules/pt/pt_peg_export_json.man pt::peg::export::json {PEG Export Plugin. Write JSON format}]
+[item modules/pt/pt_peg_export_peg.man pt::peg::export::peg {PEG Export Plugin. Write PEG format}]
+[item modules/pt/pt_peg_from_container.man pt::peg::from::container {PEG Conversion. From CONTAINER format}]
+[item modules/pt/pt_peg_from_json.man pt::peg::from::json {PEG Conversion. Read JSON format}]
+[item modules/pt/pt_peg_from_peg.man pt::peg::from::peg {PEG Conversion. Read PEG format}]
+[item modules/pt/pt_peg_import.man pt::peg::import {PEG Import}]
+[item modules/pt/pt_peg_import_container.man pt::peg::import::container {PEG Import Plugin. From CONTAINER format}]
+[item modules/pt/pt_peg_import_json.man pt::peg::import::json {PEG Import Plugin. Read JSON format}]
+[item modules/pt/pt_peg_import_peg.man pt::peg::import::peg {PEG Import Plugin. Read PEG format}]
+[item modules/pt/pt_peg_interp.man pt::peg::interp {Interpreter for parsing expression grammars}]
+[item modules/pt/pt_peg_to_container.man pt::peg::to::container {PEG Conversion. Write CONTAINER format}]
+[item modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam {PEG Conversion. Write CPARAM format}]
+[item modules/pt/pt_peg_to_json.man pt::peg::to::json {PEG Conversion. Write JSON format}]
+[item modules/pt/pt_peg_to_param.man pt::peg::to::param {PEG Conversion. Write PARAM format}]
+[item modules/pt/pt_peg_to_peg.man pt::peg::to::peg {PEG Conversion. Write PEG format}]
+[item modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam {PEG Conversion. Write TCLPARAM format}]
+[item modules/pt/pt_peg_language.man pt::peg_language {PEG Language Tutorial}]
+[item modules/pt/pt_peg_introduction.man pt::pegrammar {Introduction to Parsing Expression Grammars}]
+[item modules/pt/pt_pgen.man pt::pgen {Parser Generator}]
+[item modules/pt/pt_rdengine.man pt::rde {Parsing Runtime Support, PARAM based}]
+[item modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit {Tcl/PARAM, Canned configuration, Snit}]
+[item modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo {Tcl/PARAM, Canned configuration, Tcloo}]
+[item modules/pt/pt_util.man pt::util {General utilities}]
+[item modules/pt/pt_to_api.man pt_export_api {Parser Tools Export API}]
+[item modules/pt/pt_from_api.man pt_import_api {Parser Tools Import API}]
+[item modules/pt/pt_introduction.man pt_introduction {Introduction to Parser Tools}]
+[item modules/pt/pt_parse_peg.man pt_parse_peg {Parser Tools PEG Parser}]
+[item modules/pt/pt_parser_api.man pt_parser_api {Parser API}]
+[item modules/pt/pt_peg_op.man pt_peg_op {Parser Tools PE Grammar Utility Operations}]
+[division_end]
+[division_start {Procedures, arguments, parameters, options}]
+[item modules/tepam/tepam_introduction.man tepam {An introduction into TEPAM, Tcl's Enhanced Procedure and Argument Manager}]
+[item modules/tepam/tepam_procedure.man tepam::procedure {TEPAM procedure, reference manual}]
+[division_end]
+[division_start {Programming tools}]
+[item modules/cmdline/cmdline.man cmdline {Procedures to process command lines and options.}]
+[item modules/comm/comm.man comm {A remote communication facility for Tcl (8.3 and later)}]
+[item modules/comm/comm_wire.man comm_wire {The comm wire protocol}]
+[item modules/control/control.man control {Procedures for control flow structures.}]
+[item modules/interp/deleg_method.man deleg_method {Creation of comm delegates (snit methods)}]
+[item modules/interp/deleg_proc.man deleg_proc {Creation of comm delegates (procedures)}]
+[item modules/fileutil/fileutil.man fileutil {Procedures implementing some file utilities}]
+[item modules/fumagic/cfront.man fileutil::magic::cfront {Generator core for compiler of magic(5) files}]
+[item modules/fumagic/cgen.man fileutil::magic::cgen {Generator core for compiler of magic(5) files}]
+[item modules/fumagic/filetypes.man fileutil::magic::filetype {Procedures implementing file-type recognition}]
+[item modules/fumagic/mimetypes.man fileutil::magic::mimetype {Procedures implementing mime-type recognition}]
+[item modules/fumagic/rtcore.man fileutil::magic::rt {Runtime core for file type recognition engines written in pure Tcl}]
+[item modules/fileutil/multi.man fileutil::multi {Multi-file operation, scatter/gather, standard object}]
+[item modules/fileutil/multiop.man fileutil::multi::op {Multi-file operation, scatter/gather}]
+[item modules/fileutil/traverse.man fileutil_traverse {Iterative directory traversal}]
+[item modules/hook/hook.man hook Hooks]
+[item modules/interp/tcllib_interp.man interp {Interp creation and aliasing}]
+[item modules/log/log.man log {Procedures to log messages of libraries and applications.}]
+[item modules/log/logger.man logger {System to control logging of events.}]
+[item modules/log/loggerAppender.man logger::appender {Collection of predefined appenders for logger}]
+[item modules/log/loggerUtils.man logger::utils {Utilities for logger}]
+[item modules/multiplexer/multiplexer.man multiplexer {One-to-many communication with sockets.}]
+[item modules/pluginmgr/pluginmgr.man pluginmgr {Manage a plugin}]
+[item modules/profiler/profiler.man profiler {Tcl source code profiler}]
+[item modules/snit/snit.man snit {Snit's Not Incr Tcl}]
+[item modules/snit/snitfaq.man snitfaq {Snit Frequently Asked Questions}]
+[item modules/stooop/stooop.man stooop {Object oriented extension.}]
+[item modules/stooop/switched.man switched {switch/option management.}]
+[item modules/tie/tie.man tie {Array persistence}]
+[item modules/tie/tie_std.man tie {Array persistence, standard data sources}]
+[item modules/uev/uevent.man uevent {User events}]
+[item modules/wip/wip.man wip {Word Interpreter}]
+[division_end]
+[division_start System]
+[item modules/cron/cron.man cron {Tool for automating the period callback of commands}]
+[item modules/nettool/nettool.man nettool {Tools for networked applications}]
+[item modules/processman/processman.man processman {Tool for automating the period callback of commands}]
+[division_end]
+[division_start {Terminal control}]
+[item modules/term/term.man term {General terminal control}]
+[item modules/term/ansi_code.man term::ansi::code {Helper for control sequences}]
+[item modules/term/ansi_cattr.man term::ansi::code::attr {ANSI attribute sequences}]
+[item modules/term/ansi_cctrl.man term::ansi::code::ctrl {ANSI control sequences}]
+[item modules/term/ansi_cmacros.man term::ansi::code::macros {Macro sequences}]
+[item modules/term/ansi_ctrlu.man term::ansi::ctrl::unix {Control operations and queries}]
+[item modules/term/ansi_send.man term::ansi::send {Output of ANSI control sequences to terminals}]
+[item modules/term/imenu.man term::interact::menu {Terminal widget, menu}]
+[item modules/term/ipager.man term::interact::pager {Terminal widget, paging}]
+[item modules/term/receive.man term::receive {General input from terminals}]
+[item modules/term/term_bind.man term::receive::bind {Keyboard dispatch from terminals}]
+[item modules/term/term_send.man term::send {General output to terminals}]
+[division_end]
+[division_start {Text formatter plugin}]
+[item modules/doctools2idx/export_docidx.man doctools::idx::export::docidx {docidx export plugin}]
+[item modules/doctools2idx/idx_export_html.man doctools::idx::export::html {HTML export plugin}]
+[item modules/doctools2idx/idx_export_json.man doctools::idx::export::json {JSON export plugin}]
+[item modules/doctools2idx/idx_export_nroff.man doctools::idx::export::nroff {nroff export plugin}]
+[item modules/doctools2idx/idx_export_text.man doctools::idx::export::text {plain text export plugin}]
+[item modules/doctools2idx/idx_export_wiki.man doctools::idx::export::wiki {wiki export plugin}]
+[item modules/doctools2idx/import_docidx.man doctools::idx::import::docidx {docidx import plugin}]
+[item modules/doctools2idx/idx_import_json.man doctools::idx::import::json {JSON import plugin}]
+[item modules/doctools2toc/export_doctoc.man doctools::toc::export::doctoc {doctoc export plugin}]
+[item modules/doctools2toc/toc_export_html.man doctools::toc::export::html {HTML export plugin}]
+[item modules/doctools2toc/toc_export_json.man doctools::toc::export::json {JSON export plugin}]
+[item modules/doctools2toc/toc_export_nroff.man doctools::toc::export::nroff {nroff export plugin}]
+[item modules/doctools2toc/toc_export_text.man doctools::toc::export::text {plain text export plugin}]
+[item modules/doctools2toc/toc_export_wiki.man doctools::toc::export::wiki {wiki export plugin}]
+[item modules/doctools2toc/import_doctoc.man doctools::toc::import::doctoc {doctoc import plugin}]
+[item modules/doctools2toc/toc_import_json.man doctools::toc::import::json {JSON import plugin}]
+[division_end]
+[division_start {Text processing}]
+[item modules/base64/ascii85.man ascii85 {ascii85-encode/decode binary data}]
+[item modules/base32/base32.man base32 {base32 standard encoding}]
+[item modules/base32/base32core.man base32::core {Expanding basic base32 maps}]
+[item modules/base32/base32hex.man base32::hex {base32 extended hex encoding}]
+[item modules/base64/base64.man base64 {base64-encode/decode binary data}]
+[item modules/bibtex/bibtex.man bibtex {Parse bibtex files}]
+[item modules/clock/iso8601.man clock_iso8601 {Parsing ISO 8601 dates/times}]
+[item modules/clock/rfc2822.man clock_rfc2822 {Parsing ISO 8601 dates/times}]
+[item modules/csv/csv.man csv {Procedures to handle CSV data.}]
+[item modules/htmlparse/htmlparse.man htmlparse {Procedures to parse HTML strings}]
+[item modules/inifile/ini.man inifile {Parsing of Windows INI files}]
+[item modules/mime/mime.man mime {Manipulation of MIME body parts}]
+[item modules/rcs/rcs.man rcs {RCS low level utilities}]
+[item modules/string/token.man string::token {Regex based iterative lexing}]
+[item modules/string/token_shell.man string::token::shell {Parsing of shell command line}]
+[item modules/textutil/textutil.man textutil {Procedures to manipulate texts and strings.}]
+[item modules/textutil/adjust.man textutil::adjust {Procedures to adjust, indent, and undent paragraphs}]
+[item modules/textutil/repeat.man textutil::repeat {Procedures to repeat strings.}]
+[item modules/textutil/textutil_split.man textutil::split {Procedures to split texts}]
+[item modules/textutil/textutil_string.man textutil::string {Procedures to manipulate texts and strings.}]
+[item modules/textutil/tabify.man textutil::tabify {Procedures to (un)tabify strings}]
+[item modules/textutil/trim.man textutil::trim {Procedures to trim strings}]
+[item modules/base64/uuencode.man uuencode {UU-encode/decode binary data}]
+[item modules/amazon-s3/xsxp.man xsxp {eXtremely Simple Xml Parser}]
+[item modules/base64/yencode.man yencode {Y-encode/decode binary data}]
+[division_end]
+[division_start {Transfer module}]
+[item modules/transfer/connect.man transfer::connect {Connection setup}]
+[item modules/transfer/copyops.man transfer::copy {Data transfer foundation}]
+[item modules/transfer/tqueue.man transfer::copy::queue {Queued transfers}]
+[item modules/transfer/ddest.man transfer::data::destination {Data destination}]
+[item modules/transfer/dsource.man transfer::data::source {Data source}]
+[item modules/transfer/receiver.man transfer::receiver {Data source}]
+[item modules/transfer/transmitter.man transfer::transmitter {Data source}]
+[division_end]
+[division_start Unfiled]
+[item modules/cache/async.man cache::async {Asynchronous in-memory cache}]
+[item modules/generator/generator.man generator {Procedures for creating and using generators.}]
+[item modules/yaml/huddle.man huddle {Create and manipulate huddle object}]
+[item modules/imap4/imap4.man imap4 {imap client-side tcl implementation of imap protocol}]
+[item modules/map/map_geocode_nominatim.man map::geocode::nominatim {Resolving geographical names with a Nominatim service}]
+[item modules/map/map_slippy.man map::slippy {Common code for slippy based map packages}]
+[item modules/map/map_slippy_cache.man map::slippy::cache {Management of a tile cache in the local filesystem}]
+[item modules/map/map_slippy_fetcher.man map::slippy::fetcher {Accessing a server providing tiles for slippy-based maps}]
+[item modules/mapproj/mapproj.man mapproj {Map projection routines}]
+[item modules/math/symdiff.man math::calculus::symdiff {Symbolic differentiation for Tcl}]
+[item modules/namespacex/namespacex.man namespacex {Namespace utility commands}]
+[item modules/rest/rest.man rest {define REST web APIs and call them inline or asychronously}]
+[item modules/stringprep/stringprep.man stringprep {Implementation of stringprep}]
+[item modules/stringprep/stringprep_data.man stringprep::data {stringprep data tables, generated, internal}]
+[item modules/math/machineparameters.man tclrep/machineparameters {Compute double precision machine parameters.}]
+[item modules/uev/uevent_onidle.man uevent::onidle {Request merging and deferal to idle time}]
+[item modules/stringprep/unicode.man unicode {Implementation of Unicode normalization}]
+[item modules/stringprep/unicode_data.man unicode::data {unicode data tables, generated, internal}]
+[item modules/units/units.man units {unit conversion}]
+[item modules/yaml/yaml.man yaml {YAML Format Encoder/Decoder}]
+[division_end]
+[division_start Utilites]
+[item modules/dicttool/dicttool.man dicttool {Dictionary Tools}]
+[division_end]
+[division_start Utility]
+[item modules/lambda/lambda.man lambda {Utility commands for anonymous procedures}]
+[item modules/ooutil/ooutil.man oo::util {Utility commands for TclOO}]
+[item modules/tool/meta.man oo::util {Utility commands for TclOO}]
+[item modules/tool/tool.man tool {Dictionary Tools}]
+[item modules/tool/tool_dict_ensemble.man tool::dict_ensemble {Dictionary Tools}]
+[item modules/try/tcllib_throw.man try {throw - Throw an error exception with a message}]
+[item modules/try/tcllib_try.man try {try - Trap and process errors and exceptions}]
+[division_end]
+[division_start {Validation, Type checking}]
+[item modules/valtype/valtype_common.man valtype::common {Validation, common code}]
+[item modules/valtype/cc_amex.man valtype::creditcard::amex {Validation for AMEX creditcard number}]
+[item modules/valtype/cc_discover.man valtype::creditcard::discover {Validation for Discover creditcard number}]
+[item modules/valtype/cc_mastercard.man valtype::creditcard::mastercard {Validation for Mastercard creditcard number}]
+[item modules/valtype/cc_visa.man valtype::creditcard::visa {Validation for VISA creditcard number}]
+[item modules/valtype/ean13.man valtype::gs1::ean13 {Validation for EAN13}]
+[item modules/valtype/iban.man valtype::iban {Validation for IBAN}]
+[item modules/valtype/imei.man valtype::imei {Validation for IMEI}]
+[item modules/valtype/isbn.man valtype::isbn {Validation for ISBN}]
+[item modules/valtype/luhn.man valtype::luhn {Validation for plain number with a LUHN checkdigit}]
+[item modules/valtype/luhn5.man valtype::luhn5 {Validation for plain number with a LUHN5 checkdigit}]
+[item modules/valtype/usnpi.man valtype::usnpi {Validation for USNPI}]
+[item modules/valtype/verhoeff.man valtype::verhoeff {Validation for plain number with a VERHOEFF checkdigit}]
+[division_end]
+[division_end]
+[toc_end] \ No newline at end of file
diff --git a/tcllib/support/devel/sak/doc/toc_mods.txt b/tcllib/support/devel/sak/doc/toc_mods.txt
new file mode 100644
index 0000000..5d36873
--- /dev/null
+++ b/tcllib/support/devel/sak/doc/toc_mods.txt
@@ -0,0 +1,656 @@
+[toc_begin {Table Of Contents} {}]
+[division_start Modules]
+[division_start aes]
+[item modules/aes/aes.man aes {Implementation of the AES block cipher}]
+[division_end]
+[division_start amazon-s3]
+[item modules/amazon-s3/S3.man S3 {Amazon S3 Web Service Interface}]
+[item modules/amazon-s3/xsxp.man xsxp {eXtremely Simple Xml Parser}]
+[division_end]
+[division_start asn]
+[item modules/asn/asn.man asn {ASN.1 BER encoder/decoder}]
+[division_end]
+[division_start base32]
+[item modules/base32/base32.man base32 {base32 standard encoding}]
+[item modules/base32/base32core.man base32::core {Expanding basic base32 maps}]
+[item modules/base32/base32hex.man base32::hex {base32 extended hex encoding}]
+[division_end]
+[division_start base64]
+[item modules/base64/ascii85.man ascii85 {ascii85-encode/decode binary data}]
+[item modules/base64/base64.man base64 {base64-encode/decode binary data}]
+[item modules/base64/uuencode.man uuencode {UU-encode/decode binary data}]
+[item modules/base64/yencode.man yencode {Y-encode/decode binary data}]
+[division_end]
+[division_start bee]
+[item modules/bee/bee.man bee {BitTorrent Serialization Format Encoder/Decoder}]
+[division_end]
+[division_start bench]
+[item modules/bench/bench.man bench {bench - Processing benchmark suites}]
+[item modules/bench/bench_read.man bench::in {bench::in - Reading benchmark results}]
+[item modules/bench/bench_wcsv.man bench::out::csv {bench::out::csv - Formatting benchmark results as CSV}]
+[item modules/bench/bench_wtext.man bench::out::text {bench::out::text - Formatting benchmark results as human readable text}]
+[item modules/bench/bench_intro.man bench_intro {bench introduction}]
+[item modules/bench/bench_lang_intro.man bench_lang_intro {bench language introduction}]
+[item modules/bench/bench_lang_spec.man bench_lang_spec {bench language specification}]
+[division_end]
+[division_start bibtex]
+[item modules/bibtex/bibtex.man bibtex {Parse bibtex files}]
+[division_end]
+[division_start blowfish]
+[item modules/blowfish/blowfish.man blowfish {Implementation of the Blowfish block cipher}]
+[division_end]
+[division_start cache]
+[item modules/cache/async.man cache::async {Asynchronous in-memory cache}]
+[division_end]
+[division_start clock]
+[item modules/clock/iso8601.man clock_iso8601 {Parsing ISO 8601 dates/times}]
+[item modules/clock/rfc2822.man clock_rfc2822 {Parsing ISO 8601 dates/times}]
+[division_end]
+[division_start cmdline]
+[item modules/cmdline/cmdline.man cmdline {Procedures to process command lines and options.}]
+[division_end]
+[division_start comm]
+[item modules/comm/comm.man comm {A remote communication facility for Tcl (8.3 and later)}]
+[item modules/comm/comm_wire.man comm_wire {The comm wire protocol}]
+[division_end]
+[division_start control]
+[item modules/control/control.man control {Procedures for control flow structures.}]
+[division_end]
+[division_start coroutine]
+[item modules/coroutine/tcllib_coroutine.man coroutine {Coroutine based event and IO handling}]
+[item modules/coroutine/coro_auto.man coroutine::auto {Automatic event and IO coroutine awareness}]
+[division_end]
+[division_start counter]
+[item modules/counter/counter.man counter {Procedures for counters and histograms}]
+[division_end]
+[division_start crc]
+[item modules/crc/cksum.man cksum {Calculate a cksum(1) compatible checksum}]
+[item modules/crc/crc16.man crc16 {Perform a 16bit Cyclic Redundancy Check}]
+[item modules/crc/crc32.man crc32 {Perform a 32bit Cyclic Redundancy Check}]
+[item modules/crc/sum.man sum {Calculate a sum(1) compatible checksum}]
+[division_end]
+[division_start cron]
+[item modules/cron/cron.man cron {Tool for automating the period callback of commands}]
+[division_end]
+[division_start csv]
+[item modules/csv/csv.man csv {Procedures to handle CSV data.}]
+[division_end]
+[division_start debug]
+[item modules/debug/debug.man debug {debug narrative - core}]
+[item modules/debug/debug_caller.man debug::caller {debug narrative - caller}]
+[item modules/debug/debug_heartbeat.man debug::heartbeat {debug narrative - heartbeat}]
+[item modules/debug/debug_timestamp.man debug::timestamp {debug narrative - timestamping}]
+[division_end]
+[division_start des]
+[item modules/des/des.man des {Implementation of the DES and triple-DES ciphers}]
+[item modules/des/tcldes.man tcldes {Implementation of the DES and triple-DES ciphers}]
+[item modules/des/tcldesjr.man tcldes {Implementation of the DES and triple-DES ciphers}]
+[division_end]
+[division_start dicttool]
+[item modules/dicttool/dicttool.man dicttool {Dictionary Tools}]
+[division_end]
+[division_start dns]
+[item modules/dns/tcllib_dns.man dns {Tcl Domain Name Service Client}]
+[item modules/dns/tcllib_ip.man tcllib_ip {IPv4 and IPv6 address manipulation}]
+[division_end]
+[division_start docstrip]
+[item modules/docstrip/docstrip.man docstrip {Docstrip style source code extraction}]
+[item modules/docstrip/docstrip_util.man docstrip_util {Docstrip-related utilities}]
+[division_end]
+[division_start doctools]
+[item modules/doctools/docidx_intro.man docidx_intro {docidx introduction}]
+[item modules/doctools/docidx_lang_cmdref.man docidx_lang_cmdref {docidx language command reference}]
+[item modules/doctools/docidx_lang_faq.man docidx_lang_faq {docidx language faq}]
+[item modules/doctools/docidx_lang_intro.man docidx_lang_intro {docidx language introduction}]
+[item modules/doctools/docidx_lang_syntax.man docidx_lang_syntax {docidx language syntax}]
+[item modules/doctools/docidx_plugin_apiref.man docidx_plugin_apiref {docidx plugin API reference}]
+[item modules/doctools/doctoc_intro.man doctoc_intro {doctoc introduction}]
+[item modules/doctools/doctoc_lang_cmdref.man doctoc_lang_cmdref {doctoc language command reference}]
+[item modules/doctools/doctoc_lang_faq.man doctoc_lang_faq {doctoc language faq}]
+[item modules/doctools/doctoc_lang_intro.man doctoc_lang_intro {doctoc language introduction}]
+[item modules/doctools/doctoc_lang_syntax.man doctoc_lang_syntax {doctoc language syntax}]
+[item modules/doctools/doctoc_plugin_apiref.man doctoc_plugin_apiref {doctoc plugin API reference}]
+[item modules/doctools/doctools.man doctools {doctools - Processing documents}]
+[item modules/doctools/changelog.man doctools::changelog {Processing text in Emacs ChangeLog format}]
+[item modules/doctools/cvs.man doctools::cvs {Processing text in 'cvs log' format}]
+[item modules/doctools/docidx.man doctools::idx {docidx - Processing indices}]
+[item modules/doctools/doctoc.man doctools::toc {doctoc - Processing tables of contents}]
+[item modules/doctools/doctools_intro.man doctools_intro {doctools introduction}]
+[item modules/doctools/doctools_lang_cmdref.man doctools_lang_cmdref {doctools language command reference}]
+[item modules/doctools/doctools_lang_faq.man doctools_lang_faq {doctools language faq}]
+[item modules/doctools/doctools_lang_intro.man doctools_lang_intro {doctools language introduction}]
+[item modules/doctools/doctools_lang_syntax.man doctools_lang_syntax {doctools language syntax}]
+[item modules/doctools/doctools_plugin_apiref.man doctools_plugin_apiref {doctools plugin API reference}]
+[item modules/doctools/mpexpand.man mpexpand {Markup processor}]
+[division_end]
+[division_start doctools2base]
+[item modules/doctools2base/html_cssdefaults.man doctools::html::cssdefaults {Default CSS style for HTML export plugins}]
+[item modules/doctools2base/tcllib_msgcat.man doctools::msgcat {Message catalog management for the various document parsers}]
+[item modules/doctools2base/nroff_manmacros.man doctools::nroff::man_macros {Default CSS style for NROFF export plugins}]
+[item modules/doctools2base/tcl_parse.man doctools::tcl::parse {Processing text in 'subst -novariables' format}]
+[division_end]
+[division_start doctools2idx]
+[item modules/doctools2idx/idx_introduction.man doctools2idx_introduction {DocTools - Keyword indices}]
+[item modules/doctools2idx/idx_container.man doctools::idx {Holding keyword indices}]
+[item modules/doctools2idx/idx_export.man doctools::idx::export {Exporting keyword indices}]
+[item modules/doctools2idx/export_docidx.man doctools::idx::export::docidx {docidx export plugin}]
+[item modules/doctools2idx/idx_export_html.man doctools::idx::export::html {HTML export plugin}]
+[item modules/doctools2idx/idx_export_json.man doctools::idx::export::json {JSON export plugin}]
+[item modules/doctools2idx/idx_export_nroff.man doctools::idx::export::nroff {nroff export plugin}]
+[item modules/doctools2idx/idx_export_text.man doctools::idx::export::text {plain text export plugin}]
+[item modules/doctools2idx/idx_export_wiki.man doctools::idx::export::wiki {wiki export plugin}]
+[item modules/doctools2idx/idx_import.man doctools::idx::import {Importing keyword indices}]
+[item modules/doctools2idx/import_docidx.man doctools::idx::import::docidx {docidx import plugin}]
+[item modules/doctools2idx/idx_import_json.man doctools::idx::import::json {JSON import plugin}]
+[item modules/doctools2idx/idx_parse.man doctools::idx::parse {Parsing text in docidx format}]
+[item modules/doctools2idx/idx_structure.man doctools::idx::structure {Docidx serialization utilities}]
+[item modules/doctools2idx/idx_msgcat_c.man doctools::msgcat::idx::c {Message catalog for the docidx parser (C)}]
+[item modules/doctools2idx/idx_msgcat_de.man doctools::msgcat::idx::de {Message catalog for the docidx parser (DE)}]
+[item modules/doctools2idx/idx_msgcat_en.man doctools::msgcat::idx::en {Message catalog for the docidx parser (EN)}]
+[item modules/doctools2idx/idx_msgcat_fr.man doctools::msgcat::idx::fr {Message catalog for the docidx parser (FR)}]
+[division_end]
+[division_start doctools2toc]
+[item modules/doctools2toc/toc_introduction.man doctools2toc_introduction {DocTools - Tables of Contents}]
+[item modules/doctools2toc/toc_msgcat_c.man doctools::msgcat::toc::c {Message catalog for the doctoc parser (C)}]
+[item modules/doctools2toc/toc_msgcat_de.man doctools::msgcat::toc::de {Message catalog for the doctoc parser (DE)}]
+[item modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en {Message catalog for the doctoc parser (EN)}]
+[item modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr {Message catalog for the doctoc parser (FR)}]
+[item modules/doctools2toc/toc_container.man doctools::toc {Holding tables of contents}]
+[item modules/doctools2toc/toc_export.man doctools::toc::export {Exporting tables of contents}]
+[item modules/doctools2toc/export_doctoc.man doctools::toc::export::doctoc {doctoc export plugin}]
+[item modules/doctools2toc/toc_export_html.man doctools::toc::export::html {HTML export plugin}]
+[item modules/doctools2toc/toc_export_json.man doctools::toc::export::json {JSON export plugin}]
+[item modules/doctools2toc/toc_export_nroff.man doctools::toc::export::nroff {nroff export plugin}]
+[item modules/doctools2toc/toc_export_text.man doctools::toc::export::text {plain text export plugin}]
+[item modules/doctools2toc/toc_export_wiki.man doctools::toc::export::wiki {wiki export plugin}]
+[item modules/doctools2toc/toc_import.man doctools::toc::import {Importing keyword indices}]
+[item modules/doctools2toc/import_doctoc.man doctools::toc::import::doctoc {doctoc import plugin}]
+[item modules/doctools2toc/toc_import_json.man doctools::toc::import::json {JSON import plugin}]
+[item modules/doctools2toc/toc_parse.man doctools::toc::parse {Parsing text in doctoc format}]
+[item modules/doctools2toc/toc_structure.man doctools::toc::structure {Doctoc serialization utilities}]
+[division_end]
+[division_start dtplite]
+[item modules/dtplite/pkg_dtplite.man dtplite {Lightweight DocTools Markup Processor}]
+[division_end]
+[division_start exif]
+[item modules/exif/exif.man exif {Tcl EXIF extracts and parses EXIF fields from digital images}]
+[division_end]
+[division_start fileutil]
+[item modules/fileutil/fileutil.man fileutil {Procedures implementing some file utilities}]
+[item modules/fileutil/multi.man fileutil::multi {Multi-file operation, scatter/gather, standard object}]
+[item modules/fileutil/multiop.man fileutil::multi::op {Multi-file operation, scatter/gather}]
+[item modules/fileutil/traverse.man fileutil_traverse {Iterative directory traversal}]
+[division_end]
+[division_start ftp]
+[item modules/ftp/ftp.man ftp {Client-side tcl implementation of the ftp protocol}]
+[item modules/ftp/ftp_geturl.man ftp::geturl {Uri handler for ftp urls}]
+[division_end]
+[division_start ftpd]
+[item modules/ftpd/ftpd.man ftpd {Tcl FTP server implementation}]
+[division_end]
+[division_start fumagic]
+[item modules/fumagic/cfront.man fileutil::magic::cfront {Generator core for compiler of magic(5) files}]
+[item modules/fumagic/cgen.man fileutil::magic::cgen {Generator core for compiler of magic(5) files}]
+[item modules/fumagic/filetypes.man fileutil::magic::filetype {Procedures implementing file-type recognition}]
+[item modules/fumagic/mimetypes.man fileutil::magic::mimetype {Procedures implementing mime-type recognition}]
+[item modules/fumagic/rtcore.man fileutil::magic::rt {Runtime core for file type recognition engines written in pure Tcl}]
+[division_end]
+[division_start generator]
+[item modules/generator/generator.man generator {Procedures for creating and using generators.}]
+[division_end]
+[division_start gpx]
+[item modules/gpx/gpx.man gpx {Extracts waypoints, tracks and routes from GPX files}]
+[division_end]
+[division_start grammar_aycock]
+[item modules/grammar_aycock/aycock.man grammar::aycock {Aycock-Horspool-Earley parser generator for Tcl}]
+[division_end]
+[division_start grammar_fa]
+[item modules/grammar_fa/fa.man grammar::fa {Create and manipulate finite automatons}]
+[item modules/grammar_fa/dacceptor.man grammar::fa::dacceptor {Create and use deterministic acceptors}]
+[item modules/grammar_fa/dexec.man grammar::fa::dexec {Execute deterministic finite automatons}]
+[item modules/grammar_fa/faop.man grammar::fa::op {Operations on finite automatons}]
+[division_end]
+[division_start grammar_me]
+[item modules/grammar_me/me_cpu.man grammar::me::cpu {Virtual machine implementation II for parsing token streams}]
+[item modules/grammar_me/me_cpucore.man grammar::me::cpu::core {ME virtual machine state manipulation}]
+[item modules/grammar_me/gasm.man grammar::me::cpu::gasm {ME assembler}]
+[item modules/grammar_me/me_tcl.man grammar::me::tcl {Virtual machine implementation I for parsing token streams}]
+[item modules/grammar_me/me_util.man grammar::me::util {AST utilities}]
+[item modules/grammar_me/me_ast.man grammar::me_ast {Various representations of ASTs}]
+[item modules/grammar_me/me_intro.man grammar::me_intro {Introduction to virtual machines for parsing token streams}]
+[item modules/grammar_me/me_vm.man grammar::me_vm {Virtual machine for parsing token streams}]
+[division_end]
+[division_start grammar_peg]
+[item modules/grammar_peg/peg.man grammar::peg {Create and manipulate parsing expression grammars}]
+[item modules/grammar_peg/peg_interp.man grammar::peg::interp {Interpreter for parsing expression grammars}]
+[division_end]
+[division_start hook]
+[item modules/hook/hook.man hook Hooks]
+[division_end]
+[division_start html]
+[item modules/html/html.man html {Procedures to generate HTML structures}]
+[division_end]
+[division_start htmlparse]
+[item modules/htmlparse/htmlparse.man htmlparse {Procedures to parse HTML strings}]
+[division_end]
+[division_start http]
+[item modules/http/autoproxy.man autoproxy {Automatic HTTP proxy usage and authentication}]
+[division_end]
+[division_start ident]
+[item modules/ident/ident.man ident {Ident protocol client}]
+[division_end]
+[division_start imap4]
+[item modules/imap4/imap4.man imap4 {imap client-side tcl implementation of imap protocol}]
+[division_end]
+[division_start inifile]
+[item modules/inifile/ini.man inifile {Parsing of Windows INI files}]
+[division_end]
+[division_start interp]
+[item modules/interp/deleg_method.man deleg_method {Creation of comm delegates (snit methods)}]
+[item modules/interp/deleg_proc.man deleg_proc {Creation of comm delegates (procedures)}]
+[item modules/interp/tcllib_interp.man interp {Interp creation and aliasing}]
+[division_end]
+[division_start irc]
+[item modules/irc/irc.man irc {Create IRC connection and interface.}]
+[item modules/irc/picoirc.man picoirc {Small and simple embeddable IRC client.}]
+[division_end]
+[division_start javascript]
+[item modules/javascript/javascript.man javascript {Procedures to generate HTML and Java Script structures.}]
+[division_end]
+[division_start jpeg]
+[item modules/jpeg/jpeg.man jpeg {JPEG querying and manipulation of meta data}]
+[division_end]
+[division_start json]
+[item modules/json/json.man json {JSON parser}]
+[item modules/json/json_write.man json::write {JSON generation}]
+[division_end]
+[division_start lambda]
+[item modules/lambda/lambda.man lambda {Utility commands for anonymous procedures}]
+[division_end]
+[division_start ldap]
+[item modules/ldap/ldap.man ldap {LDAP client}]
+[item modules/ldap/ldapx.man ldapx {LDAP extended object interface}]
+[division_end]
+[division_start log]
+[item modules/log/log.man log {Procedures to log messages of libraries and applications.}]
+[item modules/log/logger.man logger {System to control logging of events.}]
+[item modules/log/loggerAppender.man logger::appender {Collection of predefined appenders for logger}]
+[item modules/log/loggerUtils.man logger::utils {Utilities for logger}]
+[division_end]
+[division_start map]
+[item modules/map/map_geocode_nominatim.man map::geocode::nominatim {Resolving geographical names with a Nominatim service}]
+[item modules/map/map_slippy.man map::slippy {Common code for slippy based map packages}]
+[item modules/map/map_slippy_cache.man map::slippy::cache {Management of a tile cache in the local filesystem}]
+[item modules/map/map_slippy_fetcher.man map::slippy::fetcher {Accessing a server providing tiles for slippy-based maps}]
+[division_end]
+[division_start mapproj]
+[item modules/mapproj/mapproj.man mapproj {Map projection routines}]
+[division_end]
+[division_start math]
+[item modules/math/math.man math {Tcl Math Library}]
+[item modules/math/bigfloat.man math::bigfloat {Arbitrary precision floating-point numbers}]
+[item modules/math/bignum.man math::bignum {Arbitrary precision integer numbers}]
+[item modules/math/calculus.man math::calculus {Integration and ordinary differential equations}]
+[item modules/math/romberg.man math::calculus::romberg {Romberg integration}]
+[item modules/math/symdiff.man math::calculus::symdiff {Symbolic differentiation for Tcl}]
+[item modules/math/combinatorics.man math::combinatorics {Combinatorial functions in the Tcl Math Library}]
+[item modules/math/qcomplex.man math::complexnumbers {Straightforward complex number package}]
+[item modules/math/constants.man math::constants {Mathematical and numerical constants}]
+[item modules/math/decimal.man math::decimal {General decimal arithmetic}]
+[item modules/math/exact.man math::exact {Exact Real Arithmetic}]
+[item modules/math/fourier.man math::fourier {Discrete and fast fourier transforms}]
+[item modules/math/fuzzy.man math::fuzzy {Fuzzy comparison of floating-point numbers}]
+[item modules/math/math_geometry.man math::geometry {Geometrical computations}]
+[item modules/math/interpolate.man math::interpolate {Interpolation routines}]
+[item modules/math/linalg.man math::linearalgebra {Linear Algebra}]
+[item modules/math/numtheory.man math::numtheory {Number Theory}]
+[item modules/math/optimize.man math::optimize {Optimisation routines}]
+[item modules/math/polynomials.man math::polynomials {Polynomial functions}]
+[item modules/math/rational_funcs.man math::rationalfunctions {Polynomial functions}]
+[item modules/math/roman.man math::roman {Tools for creating and manipulating roman numerals}]
+[item modules/math/special.man math::special {Special mathematical functions}]
+[item modules/math/statistics.man math::statistics {Basic statistical functions and procedures}]
+[item modules/math/machineparameters.man tclrep/machineparameters {Compute double precision machine parameters.}]
+[division_end]
+[division_start md4]
+[item modules/md4/md4.man md4 {MD4 Message-Digest Algorithm}]
+[division_end]
+[division_start md5]
+[item modules/md5/md5.man md5 {MD5 Message-Digest Algorithm}]
+[division_end]
+[division_start md5crypt]
+[item modules/md5crypt/md5crypt.man md5crypt {MD5-based password encryption}]
+[division_end]
+[division_start mime]
+[item modules/mime/mime.man mime {Manipulation of MIME body parts}]
+[item modules/mime/smtp.man smtp {Client-side tcl implementation of the smtp protocol}]
+[division_end]
+[division_start multiplexer]
+[item modules/multiplexer/multiplexer.man multiplexer {One-to-many communication with sockets.}]
+[division_end]
+[division_start namespacex]
+[item modules/namespacex/namespacex.man namespacex {Namespace utility commands}]
+[division_end]
+[division_start ncgi]
+[item modules/ncgi/ncgi.man ncgi {Procedures to manipulate CGI values.}]
+[division_end]
+[division_start nettool]
+[item modules/nettool/nettool.man nettool {Tools for networked applications}]
+[division_end]
+[division_start nmea]
+[item modules/nmea/nmea.man nmea {Process NMEA data}]
+[division_end]
+[division_start nns]
+[item modules/nns/nns_client.man nameserv {Name service facility, Client}]
+[item modules/nns/nns_auto.man nameserv::auto {Name service facility, Client Extension}]
+[item modules/nns/nns_common.man nameserv::common {Name service facility, shared definitions}]
+[item modules/nns/nns_protocol.man nameserv::protocol {Name service facility, client/server protocol}]
+[item modules/nns/nns_server.man nameserv::server {Name service facility, Server}]
+[item modules/nns/nns_intro.man nns_intro {Name service facility, introduction}]
+[division_end]
+[division_start nntp]
+[item modules/nntp/nntp.man nntp {Tcl client for the NNTP protocol}]
+[division_end]
+[division_start ntp]
+[item modules/ntp/ntp_time.man ntp_time {Tcl Time Service Client}]
+[division_end]
+[division_start oauth]
+[item modules/oauth/oauth.man oauth {oauth API base signature}]
+[division_end]
+[division_start ooutil]
+[item modules/ooutil/ooutil.man oo::util {Utility commands for TclOO}]
+[division_end]
+[division_start otp]
+[item modules/otp/otp.man otp {One-Time Passwords}]
+[division_end]
+[division_start page]
+[item modules/page/page_intro.man page_intro {page introduction}]
+[item modules/page/page_pluginmgr.man page_pluginmgr {page plugin manager}]
+[item modules/page/page_util_flow.man page_util_flow {page dataflow/treewalker utility}]
+[item modules/page/page_util_norm_lemon.man page_util_norm_lemon {page AST normalization, LEMON}]
+[item modules/page/page_util_norm_peg.man page_util_norm_peg {page AST normalization, PEG}]
+[item modules/page/page_util_peg.man page_util_peg {page PEG transformation utilities}]
+[item modules/page/page_util_quote.man page_util_quote {page character quoting utilities}]
+[division_end]
+[division_start pki]
+[item modules/pki/pki.man pki {Implementation of the public key cipher}]
+[division_end]
+[division_start pluginmgr]
+[item modules/pluginmgr/pluginmgr.man pluginmgr {Manage a plugin}]
+[division_end]
+[division_start png]
+[item modules/png/png.man png {PNG querying and manipulation of meta data}]
+[division_end]
+[division_start pop3]
+[item modules/pop3/pop3.man pop3 {Tcl client for POP3 email protocol}]
+[division_end]
+[division_start pop3d]
+[item modules/pop3d/pop3d.man pop3d {Tcl POP3 server implementation}]
+[item modules/pop3d/pop3d_dbox.man pop3d::dbox {Simple mailbox database for pop3d}]
+[item modules/pop3d/pop3d_udb.man pop3d::udb {Simple user database for pop3d}]
+[division_end]
+[division_start processman]
+[item modules/processman/processman.man processman {Tool for automating the period callback of commands}]
+[division_end]
+[division_start profiler]
+[item modules/profiler/profiler.man profiler {Tcl source code profiler}]
+[division_end]
+[division_start pt]
+[item modules/pt/pt_astree.man pt::ast {Abstract Syntax Tree Serialization}]
+[item modules/pt/pt_cparam_config_critcl.man pt::cparam::configuration::critcl {C/PARAM, Canned configuration, Critcl}]
+[item modules/pt/pt_cparam_config_tea.man pt::cparam::configuration::tea {C/PARAM, Canned configuration, TEA}]
+[item modules/pt/pt_json_language.man pt::json_language {The JSON Grammar Exchange Format}]
+[item modules/pt/pt_param.man pt::param {PackRat Machine Specification}]
+[item modules/pt/pt_pexpression.man pt::pe {Parsing Expression Serialization}]
+[item modules/pt/pt_pexpr_op.man pt::pe::op {Parsing Expression Utilities}]
+[item modules/pt/pt_pegrammar.man pt::peg {Parsing Expression Grammar Serialization}]
+[item modules/pt/pt_peg_container.man pt::peg::container {PEG Storage}]
+[item modules/pt/pt_peg_container_peg.man pt::peg::container::peg {PEG Storage. Canned PEG grammar specification}]
+[item modules/pt/pt_peg_export.man pt::peg::export {PEG Export}]
+[item modules/pt/pt_peg_export_container.man pt::peg::export::container {PEG Export Plugin. Write CONTAINER format}]
+[item modules/pt/pt_peg_export_json.man pt::peg::export::json {PEG Export Plugin. Write JSON format}]
+[item modules/pt/pt_peg_export_peg.man pt::peg::export::peg {PEG Export Plugin. Write PEG format}]
+[item modules/pt/pt_peg_from_container.man pt::peg::from::container {PEG Conversion. From CONTAINER format}]
+[item modules/pt/pt_peg_from_json.man pt::peg::from::json {PEG Conversion. Read JSON format}]
+[item modules/pt/pt_peg_from_peg.man pt::peg::from::peg {PEG Conversion. Read PEG format}]
+[item modules/pt/pt_peg_import.man pt::peg::import {PEG Import}]
+[item modules/pt/pt_peg_import_container.man pt::peg::import::container {PEG Import Plugin. From CONTAINER format}]
+[item modules/pt/pt_peg_import_json.man pt::peg::import::json {PEG Import Plugin. Read JSON format}]
+[item modules/pt/pt_peg_import_peg.man pt::peg::import::peg {PEG Import Plugin. Read PEG format}]
+[item modules/pt/pt_peg_interp.man pt::peg::interp {Interpreter for parsing expression grammars}]
+[item modules/pt/pt_peg_to_container.man pt::peg::to::container {PEG Conversion. Write CONTAINER format}]
+[item modules/pt/pt_peg_to_cparam.man pt::peg::to::cparam {PEG Conversion. Write CPARAM format}]
+[item modules/pt/pt_peg_to_json.man pt::peg::to::json {PEG Conversion. Write JSON format}]
+[item modules/pt/pt_peg_to_param.man pt::peg::to::param {PEG Conversion. Write PARAM format}]
+[item modules/pt/pt_peg_to_peg.man pt::peg::to::peg {PEG Conversion. Write PEG format}]
+[item modules/pt/pt_peg_to_tclparam.man pt::peg::to::tclparam {PEG Conversion. Write TCLPARAM format}]
+[item modules/pt/pt_peg_language.man pt::peg_language {PEG Language Tutorial}]
+[item modules/pt/pt_peg_introduction.man pt::pegrammar {Introduction to Parsing Expression Grammars}]
+[item modules/pt/pt_pgen.man pt::pgen {Parser Generator}]
+[item modules/pt/pt_rdengine.man pt::rde {Parsing Runtime Support, PARAM based}]
+[item modules/pt/pt_tclparam_config_snit.man pt::tclparam::configuration::snit {Tcl/PARAM, Canned configuration, Snit}]
+[item modules/pt/pt_tclparam_config_tcloo.man pt::tclparam::configuration::tcloo {Tcl/PARAM, Canned configuration, Tcloo}]
+[item modules/pt/pt_util.man pt::util {General utilities}]
+[item modules/pt/pt_to_api.man pt_export_api {Parser Tools Export API}]
+[item modules/pt/pt_from_api.man pt_import_api {Parser Tools Import API}]
+[item modules/pt/pt_introduction.man pt_introduction {Introduction to Parser Tools}]
+[item modules/pt/pt_parse_peg.man pt_parse_peg {Parser Tools PEG Parser}]
+[item modules/pt/pt_parser_api.man pt_parser_api {Parser API}]
+[item modules/pt/pt_peg_op.man pt_peg_op {Parser Tools PE Grammar Utility Operations}]
+[division_end]
+[division_start rc4]
+[item modules/rc4/rc4.man rc4 {Implementation of the RC4 stream cipher}]
+[division_end]
+[division_start rcs]
+[item modules/rcs/rcs.man rcs {RCS low level utilities}]
+[division_end]
+[division_start report]
+[item modules/report/report.man report {Create and manipulate report objects}]
+[division_end]
+[division_start rest]
+[item modules/rest/rest.man rest {define REST web APIs and call them inline or asychronously}]
+[division_end]
+[division_start ripemd]
+[item modules/ripemd/ripemd128.man ripemd128 {RIPEMD-128 Message-Digest Algorithm}]
+[item modules/ripemd/ripemd160.man ripemd160 {RIPEMD-160 Message-Digest Algorithm}]
+[division_end]
+[division_start sasl]
+[item modules/sasl/sasl.man SASL {Implementation of SASL mechanisms for Tcl}]
+[item modules/sasl/ntlm.man SASL::NTLM {Implementation of SASL NTLM mechanism for Tcl}]
+[item modules/sasl/scram.man SASL::SCRAM {Implementation of SASL SCRAM mechanism for Tcl}]
+[item modules/sasl/gtoken.man SASL::XGoogleToken {Implementation of SASL NTLM mechanism for Tcl}]
+[division_end]
+[division_start sha1]
+[item modules/sha1/sha1.man sha1 {SHA1 Message-Digest Algorithm}]
+[item modules/sha1/sha256.man sha256 {SHA256 Message-Digest Algorithm}]
+[division_end]
+[division_start simulation]
+[item modules/simulation/annealing.man simulation::annealing {Simulated annealing}]
+[item modules/simulation/montecarlo.man simulation::montecarlo {Monte Carlo simulations}]
+[item modules/simulation/simulation_random.man simulation::random {Pseudo-random number generators}]
+[division_end]
+[division_start smtpd]
+[item modules/smtpd/smtpd.man smtpd {Tcl SMTP server implementation}]
+[division_end]
+[division_start snit]
+[item modules/snit/snit.man snit {Snit's Not Incr Tcl}]
+[item modules/snit/snitfaq.man snitfaq {Snit Frequently Asked Questions}]
+[division_end]
+[division_start soundex]
+[item modules/soundex/soundex.man soundex Soundex]
+[division_end]
+[division_start stooop]
+[item modules/stooop/stooop.man stooop {Object oriented extension.}]
+[item modules/stooop/switched.man switched {switch/option management.}]
+[division_end]
+[division_start string]
+[item modules/string/token.man string::token {Regex based iterative lexing}]
+[item modules/string/token_shell.man string::token::shell {Parsing of shell command line}]
+[division_end]
+[division_start stringprep]
+[item modules/stringprep/stringprep.man stringprep {Implementation of stringprep}]
+[item modules/stringprep/stringprep_data.man stringprep::data {stringprep data tables, generated, internal}]
+[item modules/stringprep/unicode.man unicode {Implementation of Unicode normalization}]
+[item modules/stringprep/unicode_data.man unicode::data {unicode data tables, generated, internal}]
+[division_end]
+[division_start struct]
+[item modules/struct/disjointset.man struct::disjointset {Disjoint set data structure}]
+[item modules/struct/graph.man struct::graph {Create and manipulate directed graph objects}]
+[item modules/struct/graphops.man struct::graph::op {Operation for (un)directed graph objects}]
+[item modules/struct/graph1.man struct::graph_v1 {Create and manipulate directed graph objects}]
+[item modules/struct/struct_list.man struct::list {Procedures for manipulating lists}]
+[item modules/struct/matrix.man struct::matrix {Create and manipulate matrix objects}]
+[item modules/struct/matrix1.man struct::matrix_v1 {Create and manipulate matrix objects}]
+[item modules/struct/pool.man struct::pool {Create and manipulate pool objects (of discrete items)}]
+[item modules/struct/prioqueue.man struct::prioqueue {Create and manipulate prioqueue objects}]
+[item modules/struct/queue.man struct::queue {Create and manipulate queue objects}]
+[item modules/struct/record.man struct::record {Define and create records (similar to 'C' structures)}]
+[item modules/struct/struct_set.man struct::set {Procedures for manipulating sets}]
+[item modules/struct/skiplist.man struct::skiplist {Create and manipulate skiplists}]
+[item modules/struct/stack.man struct::stack {Create and manipulate stack objects}]
+[item modules/struct/struct_tree.man struct::tree {Create and manipulate tree objects}]
+[item modules/struct/struct_tree1.man struct::tree_v1 {Create and manipulate tree objects}]
+[division_end]
+[division_start tar]
+[item modules/tar/tar.man tar {Tar file creation, extraction & manipulation}]
+[division_end]
+[division_start tepam]
+[item modules/tepam/tepam_introduction.man tepam {An introduction into TEPAM, Tcl's Enhanced Procedure and Argument Manager}]
+[item modules/tepam/tepam_argument_dialogbox.man tepam::argument_dialogbox {TEPAM argument_dialogbox, reference manual}]
+[item modules/tepam/tepam_doc_gen.man tepam::doc_gen {TEPAM DOC Generation, reference manual}]
+[item modules/tepam/tepam_procedure.man tepam::procedure {TEPAM procedure, reference manual}]
+[division_end]
+[division_start term]
+[item modules/term/term.man term {General terminal control}]
+[item modules/term/ansi_code.man term::ansi::code {Helper for control sequences}]
+[item modules/term/ansi_cattr.man term::ansi::code::attr {ANSI attribute sequences}]
+[item modules/term/ansi_cctrl.man term::ansi::code::ctrl {ANSI control sequences}]
+[item modules/term/ansi_cmacros.man term::ansi::code::macros {Macro sequences}]
+[item modules/term/ansi_ctrlu.man term::ansi::ctrl::unix {Control operations and queries}]
+[item modules/term/ansi_send.man term::ansi::send {Output of ANSI control sequences to terminals}]
+[item modules/term/imenu.man term::interact::menu {Terminal widget, menu}]
+[item modules/term/ipager.man term::interact::pager {Terminal widget, paging}]
+[item modules/term/receive.man term::receive {General input from terminals}]
+[item modules/term/term_bind.man term::receive::bind {Keyboard dispatch from terminals}]
+[item modules/term/term_send.man term::send {General output to terminals}]
+[division_end]
+[division_start textutil]
+[item modules/textutil/textutil.man textutil {Procedures to manipulate texts and strings.}]
+[item modules/textutil/adjust.man textutil::adjust {Procedures to adjust, indent, and undent paragraphs}]
+[item modules/textutil/expander.man textutil::expander {Procedures to process templates and expand text.}]
+[item modules/textutil/repeat.man textutil::repeat {Procedures to repeat strings.}]
+[item modules/textutil/textutil_split.man textutil::split {Procedures to split texts}]
+[item modules/textutil/textutil_string.man textutil::string {Procedures to manipulate texts and strings.}]
+[item modules/textutil/tabify.man textutil::tabify {Procedures to (un)tabify strings}]
+[item modules/textutil/trim.man textutil::trim {Procedures to trim strings}]
+[division_end]
+[division_start tie]
+[item modules/tie/tie.man tie {Array persistence}]
+[item modules/tie/tie_std.man tie {Array persistence, standard data sources}]
+[division_end]
+[division_start tiff]
+[item modules/tiff/tiff.man tiff {TIFF reading, writing, and querying and manipulation of meta data}]
+[division_end]
+[division_start tool]
+[item modules/tool/meta.man oo::util {Utility commands for TclOO}]
+[item modules/tool/tool.man tool {Dictionary Tools}]
+[item modules/tool/tool_dict_ensemble.man tool::dict_ensemble {Dictionary Tools}]
+[division_end]
+[division_start transfer]
+[item modules/transfer/connect.man transfer::connect {Connection setup}]
+[item modules/transfer/copyops.man transfer::copy {Data transfer foundation}]
+[item modules/transfer/tqueue.man transfer::copy::queue {Queued transfers}]
+[item modules/transfer/ddest.man transfer::data::destination {Data destination}]
+[item modules/transfer/dsource.man transfer::data::source {Data source}]
+[item modules/transfer/receiver.man transfer::receiver {Data source}]
+[item modules/transfer/transmitter.man transfer::transmitter {Data source}]
+[division_end]
+[division_start treeql]
+[item modules/treeql/treeql.man treeql {Query tree objects}]
+[division_end]
+[division_start try]
+[item modules/try/tcllib_throw.man try {throw - Throw an error exception with a message}]
+[item modules/try/tcllib_try.man try {try - Trap and process errors and exceptions}]
+[division_end]
+[division_start uev]
+[item modules/uev/uevent.man uevent {User events}]
+[item modules/uev/uevent_onidle.man uevent::onidle {Request merging and deferal to idle time}]
+[division_end]
+[division_start units]
+[item modules/units/units.man units {unit conversion}]
+[division_end]
+[division_start uri]
+[item modules/uri/uri.man uri {URI utilities}]
+[item modules/uri/urn-scheme.man uri_urn {URI utilities, URN scheme}]
+[division_end]
+[division_start uuid]
+[item modules/uuid/uuid.man uuid {UUID generation and comparison}]
+[division_end]
+[division_start valtype]
+[item modules/valtype/valtype_common.man valtype::common {Validation, common code}]
+[item modules/valtype/cc_amex.man valtype::creditcard::amex {Validation for AMEX creditcard number}]
+[item modules/valtype/cc_discover.man valtype::creditcard::discover {Validation for Discover creditcard number}]
+[item modules/valtype/cc_mastercard.man valtype::creditcard::mastercard {Validation for Mastercard creditcard number}]
+[item modules/valtype/cc_visa.man valtype::creditcard::visa {Validation for VISA creditcard number}]
+[item modules/valtype/ean13.man valtype::gs1::ean13 {Validation for EAN13}]
+[item modules/valtype/iban.man valtype::iban {Validation for IBAN}]
+[item modules/valtype/imei.man valtype::imei {Validation for IMEI}]
+[item modules/valtype/isbn.man valtype::isbn {Validation for ISBN}]
+[item modules/valtype/luhn.man valtype::luhn {Validation for plain number with a LUHN checkdigit}]
+[item modules/valtype/luhn5.man valtype::luhn5 {Validation for plain number with a LUHN5 checkdigit}]
+[item modules/valtype/usnpi.man valtype::usnpi {Validation for USNPI}]
+[item modules/valtype/verhoeff.man valtype::verhoeff {Validation for plain number with a VERHOEFF checkdigit}]
+[division_end]
+[division_start virtchannel_base]
+[item modules/virtchannel_base/cat.man tcl::chan::cat {Concatenation channel}]
+[item modules/virtchannel_base/facade.man tcl::chan::facade {Facade channel}]
+[item modules/virtchannel_base/tcllib_fifo.man tcl::chan::fifo {In-memory fifo channel}]
+[item modules/virtchannel_base/tcllib_fifo2.man tcl::chan::fifo2 {In-memory interconnected fifo channels}]
+[item modules/virtchannel_base/halfpipe.man tcl::chan::halfpipe {In-memory channel, half of a fifo2}]
+[item modules/virtchannel_base/tcllib_memchan.man tcl::chan::memchan {In-memory channel}]
+[item modules/virtchannel_base/tcllib_null.man tcl::chan::null {Null channel}]
+[item modules/virtchannel_base/nullzero.man tcl::chan::nullzero {Null/Zero channel combination}]
+[item modules/virtchannel_base/tcllib_random.man tcl::chan::random {Random channel}]
+[item modules/virtchannel_base/std.man tcl::chan::std {Standard I/O, unification of stdin and stdout}]
+[item modules/virtchannel_base/tcllib_string.man tcl::chan::string {Read-only in-memory channel}]
+[item modules/virtchannel_base/textwindow.man tcl::chan::textwindow {Textwindow channel}]
+[item modules/virtchannel_base/tcllib_variable.man tcl::chan::variable {In-memory channel using variable for storage}]
+[item modules/virtchannel_base/tcllib_zero.man tcl::chan::zero {Zero channel}]
+[item modules/virtchannel_base/randseed.man tcl::randomseed {Utilities for random channels}]
+[division_end]
+[division_start virtchannel_core]
+[item modules/virtchannel_core/core.man tcl::chan::core {Basic reflected/virtual channel support}]
+[item modules/virtchannel_core/events.man tcl::chan::events {Event support for reflected/virtual channels}]
+[item modules/virtchannel_core/transformcore.man tcl::transform::core {Basic reflected/virtual channel transform support}]
+[division_end]
+[division_start virtchannel_transform]
+[item modules/virtchannel_transform/adler32.man tcl::transform::adler32 {Adler32 transformation}]
+[item modules/virtchannel_transform/vt_base64.man tcl::transform::base64 {Base64 encoding transformation}]
+[item modules/virtchannel_transform/vt_counter.man tcl::transform::counter {Counter transformation}]
+[item modules/virtchannel_transform/vt_crc32.man tcl::transform::crc32 {Crc32 transformation}]
+[item modules/virtchannel_transform/hex.man tcl::transform::hex {Hexadecimal encoding transformation}]
+[item modules/virtchannel_transform/identity.man tcl::transform::identity {Identity transformation}]
+[item modules/virtchannel_transform/limitsize.man tcl::transform::limitsize {limiting input}]
+[item modules/virtchannel_transform/observe.man tcl::transform::observe {Observer transformation, stream copy}]
+[item modules/virtchannel_transform/vt_otp.man tcl::transform::otp {Encryption via one-time pad}]
+[item modules/virtchannel_transform/rot.man tcl::transform::rot rot-encryption]
+[item modules/virtchannel_transform/spacer.man tcl::transform::spacer {Space insertation and removal}]
+[item modules/virtchannel_transform/tcllib_zlib.man tcl::transform::zlib {zlib (de)compression}]
+[division_end]
+[division_start websocket]
+[item modules/websocket/websocket.man websocket {Tcl implementation of the websocket protocol}]
+[division_end]
+[division_start wip]
+[item modules/wip/wip.man wip {Word Interpreter}]
+[division_end]
+[division_start yaml]
+[item modules/yaml/huddle.man huddle {Create and manipulate huddle object}]
+[item modules/yaml/yaml.man yaml {YAML Format Encoder/Decoder}]
+[division_end]
+[division_start zip]
+[item modules/zip/decode.man zipfile::decode {Access to zip archives}]
+[item modules/zip/encode.man zipfile::encode {Generation of zip archives}]
+[item modules/zip/mkzip.man zipfile::mkzip {Build a zip archive}]
+[division_end]
+[division_end]
+[toc_end] \ No newline at end of file
diff --git a/tcllib/support/devel/sak/doc/topic.txt b/tcllib/support/devel/sak/doc/topic.txt
new file mode 100644
index 0000000..294c097
--- /dev/null
+++ b/tcllib/support/devel/sak/doc/topic.txt
@@ -0,0 +1 @@
+doc Generate documentation in various formats, and/or validate it.
diff --git a/tcllib/support/devel/sak/help/cmd.tcl b/tcllib/support/devel/sak/help/cmd.tcl
new file mode 100644
index 0000000..8fe5f8e
--- /dev/null
+++ b/tcllib/support/devel/sak/help/cmd.tcl
@@ -0,0 +1,25 @@
+# -*- tcl -*-
+# Implementation of 'help'.
+
+# Available variables
+# * argv - Cmdline arguments
+
+if {[llength $argv] > 2} {
+ puts stderr "Usage: $argv0 help ?topic?"
+ exit 1
+}
+
+package require sak::help
+
+if {[llength $argv] == 1} {
+ # Argument is a topic.
+ # Locate text for the topic.
+
+ sak::help::print [sak::help::on [lindex $argv 0]]
+ return
+}
+
+sak::help::print [sak::help::alltopics]
+
+##
+# ###
diff --git a/tcllib/support/devel/sak/help/help.tcl b/tcllib/support/devel/sak/help/help.tcl
new file mode 100644
index 0000000..7e00f1e
--- /dev/null
+++ b/tcllib/support/devel/sak/help/help.tcl
@@ -0,0 +1,75 @@
+# -*- tcl -*-
+# (C) 2006 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+##
+# ###
+
+namespace eval ::sak::help {}
+
+# ###
+
+proc ::sak::help::print {text} {
+ global critcldefault
+ puts stdout [string map \
+ [list @@ $critcldefault] $text]
+ return
+}
+
+proc ::sak::help::on {topic} {
+ variable base
+
+ # Look for static text and dynamic, i.e. generated help.
+ # Static is prefered.
+
+ set ht [file join $base $topic help.txt]
+ if {[file exists $ht]} {
+ return [get_input $ht]
+ }
+
+ set ht [file join $base $topic help.tcl]
+ if {[file exists $ht]} {
+ source $ht
+ return [sak::help::on::$topic]
+ }
+
+ set help ""
+ append help \n
+ append help " The topic \"$topic\" is not known." \n
+ append help " The known topics are:" \n\n
+
+ append help [topics]
+
+ return $help
+}
+
+proc ::sak::help::alltopics {} {
+ # Locate the quick-help for all topics and combine it with a
+ # general header.
+
+ set help "\n"
+ append help " SAK - Swiss Army Knife\n\n"
+ append help " sak is a tool to ease the work"
+ append help " of developers and release managers. Try:\n\n"
+ append help [topics]
+
+ return $help
+}
+
+proc ::sak::help::topics {} {
+ variable base
+ set help ""
+ foreach f [lsort [glob -nocomplain -directory $base */topic.txt]] {
+ append help \tsak\ help\ [get_input $f]
+ }
+ return $help
+}
+
+# ###
+
+namespace eval ::sak::help {
+ variable base [file join $::distribution support devel sak]
+}
+
+##
+# ###
+
+package provide sak::help 1.0
diff --git a/tcllib/support/devel/sak/help/help.txt b/tcllib/support/devel/sak/help/help.txt
new file mode 100644
index 0000000..bca8f35
--- /dev/null
+++ b/tcllib/support/devel/sak/help/help.txt
@@ -0,0 +1,8 @@
+
+ help -- Print help message
+
+ sak help ?topic?
+
+ Print a help message about the specified topic. If no topic
+ was given then print a general help message about SAK itself,
+ and provide a list of the available topics.
diff --git a/tcllib/support/devel/sak/help/pkgIndex.tcl b/tcllib/support/devel/sak/help/pkgIndex.tcl
new file mode 100644
index 0000000..609a59a
--- /dev/null
+++ b/tcllib/support/devel/sak/help/pkgIndex.tcl
@@ -0,0 +1,4 @@
+if {![package vsatisfies [package provide Tcl] 8.2]} return
+package ifneeded sak::help 1.0 [list source [file join $dir help.tcl]]
+
+
diff --git a/tcllib/support/devel/sak/help/topic.txt b/tcllib/support/devel/sak/help/topic.txt
new file mode 100644
index 0000000..9d1eaca
--- /dev/null
+++ b/tcllib/support/devel/sak/help/topic.txt
@@ -0,0 +1 @@
+help How to use help.
diff --git a/tcllib/support/devel/sak/localdoc/cmd.tcl b/tcllib/support/devel/sak/localdoc/cmd.tcl
new file mode 100644
index 0000000..e32fce7
--- /dev/null
+++ b/tcllib/support/devel/sak/localdoc/cmd.tcl
@@ -0,0 +1,21 @@
+# -*- tcl -*-
+# Implementation of 'localdoc'.
+
+# Available variables
+# * argv - Cmdline arguments
+# * base - Location of sak.tcl = Top directory of Tcllib distribution
+# * cbase - Location of all files relevant to this command.
+# * sbase - Location of all files supporting the SAK.
+
+# ###
+
+package require sak::localdoc
+
+if {[llength $argv]} {
+ sak::localdoc::usage
+}
+
+sak::localdoc::run
+
+##
+# ###
diff --git a/tcllib/support/devel/sak/localdoc/help.txt b/tcllib/support/devel/sak/localdoc/help.txt
new file mode 100644
index 0000000..256c8ec
--- /dev/null
+++ b/tcllib/support/devel/sak/localdoc/help.txt
@@ -0,0 +1,8 @@
+
+ localdoc -- Generate documentation for website and installer.
+
+ sak localdoc
+
+ Convert all documentation into html and nroff, for use by the
+ installer, and the website. For the latter the results of the
+ conversion are stored in the repository itself.
diff --git a/tcllib/support/devel/sak/localdoc/localdoc.tcl b/tcllib/support/devel/sak/localdoc/localdoc.tcl
new file mode 100644
index 0000000..36447a8
--- /dev/null
+++ b/tcllib/support/devel/sak/localdoc/localdoc.tcl
@@ -0,0 +1,129 @@
+# -*- tcl -*-
+# sak::doc - Documentation facilities
+
+package require sak::util
+package require sak::doc
+
+namespace eval ::sak::localdoc {}
+
+# ###
+# API commands
+
+## ### ### ### ######### ######### #########
+
+proc ::sak::localdoc::usage {} {
+ package require sak::help
+ puts stdout \n[sak::help::on localdoc]
+ exit 1
+}
+
+proc ::sak::localdoc::run {} {
+ getpackage cmdline cmdline/cmdline.tcl
+ getpackage fileutil fileutil/fileutil.tcl
+ getpackage textutil::repeat textutil/repeat.tcl
+ 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
+ source support/installation/modules.tcl
+
+ lappend baseconfig -module tcllib
+ foreach e $excluded {
+ puts "Excluding $e ..."
+ lappend baseconfig -exclude */modules/$e/*
+ }
+
+ set nav ../../../../home
+
+ puts "Reindex the documentation..."
+ sak::doc::imake __dummy__
+ sak::doc::index __dummy__
+
+ puts "Removing old documentation..."
+ # but keep the main index around, manually created, edited, not to be touched
+ # TODO: catch errors and restore automatically
+ file rename embedded/index.html e_index.html
+
+ file delete -force embedded
+ file mkdir embedded/www
+
+ # Put the saved main page back into place, early.
+ file rename e_index.html embedded/index.html
+
+ file delete -force idoc
+ file mkdir idoc/man
+ file mkdir idoc/www
+
+ puts "Generating manpages (installation)..."
+ set config $baseconfig
+ lappend config -exclude {*/doctools/tests/*}
+ lappend config -exclude {*/support/*}
+ lappend config -ext n
+ lappend config -o idoc/man
+ lappend config nroff .
+
+ dtplite::do $config
+
+ # Note: Might be better to run them separately.
+ # Note @: Or we shuffle the results a bit more in the post processing stage.
+
+ set map {
+ .man .html
+ modules/ tcllib/files/modules/
+ apps/ tcllib/files/apps/
+ }
+
+ set toc [string map $map [fileutil::cat support/devel/sak/doc/toc.txt]]
+ set apps [string map $map [fileutil::cat support/devel/sak/doc/toc_apps.txt]]
+ set mods [string map $map [fileutil::cat support/devel/sak/doc/toc_mods.txt]]
+ set cats [string map $map [fileutil::cat support/devel/sak/doc/toc_cats.txt]]
+
+ puts "Generating HTML (installation)... Pass 1, draft..."
+ set config $baseconfig
+ lappend config -exclude {*/doctools/tests/*}
+ lappend config -exclude {*/support/*}
+ lappend config -toc $toc
+ lappend config -nav {Tcllib Home} $nav
+ lappend config -post+toc Categories $cats
+ lappend config -post+toc Modules $mods
+ lappend config -post+toc Applications $apps
+ lappend config -merge
+ lappend config -o idoc/www
+ lappend config html .
+
+ dtplite::do $config
+
+ puts "Generating HTML (installation)... Pass 2, resolving cross-references..."
+ dtplite::do $config
+
+ puts "Generating HTML (online)... Pass 1, draft..."
+ set config $baseconfig
+ lappend config -exclude {*/doctools/tests/*}
+ lappend config -exclude {*/support/*}
+ lappend config -toc $toc
+ lappend config -post+toc Categories $cats
+ lappend config -post+toc Modules $mods
+ lappend config -post+toc Applications $apps
+ lappend config -merge
+ lappend config -raw
+ lappend config -o embedded/www
+ lappend config -header support/fossil-nav-integration.html
+ lappend config html .
+
+ dtplite::do $config
+
+ puts "Generating HTML (online)... Pass 2, resolving cross-references..."
+ dtplite::do $config
+ return
+}
+
+# ### ### ### ######### ######### #########
+
+package provide sak::localdoc 1.0
+
+##
+# ###
diff --git a/tcllib/support/devel/sak/localdoc/pkgIndex.tcl b/tcllib/support/devel/sak/localdoc/pkgIndex.tcl
new file mode 100644
index 0000000..560504b
--- /dev/null
+++ b/tcllib/support/devel/sak/localdoc/pkgIndex.tcl
@@ -0,0 +1,2 @@
+if {![package vsatisfies [package provide Tcl] 8.2]} return
+package ifneeded sak::localdoc 1.0 [list source [file join $dir localdoc.tcl]]
diff --git a/tcllib/support/devel/sak/localdoc/topic.txt b/tcllib/support/devel/sak/localdoc/topic.txt
new file mode 100644
index 0000000..4c1f934
--- /dev/null
+++ b/tcllib/support/devel/sak/localdoc/topic.txt
@@ -0,0 +1,2 @@
+localdoc Generate html & nroff documentation for display
+ from the website, and the installer.
diff --git a/tcllib/support/devel/sak/old/help.txt b/tcllib/support/devel/sak/old/help.txt
new file mode 100644
index 0000000..bc9ed95
--- /dev/null
+++ b/tcllib/support/devel/sak/old/help.txt
@@ -0,0 +1,102 @@
+ Commands available through the swiss army knife aka SAK:
+
+ help - This help
+
+ /Configuration
+ /===========================================================
+
+ version - Return the bundle's version number
+ major - Return the bundle's major version number
+ minor - Return the bundle's minor version number
+ name - Return the bundle's package name
+
+ /Development
+ /===========================================================
+
+ modules - Return list of modules.
+ contributors - Print a list of contributors to the bundle.
+ lmodules - See above, however one module per line
+ imodules - Return list of modules known to the installer.
+ critcl-modules - Return a list of modules with critcl enhancements.
+
+ packages - Return indexed packages in the bundle, plus versions,
+ one package per line. Extracted from the
+ package indices found in the modules.
+
+ provided - Return list and versions of provided packages
+ (in contrast to indexed).
+
+ critcl ?module? - Build a critcl module [default is @@].
+
+ bench ?opt? ?module..?
+ - Run benchmark scripts (*.bench).
+
+ Options: -throwerrors 0|1 Propagate errors if set.
+ -match pattern Exclude benchmarks not matching the
+ glob pattern.
+ -rmatch pattern S.a, but a regexp pattern.
+ -iters integer Max #iterations for all benchmarks.
+ -threads integer #Threads to use for threaded shells.
+ -o path File to write the results too.
+ -format text|csv|raw Format to use for the results.
+ -norm column Normalize results using the specified
+ column as reference.
+ -verbose Informational output during the run.
+ -debug Internal output during the run.
+
+ bench/show ?-o path? ?-format f? ?-norm col? file...
+
+ Reads the files, merges the data, then
+ writes the result back in the specified
+ format, to the specified file, possibly
+ normalizing to a column. Without a file
+ the result is written to stdout.
+
+ bench/edit ?-o path? ?-format f? file col newvalue
+
+ Reads the file, changes the interpreter
+ path in the column to a new value. For
+ merging of data from the same interpreter,
+ but possibly different versions of the
+ benchmarked package, like Tcllib.
+
+ bench/del ?-o path? ?-format f? file col...
+
+ Reads the file and removes the specified
+ columns. To delete unnecessary data in merged
+ results.
+
+ oldvalidate ?module..? - Check listed modules for problems.
+ For all modules if none specified.
+
+ oldvalidate_v ?module..? - Check listed modules for for version
+ problems. For all modules if none
+ specified.
+
+ test ?module...? - Run testsuite for listed modules.
+ For all modules if none specified.
+
+ docstrip/users - List modules using docstrip
+ docstrip/regen ?module...? - Regenerate the sources of all
+ or the listed modules from their
+ docstrip sources.
+
+ /Documentation
+ /===========================================================
+
+ desc ?module...? - Module/Package descriptions
+ desc/2 ?module...? - Module/Package descriptions, alternate format.
+
+ /Release engineering
+ /===========================================================
+
+ gendist - Generate distribution from CVS snapshot
+
+ rpmspec - Generate a RPM spec file for the bundle.
+ gentip55 - Generate a TIP55-style DESCRIPTION.txt file.
+ yml - Generate a YAML description file.
+
+ release name sf-user-id
+ - Marks the current state of all files as a new
+ release. This updates all ChangeLog's, and
+ regenerates the contents of PACKAGES
diff --git a/tcllib/support/devel/sak/old/topic.txt b/tcllib/support/devel/sak/old/topic.txt
new file mode 100644
index 0000000..4b94c29
--- /dev/null
+++ b/tcllib/support/devel/sak/old/topic.txt
@@ -0,0 +1 @@
+old Help for the existing command set.
diff --git a/tcllib/support/devel/sak/readme/cmd.tcl b/tcllib/support/devel/sak/readme/cmd.tcl
new file mode 100644
index 0000000..378ec46
--- /dev/null
+++ b/tcllib/support/devel/sak/readme/cmd.tcl
@@ -0,0 +1,25 @@
+# -*- tcl -*-
+# Implementation of 'readme'.
+
+# Available variables
+# * argv - Cmdline arguments
+# * base - Location of sak.tcl = Top directory of Tcllib distribution
+# * cbase - Location of all files relevant to this command.
+# * sbase - Location of all files supporting the SAK.
+
+package require sak::util
+package require sak::readme
+
+set raw 0
+set log 0
+set stem {}
+set tclv {}
+
+if {[llength $argv]} {
+ sak::readme::usage
+}
+
+sak::readme::run
+
+##
+# ###
diff --git a/tcllib/support/devel/sak/readme/help.txt b/tcllib/support/devel/sak/readme/help.txt
new file mode 100644
index 0000000..a7e5a6d
--- /dev/null
+++ b/tcllib/support/devel/sak/readme/help.txt
@@ -0,0 +1,14 @@
+
+ readme -- Generate a readme listing changes to modules and packages.
+
+ sak readme
+
+ This command compares the current state of the modules and
+ packages and against information from the last release
+ (support/releases/PACKAGES) and generates a README.txt listing
+ the relevant changes (new modules/packages, package version
+ changes, unchanged packages).
+
+ The generated README is written to stdout.
+
+ This is a support command for the release manager.
diff --git a/tcllib/support/devel/sak/readme/pkgIndex.tcl b/tcllib/support/devel/sak/readme/pkgIndex.tcl
new file mode 100644
index 0000000..adbce09
--- /dev/null
+++ b/tcllib/support/devel/sak/readme/pkgIndex.tcl
@@ -0,0 +1,2 @@
+if {![package vsatisfies [package provide Tcl] 8.2]} return
+package ifneeded sak::readme 1.0 [list source [file join $dir readme.tcl]]
diff --git a/tcllib/support/devel/sak/readme/readme.tcl b/tcllib/support/devel/sak/readme/readme.tcl
new file mode 100644
index 0000000..165335e
--- /dev/null
+++ b/tcllib/support/devel/sak/readme/readme.tcl
@@ -0,0 +1,448 @@
+# -*- tcl -*-
+# (C) 2009 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+##
+# ###
+
+package require sak::color
+package require sak::review
+
+namespace eval ::sak::readme {
+ namespace import ::sak::color::*
+}
+
+# ###
+
+proc ::sak::readme::usage {} {
+ package require sak::help
+ puts stdout \n[sak::help::on readme]
+ exit 1
+}
+
+proc ::sak::readme::run {} {
+ global package_name package_version
+
+ getpackage struct::set struct/sets.tcl
+ getpackage struct::matrix struct/matrix.tcl
+ getpackage textutil::adjust textutil/adjust.tcl
+
+ # Future: Consolidate with ... review ...
+ # Determine which packages are potentially changed, from the set
+ # of modules touched since the last release, as per the fossil
+ # repository's commit log.
+
+ foreach {trunk tuid} [sak::review::Leaf trunk] break ;# rid + uuid
+ foreach {release ruid} [sak::review::YoungestOfTag release] break ;# datetime+uuid
+
+ sak::review::AllParentsAfter $trunk $tuid $release $ruid -> rid uuid {
+ sak::review::FileSet $rid -> path action {
+ lappend modifiedm [lindex [file split $path] 1]
+ }
+ }
+ set modifiedm [lsort -unique $modifiedm]
+
+ set issues {}
+
+ # package -> list(version)
+ set old_version [loadoldv [location_PACKAGES]]
+ array set releasep [loadpkglist [location_PACKAGES]]
+ array set currentp [ipackages]
+
+ array set changed {}
+ foreach p [array names currentp] {
+ foreach {vlist module} $currentp($p) break
+ set currentp($p) $vlist
+ set changed($p) [struct::set contains $modifiedm $module]
+ }
+
+ LoadNotes
+
+ # Containers for results
+ struct::matrix NEW ; NEW add columns 4 ; # module, package, version, notes
+ struct::matrix CHG ; CHG add columns 5 ; # module, package, old/new version, notes
+ struct::matrix ICH ; ICH add columns 5 ; # module, package, old/new version, notes
+ struct::matrix CNT ; CNT add columns 5;
+ set UCH {}
+
+ NEW add row {Module Package {New Version} Comments}
+
+ CHG add row [list {} {} "$package_name $old_version" "$package_name $package_version" {}]
+ CHG add row {Module Package {Old Version} {New Version} Comments}
+
+ ICH add row [list {} {} "$package_name $old_version" "$package_name $package_version" {}]
+ ICH add row {Module Package {Old Version} {New Version} Comments}
+
+ set newp {} ; set chgp {} ; set ichp {}
+ set newm {} ; set chgm {} ; set ichm {} ; set uchm {}
+ set nm 0
+ set np 0
+
+ # Process all packages in all modules ...
+ foreach m [lsort -dict [modules]] {
+ puts stderr ...$m
+ incr nm
+
+ foreach name [lsort -dict [Provided $m]] {
+ #puts stderr ......$p
+ incr np
+
+ # Define list of versions, if undefined so far.
+ if {![info exists currentp($name)]} {
+ set currentp($name) {}
+ }
+
+ # Detect and process new packages.
+
+ if {![info exists releasep($name)]} {
+ # New package.
+ foreach v $currentp($name) {
+ puts stderr .........NEW
+ NEW add row [list $m $name $v [Note $m $name]]
+ lappend newm $m
+ lappend newp $name
+ }
+ continue
+ }
+
+ # The package is not new, but possibly changed. And even
+ # if the version has not changed it may have been, this is
+ # indicated by changed(), which is based on the ChangeLog.
+
+ set vequal [struct::set equal $releasep($name) $currentp($name)]
+ set note [Note $m $name]
+
+ if {$vequal && ($note ne {})} {
+ if {$note eq "---"} {
+ # The note declares the package as unchanged.
+ puts stderr .........UNCHANGED/1
+ lappend uchm $m
+ lappend UCH $name
+ } else {
+ # Note for package without version changes => must be invisible
+ puts stderr .........INVISIBLE-CHANGE
+ Enter $m $name $note ICH
+ lappend ichm $m
+ lappend ichp $name
+ }
+ continue
+ }
+
+ if {!$changed($name) && $vequal} {
+ # Versions are unchanged, changelog also indicates no
+ # change. No particular attention here.
+
+ puts stderr .........UNCHANGED/2
+ lappend uchm $m
+ lappend UCH $name
+ continue
+ }
+
+ if {$changed($name) && !$vequal} {
+ # Both changelog and version number indicate a
+ # change. Small alert, have to classify the order of
+ # changes. But not if there is a note, this is assumed
+ # to be the classification.
+
+ if {$note eq {}} {
+ set note "\t=== Classify changes."
+ lappend issues [list $m $name "Classify changes"]
+ }
+ Enter $m $name $note
+
+ lappend chgm $m
+ lappend chgp $name
+ continue
+ }
+
+ # Changed according to ChangeLog, Version is not. ALERT.
+ # or: Versions changed, but according to changelog nothing
+ # in the code. ALERT.
+
+ # Suppress the alert if we have a note, and dispatch per
+ # the note's contents (some tags are special, instructions
+ # to us here).
+
+ if {($note eq {})} {
+ if {$changed($name)} {
+ # Changed according to ChangeLog, Version is not. ALERT.
+ set note "\t<<< MISMATCH. Version ==, ChangeLog ++"
+ } else {
+ set note "\t<<< MISMATCH. ChangeLog ==, Version ++"
+ }
+
+ lappend issues [list $m $name [string range $note 5 end]]
+ }
+
+ Enter $m $name $note
+ lappend chgm $m
+ lappend chgp $name
+ }
+ }
+
+ # .... process the matrices and others results, make them presentable ...
+
+ set newp [llength [lsort -uniq $newp]]
+ set newm [llength [lsort -uniq $newm]]
+ if {$newp} {
+ CNT add row [list $newp {new packages} in $newm modules]
+ }
+
+ set chgp [llength [lsort -uniq $chgp]]
+ set chgm [llength [lsort -uniq $chgm]]
+ if {$chgp} {
+ CNT add row [list $chgp {changed packages} in $chgm modules]
+ }
+
+ set ichp [llength [lsort -uniq $ichp]]
+ set ichm [llength [lsort -uniq $ichm]]
+ if {$ichp} {
+ CNT add row [list $ichp {internally changed packages} in $ichm modules]
+ }
+
+ set uchp [llength [lsort -uniq $UCH]]
+ set uchm [llength [lsort -uniq $uchm]]
+ if {$uchp} {
+ CNT add row [list $uchp {unchanged packages} in $uchm modules]
+ }
+
+ CNT add row [list $np {packages, total} in $nm {modules, total}]
+
+ Header Overview
+ puts ""
+ if {[CNT rows] > 0} {
+ puts [Indent " " [Detrail [CNT format 2string]]]
+ }
+ puts ""
+
+ if {[NEW rows] > 1} {
+ Header "New in $package_name $package_version"
+ puts ""
+ Sep NEW - [Clean NEW 1 0]
+ puts [Indent " " [Detrail [NEW format 2string]]]
+ puts ""
+ }
+
+ if {[CHG rows] > 2} {
+ Header "Changes from $package_name $old_version to $package_version"
+ puts ""
+ Sep CHG - [Clean CHG 2 0]
+ puts [Indent " " [Detrail [CHG format 2string]]]
+ puts ""
+ }
+
+ if {[ICH rows] > 2} {
+ Header "Invisible changes (documentation, testsuites)"
+ puts ""
+ Sep ICH - [Clean ICH 2 0]
+ puts [Indent " " [Detrail [ICH format 2string]]]
+ puts ""
+ }
+
+ if {[llength $UCH]} {
+ Header Unchanged
+ puts ""
+ puts [Indent " " [textutil::adjust::adjust \
+ [join [lsort -dict $UCH] {, }] -length 64]]
+ }
+
+ variable legend
+ puts $legend
+
+ if {![llength $issues]} return
+
+ puts stderr [=red "Issues found ([llength $issues])"]
+ puts stderr " Please run \"./sak.tcl review\" to resolve,"
+ puts stderr " then run \"./sak.tcl readme\" again."
+ puts stderr Details:
+
+ struct::matrix ISS ; ISS add columns 3
+ foreach issue $issues {
+ foreach {m p w} $issue break
+ set m " $m"
+ ISS add row [list $m $p $w]
+ }
+
+ puts stderr [ISS format 2string]
+
+
+ puts stderr [=red "Issues found ([llength $issues])"]
+ puts stderr " Please run \"./sak.tcl review\" to resolve,"
+ puts stderr " then run \"./sak.tcl readme\" again."
+ return
+}
+
+proc ::sak::readme::Header {s {sep =}} {
+ puts $s
+ puts [string repeat $sep [string length $s]]
+ return
+}
+
+proc ::sak::readme::Enter {m name note {mat CHG}} {
+ upvar 1 currentp currentp releasep releasep
+
+ # To handle multiple versions we match the found versions up by
+ # major version. We assume that we have only one version per major
+ # version. This allows us to detect changes within each major
+ # version, new major versions, etc.
+
+ array set om {} ; foreach v $releasep($name) {set om([lindex [split $v .] 0]) $v}
+ array set cm {} ; foreach v $currentp($name) {set cm([lindex [split $v .] 0]) $v}
+
+ set all [lsort -dict [struct::set union [array names om] [array names cm]]]
+
+ sakdebug {
+ puts @@@@@@@@@@@@@@@@
+ parray om
+ parray cm
+ puts all\ $all
+ puts @@@@@@@@@@@@@@@@
+ }
+
+ foreach v $all {
+ if {[info exists om($v)]} {set ov $om($v)} else {set ov ""}
+ if {[info exists cm($v)]} {set cv $cm($v)} else {set cv ""}
+ $mat add row [list $m $name $ov $cv $note]
+ }
+ return
+}
+
+proc ::sak::readme::Clean {m start col} {
+ set n [$m rows]
+ set marks [list $start]
+ set last {}
+ set lastm -1
+ set sq 0
+
+ for {set i $start} {$i < $n} {incr i} {
+ set str [$m get cell $col $i]
+
+ if {$str eq $last} {
+ set sq 1
+ $m set cell $col $i {}
+ if {$lastm >= 0} {
+ #puts stderr "@ $i / <$last> / <$str> / ++ $lastm"
+ lappend marks $lastm
+ set lastm -1
+ } else {
+ #puts stderr "@ $i / <$last> / <$str> /"
+ }
+ } else {
+ set last $str
+ set lastm $i
+ if {$sq} {
+ #puts stderr "@ $i / <$last> / <$str> / ++ $i /saved"
+ lappend marks $i
+ set sq 0
+ } else {
+ #puts stderr "@ $i / <$last> / <$str> / saved"
+ }
+ }
+ }
+ return [lsort -uniq -increasing -integer $marks]
+}
+
+proc ::sak::readme::Sep {m char marks} {
+
+ #puts stderr "$m = $marks"
+
+ set n [$m columns]
+ set sep {}
+ for {set i 0} {$i < $n} {incr i} {
+ lappend sep [string repeat $char [expr {2+[$m columnwidth $i]}]]
+ }
+
+ foreach k [linsert [lsort -decreasing -integer -uniq $marks] 0 end] {
+ $m insert row $k $sep
+ }
+ return
+}
+
+proc ::sak::readme::Indent {pfx text} {
+ return ${pfx}[join [split $text \n] \n$pfx]
+}
+
+proc ::sak::readme::Detrail {text} {
+ set res {}
+ foreach line [split $text \n] {
+ lappend res [string trimright $line]
+ }
+ return [join $res \n]
+}
+
+proc ::sak::readme::Note {m p} {
+ # Look for a note, and present to caller, if any.
+ variable notes
+ #parray notes
+ set k [list $m $p]
+ #puts <$k>
+ if {[info exists notes($k)]} {
+ return [join $notes($k) { }]
+ }
+ return ""
+}
+
+proc ::sak::readme::Provided {m} {
+ set result {}
+ foreach {p ___} [ppackages $m] {
+ lappend result $p
+ }
+ return $result
+}
+
+proc ::sak::readme::LoadNotes {} {
+ global distribution
+ variable notes
+ array set notes {}
+
+ catch {
+ set f [file join $distribution .NOTE]
+ set f [open $f r]
+ while {![eof $f]} {
+ if {[gets $f line] < 0} continue
+ set line [string trim $line]
+ if {$line == {}} continue
+ foreach {k t} $line break
+ set notes($k) $t
+ }
+ close $f
+ } msg
+ return
+}
+
+proc ::sak::readme::loadoldv {fname} {
+ set f [open $fname r]
+ foreach line [split [read $f] \n] {
+ set line [string trim $line]
+ if {[string match @* $line]} {
+ foreach {__ __ v} $line break
+ close $f
+ return $v
+ }
+ }
+ close $f
+ return -code error {Version not found}
+}
+
+##
+# ###
+
+namespace eval ::sak::readme {
+ variable legend {
+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.
+ }
+
+ variable review {}
+}
+
+package provide sak::readme 1.0
diff --git a/tcllib/support/devel/sak/readme/topic.txt b/tcllib/support/devel/sak/readme/topic.txt
new file mode 100644
index 0000000..938361f
--- /dev/null
+++ b/tcllib/support/devel/sak/readme/topic.txt
@@ -0,0 +1,2 @@
+readme Generate a README listing the changes to modules and packages
+ since the last release.
diff --git a/tcllib/support/devel/sak/registry/pkgIndex.tcl b/tcllib/support/devel/sak/registry/pkgIndex.tcl
new file mode 100644
index 0000000..0e6116b
--- /dev/null
+++ b/tcllib/support/devel/sak/registry/pkgIndex.tcl
@@ -0,0 +1,2 @@
+if {![package vsatisfies [package provide Tcl] 8.3]} return
+package ifneeded pregistry 0.1 [list source [file join $dir registry.tcl]]
diff --git a/tcllib/support/devel/sak/registry/registry.man b/tcllib/support/devel/sak/registry/registry.man
new file mode 100644
index 0000000..d895164
--- /dev/null
+++ b/tcllib/support/devel/sak/registry/registry.man
@@ -0,0 +1,171 @@
+[comment {-*- tcl -*- doctools manpage}]
+[manpage_begin pregistry n 0.1]
+[copyright {2006 Andreas Kupries <andreas_kupries@users.sourceforge.net>}]
+[moddesc {Registry like data store}]
+[titledesc {Registry like data store}]
+[require Tcl 8.3]
+[require pregistry [opt 0.1]]
+[description]
+[para]
+
+This package provides a class for the creation of registry-like data
+storage objects. The contents of each storage are organized in a tree,
+with each node managing a set of children and attributes, each
+possibly empty. Stores are not persistent by default, but can be made
+so through configuring them with a tie backend to talk to.
+
+
+[section {Class API}]
+
+The package exports a single command, the class command, enabling the
+creation of registry instances. Its API is:
+
+[list_begin definitions]
+
+[call [cmd ::pregistry] [arg object] [arg options]...]
+
+This command creates a new registry object with the name [arg object],
+initializes it, and returns the fully qualified name of the object
+command as its result.
+
+[para]
+
+The recognized options are explained in section [sectref OPTIONS].
+
+[list_end]
+
+[section {Object API}]
+
+The objects created by the class command provide the methods listed below:
+
+[list_begin definitions]
+[call [arg object] [method delete] [arg key] [opt [arg attr]]]
+
+If the optional [arg attr] argument is present, the specified
+attribute under [arg key] will be deleted from the object.
+
+If the optional [arg attr] is omitted, the specified [arg key] and any
+subkeys or attributes beneath it in the hierarchy will be deleted. If
+the key could not be deleted then an error is generated. If the key
+did not exist, the command has no effect.
+
+The command returns the empty string as its result.
+
+
+[call [arg object] [method mtime] [arg key] [opt [arg attr]]]
+
+If the optional [arg attr] argument is present, the time of the last
+modification of the specified attribute under [arg key] will be
+returned, in seconds since the epoch.
+
+If the optional [arg attr] is omitted, the time of the last
+modification of the specified [arg key] will be returned.
+
+If the key did not exist, the command will generate an error.
+
+
+[call [arg object] [method exists] [arg key] [opt [arg attr]]]
+
+If the optional [arg attr] argument is present, the method checks
+whether the specified attribute under [arg key] is present or not.
+
+If the optional [arg attr] is omitted, the method checks whether the
+specified [arg key] is present or not.
+
+In both cases the result returned is boolean value, [const True] if
+the checked entity exists, and [const False] otherwise.
+
+
+[call [arg object] [method get] [arg key] [arg attr]]
+
+Returns the data associated with the attribute [arg attr] under the
+[arg key]. If either the key or the attribute does not exist, then an
+error is generated.
+
+
+[call [arg object] [method get||default] [arg key] [arg attr] [arg default]]
+
+Like method [method get], except that the [arg default] is returned if
+either the key or the attribute does not exist, instead of generating
+an error.
+
+
+[call [arg object] [method keys] [arg key] [opt [arg pattern]]]
+
+If [arg pattern] isn't specified, the command returns a list of names
+of all the subkeys of [arg key]. If [arg pattern] is specified, only
+those names matching the pattern are returned. Matching is determined
+using the same rules as for [cmd {string match}]. If the specified
+[arg key] does not exist, then an error is generated.
+
+
+[call [arg object] [method set] [arg key] [opt "[arg attr] [arg value]"]]
+
+If [arg attr] isn't specified, creates the [arg key] if it doesn't
+already exist. If [arg attr] is specified, creates the [arg key]
+keyName and attribute [arg attr] if necessary.
+
+The contents of [arg attr] are set to [arg value]. The command returns
+the [arg value] as its result.
+
+
+[call [arg object] [method attrs] [arg key] [opt [arg pattern]]]
+
+If [arg pattern] isn't specified, returns a list of names of all the
+attributes of [arg key]. If [arg pattern] is specified, only those
+names matching the pattern are returned. Matching is determined using
+the same rules as for [cmd {string match}].
+
+
+
+[call [arg object] [method configure]]
+
+Returns a dictionary mapping the option of the object to their
+currently configured values.
+
+[call [arg object] [method configure] [arg option] [arg newvalue]...]
+
+This invokation sets the configured value of option [arg option] to
+[arg newvalue]. Nothing will be done if current and new value are
+identical. Returns the empty string.
+
+[call [arg object] [method configure] [arg option]]
+[call [arg object] [method cget] [arg option]]
+
+Returns the value configured for the specified option [arg option].
+
+[list_end]
+
+
+[section KEYS]
+
+All elements in the registry are identified by a unique key, which is
+a list of strings. This identifies the path from the root of the tree
+to the requested element. The root itself is identified by the empty
+list. Each child C of an element E have to have unique name, which
+will be the last element of the key identifying this child. The head
+of the key will be the key of E.
+
+
+[section OPTIONS]
+
+The registry object recognize a single option,
+
+[list_begin options]
+[opt_def -tie tiedefinition]
+
+See the documentation of command [cmd ::tie::tie], in the package
+[package tie]. The value of the option is a list of words equivalent
+to the arguments "[arg dstype] [arg dsname]..." of [cmd ::tie::tie].
+I.e. the identity of the tie backend to use, followed by the
+specification of the location to use, per the chosen backend.
+
+Example:
+[example {
+ set r [pregistry %AUTO% -tie [list file $path]]
+}]
+
+[list_end]
+
+[keywords registry {data store} tree]
+[manpage_end]
diff --git a/tcllib/support/devel/sak/registry/registry.tcl b/tcllib/support/devel/sak/registry/registry.tcl
new file mode 100644
index 0000000..2fc4639
--- /dev/null
+++ b/tcllib/support/devel/sak/registry/registry.tcl
@@ -0,0 +1,287 @@
+# -*- tcl -*-
+# (C) 2006 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+##
+# ###
+
+package require Tcl 8.3
+package require snit
+package require tie
+
+# ###
+
+snit::type pregistry {
+
+ # API
+ # delete key ?attribute?
+ # mtime key ?attribute?
+ # get key attribute
+ # keys key ?pattern?/*
+ # set key ?attribute value?
+ # attrs key ?pattern?
+
+ option -tie -default {} -configuremethod TIE ; # Persistence
+
+ constructor {args} {
+ $self configurelist $args
+ $self INIT
+ return
+ }
+
+ # ###
+
+ method delete {key args} {
+ #puts DEL|$key|
+
+ if {[llength $args] > 1} {return -code error "wrong\#args"}
+
+ if {[catch {NODE $key} n]} return
+ if {[llength $args]} {
+ # Delete attribute
+
+ set attr [lindex $args 0]
+ set pattern [list A $n $attr *]
+ set km [list N $n M]
+
+ array unset data $pattern
+ set data($km) [clock seconds]
+ } else {
+ # Delete key and children.
+ #puts N|$n|
+
+ if {![llength $key]} {
+ return -code error "cannot delete root"
+ }
+
+ # Children first
+ foreach c [array names data [list C $n *]] {
+ set c [lindex $c end]
+ #puts _|$c|
+ $self delete [linsert $key end $c]
+ }
+
+ # And now the node itself. Modify the parent as well,
+ # remove this node as a child.
+
+ set self [lindex $key end]
+ set pidx [list N $n P]
+ set npat [list N $n *]
+ set apat [list A $n * *]
+
+ set pid $data($pidx)
+ set cidx [list C $pid $self]
+ set midx [list N $pid M]
+
+ array unset data $apat
+ array unset data $npat
+ unset -nocomplain data($cidx)
+ set data($midx) [clock seconds]
+
+ unset -nocomplain ncache($key)
+ }
+ return
+ }
+
+ method mtime {key args} {
+ if {[llength $args] > 1} {return -code error "wrong\#args"}
+ set n [NODE $key]
+ if {[llength $args]} {
+ set attr [lindex $args 0]
+ set idx [list A $n $attr M]
+ if {![info exists data($idx)]} {
+ return -code error "Unknown attribute \"$attr\" in key \"$key\""
+ }
+ } else {
+ set idx [list N $n M]
+ }
+ return $data($idx)
+ }
+
+ method exists {key args} {
+ if {[llength $args] > 1} {
+ return -code error "wrong\#args"
+ } elseif {[catch {NODE $key} n]} {
+ return 0
+ } elseif {![llength $args]} {
+ return 1
+ }
+
+ set attr [lindex $args 0]
+ set idx [list A $n $attr V]
+ return [info exist data($idx)]
+ }
+
+ method get {key attr} {
+ set n [NODE $key]
+ set idx [list A $n $attr V]
+ if {![info exists data($idx)]} {
+ return -code error "Unknown attribute \"$attr\" in key \"$key\""
+ }
+ return $data($idx)
+ }
+
+ method get||default {key attr default} {
+ if {[catch {NODE $key} n]} {
+ return $default
+ }
+ set idx [list A $n $attr V]
+ if {![info exists data($idx)]} {
+ return $default
+ }
+ return $data($idx)
+ }
+
+ method keys {key {pattern *}} {
+ set n [NODE $key]
+ set pattern [list C $n $pattern]
+ set res {}
+ foreach c [array names data $pattern] {
+ lappend res [linsert $key end $c]
+ }
+ return $res
+ }
+
+ method attrs {key {pattern *}} {
+ set n [NODE $key]
+ set pattern [list A $n $pattern V]
+ set res {}
+ foreach c [array names data $pattern] {
+ lappend res [lindex $c end-1]
+ }
+ return $res
+ }
+
+ method lappend {key attr value} {
+ set list [$self get||default $key $attr {}]
+ lappend list $value
+ $self set $key $attr $list
+ return
+ }
+
+ method set {key args} {
+ set n [NODE $key 1]
+ if {![llength $args]} return
+ if {[llength $args] != 2} {return -code error "wrong\#args"}
+ foreach {attr value} $args break
+
+ # Ignore calls which do not change the contents of the
+ # database.
+
+ set aidx [list A $n $attr V]
+ if {
+ [info exists data($aidx)] &&
+ [string equal $data($aidx) $value]
+ } return ; # {}
+
+ #puts stderr "$n $attr | $key | ($value)"
+
+ set aids [list A $n $attr M]
+ set data($aidx) $value
+ set data($aids) [clock seconds]
+ return
+ }
+
+ # ### state
+
+ variable data -array {}
+
+ # Tree of keys. Each keys can have multiple attributes.
+ # Each key, and attribute, have a modification timestamp.
+
+ # Each node in the tree is identified by a numeric id. Children
+ # refer to their parents. Parent id + name refers to unique child.
+
+ # Array contents
+
+ # (I) -> number id counter
+ # (C id name) -> id parent id x name => child id
+ # (N id P) -> id node id => parent id, empty for root
+ # (N id M) -> timestamp node id => last modification
+ # (A id name V) -> string node id x attribute name => value
+ # (A id name M) -> timestamp s.a => last modification
+
+ # This structure is less memory/space intensive than the setup of
+ # 1registry. It is also more difficult to query as it is less
+ # tabular, less redundant.
+
+ # Another thing becoming more complex is the deletion of a
+ # subtree. It is now necessary to walk the the tree, instead of
+ # just deleting all keys in the array matching a certain
+ # pattern. That at least can be done at the C level (array unset).
+
+ # The conversion from key list to node is also linear in key
+ # length, and an operation done often. Better cache it. However
+ # only internally, or the space savingsare gone too as the space
+ # is then taken by the conversion cache. Hm. Still less than
+ # before, as each key is listed at most once. In 1registry it was
+ # repeated for each of its attributes as well. This would regain
+ # speed for searches, as the conversion cache now is a tabular
+ # representation of the tree, and easily globbed.
+
+ # ### configure -tie (persistence)
+
+ method TIE {option value} {
+ if {[string equal $options(-tie) $value]} return
+ tie::untie [myvar data]
+ # 8.5 - tie::tie [myvar data] {expand}$value
+ eval [linsert $value 0 tie::tie [myvar data]]
+ set options(-tie) $value
+ return
+ }
+
+ method INIT {} {
+ if {![info exists data(I)]} {
+ set anchor {C {} {}}
+ set rootp {N 0 P}
+ set roots {N 0 M}
+
+ set data(I) 0
+ set data($anchor) 0
+ set data($rootp) {}
+ set data($roots) [clock seconds]
+ }
+ return
+ }
+
+ variable ncache -array {}
+
+ proc NODE {key {create 0}} {
+ upvar 1 ncache ncache data data
+ if {[info exist ncache($key)]} {
+ # Cached, shortcut
+ return $ncache($key)
+ }
+ if {![llength $key]} {
+ # Root, shortcut
+ set id 0
+ } else {
+ # Recursively convert, possibly create
+ set parent [lrange $key 0 end-1]
+ set self [lindex $key end]
+ set pid [NODE $parent $create]
+ set idx [list C $pid $self]
+
+ if {[info exists data($idx)]} {
+ set id $data($idx)
+ } elseif {!$create} {
+ return -code error "Unknown key \"$key\""
+ } else {
+ set id [incr data(I)]
+ set idxp [list N $id P]
+ set idxm [list N $id M]
+
+ set data($idx) $id
+ set data($idxp) $pid
+ set data($idxm) [clock seconds]
+ }
+ }
+ set ncache($key) $id
+ return $id
+ }
+
+ # ###
+}
+
+##
+# ###
+
+package provide pregistry 0.1
diff --git a/tcllib/support/devel/sak/registry/registry.test b/tcllib/support/devel/sak/registry/registry.test
new file mode 100644
index 0000000..4dead0c
--- /dev/null
+++ b/tcllib/support/devel/sak/registry/registry.test
@@ -0,0 +1,450 @@
+# -*- tcl -*-
+# registry.test: tests for the registry structure.
+#
+# Copyright (c) 2006 by Andreas Kupries <a.kupries@westend.com>
+# All rights reserved.
+#
+# RCS: @(#) $Id: registry.test,v 1.1 2006/09/06 06:07:09 andreas_kupries Exp $
+
+# -------------------------------------------------------------------------
+
+source [file join \
+ [file dirname [file dirname [file join [pwd] [info script]]]] \
+ devtools testutilities.tcl]
+
+testsNeedTcl 8.3
+testsNeedTcltest 2.2
+
+support {
+ use snit/snit.tcl snit
+ use tie/tie.tcl tie
+}
+testing {
+ useLocal registry.tcl pregistry
+}
+
+# -------------------------------------------------------------------------
+
+proc dump/ {r {root {}} {rv {}}} {
+ if {$rv != {}} {upvar 1 $rv res} else {set res {}}
+ lappend res $root/
+ foreach a [$r attrs $root] {
+ lappend res [list $root/ :$a [$r get $root $a]]
+ }
+ foreach c [$r keys $root] {
+ dump/ $r $c res
+ }
+ return $res
+}
+
+proc dump {r root} {
+ lappend res $root/
+ foreach a [$r attrs $root] {
+ lappend res [list $root/ :$a [$r get $root $a]]
+ }
+ return $res
+}
+
+# -------------------------------------------------------------------------
+
+test registry-1.0 {base state} {
+ pregistry myreg
+ set res [dump/ myreg]
+ myreg destroy
+ set res
+} /
+
+# -------------------------------------------------------------------------
+# Attribute manipulation, root, in-tree, and leaf
+
+set n 0
+foreach {key prekey structure} {
+ {} {} /
+ {sub tree leaf} {} {/ sub/ {sub tree/} {sub tree leaf/}}
+ {sub tree} {sub tree leaf} {/ sub/ {sub tree/} {sub tree leaf/}}
+} {
+ test registry-2.$n {structure} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key
+ set res [dump/ myreg]
+ myreg destroy
+ set res
+ } $structure
+
+ test registry-3.1.$n {no attributes, node creation} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key
+ set res [dump myreg $key]
+ myreg destroy
+ set res
+ } [list $key/]
+
+ test registry-3.2.$n {bad node creation} {
+ pregistry myreg
+ catch {myreg set} res
+ myreg destroy
+ set res
+ } {wrong # args: should be "::pregistry::Snit_methodset type selfns win self key args"}
+
+ test registry-3.3.$n {bad node creation} {
+ pregistry myreg
+ catch {myreg set a b c d} res
+ myreg destroy
+ set res
+ } {wrong#args}
+
+ test registry-3.4.$n {bad node creation} {
+ pregistry myreg
+ catch {myreg set a b} res
+ myreg destroy
+ set res
+ } {wrong#args}
+
+ test registry-4.1.$n {set attribute, ok} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ set res [dump myreg $key]
+ myreg destroy
+ set res
+ } [list $key/ [list $key/ :foo bar]]
+
+ test registry-4.2.$n {set attribute, change} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ set res [myreg get $key foo]
+ myreg set $key foo bold
+ lappend res [myreg get $key foo]
+ myreg destroy
+ set res
+ } {bar bold}
+
+ test registry-5.1.$n {get attribute, ok} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ set res [myreg get $key foo]
+ myreg destroy
+ set res
+ } bar
+
+ test registry-5.2.$n {get attribute, missing attribute} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ catch {myreg get $key alpha} res
+ myreg destroy
+ set res
+ } "Unknown attribute \"alpha\" in key \"$key\""
+
+ test registry-5.3.$n {get attribute, missing key} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ catch {myreg get TEST x} res
+ myreg destroy
+ set res
+ } {Unknown key "TEST"}
+
+ test registry-5.4.$n {get attribute, wrong#args} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ catch {myreg get} res
+ myreg destroy
+ set res
+ } {wrong # args: should be "::pregistry::Snit_methodget type selfns win self key attr"}
+
+ test registry-5.5.$n {get attribute, wrong#args} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ catch {myreg get x} res
+ myreg destroy
+ set res
+ } {wrong # args: should be "::pregistry::Snit_methodget type selfns win self key attr"}
+
+ test registry-5.6.$n {get attribute, wrong#args} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ catch {myreg get x y z} res
+ myreg destroy
+ set res
+ } {wrong # args: should be "::pregistry::Snit_methodget type selfns win self key attr"}
+
+ test registry-6.1.$n {get||default, ok} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ set res [myreg get||default $key foo DEF]
+ myreg destroy
+ set res
+ } bar
+
+ test registry-6.2.$n {get||default, missing attribute} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ set res [myreg get||default $key alpha DEF]
+ myreg destroy
+ set res
+ } DEF
+
+ test registry-6.3.$n {get||default, missing key} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ set res [myreg get||default TEST x DEF]
+ myreg destroy
+ set res
+ } DEF
+
+ test registry-6.4.$n {get||default, wrong#args} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ catch {myreg get||default} res
+ myreg destroy
+ set res
+ } {wrong # args: should be "::pregistry::Snit_methodget||default type selfns win self key attr default"}
+
+ test registry-6.5.$n {get||default, wrong#args} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ catch {myreg get||default x} res
+ myreg destroy
+ set res
+ } {wrong # args: should be "::pregistry::Snit_methodget||default type selfns win self key attr default"}
+
+ test registry-6.6.$n {get||default, wrong#args} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ catch {myreg get||default x y} res
+ myreg destroy
+ set res
+ } {wrong # args: should be "::pregistry::Snit_methodget||default type selfns win self key attr default"}
+
+ test registry-6.7.$n {get||default, wrong#args} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ catch {myreg get||default x y z a} res
+ myreg destroy
+ set res
+ } {wrong # args: should be "::pregistry::Snit_methodget||default type selfns win self key attr default"}
+
+ test registry-7.1.$n {attribute matching, total} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ myreg set $key alpha omega
+ set res [lsort [myreg attrs $key]]
+ myreg destroy
+ set res
+ } {alpha foo}
+
+ test registry-7.2.$n {attribute matching, partial} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ myreg set $key alpha omega
+ set res [lsort [myreg attrs $key a*]]
+ myreg destroy
+ set res
+ } alpha
+
+ test registry-7.3.$n {attribute matching, wrong#args} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ catch {myreg attrs} res
+ myreg destroy
+ set res
+ } {wrong # args: should be "::pregistry::Snit_methodattrs type selfns win self key ?pattern?"}
+
+ test registry-7.4.$n {attribute matching, wrong#args} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ catch {myreg attrs x y z} res
+ myreg destroy
+ set res
+ } {wrong # args: should be "::pregistry::Snit_methodattrs type selfns win self key ?pattern?"}
+
+ test registry-8.1.$n {attribute existence, ok} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ set res [myreg exists $key foo]
+ myreg destroy
+ set res
+ } 1
+
+ test registry-8.2.$n {attribute existence, missing} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ set res [myreg exists $key alpha]
+ myreg destroy
+ set res
+ } 0
+
+ test registry-8.3.$n {attribute existence, wrong#args} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ catch {myreg exists} res
+ myreg destroy
+ set res
+ } {wrong # args: should be "::pregistry::Snit_methodexists type selfns win self key args"}
+
+ test registry-8.4.$n {attribute existence, wrong#args} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ catch {myreg exists x y z} res
+ myreg destroy
+ set res
+ } {wrong#args}
+
+ test registry-9.1.$n {key existence, ok} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ set res [myreg exists $key]
+ myreg destroy
+ set res
+ } 1
+
+ test registry-9.2.$n {key existence, missing} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ set res [myreg exists alpha]
+ myreg destroy
+ set res
+ } 0
+
+ # key existence, wrong args, see attribute existence
+
+ test registry-10.1.$n {key matching, total} {
+ pregistry myreg
+ myreg set $key
+ myreg set [linsert $key end alpha]
+ myreg set [linsert $key end omega]
+ set res [lsort [myreg keys $key]]
+ myreg destroy
+ set res
+ } [list [linsert $key end alpha] [linsert $key end omega]]
+
+ test registry-10.2.$n {key matching, partial} {
+ pregistry myreg
+ myreg set $key
+ myreg set [linsert $key end alpha]
+ myreg set [linsert $key end omega]
+ set res [lsort [myreg keys $key a*]]
+ myreg destroy
+ set res
+ } [list [linsert $key end alpha]]
+
+ test registry-10.3.$n {key matching, wrong#args} {
+ pregistry myreg
+ myreg set $key
+ catch {myreg keys} res
+ myreg destroy
+ set res
+ } {wrong # args: should be "::pregistry::Snit_methodkeys type selfns win self key ?pattern?"}
+
+ test registry-10.4.$n {key matching, wrong#args} {
+ pregistry myreg
+ myreg set $key
+ catch {myreg keys x y z} res
+ myreg destroy
+ set res
+ } {wrong # args: should be "::pregistry::Snit_methodkeys type selfns win self key ?pattern?"}
+
+ test registry-11.1.$n {attribute deletion, ok} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ myreg set $key alpha omega
+ myreg delete $key foo
+ set res [dump myreg $key]
+ myreg destroy
+ set res
+ } [list $key/ [list $key/ :alpha omega]]
+
+ test registry-11.2.$n {attribute deletion, missing} {
+ pregistry myreg
+ myreg set $prekey
+ myreg set $key foo bar
+ myreg set $key alpha omega
+ set code [catch {myreg delete $key fox} res]
+ myreg destroy
+ list $code $res
+ } {0 {}}
+
+ incr n
+}
+
+set n 0
+foreach {par key structure} {
+ {foo fox fool} {foo fox fool bar soom}
+ {{/ foo/ {foo fox/} {foo fox fool/} {foo fox fool bar/} {foo fox fool bar soom/} {{foo fox fool bar soom/} :foo bar}} {/ foo/ {foo fox/}}}
+
+ foo foo
+ {{/ foo/ {foo/ :foo bar}} /}
+} {
+ test registry-12.1.$n {deletion} {
+ set res {}
+ pregistry myreg
+ myreg set $par
+ myreg set $key foo bar
+ lappend res [dump/ myreg]
+ myreg delete $par
+ lappend res [dump/ myreg]
+ myreg destroy
+ set res
+ } $structure
+
+ test registry-12.2.$n {deletion of non-existing key} {
+ pregistry myreg
+ myreg set $par
+ catch {myreg delete FOO} res
+ myreg destroy
+ set res
+ } {}
+
+ incr n
+}
+
+test registry-13.1 {deletion of root} {
+ pregistry myreg
+ catch {myreg delete {}} res
+ myreg destroy
+ set res
+} {cannot delete root}
+
+test registry-13.2 {wrong#args} {
+ pregistry myreg
+ catch {myreg delete} res
+ myreg destroy
+ set res
+} {wrong # args: should be "::pregistry::Snit_methoddelete type selfns win self key args"}
+
+test registry-13.3 {wrong#args} {
+ pregistry myreg
+ catch {myreg delete a b c} res
+ myreg destroy
+ set res
+} {wrong#args}
+
+# -------------------------------------------------------------------------
+
+::tcltest::cleanupTests
diff --git a/tcllib/support/devel/sak/review/cmd.tcl b/tcllib/support/devel/sak/review/cmd.tcl
new file mode 100644
index 0000000..420b53f
--- /dev/null
+++ b/tcllib/support/devel/sak/review/cmd.tcl
@@ -0,0 +1,25 @@
+# -*- tcl -*-
+# Implementation of 'review'.
+
+# Available variables
+# * argv - Cmdline arguments
+# * base - Location of sak.tcl = Top directory of Tcllib distribution
+# * cbase - Location of all files relevant to this command.
+# * sbase - Location of all files supporting the SAK.
+
+package require sak::util
+package require sak::review
+
+set raw 0
+set log 0
+set stem {}
+set tclv {}
+
+if {[llength $argv]} {
+ sak::review::usage
+}
+
+sak::review::run
+
+##
+# ###
diff --git a/tcllib/support/devel/sak/review/help.txt b/tcllib/support/devel/sak/review/help.txt
new file mode 100644
index 0000000..ff789a5
--- /dev/null
+++ b/tcllib/support/devel/sak/review/help.txt
@@ -0,0 +1,10 @@
+
+ review -- Interactively review changed modules and packages
+
+ sak review
+
+ This command scans the system for changes and then enters
+ a sub-shell where the caller can interactively review and
+ tag these changes.
+
+ This is a support command for the release manager.
diff --git a/tcllib/support/devel/sak/review/pkgIndex.tcl b/tcllib/support/devel/sak/review/pkgIndex.tcl
new file mode 100644
index 0000000..4fe595a
--- /dev/null
+++ b/tcllib/support/devel/sak/review/pkgIndex.tcl
@@ -0,0 +1,2 @@
+if {![package vsatisfies [package provide Tcl] 8.2]} return
+package ifneeded sak::review 1.0 [list source [file join $dir review.tcl]]
diff --git a/tcllib/support/devel/sak/review/review.tcl b/tcllib/support/devel/sak/review/review.tcl
new file mode 100644
index 0000000..6c12ee9
--- /dev/null
+++ b/tcllib/support/devel/sak/review/review.tcl
@@ -0,0 +1,964 @@
+# -*- tcl -*-
+# # ## ### ##### ######## ############# #####################
+# (C) 2013 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+##
+# ###
+
+package require linenoise
+package require sak::color
+
+getpackage fileutil fileutil/fileutil.tcl
+getpackage doctools::changelog doctools/changelog.tcl
+getpackage struct::set struct/sets.tcl
+getpackage term::ansi::send term/ansi/send.tcl
+
+namespace eval ::sak::review {
+ namespace import ::sak::color::*
+}
+
+# ###
+
+proc ::sak::review::usage {} {
+ package require sak::help
+ puts stdout \n[sak::help::on review]
+ exit 1
+}
+
+proc ::sak::review::run {} {
+ Scan ; Review
+ return
+}
+
+# # ## ### ##### ######## ############# #####################
+## Phase I. Determine which modules require a review.
+## A derivative of the code in ::sak::readme.
+
+proc ::sak::review::Scan {} {
+ global distribution
+ variable review
+ variable rm
+
+ Banner "Scan for modules and packages to review..."
+
+ # Future: Consolidate with ... readme ...
+ # Determine which packages are potentially changed and therefore
+ # in need of review, from the set of modules touched since the
+ # last release, as per the fossil repository's commit log.
+
+ # list of modified modules.
+ set modifiedm {}
+
+ # database of commit messages per changed module.
+ # cm: module -> list(string)
+ array set cm {}
+
+ # pt: database of files per changed module.
+ # module -> list(path)
+
+ # rm: module -> list (revs); rev = uuid+desc+files (string)
+ array set rm {}
+
+ foreach {trunk tuid} [Leaf trunk] break ;# rid + uuid
+ foreach {release ruid} [YoungestOfTag release] break ;# datetime + uuid
+ AllParentsAfter $trunk $tuid $release $ruid -> rid uuid {
+ Next ; Progress " $rid"
+
+ set d [Description $rid]
+ Progress " D"
+
+ # Determine file set, split by modules, then generate a package of
+ # uuid, description and filtered files per modules touched.
+
+ array set fs {}
+
+ FileSet $rid -> path action {
+ Progress .
+
+ set px [file split $path]
+ set themodule [lindex $px 1]
+ lappend modifiedm $themodule
+ lappend cm($themodule) $d
+
+ # ignore files in modules/
+ if {[llength $px] < 3} continue
+
+ #puts $themodule||$rid||$action|$px|
+
+ lappend fs($themodule) [file join {*}[lrange $px 2 end]]
+ lappend pt($themodule) [file join {*}[lrange $px 2 end]]
+ }
+
+ foreach {m files} [array get fs] {
+ set str \[$uuid\]\n$d\n\n[join [lsort -dict $files] \n]
+ lappend rm($m) $str
+ }
+ unset fs
+ }
+
+ Next
+
+ # cleanup module list, may have duplicates
+ set modifiedm [lsort -unique $modifiedm]
+
+ array set review {}
+
+ # package -> list(version)
+ set old_version [loadoldv [location_PACKAGES]]
+ array set releasep [loadpkglist [location_PACKAGES]]
+ array set currentp [ipackages]
+
+ array set changed {}
+ foreach p [array names currentp] {
+ foreach {vlist module} $currentp($p) break
+ set currentp($p) $vlist
+ set changed($p) [struct::set contains $modifiedm $module]
+ }
+
+ LoadNotes
+
+ set np 0
+ # Process all packages in all modules ...
+ foreach m [lsort -dict [modules]] {
+ Next ; Progress " $m"
+ foreach name [lsort -dict [Provided $m]] {
+ #Next ; Progress "... $m/$name"
+ # Define list of versions, if undefined so far.
+ if {![info exists currentp($name)]} {
+ set currentp($name) {}
+ }
+
+ # Detect new packages. Ignore them.
+
+ if {![info exists releasep($name)]} {
+ #Progress " /new"
+ continue
+ }
+
+ # The package is not new, but possibly changed. And even
+ # if the version has not changed it may have been, this is
+ # indicated by changed(), which is based on the ChangeLog.
+
+ set vequal [struct::set equal $releasep($name) $currentp($name)]
+ set note [Note $m $name]
+
+ # Detect packages whose versions are unchanged, and whose
+ # changelog also indicates no change. Ignore these too.
+
+ if {!$changed($name) && $vequal} {
+ #Progress " /not changed"
+ continue
+ }
+
+ # Now look for packages where both changelog and version
+ # number indicate a change. These we have to review.
+
+ if {$changed($name) && !$vequal} {
+ lappend review($m) [list $name classify $note]
+ #Progress " [=cya classify]"
+ incr np
+ continue
+ }
+
+ # What remains are packages which are changed according to
+ # their changelog, but their version disagrees. Or the
+ # reverse. These need a big review to see who is right.
+ # We may have to bump their version information, not just
+ # classify changes. Of course, in modules with multiple
+ # packages it is quite possible to be unchanged and the
+ # changelog refers to the siblings.
+
+ lappend review($m) [list $name mismatch $note]
+ #Progress " [=cya mismatch]"
+ incr np
+ }
+ }
+
+ Close
+
+ # Postprocessing phase, pull in all relevant commit messages of the module.
+
+ foreach m [array names review] {
+ # commit messages
+ if {[info exists cm($m)]} {
+ set entries [lsort -unique $cm($m)]
+ } else {
+ set entries {}
+ }
+ # and affected files
+ if {[info exists pt($m)]} {
+ lappend entries [join [lsort -dict [lsort -unique $pt($m)]] \n]
+ }
+
+ set review($m) [list $review($m) [join $entries \n\n]]
+ }
+
+ # review: module -> list (notes, desc+files)
+ set review() $np
+ return
+}
+
+# see also readme
+proc ::sak::review::Provided {m} {
+ set result {}
+ foreach {p ___} [ppackages $m] {
+ lappend result $p
+ }
+ return $result
+}
+
+# see also readme
+proc ::sak::review::loadoldv {fname} {
+ set f [open $fname r]
+ foreach line [split [read $f] \n] {
+ set line [string trim $line]
+ if {[string match @* $line]} {
+ foreach {__ __ v} $line break
+ close $f
+ return $v
+ }
+ }
+ close $f
+ return -code error {Version not found}
+}
+
+proc ::sak::review::Progress {text} {
+ puts -nonewline stdout $text
+ flush stdout
+ return
+}
+
+proc ::sak::review::Next {} {
+ # erase to end of line, then move back to start of line.
+ term::ansi::send::eeol
+ puts -nonewline stdout \r
+ flush stdout
+ return
+}
+
+proc ::sak::review::Close {} {
+ puts stdout ""
+ return
+}
+
+proc ::sak::review::Clear {} {
+ term::ansi::send::clear
+ return
+}
+
+proc ::sak::review::Banner {text} {
+ Clear
+ puts stdout "\n <<SAK Tcllib: $text>>\n"
+ return
+}
+
+proc ::sak::review::Note {m p} {
+ # Look for a note, and present to caller, if any.
+ variable notes
+ #parray notes
+ set k [list $m $p]
+ #puts <$k>
+ if {[info exists notes($k)]} {
+ return $notes($k)
+ }
+ return ""
+}
+
+proc ::sak::review::SaveNote {at t} {
+ global distribution
+ set f [open [file join $distribution .NOTE] a]
+ puts $f [list $at $t]
+ close $f
+ return
+}
+
+proc ::sak::review::LoadNotes {} {
+ global distribution
+ variable notes
+ array set notes {}
+
+ catch {
+ set f [file join $distribution .NOTE]
+ set f [open $f r]
+ while {![eof $f]} {
+ if {[gets $f line] < 0} continue
+ set line [string trim $line]
+ if {$line == {}} continue
+ foreach {k t} $line break
+ set notes($k) $t
+ }
+ close $f
+ }
+
+ return
+}
+
+proc ::sak::review::FileSet {rid _ pv av script} {
+ upvar 1 $pv thepath $av theaction
+
+ lappend map @rid@ $rid
+ foreach line [split [string trim [F [string map $map {
+ SELECT filename.name,
+ CASE WHEN nullif(mlink.pid,0) is null THEN 'added'
+ WHEN nullif(mlink.fid,0) is null THEN 'deleted'
+ ELSE 'edited'
+ END
+ FROM mlink, filename
+ WHERE mlink.mid = @rid@
+ AND mlink.fnid = filename.fnid
+ ORDER BY filename.name;
+ }]]] \n] {
+ foreach {thepath theaction} [split $line |] break
+ # ignore all changes not in modules
+ if {![string match modules* $thepath]} continue
+ uplevel 1 $script
+ }
+ return
+}
+
+proc ::sak::review::Description {rid} {
+ lappend map @rid@ $rid
+ string trim [F [string map $map {
+ SELECT coalesce(event.ecomment,event.comment)
+ FROM event
+ WHERE event.objid = @rid@
+ ;
+ }]]
+}
+
+proc ::sak::review::AllParentsAfter {rid ruid cut cutuid _ rv uv script} {
+ upvar 1 $rv therev $uv theuid
+
+ array set rev {}
+ set rev($rid) .
+ lappend front $rid
+
+ # Initial run, for the starting revision.
+ set therev $rid
+ set theuid $ruid
+ uplevel 1 $script
+
+ # Standard iterative incremental transitive-closure. We have a
+ # front of revisions whose parents we take, which become the new
+ # front to follow, until no parents are delivered anymore due to
+ # the cutoff condition (timestamp, only the revisions coming after
+ # are accepted).
+
+ while {1} {
+ set new {}
+ foreach cid $front {
+ foreach pid [Parents $cid $cut] {
+ foreach {pid uuid mtraw mtime} [split [string trim $pid |] |] break
+ if {$uuid eq $cutuid} continue
+
+ lappend new $pid $mtime $uuid
+ if {$mtraw <= $cut} {
+ puts "Overshot: $rid $mtime $uuid"
+ }
+ }
+ }
+ if {![llength $new]} break
+
+ # record new parents, and make them the new starting points
+ set front {}
+ foreach {pid mtime uuid} $new {
+ if {[info exists rev($pid)]} continue
+ set rev($pid) .
+ lappend front $pid
+
+ set therev $pid
+ set theuid $uuid
+ uplevel 1 $script
+ }
+ }
+}
+
+proc ::sak::review::Parents {rid cut} {
+ lappend map @rid@ $rid
+ lappend map @cutoff@ $cut
+ split [F [string map $map {
+ SELECT pid, blob.uuid, event.mtime, datetime(event.mtime)
+ FROM plink, blob, event
+ WHERE plink.cid = @rid@
+ AND plink.pid = blob.rid
+ AND plink.pid = event.objid
+ AND event.mtime > @cutoff@
+ ;
+ }]] \n
+}
+
+proc ::sak::review::YoungestOfTag {tag} {
+ lappend map @tag@ $tag
+ puts stderr "last $tag = [F [string map $map {
+ SELECT datetime (event.mtime)
+ FROM tag, tagxref, event
+ WHERE tag.tagname = 'sym-' || '@tag@'
+ AND tagxref.tagid = tag.tagid
+ AND tagxref.tagtype > 0
+ AND tagxref.rid = event.objid
+ AND event.type = 'ci'
+ ORDER BY event.mtime DESC
+ LIMIT 1
+ ;
+ }]]"
+ split [F [string map $map {
+ SELECT event.mtime, blob.uuid
+ FROM tag, tagxref, event, blob
+ WHERE tag.tagname = 'sym-' || '@tag@'
+ AND tagxref.tagid = tag.tagid
+ AND tagxref.tagtype > 0
+ AND tagxref.rid = event.objid
+ AND event.type = 'ci'
+ AND blob.rid = event.objid
+ ORDER BY event.mtime DESC
+ LIMIT 1
+ ;
+ }]] |
+}
+
+proc ::sak::review::Leaf {branch} {
+ lappend map @branch@ $branch
+ split [F [string map $map {
+ SELECT blob.rid, blob.uuid
+ FROM leaf, blob, tag, tagxref
+ WHERE blob.rid = leaf.rid
+ AND tag.tagname = 'sym-' || '@branch@'
+ AND tagxref.tagid = tag.tagid
+ AND tagxref.tagtype > 0
+ AND tagxref.rid = leaf.rid
+ ;
+ }]] |
+}
+
+proc ::sak::review::F {script} {
+ #puts |$script|
+ set r [exec fossil sqlite3 << $script]
+ #puts ($r)
+ return $r
+}
+
+
+
+# # ## ### ##### ######## ############# #####################
+## Phase II. Interactively review the changes packages.
+
+# Namespace variables
+#
+# review : array, database of all modules, keyed by name
+# nm : number of modules
+# modules : list of module names, keys to --> review
+# current : index in -> modules, current module
+# np : number of packages in current module
+# packages : list of packages in current module
+# currentp : index in --> packages
+# im : 1+current | indices for display
+# ip : 1+currentp |
+# ir : 1+currentr |
+# end : array : module (name) --> index of last package
+# stop : repl exit flag
+# map : array : text -> module/package index
+# commands : proper commands
+# allcommands : commands + namesof(map)
+#
+
+proc ::sak::review::Review {} {
+ variable review ;# table of everything to review
+ variable rm ;# Alt structure, rev (desc, files) by module.
+ variable nm ;# number of modules
+ variable modules ;# list of module names, sorted
+ variable stop 0 ;# repl exit flag
+ variable end ;# last module/package index.
+ variable smode rev ;# standard display per revision.
+
+ variable navcommands
+ variable allcommands ;# list of all commands, sorted
+ variable commands ;# list of proper commands, sorted
+ variable map ;# map from package names to module/package indices.
+ variable prefix
+
+ Banner "Packages to review: $review()"
+ unset review()
+
+ set nm [array size review]
+ if {!$nm} return
+
+ set modules [lsort -dict [array names review]]
+
+ # Map package name --> module/package index.
+ set im 0
+ foreach m $modules {
+ foreach {packages clog} $review($m) break
+ set ip 0
+ foreach p $packages {
+ set end($im) $ip
+ set end($m) $ip
+ set end() [list $im $ip]
+ foreach {name what tags} $p break
+ lappend map(@$name) [list $im $ip]
+ lappend map(@$name/$m) [list $im $ip]
+ incr ip
+ }
+ incr im
+ }
+
+ # Drop amibigous mappings, and fill the list of commands.
+ foreach k [array names map] {
+ # Skip already dropped keys (extended forms).
+ if {![info exists map($k)]} continue
+ if {[llength $map($k)] < 2} {
+ set map($k) [lindex $map($k) 0]
+ # Drop extended form, not needed.
+ array unset map $k/*
+ } else {
+ unset map($k)
+ }
+ }
+
+ # Map module name --> module/package index
+ # If not preempted by package mapping.
+ set im -1
+ foreach m $modules {
+ incr im
+ if {[info exists map(@$m)]} continue
+ set map(@$m) [list $im 0]
+ }
+
+ # Map command prefix -> full command.
+
+ array set prefix {}
+ foreach c [info commands ::sak::review::C_*] {
+ set c [string range [namespace tail $c] 2 end]
+ lappend commands $c
+ lappend allcommands $c
+ set buf {}
+ foreach ch [split $c {}] {
+ append buf $ch
+ lappend prefix($buf) $c
+ }
+ }
+
+ foreach c [array names map] {
+ lappend allcommands $c
+ set buf {}
+ foreach ch [split $c {}] {
+ append buf $ch
+ lappend prefix($buf) $c
+ }
+ }
+
+ set commands [lsort -dict $commands]
+ set allcommands [lsort -dict $allcommands]
+ set navcommands [lsort -dict [array names map]]
+
+ # Enter the REPL
+ Goto {0 0} 1
+ linenoise::cmdloop \
+ -history 1 \
+ -exit ::sak::review::Exit \
+ -continued ::sak::review::Continued \
+ -prompt1 ::sak::review::Prompt \
+ -complete ::sak::review::Complete \
+ -dispatch ::sak::review::Dispatch
+ return
+}
+
+# # ## ### ##### ######## ############# #####################
+
+proc ::sak::review::RefreshDisplay {} {
+ variable m
+ variable im
+ variable ir
+ variable nm
+ variable nr
+ variable clog
+ variable rlog
+ variable what
+ variable smode
+
+ if {$smode eq "rev"} {
+ set text $rlog
+ } else {
+ set text $clog
+ }
+
+ if {$smode eq "rev"} {
+ Banner "($ir/$nr) \[$im/$nm\] [=cya [string totitle $what]] [=green $m]"
+ } else {
+ Banner "\[$im/$nm\] [=cya [string totitle $what]] [=green $m]"
+ }
+ puts "| [join [split $text \n] "\n| "]\n"
+ return
+}
+
+proc ::sak::review::Exit {} {
+ variable stop
+ return $stop
+}
+
+proc ::sak::review::Continued {buffer} {
+ return 0
+}
+
+proc ::sak::review::Prompt {} {
+ variable ip
+ variable np
+ variable name
+ variable tags
+ variable smode
+ variable im
+ variable ir
+ variable nm
+ variable nr
+ variable what
+ variable m
+
+ if {$smode eq "rev"} {
+ append p "($ir/$nr) "
+ }
+
+ append p "\[$im/$nm\] [=green $m] [=cya [string totitle $what]] "
+ append p "\[$ip/$np\] [=whi $name] ($tags): "
+ return $p
+}
+
+proc ::sak::review::Complete {line} {
+ variable allcommands
+ if {$line eq {}} {
+ return $allcommands
+ } elseif {[llength $line] == 1} {
+ set r {}
+ foreach c $allcommands {
+ if {![string match ${line}* $c]} continue
+ lappend r $c
+ }
+ return $r
+ } else {
+ return {}
+ }
+}
+
+proc ::sak::review::Dispatch {line} {
+ variable prefix
+ variable map
+
+ if {$line == ""} { set line next }
+
+ set cmd [lindex $line 0]
+
+ if {![info exists prefix($cmd)]} {
+ return -code error "Unknown command $cmd, use help or ? to list them"
+ } elseif {[llength $prefix($cmd)] > 1} {
+ return -code error "Ambigous prefix \"$cmd\", expected [join $prefix($cmd) {, }]"
+ }
+
+ # Map prefix to actual command
+ set line [lreplace $line 0 0 $prefix($cmd)]
+
+ # Run command.
+ if {[info exists map($cmd)]} {
+ Goto $map($cmd)
+ return
+ }
+ eval C_$line
+}
+
+proc ::sak::review::Goto {loc {skip 0}} {
+ variable review
+ variable rm
+ variable modules
+ variable packages
+ variable clog
+ variable rlog
+ variable rloga
+ variable current
+ variable currentp
+ variable currentr
+ variable nm
+ variable np
+ variable nr
+ variable at
+ variable tags
+ variable what
+ variable name
+
+ variable m
+ variable p
+ variable ip
+ variable im
+ variable ir
+
+ foreach {current currentp} $loc break
+ set currentr 0
+
+ puts "Goto ($current/$currentp)"
+
+ set m [lindex $modules $current]
+ foreach {packages clog} $review($m) break
+ if {[catch {
+ set nr [llength $rm($m)]
+ set rloga $rm($m)
+ set rlog [lindex $rloga $currentr]
+ }]} {
+ set nr 0
+ set currentr 0
+ set rloga {}
+ set rlog {}
+ }
+
+ set np [llength $packages]
+ set p [lindex $packages $currentp]
+
+ foreach {name what tags} $p break
+ set at [list $m $name]
+
+ set im [expr {1+$current}]
+ set ip [expr {1+$currentp}]
+ set ir [expr {1+$currentr}]
+
+ if {$skip && ([llength $tags] ||
+ ($tags == "---"))} {
+ C_next
+ } else {
+ RefreshDisplay
+ }
+ return
+}
+
+proc ::sak::review::C_* {} {
+ variable smode
+ variable currentr
+ if {$smode eq "all"} {
+ set smode rev
+ set currentr 0
+ } else {
+ set smode all
+ }
+ RefreshDisplay
+ return
+}
+proc ::sak::review::C_, {} {
+ # next revision
+ variable smode
+ variable rlog
+ variable rloga
+ variable currentr
+ if {$smode eq "all"} {
+ set smode rev
+ set currentr 0
+ } else {
+ variable nr
+ incr currentr
+ if {$currentr >= $nr} { set currentr 0 }
+ }
+ variable ir [expr {1+$currentr}]
+ set rlog [lindex $rloga $currentr]
+ RefreshDisplay
+ return
+}
+proc ::sak::review::C_' {} {
+ # previous revision
+ variable smode
+ variable rlog
+ variable rloga
+ variable nr
+ variable currentr
+ if {$smode eq "all"} {
+ set smode rev
+ set currentr $nr
+ }
+ incr currentr -1
+ if {$currentr <= 0} {
+ set currentr $nr
+ incr currentr -1
+ }
+ variable ir [expr {1+$currentr}]
+ set rlog [lindex $rloga $currentr]
+ RefreshDisplay
+ return
+}
+
+proc ::sak::review::C_exit {} { variable stop 1 }
+proc ::sak::review::C_quit {} { variable stop 1 }
+
+proc ::sak::review::C_? {} { C_help }
+proc ::sak::review::C_help {} {
+ variable commands
+ return [join $commands {, }]
+}
+
+proc ::sak::review::C_@? {} { C_@help }
+proc ::sak::review::C_@help {} {
+ variable navcommands
+ return [join $navcommands {, }]
+}
+
+proc ::sak::review::C_@start {} { Goto {0 0} }
+proc ::sak::review::C_@0 {} { Goto {0 0} }
+proc ::sak::review::C_@end {} { variable end ; Goto $end() }
+
+proc ::sak::review::C_>> {} { C_next 1 }
+proc ::sak::review::C_next {{skiprev 0}} {
+ variable tags
+ variable current
+ variable currentp
+ variable smode
+
+ if {!($skiprev) && ($smode eq "rev")} {
+ variable ir
+ variable nr
+ if {$ir < $nr} {
+ C_,
+ return
+ }
+ }
+
+ C_step 0
+
+ set stop @$current/$currentp
+ while {[llength $tags] ||
+ ($tags == "---")} {
+ C_step 0
+ if {"@$current/$currentp" == "$stop"} break
+ }
+
+ RefreshDisplay
+ return
+}
+
+proc ::sak::review::C_step {{refresh 1}} {
+ variable nm
+ variable np
+ variable current
+ variable currentp
+ variable packages
+
+ incr currentp
+ if {$currentp >= $np} {
+ # skip to next module, first package
+ incr current
+ if {$current >= $nm} {
+ # skip to first module
+ set current 0
+ }
+ set currentp 0
+
+ }
+ Goto [list $current $currentp]
+ return
+}
+
+proc ::sak::review::C_<< {} { C_prev 1 }
+proc ::sak::review::C_prev {{skiprev 0}} {
+ variable end
+ variable nm
+ variable np
+ variable current
+ variable currentp
+ variable packages
+ variable smode
+
+ if {!$skiprev && ($smode eq "rev")} {
+ variable ir
+ if {$ir > 1} {
+ C_'
+ return
+ }
+ }
+
+ incr currentp -1
+ if {$currentp < 0} {
+ # skip to previous module, last package
+ incr current -1
+ if {$current < 0} {
+ # skip to back to last module
+ set current [expr {$nm - 1}]
+ }
+ set currentp $end($current)
+ }
+ Goto [list $current $currentp]
+ return
+}
+
+# Commands to add/remove tags, clear set, replace set
+
+proc ::sak::review::C_feature {} { +T EF }
+proc ::sak::review::C_test {} { +T T }
+proc ::sak::review::C_doc {} { +T D }
+proc ::sak::review::C_bug {} { +T B }
+proc ::sak::review::C_perf {} { +T P }
+proc ::sak::review::C_example {} { +T EX }
+proc ::sak::review::C_api {} { +T API }
+proc ::sak::review::C_impl {} { +T I }
+
+proc ::sak::review::C_-feature {} { -T EF }
+proc ::sak::review::C_-test {} { -T T }
+proc ::sak::review::C_-doc {} { -T D }
+proc ::sak::review::C_-bug {} { -T B }
+proc ::sak::review::C_-perf {} { -T P }
+proc ::sak::review::C_-example {} { -T EX }
+proc ::sak::review::C_-api {} { -T API }
+proc ::sak::review::C_-impl {} { -T I }
+
+proc ::sak::review::C_--- {} { =T --- }
+proc ::sak::review::C_clear {} { =T --- }
+#proc ::sak::review::C_cn {} { C_clear ; C_next }
+
+proc ::sak::review::+T {tag} {
+ variable tags
+ if {[lsearch -exact $tags $tag] >= 0} {
+ RefreshDisplay
+ return
+ }
+ =T [linsert $tags end $tag]
+ return
+}
+
+proc ::sak::review::-T {tag} {
+ variable tags
+ set pos [lsearch -exact $tags $tag]
+ if {$pos < 0} {
+ RefreshDisplay
+ return
+ }
+ =T [lreplace $tags $pos $pos]
+ return
+}
+
+proc ::sak::review::=T {newtags} {
+ variable review
+ variable clog
+ variable packages
+ variable currentp
+ variable p
+ variable m
+ variable at
+ variable name
+ variable what
+ variable tags
+
+ if {([llength $newtags] > 1) &&
+ ([set pos [lsearch -exact $newtags ---]] >= 0)} {
+ # Drop --- if there are other tags.
+ set newtags [lreplace $newtags $pos $pos]
+ }
+
+ set tags [lsort -dict $newtags]
+ set p [list $name $what $newtags]
+ set packages [lreplace $packages $currentp $currentp $p]
+ set review($m) [list $packages $clog]
+
+ SaveNote $at $tags
+ RefreshDisplay
+ return
+}
+
+proc ::sak::review::?T {} {
+ variable tags
+ return $tags
+}
+
+##
+# ###
+
+namespace eval ::sak::review {}
+
+package provide sak::review 1.0
diff --git a/tcllib/support/devel/sak/review/topic.txt b/tcllib/support/devel/sak/review/topic.txt
new file mode 100644
index 0000000..d2f7446
--- /dev/null
+++ b/tcllib/support/devel/sak/review/topic.txt
@@ -0,0 +1 @@
+review Interactively review changes since the last release.
diff --git a/tcllib/support/devel/sak/test/cmd.tcl b/tcllib/support/devel/sak/test/cmd.tcl
new file mode 100644
index 0000000..5622a16
--- /dev/null
+++ b/tcllib/support/devel/sak/test/cmd.tcl
@@ -0,0 +1,28 @@
+# -*- tcl -*-
+# Implementation of 'doc'.
+
+# Available variables
+# * argv - Cmdline arguments
+# * base - Location of sak.tcl = Top directory of Tcllib distribution
+# * cbase - Location of all files relevant to this command.
+# * sbase - Location of all files supporting the SAK.
+
+package require sak::util
+package require sak::test
+
+if {![llength $argv]} {
+ sak::test::usage Command missing
+}
+
+set cmd [lindex $argv 0]
+set argv [lrange $argv 1 end]
+
+if {[catch {package require sak::test::$cmd} msg]} {
+ sak::test::usage Unknown command \"$cmd\" : \
+ \n $::errorInfo
+}
+
+sak::test::$cmd $argv
+
+##
+# ###
diff --git a/tcllib/support/devel/sak/test/help.txt b/tcllib/support/devel/sak/test/help.txt
new file mode 100644
index 0000000..4d2762c
--- /dev/null
+++ b/tcllib/support/devel/sak/test/help.txt
@@ -0,0 +1,46 @@
+
+ test -- Execute testsuites
+
+ sak test run ?-s|--shell PATH? ?-l|--log STEM? ?-g|--valgrind? ?-v? ?MODULE ...?
+
+ Run the testsuites of the specified modules, using the shell
+ running SAK for the testsuites as well. If no modules are
+ specified the testsuites of all modules are run.
+
+ If --valgrind is specified the testsuites are run under the
+ valgrind memory checker. NOTE. This feature is not available
+ on the windows platform. Requests for it will be ignored.
+
+ If one or more --shell's are specified the testsuites are run
+ against them. If none are specified the shells registered with
+ 'shell add' (see below) are used instead. If none are
+ specified the shell executing the sak is used instead.
+
+ By default the output from a run is animated feedback of the
+ progress made. If -v is specified the actual log is returned
+ instead.
+
+ If a log STEM is specified the extended log normally activated
+ via -v is written to STEM.log while the user is provided with
+ the regular feedback during execution. In addition the
+ summaries from the feedback are written to STEM.summary as
+ well, and also sorted into STEM.failures, STEM.skipped, and
+ STEM.none. The -l switch overides -v.
+
+ sak test shells
+
+ Returns a list of the registered shells, one per line, used to
+ execute the testsuites.
+
+ sak test shell add PATH...
+
+ Adds the specified paths to the list of shells to use when
+ executing testsuites.
+
+ sak test shell delete PATH...
+
+ Removes the specified paths from the list of shells to use
+ when executing testsuites.
+
+ NOTE: The list of registered shells is a per-user configuration
+ setting and is saved in the file "$HOME/.Tcllib/Registry".
diff --git a/tcllib/support/devel/sak/test/pkgIndex.tcl b/tcllib/support/devel/sak/test/pkgIndex.tcl
new file mode 100644
index 0000000..9522c76
--- /dev/null
+++ b/tcllib/support/devel/sak/test/pkgIndex.tcl
@@ -0,0 +1,5 @@
+if {![package vsatisfies [package provide Tcl] 8.2]} return
+package ifneeded sak::test 1.0 [list source [file join $dir test.tcl]]
+package ifneeded sak::test::run 1.0 [list source [file join $dir run.tcl]]
+package ifneeded sak::test::shells 1.0 [list source [file join $dir shells.tcl]]
+package ifneeded sak::test::shell 1.0 [list source [file join $dir shell.tcl]]
diff --git a/tcllib/support/devel/sak/test/run.tcl b/tcllib/support/devel/sak/test/run.tcl
new file mode 100644
index 0000000..9e0942f
--- /dev/null
+++ b/tcllib/support/devel/sak/test/run.tcl
@@ -0,0 +1,880 @@
+# -*- tcl -*-
+# (C) 2006 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+##
+# ###
+
+package require sak::test::shell
+package require sak::registry
+package require sak::animate
+package require sak::color
+# TODO: Rework this package to use the sak::feedback package
+
+getpackage textutil::repeat textutil/repeat.tcl
+getpackage fileutil fileutil/fileutil.tcl
+getpackage struct::matrix struct/matrix.tcl
+
+namespace eval ::sak::test::run {
+ namespace import ::textutil::repeat::blank
+ namespace import ::sak::color::*
+}
+
+# ###
+
+proc ::sak::test::run {argv} {
+ variable run::valgrind
+ array set config {
+ valgrind 0 raw 0 shells {} stem {} log 0
+ }
+
+ while {[string match -* [set opt [lindex $argv 0]]]} {
+ switch -exact -- $opt {
+ -s - --shell {
+ set sh [lindex $argv 1]
+ if {![fileutil::test $sh efrx msg "Shell"]} {
+ sak::test::usage $msg
+ }
+ lappend config(shells) $sh
+ set argv [lrange $argv 2 end]
+ }
+ -g - --valgrind {
+ if {![llength $valgrind]} {
+ sak::test::usage valgrind not found in the PATH
+ }
+ incr config(valgrind)
+ set argv [lrange $argv 1 end]
+ }
+ -v {
+ set config(raw) 1
+ set argv [lrange $argv 1 end]
+ }
+ -l - --log {
+ set config(log) 1
+ set config(stem) [lindex $argv 1]
+ set argv [lrange $argv 2 end]
+ }
+ default {
+ sak::test::usage Unknown option "\"$opt\""
+ }
+ }
+ }
+
+ if {$config(log)} {set config(raw) 0}
+
+ if {![sak::util::checkModules argv]} return
+
+ run::Do config $argv
+ return
+}
+
+# ###
+
+proc ::sak::test::run::Do {cv modules} {
+ upvar 1 $cv config
+ variable valgrind
+ variable araw $config(raw)
+ variable alog $config(log)
+ # alog => !araw
+
+ set shells $config(shells)
+ if {![llength $shells]} {
+ catch {set shells [sak::test::shell::list]}
+ }
+ if {![llength $shells]} {
+ set shells [list [info nameofexecutable]]
+ }
+
+ if {$alog} {
+ variable logext [open $config(stem).log w]
+ variable logsum [open $config(stem).summary w]
+ variable logfai [open $config(stem).failures w]
+ variable logski [open $config(stem).skipped w]
+ variable lognon [open $config(stem).none w]
+ variable logerd [open $config(stem).errdetails w]
+ variable logfad [open $config(stem).faildetails w]
+ variable logtim [open $config(stem).timings w]
+ } else {
+ variable logext stdout
+ }
+
+ # Preprocessing of module names and shell versions to allows
+ # better formatting of the progress output, i.e. vertically
+ # aligned columns
+
+ if {!$araw} {
+ variable maxml 0
+ variable maxvl 0
+ sak::animate::init
+ foreach m $modules {
+ = "M $m"
+ set l [string length $m]
+ if {$l > $maxml} {set maxml $l}
+ }
+ foreach sh $shells {
+ = "SH $sh"
+ set v [exec $sh << {puts [info patchlevel]; exit}]
+ set l [string length $v]
+ if {$l > $maxvl} {set maxvl $l}
+ }
+ =| "Starting ..."
+ }
+
+ set total 0
+ set pass 0
+ set fail 0
+ set skip 0
+ set err 0
+
+ foreach sh $shells {
+ foreach m $modules {
+ set cmd [Command config $m $sh]
+ sak::animate::init
+ if {$alog || $araw} {
+ puts $logext ============================================================
+ flush $logext
+ }
+ if {[catch {Close [Process [open |$cmd r+]]} msg]} {
+ incr err
+ =| "~~ [mag]ERR ${msg}[rst]"
+ if {$alog || $araw} {
+ puts $logext [mag]$msg[rst]
+ flush $logext
+ }
+ }
+ #sak::animate::last Ok
+ }
+ }
+
+ puts $logext "Passed [format %6d $pass] of [format %6d $total]"
+ puts $logext "Skipped [format %6d $skip] of [format %6d $total]"
+
+ if {$fail} {
+ puts $logext "Failed [red][format %6d $fail][rst] of [format %6d $total]"
+ } else {
+ puts $logext "Failed [format %6d $fail] of [format %6d $total]"
+ }
+ if {$err} {
+ puts $logext "#Errors [mag][format %6d $err][rst]"
+ } else {
+ puts $logext "#Errors [format %6d $err]"
+ }
+
+ if {$alog} {
+ variable xtimes
+ array set times $xtimes
+
+ struct::matrix M
+ M add columns 6
+ foreach k [lsort -dict [array names times]] {
+ #foreach {shell module testfile} $k break
+ foreach {testnum delta score} $times($k) break
+ M add row [linsert $k end $testnum $delta $score]
+ }
+ M sort rows -decreasing 5
+
+ M insert row 0 {Shell Module Testsuite Tests Seconds uSec/Test}
+ M insert row 1 {===== ====== ========= ===== ======= =========}
+ M add row {===== ====== ========= ===== ======= =========}
+
+ puts $logsum \nTimings...
+ puts $logsum [M format 2string]
+ }
+
+ exit [expr {($err || $fail) ? 1 : 0}]
+ return
+}
+
+# ###
+
+if {$::tcl_platform(platform) == "windows"} {
+
+ proc ::sak::test::run::Command {cv m sh} {
+ variable valgrind
+ upvar 1 $cv config
+
+ # Windows. Construction of the pipe to run a specific
+ # testsuite against a single shell. There is no valgrind to
+ # accomodate, and neither can we expect to have unix commands
+ # like 'echo' and 'cat' available. 'echo' we can go without. A
+ # 'cat' however is needed to merge stdout and stderr of the
+ # testsuite for processing here. We use an emuluation written
+ # in Tcl.
+
+ set catfile cat[pid].tcl
+ fileutil::writeFile $catfile {
+ catch {wm withdraw .}
+ while {![eof stdin]} {puts stdout [gets stdin]}
+ exit
+ }
+
+ set cmd ""
+ lappend cmd $sh
+ lappend cmd [Driver] -modules [list $m]
+ lappend cmd |& $sh $catfile
+ #puts <<$cmd>>
+
+ return $cmd
+ }
+
+ proc ::sak::test::run::Close {pipe} {
+ close $pipe
+ file delete cat[pid].tcl
+ return
+ }
+} else {
+ proc ::sak::test::run::Command {cv m sh} {
+ variable valgrind
+ upvar 1 $cv config
+
+ # Unix. Construction of the pipe to run a specific testsuite
+ # against a single shell. The command is constructed to work
+ # when using valgrind, and works when not using it as well.
+
+ set script {}
+ lappend script [list set argv [list -modules [list $m]]]
+ lappend script {set argc 2}
+ lappend script [list source [Driver]]
+ lappend script exit
+
+ set cmd ""
+ lappend cmd echo [join $script \n]
+ lappend cmd |
+
+ if {$config(valgrind)} {
+ foreach e $valgrind {lappend cmd $e}
+ if {$config(valgrind) > 1} {
+ lappend cmd --num-callers=8
+ lappend cmd --leak-resolution=high
+ lappend cmd -v --leak-check=yes
+ lappend cmd --show-reachable=yes
+ }
+ }
+ lappend cmd $sh
+ #lappend cmd >@ stdout 2>@ stderr
+ lappend cmd |& cat
+ #puts <<$cmd>>
+
+ return $cmd
+ }
+
+ proc ::sak::test::run::Close {pipe} {
+ close $pipe
+ return
+ }
+}
+
+# ###
+
+proc ::sak::test::run::Process {pipe} {
+ variable araw
+ variable alog
+ variable logext
+ while {1} {
+ if {[eof $pipe]} break
+ if {[gets $pipe line] < 0} break
+ if {$alog || $araw} {puts $logext $line ; flush $logext}
+ set rline $line
+ set line [string trim $line]
+ if {[string equal $line ""]} continue
+ Host; Platform
+ Cwd; Shell
+ Tcl
+ Start; End ; StartFile ; EndFile
+ Module; Testsuite
+ NoTestsuite
+ Support;Testing;Other
+ Summary
+ CaptureFailureSync ; # xcollect 1 => 2
+ CaptureFailureCollectBody ; # xcollect 2 => 3 => 5
+ CaptureFailureCollectActual ; # xcollect 3 => 4
+ CaptureFailureCollectExpected ; # xcollect 4 => 0
+ CaptureFailureCollectError ; # xcollect 5 => 0
+ CaptureStackStart
+ CaptureStack
+
+ TestStart
+ TestSkipped
+ TestPassed
+ TestFailed ; # xcollect => 1
+
+ SetupError
+ Aborted
+ AbortCause
+
+ Match||Skip||Sourced
+ # Unknown lines are printed
+ if {!$araw} {puts !$line}
+ }
+ return $pipe
+}
+
+# ###
+
+proc ::sak::test::run::Driver {} {
+ variable base
+ return [file join $base all.tcl]
+}
+
+# ###
+
+proc ::sak::test::run::Host {} {
+ upvar 1 line line ; variable xhost
+ if {![regexp "^@@ Host (.*)$" $line -> xhost]} return
+ # += $xhost
+ set xhost [list Tests Results $xhost]
+ #sak::registry::local set $xhost
+ return -code continue
+}
+
+proc ::sak::test::run::Platform {} {
+ upvar 1 line line ; variable xplatform
+ if {![regexp "^@@ Platform (.*)$" $line -> xplatform]} return
+ # += ($xplatform)
+ variable xhost
+ #sak::registry::local set $xhost Platform $xplatform
+ return -code continue
+}
+
+proc ::sak::test::run::Cwd {} {
+ upvar 1 line line ; variable xcwd
+ if {![regexp "^@@ CWD (.*)$" $line -> xcwd]} return
+ variable xhost
+ set xcwd [linsert $xhost end $xcwd]
+ #sak::registry::local set $xcwd
+ return -code continue
+}
+
+proc ::sak::test::run::Shell {} {
+ upvar 1 line line ; variable xshell
+ if {![regexp "^@@ Shell (.*)$" $line -> xshell]} return
+ # += [file tail $xshell]
+ variable xcwd
+ set xshell [linsert $xcwd end $xshell]
+ #sak::registry::local set $xshell
+ return -code continue
+}
+
+proc ::sak::test::run::Tcl {} {
+ upvar 1 line line ; variable xtcl
+ if {![regexp "^@@ Tcl (.*)$" $line -> xtcl]} return
+ variable xshell
+ variable maxvl
+ += \[$xtcl\][blank [expr {$maxvl - [string length $xtcl]}]]
+ #sak::registry::local set $xshell Tcl $xtcl
+ return -code continue
+}
+
+proc ::sak::test::run::Match||Skip||Sourced {} {
+ upvar 1 line line
+ if {[string match "@@ Skip*" $line]} {return -code continue}
+ if {[string match "@@ Match*" $line]} {return -code continue}
+ if {[string match "Sourced * Test Files." $line]} {return -code continue}
+ if {[string match "Files with failing tests*" $line]} {return -code continue}
+ if {[string match "Number of tests skipped*" $line]} {return -code continue}
+ if {[string match "\[0-9\]*" $line]} {return -code continue}
+ return
+}
+
+proc ::sak::test::run::Start {} {
+ upvar 1 line line
+ if {![regexp "^@@ Start (.*)$" $line -> start]} return
+ variable xshell
+ #sak::registry::local set $xshell Start $start
+ return -code continue
+}
+
+proc ::sak::test::run::End {} {
+ upvar 1 line line
+ if {![regexp "^@@ End (.*)$" $line -> end]} return
+ variable xshell
+ #sak::registry::local set $xshell End $end
+ return -code continue
+}
+
+proc ::sak::test::run::StartFile {} {
+ upvar 1 line line
+ if {![regexp "^@@ StartFile (.*)$" $line -> start]} return
+ variable xstartfile $start
+ variable xtestnum 0
+ #sak::registry::local set $xshell Start $start
+ return -code continue
+}
+
+proc ::sak::test::run::EndFile {} {
+ upvar 1 line line
+ if {![regexp "^@@ EndFile (.*)$" $line -> end]} return
+ variable xfile
+ variable xstartfile
+ variable xtimes
+ variable xtestnum
+
+ set k [lreplace $xfile 0 3]
+ set k [lreplace $k 2 2 [file tail [lindex $k 2]]]
+ set delta [expr {$end - $xstartfile}]
+
+ if {$xtestnum == 0} {
+ set score $delta
+ } else {
+ # average number of microseconds per test.
+ set score [expr {int(($delta/double($xtestnum))*1000000)}]
+ #set score [expr {$delta/double($xtestnum)}]
+ }
+
+ lappend xtimes $k [list $xtestnum $delta $score]
+
+ variable alog
+ if {$alog} {
+ variable logtim
+ puts $logtim [linsert [linsert $k end $xtestnum $delta $score] 0 TIME]
+ }
+
+ #sak::registry::local set $xshell End $end
+ return -code continue
+}
+
+proc ::sak::test::run::Module {} {
+ upvar 1 line line ; variable xmodule
+ if {![regexp "^@@ Module (.*)$" $line -> xmodule]} return
+ variable xshell
+ variable xstatus ok
+ variable maxml
+ += ${xmodule}[blank [expr {$maxml - [string length $xmodule]}]]
+ set xmodule [linsert $xshell end $xmodule]
+ #sak::registry::local set $xmodule
+ return -code continue
+}
+
+proc ::sak::test::run::Testsuite {} {
+ upvar 1 line line ; variable xfile
+ if {![regexp "^@@ Testsuite (.*)$" $line -> xfile]} return
+ = <[file tail $xfile]>
+ variable xmodule
+ set xfile [linsert $xmodule end $xfile]
+ #sak::registry::local set $xfile Aborted 0
+ return -code continue
+}
+
+proc ::sak::test::run::NoTestsuite {} {
+ upvar 1 line line
+ if {![string match "Error: No test files remain after*" $line]} return
+ variable xstatus none
+ = {No tests}
+ return -code continue
+}
+
+proc ::sak::test::run::Support {} {
+ upvar 1 line line
+ if {![regexp "^- (.*)$" $line -> package]} return
+ #= "S $package"
+ foreach {pn pv} $package break
+ variable xfile
+ #sak::registry::local set [linsert $xfile end Support] $pn $pv
+ return -code continue
+}
+
+proc ::sak::test::run::Testing {} {
+ upvar 1 line line
+ if {![regexp "^\\* (.*)$" $line -> package]} return
+ #= "T $package"
+ foreach {pn pv} $package break
+ variable xfile
+ #sak::registry::local set [linsert $xfile end Testing] $pn $pv
+ return -code continue
+}
+
+proc ::sak::test::run::Other {} {
+ upvar 1 line line
+ if {![string match ">*" $line]} return
+ return -code continue
+}
+
+proc ::sak::test::run::Summary {} {
+ upvar 1 line line
+ if {![regexp "^all\\.tcl:(.*)$" $line -> line]} return
+ variable xmodule
+ variable xstatus
+ variable xvstatus
+ foreach {_ t _ p _ s _ f} [split [string trim $line]] break
+ #sak::registry::local set $xmodule Total $t ; set t [format %5d $t]
+ #sak::registry::local set $xmodule Passed $p ; set p [format %5d $p]
+ #sak::registry::local set $xmodule Skipped $s ; set s [format %5d $s]
+ #sak::registry::local set $xmodule Failed $f ; set f [format %5d $f]
+
+ upvar 2 total _total ; incr _total $t
+ upvar 2 pass _pass ; incr _pass $p
+ upvar 2 skip _skip ; incr _skip $s
+ upvar 2 fail _fail ; incr _fail $f
+ upvar 2 err _err
+
+ set t [format %5d $t]
+ set p [format %5d $p]
+ set s [format %5d $s]
+ set f [format %5d $f]
+
+ if {$xstatus == "ok" && $t == 0} {
+ set xstatus none
+ }
+
+ set st $xvstatus($xstatus)
+
+ if {$xstatus == "ok"} {
+ # Quick return for ok suite.
+ =| "~~ $st T $t P $p S $s F $f"
+ return -code continue
+ }
+
+ # Clean out progress display using a non-highlighted
+ # string. Prevents the char couint from being off. This is
+ # followed by construction and display of the highlighted version.
+
+ = " $st T $t P $p S $s F $f"
+ switch -exact -- $xstatus {
+ none {=| "~~ [yel]$st T $t[rst] P $p S $s F $f"}
+ aborted {=| "~~ [whi]$st[rst] T $t P $p S $s F $f"}
+ error {
+ =| "~~ [mag]$st[rst] T $t P $p S $s F $f"
+ incr _err
+ }
+ fail {=| "~~ [red]$st[rst] T $t P $p S $s [red]F $f[rst]"}
+ }
+ return -code continue
+}
+
+proc ::sak::test::run::TestStart {} {
+ upvar 1 line line
+ if {![string match {---- * start} $line]} return
+ set testname [string range $line 5 end-6]
+ = "---- $testname"
+ variable xfile
+ variable xtest [linsert $xfile end $testname]
+ variable xtestnum
+ incr xtestnum
+ return -code continue
+}
+
+proc ::sak::test::run::TestSkipped {} {
+ upvar 1 line line
+ if {![string match {++++ * SKIPPED:*} $line]} return
+ regexp {^[^ ]* (.*)SKIPPED:.*$} $line -> testname
+ set testname [string trim $testname]
+ variable xtest
+ = "SKIP $testname"
+ if {$xtest == {}} {
+ variable xfile
+ set xtest [linsert $xfile end $testname]
+ }
+ #sak::registry::local set $xtest Status Skip
+ set xtest {}
+ return -code continue
+}
+
+proc ::sak::test::run::TestPassed {} {
+ upvar 1 line line
+ if {![string match {++++ * PASSED} $line]} return
+ set testname [string range $line 5 end-7]
+ variable xtest
+ = "PASS $testname"
+ if {$xtest == {}} {
+ variable xfile
+ set xtest [linsert $xfile end $testname]
+ }
+ #sak::registry::local set $xtest Status Pass
+ set xtest {}
+ return -code continue
+}
+
+proc ::sak::test::run::TestFailed {} {
+ upvar 1 line line
+ if {![string match {==== * FAILED} $line]} return
+ set testname [lindex [split [string range $line 5 end-7]] 0]
+ = "FAIL $testname"
+ variable xtest
+ if {$xtest == {}} {
+ variable xfile
+ set xtest [linsert $xfile end $testname]
+ }
+ #sak::registry::local set $xtest Status Fail
+ ## CAPTURE INIT
+ variable xcollect 1
+ variable xbody ""
+ variable xactual ""
+ variable xexpected ""
+ variable xstatus fail
+ # Ignore failed status if we already have it, or an error
+ # status. The latter is more important to show. We do override
+ # status 'aborted'.
+ if {$xstatus == "ok"} {set xstatus fail}
+ if {$xstatus == "aborted"} {set xstatus fail}
+ return -code continue
+}
+
+proc ::sak::test::run::CaptureFailureSync {} {
+ variable xcollect
+ if {$xcollect != 1} return
+ upvar 1 line line
+ if {![string match {==== Contents*} $line]} return
+ set xcollect 2
+ return -code continue
+}
+
+proc ::sak::test::run::CaptureFailureCollectBody {} {
+ variable xcollect
+ if {$xcollect != 2} return
+ upvar 1 rline line
+ variable xbody
+ if {[string match {---- Result was*} $line]} {
+ set xcollect 3
+ return -code continue
+ } elseif {[string match {---- Test generated error*} $line]} {
+ set xcollect 5
+ return -code continue
+ }
+
+ variable xbody
+ append xbody $line \n
+ return -code continue
+}
+
+proc ::sak::test::run::CaptureFailureCollectActual {} {
+ variable xcollect
+ if {$xcollect != 3} return
+ upvar 1 rline line
+ if {![string match {---- Result should*} $line]} {
+ variable xactual
+ append xactual $line \n
+ } else {
+ set xcollect 4
+ }
+ return -code continue
+}
+
+proc ::sak::test::run::CaptureFailureCollectExpected {} {
+ variable xcollect
+ if {$xcollect != 4} return
+ upvar 1 rline line
+ if {![string match {==== *} $line]} {
+ variable xexpected
+ append xexpected $line \n
+ } else {
+ variable alog
+ if {$alog} {
+ variable logfad
+ variable xtest
+ variable xbody
+ variable xactual
+ variable xexpected
+
+ puts $logfad "==== [lrange $xtest end-1 end] FAILED ========="
+ puts $logfad "==== Contents of test case:\n"
+ puts $logfad $xbody
+
+ puts $logfad "---- Result was:"
+ puts $logfad [string range $xactual 0 end-1]
+
+ puts $logfad "---- Result should have been:"
+ puts $logfad [string range $xexpected 0 end-1]
+
+ puts $logfad "==== [lrange $xtest end-1 end] ====\n\n"
+ flush $logfad
+ }
+ set xcollect 0
+ #sak::registry::local set $xtest Body $xbody
+ #sak::registry::local set $xtest Actual $xactual
+ #sak::registry::local set $xtest Expected $xexpected
+ set xtest {}
+ }
+ return -code continue
+}
+
+proc ::sak::test::run::CaptureFailureCollectError {} {
+ variable xcollect
+ if {$xcollect != 5} return
+ upvar 1 rline line
+ variable xbody
+ if {[string match {---- errorCode*} $line]} {
+ set xcollect 4
+ return -code continue
+ }
+
+ variable xactual
+ append xactual $line \n
+ return -code continue
+}
+
+proc ::sak::test::run::Aborted {} {
+ upvar 1 line line
+ if {![string match {Aborting the tests found *} $line]} return
+ variable xfile
+ variable xstatus
+ # Ignore aborted status if we already have it, or some other error
+ # status (like error, or fail). These are more important to show.
+ if {$xstatus == "ok"} {set xstatus aborted}
+ = Aborted
+ #sak::registry::local set $xfile Aborted {}
+ return -code continue
+}
+
+proc ::sak::test::run::AbortCause {} {
+ upvar 1 line line
+ if {
+ ![string match {Requiring *} $line] &&
+ ![string match {Error in *} $line]
+ } return ; # {}
+ variable xfile
+ = $line
+ #sak::registry::local set $xfile Aborted $line
+ return -code continue
+}
+
+proc ::sak::test::run::CaptureStackStart {} {
+ upvar 1 line line
+ if {![string match {@+*} $line]} return
+ variable xstackcollect 1
+ variable xstack {}
+ variable xstatus error
+ = {Error, capturing stacktrace}
+ return -code continue
+}
+
+proc ::sak::test::run::CaptureStack {} {
+ variable xstackcollect
+ if {!$xstackcollect} return
+ upvar 1 line line
+ variable xstack
+ if {![string match {@-*} $line]} {
+ append xstack [string range $line 2 end] \n
+ } else {
+ set xstackcollect 0
+ variable xfile
+ variable alog
+ #sak::registry::local set $xfile Stacktrace $xstack
+ if {$alog} {
+ variable logerd
+ puts $logerd "[lindex $xfile end] StackTrace"
+ puts $logerd "========================================"
+ puts $logerd $xstack
+ puts $logerd "========================================\n\n"
+ flush $logerd
+ }
+ }
+ return -code continue
+}
+
+proc ::sak::test::run::SetupError {} {
+ upvar 1 line line
+ if {![string match {SETUP Error*} $line]} return
+ variable xstatus error
+ = {Setup error}
+ return -code continue
+}
+
+# ###
+
+proc ::sak::test::run::+= {string} {
+ variable araw
+ if {$araw} return
+ variable aprefix
+ append aprefix " " $string
+ sak::animate::next $aprefix
+ return
+}
+
+proc ::sak::test::run::= {string} {
+ variable araw
+ if {$araw} return
+ variable aprefix
+ sak::animate::next "$aprefix $string"
+ return
+}
+
+proc ::sak::test::run::=| {string} {
+ variable araw
+ if {$araw} return
+ variable aprefix
+ sak::animate::last "$aprefix $string"
+ variable alog
+ if {$alog} {
+ variable logsum
+ variable logfai
+ variable logski
+ variable lognon
+ variable xstatus
+ puts $logsum "$aprefix $string" ; flush $logsum
+ switch -exact -- $xstatus {
+ error -
+ fail {puts $logfai "$aprefix $string" ; flush $logfai}
+ none {puts $lognon "$aprefix $string" ; flush $lognon}
+ aborted {puts $logski "$aprefix $string" ; flush $logski}
+ }
+ }
+ set aprefix ""
+ return
+}
+
+# ###
+
+namespace eval ::sak::test::run {
+ variable base [file join $::distribution support devel]
+ variable valgrind [auto_execok valgrind]
+
+ # State of test processing.
+
+ variable xstackcollect 0
+ variable xstack {}
+ variable xcollect 0
+ variable xbody {}
+ variable xactual {}
+ variable xexpected {}
+ variable xhost {}
+ variable xplatform {}
+ variable xcwd {}
+ variable xshell {}
+ variable xmodule {}
+ variable xfile {}
+ variable xtest {}
+ variable xstartfile {}
+ variable xtimes {}
+
+ variable xstatus ok
+
+ # Animation prefix of test processing, and flag controlling the
+ # nature of logging (raw vs animation).
+
+ variable aprefix {}
+ variable araw 0
+
+ # Max length of module names and patchlevel information.
+
+ variable maxml 0
+ variable maxvl 0
+
+ # Map from internal stati to the displayed human readable
+ # strings. This includes the trailing whitespace needed for
+ # vertical alignment.
+
+ variable xvstatus
+ array set xvstatus {
+ ok { }
+ none {None }
+ aborted {Skip }
+ error {ERR }
+ fail {FAILS}
+ }
+}
+
+##
+# ###
+
+package provide sak::test::run 1.0
+
+if 0 {
+ # Bad valgrind, ok no valgrind
+ if {$config(valgrind)} {
+ foreach e $valgrind {lappend cmd $e}
+ lappend cmd --num-callers=8
+ lappend cmd --leak-resolution=high
+ lappend cmd -v --leak-check=yes
+ lappend cmd --show-reachable=yes
+ }
+ lappend cmd $sh
+ lappend cmd [Driver] -modules $modules
+}
diff --git a/tcllib/support/devel/sak/test/shell.tcl b/tcllib/support/devel/sak/test/shell.tcl
new file mode 100644
index 0000000..f0f0e5d
--- /dev/null
+++ b/tcllib/support/devel/sak/test/shell.tcl
@@ -0,0 +1,94 @@
+# -*- tcl -*-
+# (C) 2006 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+##
+# ###
+
+getpackage fileutil fileutil/fileutil.tcl
+
+package require sak::test
+package require sak::registry
+namespace eval ::sak::test::shell {}
+
+# ###
+
+proc ::sak::test::shell {argv} {
+ if {![llength $argv]} {Usage Sub command missing}
+
+ set cmd [lindex $argv 0]
+ set argv [lrange $argv 1 end]
+
+ switch -exact -- $cmd {
+ add {
+ sak::test::shell::add $argv
+ }
+ delete {
+ sak::test::shell::delete $argv
+ }
+ default {
+ sak::test::usage Unknown command "\"shell $cmd\""
+ }
+ }
+ return
+}
+
+proc ::sak::test::shell::list {} {
+ return [sak::registry::local \
+ get||default Tests Shells {}]
+}
+
+proc ::sak::test::shell::add {paths} {
+ foreach p $paths {
+ if {![fileutil::test $p efrx msg "Shell"]} {
+ sak::test::usage $msg
+ }
+ }
+
+ set shells [sak::registry::local \
+ get||default Tests Shells {}]
+ array set known {}
+ foreach sh $shells {set known($sh) .}
+
+ set changed 0
+ foreach p $paths {
+ if {[info exists known($p)]} continue
+ lappend shells $p
+ set changed 1
+ }
+
+ if {$changed} {
+ sak::registry::local \
+ set Tests Shells [lsort -dict $shells]
+ }
+ return
+}
+
+proc ::sak::test::shell::delete {paths} {
+ set shells [sak::registry::local \
+ get||default Tests Shells {}]
+ array set known {}
+ foreach sh $shells {set known($sh) .}
+
+ set changed 0
+ foreach p $paths {
+ if {![info exists known($p)]} continue
+ unset known($p)
+ set changed 1
+ }
+
+ if {$changed} {
+ sak::registry::local \
+ set Tests Shells [lsort -dict \
+ [array names known]]
+ }
+ return
+}
+
+# ###
+
+namespace eval ::sak::test::shell {
+}
+
+##
+# ###
+
+package provide sak::test::shell 1.0
diff --git a/tcllib/support/devel/sak/test/shells.tcl b/tcllib/support/devel/sak/test/shells.tcl
new file mode 100644
index 0000000..09a1bc6
--- /dev/null
+++ b/tcllib/support/devel/sak/test/shells.tcl
@@ -0,0 +1,24 @@
+# -*- tcl -*-
+# (C) 2006 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+##
+# ###
+
+package require sak::test
+package require sak::test::shell
+namespace eval ::sak::test::shells {}
+
+# ###
+
+proc ::sak::test::shells {argv} {
+ if {[llength $argv]} {
+ sak::test::usage Wrong # args
+ }
+
+ puts stdout [join [sak::test::shell::list] \n]
+ return
+}
+
+##
+# ###
+
+package provide sak::test::shells 1.0
diff --git a/tcllib/support/devel/sak/test/test.tcl b/tcllib/support/devel/sak/test/test.tcl
new file mode 100644
index 0000000..c31d974
--- /dev/null
+++ b/tcllib/support/devel/sak/test/test.tcl
@@ -0,0 +1,19 @@
+# -*- tcl -*-
+# (C) 2006 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+##
+# ###
+
+namespace eval ::sak::test {}
+
+# ###
+
+proc ::sak::test::usage {args} {
+ package require sak::help
+ puts stdout [join $args { }]\n[sak::help::on test]
+ exit 1
+}
+
+##
+# ###
+
+package provide sak::test 1.0
diff --git a/tcllib/support/devel/sak/test/topic.txt b/tcllib/support/devel/sak/test/topic.txt
new file mode 100644
index 0000000..31d0be5
--- /dev/null
+++ b/tcllib/support/devel/sak/test/topic.txt
@@ -0,0 +1 @@
+test Execute testsuites
diff --git a/tcllib/support/devel/sak/util/anim.tcl b/tcllib/support/devel/sak/util/anim.tcl
new file mode 100644
index 0000000..302ff04
--- /dev/null
+++ b/tcllib/support/devel/sak/util/anim.tcl
@@ -0,0 +1,64 @@
+# -*- tcl -*-
+# (C) 2006-2013 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+##
+# ###
+
+namespace eval ::sak::animate {
+ # EL (Erase Line)
+ # Sequence: ESC [ n K
+ # ** Effect: if n is 0 or missing, clear from cursor to end of line
+ # Effect: if n is 1, clear from beginning of line to cursor
+ # Effect: if n is 2, clear entire line
+
+ variable eeol \033\[K
+}
+
+# ###
+
+proc ::sak::animate::init {} {
+ variable prefix
+ variable n 0
+ variable max [llength $prefix]
+}
+
+proc ::sak::animate::next {string} {
+ variable prefix
+ variable n
+ variable max
+ variable eeol
+
+ puts -nonewline stdout \r\[[lindex $prefix $n]\]\ $string$eeol
+ flush stdout
+
+ incr n ; if {$n >= $max} {set n 0}
+ return
+}
+
+proc ::sak::animate::last {string} {
+ variable clear
+
+ puts stdout \r\[$clear\]\ $string
+ flush stdout
+ return
+}
+
+# ###
+
+namespace eval ::sak::animate {
+ namespace export init next last
+
+ variable prefix {
+ {* } {* } {* } {* } {* }
+ { * } { * } { * } { * } { * }
+ { * } { * } { * } { * } { * }
+ { *} { *} { *} { *} { *}
+ { * } { * } { * } { * } { * }
+ { * } { * } { * } { * } { * }
+ }
+ variable clear { }
+}
+
+##
+# ###
+
+package provide sak::animate 1.0
diff --git a/tcllib/support/devel/sak/util/color.tcl b/tcllib/support/devel/sak/util/color.tcl
new file mode 100644
index 0000000..76a475e
--- /dev/null
+++ b/tcllib/support/devel/sak/util/color.tcl
@@ -0,0 +1,54 @@
+# -*- tcl -*-
+# (C) 2008 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+##
+# ###
+
+namespace eval ::sak::color {}
+
+# ###
+
+if {$::tcl_platform(platform) == "windows"} {
+ # No ansi colorization on windows
+ namespace eval ::sak::color {
+ variable n
+ foreach n {cya yel whi mag red green rst} {
+ proc $n {} {return ""}
+ namespace export $n
+
+ proc =$n {s} {return $s}
+ namespace export =$n
+ }
+ unset n
+ }
+} else {
+ getpackage term::ansi::code::attr term/ansi/code/attr.tcl
+ getpackage term::ansi::code::ctrl term/ansi/code/ctrl.tcl
+
+ ::term::ansi::code::ctrl::import ::sak::color sda_bg* sda_reset
+
+ namespace eval ::sak::color {
+ variable s
+ variable n
+ foreach {s n} {
+ sda_bgcyan cya
+ sda_bgyellow yel
+ sda_bgwhite whi
+ sda_bgmagenta mag
+ sda_bgred red
+ sda_bggreen green
+ sda_reset rst
+ } {
+ rename $s $n
+ namespace export $n
+
+ proc =$n {s} "return \[$n\]\$s\[rst\]"
+ namespace export =$n
+ }
+ unset s n
+ }
+}
+
+##
+# ###
+
+package provide sak::color 1.0
diff --git a/tcllib/support/devel/sak/util/feedback.tcl b/tcllib/support/devel/sak/util/feedback.tcl
new file mode 100644
index 0000000..557ea50
--- /dev/null
+++ b/tcllib/support/devel/sak/util/feedback.tcl
@@ -0,0 +1,182 @@
+# -*- tcl -*-
+# (C) 2008 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+##
+# ###
+
+# Feedback modes
+#
+# [short] Animated short feedback on stdout, no logging
+# [log] Animated short feedback on stdout, logging to multiple files.
+# [verbose] Logging to stdout
+#
+# Output commands for various destinations:
+#
+# <v> Verbose Log
+# <s> Short Log
+#
+# Handling of the destinations per mode
+#
+# <s> <v>
+# [short] stdout, /dev/null
+# [log] stdout, file
+# [verbose] /dev/null, stdout
+
+# Log files for different things are opened on demand, i.e. on the
+# first write to them. We can configure (per possible log) a string to
+# be written before the first write. Reconfiguring that string for a
+# log clears the flag for that log and causes the string to be
+# rewritten on the next write.
+
+package require sak::animate
+
+namespace eval ::sak::feedback {
+ namespace import ::sak::animate::next ; rename next aNext
+ namespace import ::sak::animate::last ; rename last aLast
+}
+
+# ###
+
+proc ::sak::feedback::init {mode stem} {
+ variable prefix ""
+ variable short [expr {$mode ne "verbose"}]
+ variable verbose [expr {$mode ne "short"}]
+ variable tofile [expr {$mode eq "log"}]
+ variable lstem $stem
+ variable dst ""
+ variable lfirst
+ unset lfirst
+ array set lfirst {}
+ # Note: lchan is _not_ reset. We keep channels, allowing us to
+ # merge output from different modules, if they are run as
+ # one unit (Example: validate and its various parts, which
+ # can be run separately, and together).
+ return
+}
+
+proc ::sak::feedback::first {dst string} {
+ variable lfirst
+ set lfirst($dst) $string
+ return
+}
+
+###
+
+proc ::sak::feedback::summary {text} {
+ #=| $text
+ #log $text
+
+ variable short
+ variable verbose
+ if {$short} { puts $text }
+ if {$verbose} { puts [_channel log] $text }
+ return
+}
+
+
+proc ::sak::feedback::log {text {ext log}} {
+ variable verbose
+ if {!$verbose} return
+ set c [_channel $ext]
+ puts $c $text
+ flush $c
+ return
+}
+
+###
+
+proc ::sak::feedback::! {} {
+ variable short
+ if {!$short} return
+ variable prefix ""
+ sak::animate::init
+ return
+}
+
+proc ::sak::feedback::+= {string} {
+ variable short
+ if {!$short} return
+ variable prefix
+ append prefix " " $string
+ aNext $prefix
+ return
+}
+
+proc ::sak::feedback::= {string} {
+ variable short
+ if {!$short} return
+ variable prefix
+ aNext "$prefix $string"
+ return
+}
+
+proc ::sak::feedback::=| {string} {
+ variable short
+ if {!$short} return
+
+ variable prefix
+ aLast "$prefix $string"
+
+ variable verbose
+ if {$verbose} {
+ variable dst
+ if {[string length $dst]} {
+ # inlined 'log'
+ set c [_channel $dst]
+ puts $c "$prefix $string"
+ flush $c
+ set dst ""
+ }
+ }
+
+ set prefix ""
+ return
+}
+
+proc ::sak::feedback::>> {string} {
+ variable dst $string
+ return
+}
+
+# ###
+
+proc ::sak::feedback::_channel {dst} {
+ variable tofile
+ if {!$tofile} { return stdout }
+ variable lchan
+ if {[info exists lchan($dst)]} {
+ set c $lchan($dst)
+ } else {
+ variable lstem
+ set c [open ${lstem}.$dst w]
+ set lchan($dst) $c
+ }
+ variable lfirst
+ if {[info exists lfirst($dst)]} {
+ puts $c $lfirst($dst)
+ unset lfirst($dst)
+ }
+ return $c
+}
+
+# ###
+
+namespace eval ::sak::feedback {
+ namespace export >> ! += = =| init log summary
+
+ variable dst ""
+ variable prefix ""
+ variable short ""
+ variable verbose ""
+ variable tofile ""
+ variable lstem ""
+ variable lchan
+ array set lchan {}
+
+ variable lfirst
+ array set lfirst {}
+}
+
+##
+# ###
+
+package provide sak::feedback 1.0
diff --git a/tcllib/support/devel/sak/util/pkgIndex.tcl b/tcllib/support/devel/sak/util/pkgIndex.tcl
new file mode 100644
index 0000000..0042019
--- /dev/null
+++ b/tcllib/support/devel/sak/util/pkgIndex.tcl
@@ -0,0 +1,6 @@
+if {![package vsatisfies [package provide Tcl] 8.2]} return
+package ifneeded sak::util 1.0 [list source [file join $dir util.tcl]]
+package ifneeded sak::registry 1.0 [list source [file join $dir registry.tcl]]
+package ifneeded sak::animate 1.0 [list source [file join $dir anim.tcl]]
+package ifneeded sak::color 1.0 [list source [file join $dir color.tcl]]
+package ifneeded sak::feedback 1.0 [list source [file join $dir feedback.tcl]]
diff --git a/tcllib/support/devel/sak/util/registry.tcl b/tcllib/support/devel/sak/util/registry.tcl
new file mode 100644
index 0000000..933fcad
--- /dev/null
+++ b/tcllib/support/devel/sak/util/registry.tcl
@@ -0,0 +1,59 @@
+# -*- tcl -*-
+# (C) 2006 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+##
+# ###
+
+getpackage pregistry registry/registry.tcl
+
+namespace eval ::sak::registry {}
+
+proc ::sak::registry::local {args} {
+ return [uplevel 1 [linsert $args 0 [Setup]]]
+ # return <$_local {expand}$args>
+}
+
+proc ::sak::registry::Setup {} {
+ variable _local
+ variable state
+ variable statedir
+
+ if {![file exists $statedir]} {
+ file mkdir $statedir
+ }
+
+ if {$_local == {}} {
+ set _local [pregistry %AUTO% \
+ -tie [list file $state]]
+ }
+
+ return $_local
+}
+
+proc ::sak::registry::Refresh {} {
+ variable _local
+ $_local destroy
+ set _local {}
+ Setup
+ return
+}
+
+namespace eval ::sak::registry {
+ variable _here [file dirname [info script]]
+
+ variable statedir [file join ~ .Tcllib]
+ variable state [file join $statedir Registry]
+ variable _local {}
+}
+
+##
+# ###
+
+package provide sak::registry 1.0
+
+# ###
+## Data structures
+#
+## Core is a tree (struct::tree), keys are lists, mapping to a node,
+## starting from the root. Attributes are node attributes. A prefix is
+## used to distinguish them from the attributes used for internal
+## purposes.
diff --git a/tcllib/support/devel/sak/util/util.tcl b/tcllib/support/devel/sak/util/util.tcl
new file mode 100644
index 0000000..cca192e
--- /dev/null
+++ b/tcllib/support/devel/sak/util/util.tcl
@@ -0,0 +1,72 @@
+# -*- tcl -*-
+# (C) 2006 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+##
+# ###
+
+namespace eval ::sak::util {}
+
+# ###
+
+proc ::sak::util::path2modules {paths} {
+ set modules {}
+ foreach p $paths {
+ if {[file exists $p]} {set p [file tail $p]}
+ lappend modules $p
+ }
+ return $modules
+}
+
+proc ::sak::util::modules2path {modules} {
+ global distribution
+ set modbase [file join $distribution modules]
+
+ set paths {}
+ foreach m $modules {
+ lappend paths [file join $modbase $m]
+ }
+ return $paths
+}
+
+proc ::sak::util::module2path {module} {
+ global distribution
+ set modbase [file join $distribution modules]
+ return [file join $modbase $module]
+}
+
+proc ::sak::util::checkModules {modvar} {
+ upvar 1 $modvar modules
+
+ if {![llength $modules]} {
+ # Default to all if none are specified. This information does
+ # not require validation.
+
+ set modules [modules]
+ return 1
+ }
+
+ set modules [path2modules $modules]
+
+ set fail 0
+ foreach m $modules {
+ if {[modules_mod $m]} {
+ lappend results $m
+ continue
+ }
+
+ puts " Unknown module: $m"
+ set fail 1
+ }
+
+ if {$fail} {
+ puts " Stop."
+ return 0
+ }
+
+ set modules $results
+ return 1
+}
+
+##
+# ###
+
+package provide sak::util 1.0
diff --git a/tcllib/support/devel/sak/validate/cmd.tcl b/tcllib/support/devel/sak/validate/cmd.tcl
new file mode 100644
index 0000000..ca2ddc9
--- /dev/null
+++ b/tcllib/support/devel/sak/validate/cmd.tcl
@@ -0,0 +1,70 @@
+# -*- tcl -*-
+# Implementation of 'validate'.
+
+# Available variables
+# * argv - Cmdline arguments
+# * base - Location of sak.tcl = Top directory of Tcllib distribution
+# * cbase - Location of all files relevant to this command.
+# * sbase - Location of all files supporting the SAK.
+
+package require sak::util
+package require sak::validate
+
+set raw 0
+set log 0
+set stem {}
+set tclv {}
+
+if {[llength $argv]} {
+ # First argument may be a command.
+ set cmd [lindex $argv 0]
+ if {![catch {
+ package require sak::validate::$cmd
+ } msg]} {
+ set argv [lrange $argv 1 end]
+ } else {
+ set cmd all
+ }
+
+ # Now process any possible options (-v, -l, --log).
+
+ while {[string match -* [set opt [lindex $argv 0]]]} {
+ switch -exact -- $opt {
+ -v {
+ set raw 1
+ set argv [lrange $argv 1 end]
+ }
+ -l - --log {
+ set log 1
+ set stem [lindex $argv 1]
+ set argv [lrange $argv 2 end]
+ }
+ -t - --tcl {
+ set tclv [lindex $argv 1]
+ set argv [lrange $argv 2 end]
+ }
+ default {
+ sak::validate::usage Unknown option "\"$opt\""
+ }
+ }
+ }
+} else {
+ set cmd all
+}
+
+# At last now handle all remaining arguments as module specifications.
+if {![sak::util::checkModules argv]} return
+
+if {$log} { set raw 0 }
+
+array set mode {
+ 00 short
+ 01 log
+ 10 verbose
+ 11 _impossible_
+}
+
+sak::validate::$cmd $argv $mode($raw$log) $stem $tclv
+
+##
+# ###
diff --git a/tcllib/support/devel/sak/validate/help.txt b/tcllib/support/devel/sak/validate/help.txt
new file mode 100644
index 0000000..6ded891
--- /dev/null
+++ b/tcllib/support/devel/sak/validate/help.txt
@@ -0,0 +1,53 @@
+
+ validate -- Validate modules and packages
+
+ sak validate ?-v? ?-l|--log STEM? ?MODULE ...?
+ sak validate manpages ?-v? ?-l|--log STEM? ?MODULE ...?
+ sak validate versions ?-v? ?-l|--log STEM? ?MODULE ...?
+ sak validate testsuites ?-v? ?-l|--log STEM? ?MODULE ...?
+ sak validate syntax ?-v? ?-l|--log STEM? ?MODULE ...?
+
+ Validate one or more aspects of the specified modules and the
+ packages they contain. If no module is specified all modules
+ are validated. If no aspect was specified all possible aspects
+ are validated.
+
+ By default the output from a validation run is animated
+ feedback of the progress made, plus summarized color-coded
+ results. If -v is specified the actual log is returned
+ instead.
+
+ If a log STEM is specified the extended log normally activated
+ via -v is written to STEM.log while the user is provided with
+ the regular feedback during execution. Usage of the -l switch
+ overides -v.
+
+ The system is currently able to validate the following aspects
+ of the module and package sources:
+
+ manpages
+ Reports modules/packages without documentation, and
+ modules/packages which have syntactically flawed
+ documentation. The second part is identical to
+
+ sak doc validate
+
+ versions
+ Reports modules and packages with mismatches between
+ 'package ifneeded' and 'package provided' commands.
+
+ testsuites
+ Report modules and packages without testsuites.
+
+ Note that this command is _not_ actually executing the
+ testsuites. That is done via
+
+ sak test run ...
+
+ See its documentation (sak help test) for more
+ information.
+
+ syntax
+ Scan modules and packages using various tools
+ statically checking Tcl syntax, and report their
+ outputs.
diff --git a/tcllib/support/devel/sak/validate/manpages.tcl b/tcllib/support/devel/sak/validate/manpages.tcl
new file mode 100644
index 0000000..fbb0e86
--- /dev/null
+++ b/tcllib/support/devel/sak/validate/manpages.tcl
@@ -0,0 +1,464 @@
+# -*- tcl -*-
+# (C) 2008 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+##
+# ###
+
+package require sak::animate
+package require sak::feedback
+package require sak::color
+
+getpackage textutil::repeat textutil/repeat.tcl
+getpackage doctools doctools/doctools.tcl
+
+namespace eval ::sak::validate::manpages {
+ namespace import ::textutil::repeat::blank
+ namespace import ::sak::color::*
+ namespace import ::sak::feedback::!
+ namespace import ::sak::feedback::>>
+ namespace import ::sak::feedback::+=
+ namespace import ::sak::feedback::=
+ namespace import ::sak::feedback::=|
+ namespace import ::sak::feedback::log
+ namespace import ::sak::feedback::summary
+ rename summary sum
+}
+
+# ###
+
+proc ::sak::validate::manpages {modules mode stem tclv} {
+ manpages::run $modules $mode $stem $tclv
+ manpages::summary
+ return
+}
+
+proc ::sak::validate::manpages::run {modules mode stem tclv} {
+ sak::feedback::init $mode $stem
+ sak::feedback::first log "\[ Documentation \] ==============================================="
+ sak::feedback::first unc "\[ Documentation \] ==============================================="
+ sak::feedback::first fail "\[ Documentation \] ==============================================="
+ sak::feedback::first warn "\[ Documentation \] ==============================================="
+ sak::feedback::first miss "\[ Documentation \] ==============================================="
+ sak::feedback::first none "\[ Documentation \] ==============================================="
+
+ # Preprocessing of module names to allow better formatting of the
+ # progress output, i.e. vertically aligned columns
+
+ # Per module we can distinguish the following levels of
+ # documentation completeness and validity
+
+ # Completeness:
+ # - No package has documentation
+ # - Some, but not all packages have documentation
+ # - All packages have documentation.
+ #
+ # Validity, restricted to the set packages which have documentation:
+ # - Documentation has errors and warnings
+ # - Documentation has errors, but no warnings.
+ # - Documentation has no errors, but warnings.
+ # - Documentation has neither errors nor warnings.
+
+ # Progress report per module: Packages it is working on.
+ # Summary at module level:
+ # - Number of packages, number of packages with documentation,
+ # - Number of errors, number of warnings.
+
+ # Full log:
+ # - Lists packages without documentation.
+ # - Lists packages with errors/warnings.
+ # - Lists the exact errors/warnings per package, and location.
+
+ # Global preparation: Pull information about all packages and the
+ # modules they belong to.
+
+ ::doctools::new dt -format desc -deprecated 1
+
+ Count $modules
+ MapPackages
+
+ InitCounters
+ foreach m $modules {
+ # Skip tcllibc shared library, not a module.
+ if {[string equal $m tcllibc]} continue
+
+ InitModuleCounters
+ !
+ log "@@ Module $m"
+ Head $m
+
+ # Per module: Find all doctools manpages inside and process
+ # them. We get errors, warnings, and determine the package(s)
+ # they may belong to.
+
+ # Per package: Have they doc files claiming them? After that,
+ # are doc files left over (i.e. without a package)?
+
+ ProcessPages $m
+ ProcessPackages $m
+ ProcessUnclaimed
+ ModuleSummary
+ }
+
+ dt destroy
+ return
+}
+
+proc ::sak::validate::manpages::summary {} {
+ Summary
+ return
+}
+
+# ###
+
+proc ::sak::validate::manpages::ProcessPages {m} {
+ !claims
+ dt configure -module $m
+ foreach f [glob -nocomplain [file join [At $m] *.man]] {
+ ProcessManpage $f
+ }
+ return
+}
+
+proc ::sak::validate::manpages::ProcessManpage {f} {
+ =file $f
+ dt configure -file $f
+
+ if {[catch {
+ dt format [get_input $f]
+ } msg]} {
+ +e $msg
+ } else {
+ foreach {pkg _ _} $msg { +claim $pkg }
+ }
+
+ set warnings [dt warnings]
+ if {![llength $warnings]} return
+
+ foreach msg $warnings { +w $msg }
+ return
+}
+
+proc ::sak::validate::manpages::ProcessPackages {m} {
+ !used
+ if {![HasPackages $m]} return
+
+ foreach p [ThePackages $m] {
+ +pkg $p
+ if {[claimants $p]} {
+ +doc $p
+ } else {
+ nodoc $p
+ }
+ }
+ return
+}
+
+proc ::sak::validate::manpages::ProcessUnclaimed {} {
+ variable claims
+ if {![array size claims]} return
+ foreach p [lsort -dict [array names claims]] {
+ foreach fx $claims($p) { +u $fx }
+ }
+ return
+}
+
+###
+
+proc ::sak::validate::manpages::=file {f} {
+ variable current [file tail $f]
+ = "$current ..."
+ return
+}
+
+###
+
+proc ::sak::validate::manpages::!claims {} {
+ variable claims
+ array unset claims *
+ return
+}
+
+proc ::sak::validate::manpages::+claim {pkg} {
+ variable current
+ variable claims
+ lappend claims($pkg) $current
+ return
+}
+
+proc ::sak::validate::manpages::claimants {pkg} {
+ variable claims
+ expr { [info exists claims($pkg)] && [llength $claims($pkg)] }
+}
+
+
+###
+
+proc ::sak::validate::manpages::!used {} {
+ variable used
+ array unset used *
+ return
+}
+
+proc ::sak::validate::manpages::+use {pkg} {
+ variable used
+ variable claims
+ foreach fx $claims($pkg) { set used($fx) . }
+ unset claims($pkg)
+ return
+}
+
+###
+
+proc ::sak::validate::manpages::MapPackages {} {
+ variable pkg
+ array unset pkg *
+
+ !
+ += Package
+ foreach {pname pdata} [ipackages] {
+ = "$pname ..."
+ foreach {pver pmodule} $pdata break
+ lappend pkg($pmodule) $pname
+ }
+ !
+ =| {Packages mapped ...}
+ return
+}
+
+proc ::sak::validate::manpages::HasPackages {m} {
+ variable pkg
+ expr { [info exists pkg($m)] && [llength $pkg($m)] }
+}
+
+proc ::sak::validate::manpages::ThePackages {m} {
+ variable pkg
+ return [lsort -dict $pkg($m)]
+}
+
+###
+
+proc ::sak::validate::manpages::+pkg {pkg} {
+ variable mtotal ; incr mtotal
+ variable total ; incr total
+ return
+}
+
+proc ::sak::validate::manpages::+doc {pkg} {
+ variable mhavedoc ; incr mhavedoc
+ variable havedoc ; incr havedoc
+ = "$pkg Ok"
+ +use $pkg
+ return
+}
+
+proc ::sak::validate::manpages::nodoc {pkg} {
+ = "$pkg Bad"
+ log "@@ WARN No documentation: $pkg"
+ return
+}
+
+###
+
+proc ::sak::validate::manpages::+w {msg} {
+ variable mwarnings ; incr mwarnings
+ variable warnings ; incr warnings
+ variable current
+ foreach {a b c} [split $msg \n] break
+ log "@@ WARN $current: [Trim $a] [Trim $b] [Trim $c]"
+ return
+}
+
+proc ::sak::validate::manpages::+e {msg} {
+ variable merrors ; incr merrors
+ variable errors ; incr errors
+ variable current
+ log "@@ ERROR $current $msg"
+ return
+}
+
+proc ::sak::validate::manpages::+u {f} {
+ variable used
+ if {[info exists used($f)]} return
+ variable munclaimed ; incr munclaimed
+ variable unclaimed ; incr unclaimed
+ set used($f) .
+ log "@@ WARN Unclaimed documentation file: $f"
+ return
+}
+
+###
+
+proc ::sak::validate::manpages::Count {modules} {
+ variable maxml 0
+ !
+ foreach m [linsert $modules 0 Module] {
+ = "M $m"
+ set l [string length $m]
+ if {$l > $maxml} {set maxml $l}
+ }
+ =| "Validate documentation (existence, errors, warnings) ..."
+ return
+}
+
+proc ::sak::validate::manpages::Head {m} {
+ variable maxml
+ += ${m}[blank [expr {$maxml - [string length $m]}]]
+ return
+}
+
+###
+
+proc ::sak::validate::manpages::InitModuleCounters {} {
+ variable mtotal 0
+ variable mhavedoc 0
+ variable munclaimed 0
+ variable merrors 0
+ variable mwarnings 0
+ return
+}
+
+proc ::sak::validate::manpages::ModuleSummary {} {
+ variable mtotal
+ variable mhavedoc
+ variable munclaimed
+ variable merrors
+ variable mwarnings
+
+ set complete [F $mhavedoc]/[F $mtotal]
+ set not "! [F [expr {$mtotal - $mhavedoc}]]"
+ set err "E [F $merrors]"
+ set warn "W [F $mwarnings]"
+ set unc "U [F $munclaimed]"
+
+ if {$munclaimed} {
+ set unc [=cya $unc]
+ >> unc
+ }
+ if {!$mhavedoc && $mtotal} {
+ set complete [=red $complete]
+ set not [=red $not]
+ >> none
+ } elseif {$mhavedoc < $mtotal} {
+ set complete [=yel $complete]
+ set not [=yel $not]
+ >> miss
+ }
+ if {$merrors} {
+ set err [=red $err]
+ set warn [=yel $warn]
+ >> fail
+ } elseif {$mwarnings} {
+ set warn [=yel $warn]
+ >> warn
+ }
+
+ =| "~~ $complete $not $unc $err $warn"
+ return
+}
+
+###
+
+proc ::sak::validate::manpages::InitCounters {} {
+ variable total 0
+ variable havedoc 0
+ variable unclaimed 0
+ variable errors 0
+ variable warnings 0
+ return
+}
+
+proc ::sak::validate::manpages::Summary {} {
+ variable total
+ variable havedoc
+ variable unclaimed
+ variable errors
+ variable warnings
+
+ set tot [F $total]
+ set doc [F $havedoc]
+ set udc [F [expr {$total - $havedoc}]]
+
+ set unc [F $unclaimed]
+ set per [format %6.2f [expr {$havedoc*100./$total}]]
+ set uper [format %6.2f [expr {($total - $havedoc)*100./$total}]]
+ set err [F $errors]
+ set wrn [F $warnings]
+
+ if {$errors} { set err [=red $err] }
+ if {$warnings} { set wrn [=yel $wrn] }
+ if {$unclaimed} { set unc [=cya $unc] }
+
+ if {!$havedoc && $total} {
+ set doc [=red $doc]
+ set udc [=red $udc]
+ } elseif {$havedoc < $total} {
+ set doc [=yel $doc]
+ set udc [=yel $udc]
+ }
+
+ sum ""
+ sum "Documentation statistics"
+ sum "#Packages: $tot"
+ sum "#Documented: $doc (${per}%)"
+ sum "#Undocumented: $udc (${uper}%)"
+ sum "#Unclaimed: $unc"
+ sum "#Errors: $err"
+ sum "#Warnings: $wrn"
+ return
+}
+
+###
+
+proc ::sak::validate::manpages::F {n} { format %6d $n }
+
+proc ::sak::validate::manpages::Trim {text} {
+ regsub {^[^:]*:} $text {} text
+ return [string trim $text]
+}
+
+###
+
+proc ::sak::validate::manpages::At {m} {
+ global distribution
+ return [file join $distribution modules $m]
+}
+
+# ###
+
+namespace eval ::sak::validate::manpages {
+ # Max length of module names and patchlevel information.
+ variable maxml 0
+
+ # Counters across all modules
+ variable total 0 ; # Number of packages overall.
+ variable havedoc 0 ; # Number of packages with documentation.
+ variable unclaimed 0 ; # Number of manpages not claimed by a specific package.
+ variable errors 0 ; # Number of errors found in all documentation.
+ variable warnings 0 ; # Number of warnings found in all documentation.
+
+ # Same counters, per module.
+ variable mtotal 0
+ variable mhavedoc 0
+ variable munclaimed 0
+ variable merrors 0
+ variable mwarnings 0
+
+ # Name of currently processed manpage
+ variable current ""
+
+ # Map from packages to files claiming to document them.
+ variable claims
+ array set claims {}
+
+ # Set of files taken by packages, as array
+ variable used
+ array set used {}
+
+ # Map from modules to packages contained in them
+ variable pkg
+ array set pkg {}
+}
+
+##
+# ###
+
+package provide sak::validate::manpages 1.0
diff --git a/tcllib/support/devel/sak/validate/pkgIndex.tcl b/tcllib/support/devel/sak/validate/pkgIndex.tcl
new file mode 100644
index 0000000..d6ad128
--- /dev/null
+++ b/tcllib/support/devel/sak/validate/pkgIndex.tcl
@@ -0,0 +1,6 @@
+if {![package vsatisfies [package provide Tcl] 8.2]} return
+package ifneeded sak::validate 1.0 [list source [file join $dir validate.tcl]]
+package ifneeded sak::validate::manpages 1.0 [list source [file join $dir manpages.tcl]]
+package ifneeded sak::validate::versions 1.0 [list source [file join $dir versions.tcl]]
+package ifneeded sak::validate::testsuites 1.0 [list source [file join $dir testsuites.tcl]]
+package ifneeded sak::validate::syntax 1.0 [list source [file join $dir syntax.tcl]]
diff --git a/tcllib/support/devel/sak/validate/syntax.tcl b/tcllib/support/devel/sak/validate/syntax.tcl
new file mode 100644
index 0000000..24e06d2
--- /dev/null
+++ b/tcllib/support/devel/sak/validate/syntax.tcl
@@ -0,0 +1,668 @@
+# -*- tcl -*-
+# (C) 2008 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+##
+# ###
+
+package require sak::animate
+package require sak::feedback
+package require sak::color
+
+getpackage textutil::repeat textutil/repeat.tcl
+getpackage doctools doctools/doctools.tcl
+
+namespace eval ::sak::validate::syntax {
+ namespace import ::textutil::repeat::blank
+ namespace import ::sak::color::*
+ namespace import ::sak::feedback::!
+ namespace import ::sak::feedback::>>
+ namespace import ::sak::feedback::+=
+ namespace import ::sak::feedback::=
+ namespace import ::sak::feedback::=|
+ namespace import ::sak::feedback::log
+ namespace import ::sak::feedback::summary
+ rename summary sum
+}
+
+# ###
+
+proc ::sak::validate::syntax {modules mode stem tclv} {
+ syntax::run $modules $mode $stem $tclv
+ syntax::summary
+ return
+}
+
+proc ::sak::validate::syntax::run {modules mode stem tclv} {
+ sak::feedback::init $mode $stem
+ sak::feedback::first log "\[ Syntax \] ======================================================"
+ sak::feedback::first unc "\[ Syntax \] ======================================================"
+ sak::feedback::first fail "\[ Syntax \] ======================================================"
+ sak::feedback::first warn "\[ Syntax \] ======================================================"
+ sak::feedback::first miss "\[ Syntax \] ======================================================"
+ sak::feedback::first none "\[ Syntax \] ======================================================"
+
+ # Preprocessing of module names to allow better formatting of the
+ # progress output, i.e. vertically aligned columns
+
+ # Per module we can distinguish the following levels of
+ # syntactic completeness and validity.
+
+ # Rule completeness
+ # - No package has pcx rules
+ # - Some, but not all packages have pcx rules
+ # - All packages have pcx rules
+ #
+ # Validity. Not of the pcx rules, but of the files in the
+ # packages.
+ # - Package has errors and warnings
+ # - Package has errors, but no warnings.
+ # - Package has no errors, but warnings.
+ # - Package has neither errors nor warnings.
+
+ # Progress report per module: Modules and packages it is working on.
+ # Summary at module level:
+ # - Number of packages, number of packages with pcx rules
+ # - Number of errors, number of warnings.
+
+ # Full log:
+ # - Lists packages without pcx rules.
+ # - Lists packages with errors/warnings.
+ # - Lists the exact errors/warnings per package, and location.
+
+ # Global preparation: Pull information about all packages and the
+ # modules they belong to.
+
+ Setup
+ Count $modules
+ MapPackages
+
+ InitCounters
+ foreach m $modules {
+ # Skip tcllibc shared library, not a module.
+ if {[string equal $m tcllibc]} continue
+
+ InitModuleCounters
+ !
+ log "@@ Module $m"
+ Head $m
+
+ # Per module: Find all syntax definition (pcx) files inside
+ # and process them. Further find all the Tcl files and process
+ # them as well. We get errors, warnings, and determine the
+ # package(s) they may belong to.
+
+ # Per package: Have they pcx files claiming them? After that,
+ # are pcx files left over (i.e. without a package)?
+
+ ProcessAllPCX $m
+ ProcessPackages $m
+ ProcessUnclaimed
+ ProcessTclSources $m $tclv
+ ModuleSummary
+ }
+
+ Shutdown
+ return
+}
+
+proc ::sak::validate::syntax::summary {} {
+ Summary
+ return
+}
+
+# ###
+
+proc ::sak::validate::syntax::ProcessAllPCX {m} {
+ !claims
+ foreach f [glob -nocomplain [file join [At $m] *.pcx]] {
+ ProcessOnePCX $f
+ }
+ return
+}
+
+proc ::sak::validate::syntax::ProcessOnePCX {f} {
+ =file $f
+
+ if {[catch {
+ Scan [get_input $f]
+ } msg]} {
+ +e $msg
+ } else {
+ +claim $msg
+ }
+
+ return
+}
+
+proc ::sak::validate::syntax::ProcessPackages {m} {
+ !used
+ if {![HasPackages $m]} return
+
+ foreach p [ThePackages $m] {
+ +pkg $p
+ if {[claimants $p]} {
+ +pcx $p
+ } else {
+ nopcx $p
+ }
+ }
+ return
+}
+
+proc ::sak::validate::syntax::ProcessUnclaimed {} {
+ variable claims
+ if {![array size claims]} return
+ foreach p [lsort -dict [array names claims]] {
+ foreach fx $claims($p) { +u $fx }
+ }
+ return
+}
+
+proc ::sak::validate::syntax::ProcessTclSources {m tclv} {
+ variable tclchecker
+ if {![llength $tclchecker]} return
+
+ foreach t [modtclfiles $m] {
+ # Ignore TeX files.
+ if {[string equal [file extension $t] .tex]} continue
+
+ =file $t
+ set cmd [Command $t $tclv]
+ if {[catch {Close [Process [open |$cmd r+]]} msg]} {
+ if {[string match {*child process exited abnormally*} $msg]} continue
+ +e $msg
+ }
+ }
+ return
+}
+
+###
+
+proc ::sak::validate::syntax::Setup {} {
+ variable ip [interp create]
+
+ # Make it mostly empty (We keep the 'set' command).
+
+ foreach n [interp eval $ip [list ::namespace children ::]] {
+ if {[string equal $n ::tcl]} continue
+ interp eval $ip [list namespace delete $n]
+ }
+ foreach c [interp eval $ip [list ::info commands]] {
+ if {[string equal $c set]} continue
+ if {[string equal $c if]} continue
+ if {[string equal $c rename]} continue
+ if {[string equal $c namespace]} continue
+ interp eval $ip [list ::rename $c {}]
+ }
+
+ if {![package vsatisfies [package present Tcl] 8.6]} {
+ interp eval $ip [list ::namespace delete ::tcl]
+ }
+ interp eval $ip [list ::rename namespace {}]
+ interp eval $ip [list ::rename rename {}]
+
+ foreach m {
+ pcx::register unknown
+ } {
+ interp alias $ip $m {} ::sak::validate::syntax::PCX/[string map {:: _} $m] $ip
+ }
+ return
+}
+
+proc ::sak::validate::syntax::Shutdown {} {
+ variable ip
+ interp delete $ip
+ return
+}
+
+proc ::sak::validate::syntax::Scan {data} {
+ variable ip
+ variable pcxpackage
+ while {1} {
+ if {[catch {
+ $ip eval $data
+ } msg]} {
+ if {[string match {can't read "*": no such variable} $msg]} {
+ regexp {can't read "(.*)": no such variable} $msg -> var
+ log "@@ + variable \"$var\""
+ $ip eval [list set $var {}]
+ continue
+ }
+ return -code error $msg
+ }
+ break
+ }
+ return $pcxpackage
+}
+
+proc ::sak::validate::syntax::PCX/pcx_register {ip pkg} {
+ variable pcxpackage $pkg
+ return
+}
+
+proc ::sak::validate::syntax::PCX/unknown {ip args} {
+ return 0
+}
+
+###
+
+proc ::sak::validate::syntax::Process {pipe} {
+ variable current
+ set dst log
+ while {1} {
+ if {[eof $pipe]} break
+ if {[gets $pipe line] < 0} break
+
+ set tline [string trim $line]
+ if {[string equal $tline ""]} continue
+
+ if {[string match scanning:* $tline]} {
+ log $line
+ continue
+ }
+ if {[string match checking:* $tline]} {
+ log $line
+ continue
+ }
+ if {[regexp {^([^:]*):(\d+) \(([^)]*)\) (.*)$} $tline -> path at code detail]} {
+ = "$current $at $code"
+ set dst code,$code
+ if {[IsError $code]} {
+ +e $line
+ } else {
+ +w $line
+ }
+ }
+ log $line $dst
+ }
+ return $pipe
+}
+
+proc ::sak::validate::syntax::IsError {code} {
+ variable codetype
+ variable codec
+ if {[info exists codec($code)]} {
+ return $codec($code)
+ }
+
+ foreach {p t} $codetype {
+ if {![string match $p $code]} continue
+ set codec($code) $t
+ return $t
+ }
+
+ # We assume that codetype contains a default * pattern as the last
+ # entry, capturing all unknown codes.
+ +e INTERNAL
+ exit
+}
+
+proc ::sak::validate::syntax::Command {t tclv} {
+ # Unix. Construction of the pipe to run the tclchecker against a
+ # single tcl file.
+
+ set cmd [Driver $tclv]
+ lappend cmd $t
+
+ #lappend cmd >@ stdout 2>@ stderr
+ #puts <<$cmd>>
+
+ return $cmd
+}
+
+proc ::sak::validate::syntax::Close {pipe} {
+ close $pipe
+ return
+}
+
+proc ::sak::validate::syntax::Driver {tclv} {
+ variable tclchecker
+ set cmd $tclchecker
+
+ if {$tclv ne {}} { lappend cmd -use Tcl-$tclv }
+
+ # Make all syntax definition files we may have available to the
+ # checker for higher accuracy of its output.
+ foreach m [modules] { lappend cmd -pcx [At $m] }
+
+ # Memoize
+ proc ::sak::validate::syntax::Driver {tclv} [list return $cmd]
+ return $cmd
+}
+
+###
+
+proc ::sak::validate::syntax::=file {f} {
+ variable current [file tail $f]
+ = "$current ..."
+ return
+}
+
+###
+
+proc ::sak::validate::syntax::!claims {} {
+ variable claims
+ array unset claims *
+ return
+}
+
+proc ::sak::validate::syntax::+claim {pkg} {
+ variable current
+ variable claims
+ lappend claims($pkg) $current
+ return
+}
+
+proc ::sak::validate::syntax::claimants {pkg} {
+ variable claims
+ expr { [info exists claims($pkg)] && [llength $claims($pkg)] }
+}
+
+
+###
+
+proc ::sak::validate::syntax::!used {} {
+ variable used
+ array unset used *
+ return
+}
+
+proc ::sak::validate::syntax::+use {pkg} {
+ variable used
+ variable claims
+ foreach fx $claims($pkg) { set used($fx) . }
+ unset claims($pkg)
+ return
+}
+
+###
+
+proc ::sak::validate::syntax::MapPackages {} {
+ variable pkg
+ array unset pkg *
+
+ !
+ += Package
+ foreach {pname pdata} [ipackages] {
+ = "$pname ..."
+ foreach {pver pmodule} $pdata break
+ lappend pkg($pmodule) $pname
+ }
+ !
+ =| {Packages mapped ...}
+ return
+}
+
+proc ::sak::validate::syntax::HasPackages {m} {
+ variable pkg
+ expr { [info exists pkg($m)] && [llength $pkg($m)] }
+}
+
+proc ::sak::validate::syntax::ThePackages {m} {
+ variable pkg
+ return [lsort -dict $pkg($m)]
+}
+
+###
+
+proc ::sak::validate::syntax::+pkg {pkg} {
+ variable mtotal ; incr mtotal
+ variable total ; incr total
+ return
+}
+
+proc ::sak::validate::syntax::+pcx {pkg} {
+ variable mhavepcx ; incr mhavepcx
+ variable havepcx ; incr havepcx
+ = "$pkg Ok"
+ +use $pkg
+ return
+}
+
+proc ::sak::validate::syntax::nopcx {pkg} {
+ = "$pkg Bad"
+ log "@@ WARN No syntax definition: $pkg"
+ return
+}
+
+###
+
+proc ::sak::validate::syntax::+w {msg} {
+ variable mwarnings ; incr mwarnings
+ variable warnings ; incr warnings
+ variable current
+ foreach {a b c} [split $msg \n] break
+ log "@@ WARN $current: [Trim $a] [Trim $b] [Trim $c]"
+ return
+}
+
+proc ::sak::validate::syntax::+e {msg} {
+ variable merrors ; incr merrors
+ variable errors ; incr errors
+ variable current
+ log "@@ ERROR $current $msg"
+ return
+}
+
+proc ::sak::validate::syntax::+u {f} {
+ variable used
+ if {[info exists used($f)]} return
+ variable munclaimed ; incr munclaimed
+ variable unclaimed ; incr unclaimed
+ set used($f) .
+ log "@@ WARN Unclaimed syntax definition file: $f"
+ return
+}
+
+###
+
+proc ::sak::validate::syntax::Count {modules} {
+ variable maxml 0
+ !
+ foreach m [linsert $modules 0 Module] {
+ = "M $m"
+ set l [string length $m]
+ if {$l > $maxml} {set maxml $l}
+ }
+ =| "Validate syntax (code, and API definitions) ..."
+ return
+}
+
+proc ::sak::validate::syntax::Head {m} {
+ variable maxml
+ += ${m}[blank [expr {$maxml - [string length $m]}]]
+ return
+}
+
+###
+
+proc ::sak::validate::syntax::InitModuleCounters {} {
+ variable mtotal 0
+ variable mhavepcx 0
+ variable munclaimed 0
+ variable merrors 0
+ variable mwarnings 0
+ return
+}
+
+proc ::sak::validate::syntax::ModuleSummary {} {
+ variable mtotal
+ variable mhavepcx
+ variable munclaimed
+ variable merrors
+ variable mwarnings
+ variable tclchecker
+
+ set complete [F $mhavepcx]/[F $mtotal]
+ set not "! [F [expr {$mtotal - $mhavepcx}]]"
+ set err "E [F $merrors]"
+ set warn "W [F $mwarnings]"
+ set unc "U [F $munclaimed]"
+
+ if {$munclaimed} {
+ set unc [=cya $unc]
+ >> unc
+ }
+ if {!$mhavepcx && $mtotal} {
+ set complete [=red $complete]
+ set not [=red $not]
+ >> none
+ } elseif {$mhavepcx < $mtotal} {
+ set complete [=yel $complete]
+ set not [=yel $not]
+ >> miss
+ }
+ if {[llength $tclchecker]} {
+ if {$merrors} {
+ set err " [=red $err]"
+ set warn " [=yel $warn]"
+ >> fail
+ } elseif {$mwarnings} {
+ set err " $err"
+ set warn " [=yel $warn]"
+ >> warn
+ } else {
+ set err " $err"
+ set warn " $warn"
+ }
+ } else {
+ set err ""
+ set warn ""
+ }
+
+ =| "~~ $complete $not $unc$err$warn"
+ return
+}
+
+###
+
+proc ::sak::validate::syntax::InitCounters {} {
+ variable total 0
+ variable havepcx 0
+ variable unclaimed 0
+ variable errors 0
+ variable warnings 0
+ return
+}
+
+proc ::sak::validate::syntax::Summary {} {
+ variable total
+ variable havepcx
+ variable unclaimed
+ variable errors
+ variable warnings
+ variable tclchecker
+
+ set tot [F $total]
+ set doc [F $havepcx]
+ set udc [F [expr {$total - $havepcx}]]
+
+ set unc [F $unclaimed]
+ set per [format %6.2f [expr {$havepcx*100./$total}]]
+ set uper [format %6.2f [expr {($total - $havepcx)*100./$total}]]
+ set err [F $errors]
+ set wrn [F $warnings]
+
+ if {$errors} { set err [=red $err] }
+ if {$warnings} { set wrn [=yel $wrn] }
+ if {$unclaimed} { set unc [=cya $unc] }
+
+ if {!$havepcx && $total} {
+ set doc [=red $doc]
+ set udc [=red $udc]
+ } elseif {$havepcx < $total} {
+ set doc [=yel $doc]
+ set udc [=yel $udc]
+ }
+
+ if {[llength $tclchecker]} {
+ set sfx " ($tclchecker)"
+ } else {
+ set sfx " ([=cya {No tclchecker available}])"
+ }
+
+ sum ""
+ sum "Syntax statistics$sfx"
+ sum "#Packages: $tot"
+ sum "#Syntax def: $doc (${per}%)"
+ sum "#No syntax: $udc (${uper}%)"
+ sum "#Unclaimed: $unc"
+ if {[llength $tclchecker]} {
+ sum "#Errors: $err"
+ sum "#Warnings: $wrn"
+ }
+ return
+}
+
+###
+
+proc ::sak::validate::syntax::F {n} { format %6d $n }
+
+proc ::sak::validate::syntax::Trim {text} {
+ regsub {^[^:]*:} $text {} text
+ return [string trim $text]
+}
+
+###
+
+proc ::sak::validate::syntax::At {m} {
+ global distribution
+ return [file join $distribution modules $m]
+}
+
+# ###
+
+namespace eval ::sak::validate::syntax {
+ # Max length of module names and patchlevel information.
+ variable maxml 0
+
+ # Counters across all modules
+ variable total 0 ; # Number of packages overall.
+ variable havepcx 0 ; # Number of packages with syntax definition (pcx) files.
+ variable unclaimed 0 ; # Number of PCX files not claimed by a specific package.
+ variable errors 0 ; # Number of errors found in all code.
+ variable warnings 0 ; # Number of warnings found in all code.
+
+ # Same counters, per module.
+ variable mtotal 0
+ variable mhavepcx 0
+ variable munclaimed 0
+ variable merrors 0
+ variable mwarnings 0
+
+ # Name of currently processed syntax definition or code file
+ variable current ""
+
+ # Map from packages to files claiming to define the syntax of their API.
+ variable claims
+ array set claims {}
+
+ # Set of files taken by packages, as array
+ variable used
+ array set used {}
+
+ # Map from modules to packages contained in them
+ variable pkg
+ array set pkg {}
+
+ # Transient storage used while collecting packages per syntax definition.
+ variable pcxpackage {}
+ variable ip {}
+
+ # Location of the tclchecker used to perform syntactic validation.
+ variable tclchecker [auto_execok tclchecker]
+
+ # Patterns for separation of errors from warnings
+ variable codetype {
+ warn* 0
+ nonPort* 0
+ pkgUnchecked 0
+ pkgVConflict 0
+ * 1
+ }
+ variable codec ; array set codec {}
+}
+
+##
+# ###
+
+package provide sak::validate::syntax 1.0
diff --git a/tcllib/support/devel/sak/validate/testsuites.tcl b/tcllib/support/devel/sak/validate/testsuites.tcl
new file mode 100644
index 0000000..71ea694
--- /dev/null
+++ b/tcllib/support/devel/sak/validate/testsuites.tcl
@@ -0,0 +1,512 @@
+# -*- tcl -*-
+# (C) 2008 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+##
+# ###
+
+package require sak::animate
+package require sak::feedback
+package require sak::color
+
+getpackage textutil::repeat textutil/repeat.tcl
+getpackage interp interp/interp.tcl
+
+namespace eval ::sak::validate::testsuites {
+ namespace import ::textutil::repeat::blank
+ namespace import ::sak::color::*
+ namespace import ::sak::feedback::!
+ namespace import ::sak::feedback::>>
+ namespace import ::sak::feedback::+=
+ namespace import ::sak::feedback::=
+ namespace import ::sak::feedback::=|
+ namespace import ::sak::feedback::log
+ namespace import ::sak::feedback::summary
+ rename summary sum
+}
+
+# ###
+
+proc ::sak::validate::testsuites {modules mode stem tclv} {
+ testsuites::run $modules $mode $stem $tclv
+ testsuites::summary
+ return
+}
+
+proc ::sak::validate::testsuites::run {modules mode stem tclv} {
+ sak::feedback::init $mode $stem
+ sak::feedback::first log "\[ Testsuites \] =================================================="
+ sak::feedback::first unc "\[ Testsuites \] =================================================="
+ sak::feedback::first fail "\[ Testsuites \] =================================================="
+ sak::feedback::first miss "\[ Testsuites \] =================================================="
+ sak::feedback::first none "\[ Testsuites \] =================================================="
+
+ # Preprocessing of module names to allow better formatting of the
+ # progress output, i.e. vertically aligned columns
+
+ # Per module we can distinguish the following levels of
+ # testsuite completeness:
+ # - No package has a testsuite
+ # - Some, but not all packages have a testsuite
+ # - All packages have a testsuite.
+ #
+ # Validity of the testsuites is not done here. It requires
+ # execution, see 'sak test run ...'.
+
+ # Progress report per module: Packages it is working on.
+ # Summary at module level:
+ # - Number of packages, number of packages with testsuites,
+
+ # Full log:
+ # - Lists packages without testsuites.
+
+ # Global preparation: Pull information about all packages and the
+ # modules they belong to.
+
+ Setup
+ Count $modules
+ MapPackages
+
+ InitCounters
+ foreach m $modules {
+ # Skip tcllibc shared library, not a module.
+ if {[string equal $m tcllibc]} continue
+
+ InitModuleCounters
+ !
+ log "@@ Module $m"
+ Head $m
+
+ # Per module: Find all testsuites in the module and process
+ # them. We determine the package(s) they may belong to.
+
+ # Per package: Have they .test files claiming them? After
+ # that, are .test files left over (i.e. without a package)?
+
+ ProcessTestsuites $m
+ ProcessPackages $m
+ ProcessUnclaimed
+ ModuleSummary
+ }
+
+ Shutdown
+ return
+}
+
+proc ::sak::validate::testsuites::summary {} {
+ Summary
+ return
+}
+
+# ###
+
+proc ::sak::validate::testsuites::ProcessTestsuites {m} {
+ !claims
+ foreach f [glob -nocomplain [file join [At $m] *.test]] {
+ ProcessTestsuite $f
+ }
+ return
+}
+
+proc ::sak::validate::testsuites::ProcessTestsuite {f} {
+ variable testing
+ =file $f
+
+ if {[catch {
+ Scan [get_input $f]
+ } msg]} {
+ +e $msg
+ } else {
+ foreach p $testing { +claim $p }
+ }
+
+
+ return
+}
+
+proc ::sak::validate::testsuites::Setup {} {
+ variable ip [interp create]
+
+ # Make it mostly empty (We keep the 'set' command).
+
+ foreach n [interp eval $ip [list ::namespace children ::]] {
+ if {[string equal $n ::tcl]} continue
+ interp eval $ip [list namespace delete $n]
+ }
+ foreach c [interp eval $ip [list ::info commands]] {
+ if {[string equal $c set]} continue
+ if {[string equal $c if]} continue
+ if {[string equal $c rename]} continue
+ if {[string equal $c namespace]} continue
+ interp eval $ip [list ::rename $c {}]
+ }
+
+ if {![package vsatisfies [package present Tcl] 8.6]} {
+ interp eval $ip [list ::namespace delete ::tcl]
+ }
+ interp eval $ip [list ::rename namespace {}]
+ interp eval $ip [list ::rename rename {}]
+
+ foreach m {
+ testing unknown useLocal useLocalKeep useAccel
+ } {
+ interp alias $ip $m {} ::sak::validate::testsuites::Process/$m $ip
+ }
+ return
+}
+
+proc ::sak::validate::testsuites::Shutdown {} {
+ variable ip
+ interp delete $ip
+ return
+}
+
+proc ::sak::validate::testsuites::Scan {data} {
+ variable ip
+ while {1} {
+ if {[catch {
+ $ip eval $data
+ } msg]} {
+ if {[string match {can't read "*": no such variable} $msg]} {
+ regexp {can't read "(.*)": no such variable} $msg -> var
+ log "@@ + variable \"$var\""
+ $ip eval [list set $var {}]
+ continue
+ }
+ return -code error $msg
+ }
+ break
+ }
+ return
+}
+
+proc ::sak::validate::testsuites::Process/useTcllibC {ip args} {
+ return 0
+}
+
+proc ::sak::validate::testsuites::Process/unknown {ip args} {
+ return 0
+}
+
+proc ::sak::validate::testsuites::Process/testing {ip script} {
+ variable testing {}
+ $ip eval $script
+ return -code return
+}
+
+proc ::sak::validate::testsuites::Process/useLocal {ip f p args} {
+ variable testing
+ lappend testing $p
+ return
+}
+
+proc ::sak::validate::testsuites::Process/useLocalKeep {ip f p args} {
+ variable testing
+ lappend testing $p
+ return
+}
+
+proc ::sak::validate::testsuites::Process/useAccel {ip _ f p} {
+ variable testing
+ lappend testing $p
+ return
+}
+
+proc ::sak::validate::testsuites::ProcessPackages {m} {
+ !used
+ if {![HasPackages $m]} return
+
+ foreach p [ThePackages $m] {
+ +pkg $p
+ if {[claimants $p]} {
+ +tests $p
+ } else {
+ notests $p
+ }
+ }
+ return
+}
+
+proc ::sak::validate::testsuites::ProcessUnclaimed {} {
+ variable claims
+ if {![array size claims]} return
+ foreach p [lsort -dict [array names claims]] {
+ foreach fx $claims($p) { +u $fx }
+ }
+ return
+}
+
+###
+
+proc ::sak::validate::testsuites::=file {f} {
+ variable current [file tail $f]
+ = "$current ..."
+ return
+}
+
+###
+
+proc ::sak::validate::testsuites::!claims {} {
+ variable claims
+ array unset claims *
+ return
+}
+
+proc ::sak::validate::testsuites::+claim {pkg} {
+ variable current
+ variable claims
+ lappend claims($pkg) $current
+ return
+}
+
+proc ::sak::validate::testsuites::claimants {pkg} {
+ variable claims
+ expr { [info exists claims($pkg)] && [llength $claims($pkg)] }
+}
+
+
+###
+
+proc ::sak::validate::testsuites::!used {} {
+ variable used
+ array unset used *
+ return
+}
+
+proc ::sak::validate::testsuites::+use {pkg} {
+ variable used
+ variable claims
+ foreach fx $claims($pkg) { set used($fx) . }
+ unset claims($pkg)
+ return
+}
+
+###
+
+proc ::sak::validate::testsuites::MapPackages {} {
+ variable pkg
+ array unset pkg *
+
+ !
+ += Package
+ foreach {pname pdata} [ipackages] {
+ = "$pname ..."
+ foreach {pver pmodule} $pdata break
+ lappend pkg($pmodule) $pname
+ }
+ !
+ =| {Packages mapped ...}
+ return
+}
+
+proc ::sak::validate::testsuites::HasPackages {m} {
+ variable pkg
+ expr { [info exists pkg($m)] && [llength $pkg($m)] }
+}
+
+proc ::sak::validate::testsuites::ThePackages {m} {
+ variable pkg
+ return [lsort -dict $pkg($m)]
+}
+
+###
+
+proc ::sak::validate::testsuites::+pkg {pkg} {
+ variable mtotal ; incr mtotal
+ variable total ; incr total
+ return
+}
+
+proc ::sak::validate::testsuites::+tests {pkg} {
+ variable mhavetests ; incr mhavetests
+ variable havetests ; incr havetests
+ = "$pkg Ok"
+ +use $pkg
+ return
+}
+
+proc ::sak::validate::testsuites::notests {pkg} {
+ = "$pkg Bad"
+ log "@@ WARN No testsuite: $pkg"
+ return
+}
+
+###
+
+proc ::sak::validate::testsuites::+e {msg} {
+ variable merrors ; incr merrors
+ variable errors ; incr errors
+ variable current
+ log "@@ ERROR $current $msg"
+ return
+}
+
+proc ::sak::validate::testsuites::+u {f} {
+ variable used
+ if {[info exists used($f)]} return
+ variable munclaimed ; incr munclaimed
+ variable unclaimed ; incr unclaimed
+ set used($f) .
+ log "@@ NOTE Unclaimed testsuite $f"
+ return
+}
+
+###
+
+proc ::sak::validate::testsuites::Count {modules} {
+ variable maxml 0
+ !
+ foreach m [linsert $modules 0 Module] {
+ = "M $m"
+ set l [string length $m]
+ if {$l > $maxml} {set maxml $l}
+ }
+ =| "Validate testsuites (existence) ..."
+ return
+}
+
+proc ::sak::validate::testsuites::Head {m} {
+ variable maxml
+ += ${m}[blank [expr {$maxml - [string length $m]}]]
+ return
+}
+
+###
+
+proc ::sak::validate::testsuites::InitModuleCounters {} {
+ variable mtotal 0
+ variable mhavetests 0
+ variable munclaimed 0
+ variable merrors 0
+ return
+}
+
+proc ::sak::validate::testsuites::ModuleSummary {} {
+ variable mtotal
+ variable mhavetests
+ variable munclaimed
+ variable merrors
+
+ set complete [F $mhavetests]/[F $mtotal]
+ set not "! [F [expr {$mtotal - $mhavetests}]]"
+ set err "E [F $merrors]"
+ set unc "U [F $munclaimed]"
+
+ if {$munclaimed} {
+ set unc [=cya $unc]
+ >> unc
+ }
+ if {!$mhavetests && $mtotal} {
+ set complete [=red $complete]
+ set not [=red $not]
+ >> none
+ } elseif {$mhavetests < $mtotal} {
+ set complete [=yel $complete]
+ set not [=yel $not]
+ >> miss
+ }
+ if {$merrors} {
+ set err [red]$err[rst]
+ >> fail
+ }
+
+ =| "~~ $complete $not $unc $err"
+ return
+}
+
+###
+
+proc ::sak::validate::testsuites::InitCounters {} {
+ variable total 0
+ variable havetests 0
+ variable unclaimed 0
+ variable errors 0
+ return
+}
+
+proc ::sak::validate::testsuites::Summary {} {
+ variable total
+ variable havetests
+ variable unclaimed
+ variable errors
+
+ set tot [F $total]
+ set tst [F $havetests]
+ set uts [F [expr {$total - $havetests}]]
+ set unc [F $unclaimed]
+ set per [format %6.2f [expr {$havetests*100./$total}]]
+ set uper [format %6.2f [expr {($total - $havetests)*100./$total}]]
+ set err [F $errors]
+
+ if {$errors} { set err [=red $err] }
+ if {$unclaimed} { set unc [=cya $unc] }
+
+ if {!$havetests && $total} {
+ set tst [=red $tst]
+ set uts [=red $uts]
+ } elseif {$havetests < $total} {
+ set tst [=yel $tst]
+ set uts [=yel $uts]
+ }
+
+ sum ""
+ sum "Testsuite statistics"
+ sum "#Packages: $tot"
+ sum "#Tested: $tst (${per}%)"
+ sum "#Untested: $uts (${uper}%)"
+ sum "#Unclaimed: $unc"
+ sum "#Errors: $err"
+ return
+}
+
+###
+
+proc ::sak::validate::testsuites::F {n} { format %6d $n }
+
+###
+
+proc ::sak::validate::testsuites::At {m} {
+ global distribution
+ return [file join $distribution modules $m]
+}
+
+# ###
+
+namespace eval ::sak::validate::testsuites {
+ # Max length of module names and patchlevel information.
+ variable maxml 0
+
+ # Counters across all modules
+ variable total 0 ; # Number of packages overall.
+ variable havetests 0 ; # Number of packages with testsuites.
+ variable unclaimed 0 ; # Number of testsuites not claimed by a specific package.
+ variable errors 0 ; # Number of errors found with all testsuites.
+
+ # Same counters, per module.
+ variable mtotal 0
+ variable mhavetests 0
+ variable munclaimed 0
+ variable merrors 0
+
+ # Name of currently processed testsuite
+ variable current ""
+
+ # Map from packages to files claiming to test them.
+ variable claims
+ array set claims {}
+
+ # Set of files taken by packages, as array
+ variable used
+ array set used {}
+
+ # Map from modules to packages contained in them
+ variable pkg
+ array set pkg {}
+
+ # Transient storage used while collecting packages per testsuite.
+ variable testing {}
+ variable ip {}
+}
+
+##
+# ###
+
+package provide sak::validate::testsuites 1.0
diff --git a/tcllib/support/devel/sak/validate/topic.txt b/tcllib/support/devel/sak/validate/topic.txt
new file mode 100644
index 0000000..1ddc79b
--- /dev/null
+++ b/tcllib/support/devel/sak/validate/topic.txt
@@ -0,0 +1 @@
+validate Validate modules and packages
diff --git a/tcllib/support/devel/sak/validate/validate.tcl b/tcllib/support/devel/sak/validate/validate.tcl
new file mode 100644
index 0000000..1901deb
--- /dev/null
+++ b/tcllib/support/devel/sak/validate/validate.tcl
@@ -0,0 +1,37 @@
+# -*- tcl -*-
+# (C) 2008 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+##
+# ###
+
+namespace eval ::sak::validate {}
+
+# ###
+
+proc ::sak::validate::usage {args} {
+ package require sak::help
+ puts stdout [join $args { }]\n[sak::help::on validate]
+ exit 1
+}
+
+proc ::sak::validate::all {modules mode stem tclv} {
+ package require sak::validate::versions
+ package require sak::validate::manpages
+ package require sak::validate::testsuites
+ package require sak::validate::syntax
+
+ sak::validate::versions::run $modules $mode $stem $tclv
+ sak::validate::manpages::run $modules $mode $stem $tclv
+ sak::validate::testsuites::run $modules $mode $stem $tclv
+ sak::validate::syntax::run $modules $mode $stem $tclv
+
+ sak::validate::versions::summary
+ sak::validate::manpages::summary
+ sak::validate::testsuites::summary
+ sak::validate::syntax::summary
+ return
+}
+
+##
+# ###
+
+package provide sak::validate 1.0
diff --git a/tcllib/support/devel/sak/validate/versions.tcl b/tcllib/support/devel/sak/validate/versions.tcl
new file mode 100644
index 0000000..4d622ae
--- /dev/null
+++ b/tcllib/support/devel/sak/validate/versions.tcl
@@ -0,0 +1,258 @@
+# -*- tcl -*-
+# (C) 2008 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+##
+# ###
+
+package require sak::animate
+package require sak::feedback
+package require sak::color
+
+getpackage textutil::repeat textutil/repeat.tcl
+getpackage interp interp/interp.tcl
+getpackage struct::set struct/sets.tcl
+getpackage struct::list struct/list.tcl
+
+namespace eval ::sak::validate::versions {
+ namespace import ::textutil::repeat::blank
+ namespace import ::sak::color::*
+ namespace import ::sak::feedback::!
+ namespace import ::sak::feedback::>>
+ namespace import ::sak::feedback::+=
+ namespace import ::sak::feedback::=
+ namespace import ::sak::feedback::=|
+ namespace import ::sak::feedback::log
+ namespace import ::sak::feedback::summary
+ rename summary sum
+}
+
+# ###
+
+proc ::sak::validate::versions {modules mode stem tclv} {
+ versions::run $modules $mode $stem $tclv
+ versions::summary
+ return
+}
+
+proc ::sak::validate::versions::run {modules mode stem tclv} {
+ sak::feedback::init $mode $stem
+ sak::feedback::first log "\[ Versions \] ===================================================="
+ sak::feedback::first warn "\[ Versions \] ===================================================="
+ sak::feedback::first fail "\[ Versions \] ===================================================="
+
+ # Preprocessing of module names to allow better formatting of the
+ # progress output, i.e. vertically aligned columns
+
+ # Per module
+ # - List modules without package index (error)
+ # - List packages provided missing from pkgIndex.tcl
+ # - List packages in the pkgIndex.tcl, but not provided.
+ # - List packages where provided and indexed versions differ.
+
+ Count $modules
+ MapPackages
+
+ InitCounters
+ foreach m $modules {
+ # Skip tcllibc shared library, not a module.
+ if {[string equal $m tcllibc]} continue
+
+ InitModuleCounters
+ !
+ log "@@ Module $m"
+ Head $m
+
+ if {![llength [glob -nocomplain [file join [At $m] pkgIndex.tcl]]]} {
+ +e "No package index"
+ } else {
+ # Compare package provided to ifneeded.
+
+ struct::list assign \
+ [struct::set intersect3 [Indexed $m] [Provided $m]] \
+ compare only_indexed only_provided
+
+ foreach p [lsort -dict $only_indexed ] { +w "Indexed/No Provider: $p" }
+ foreach p [lsort -dict $only_provided] { +w "Provided/Not Indexed: $p" }
+
+ foreach p [lsort -dict $compare] {
+ set iv [IndexedVersions $m $p]
+ set pv [ProvidedVersions $m $p]
+ if {[struct::set equal $iv $pv]} continue
+
+ struct::list assign \
+ [struct::set intersect3 $pv $iv] \
+ __ pmi imp
+
+ +w "Indexed </> Provided: $p \[<$imp </> $pmi\]"
+ }
+ }
+ ModuleSummary
+ }
+ return
+}
+
+proc ::sak::validate::versions::summary {} {
+ Summary
+ return
+}
+
+# ###
+
+proc ::sak::validate::versions::MapPackages {} {
+ variable pkg
+ array unset pkg *
+
+ !
+ += Package
+ foreach {pname pdata} [ipackages] {
+ = "$pname ..."
+ foreach {pvlist pmodule} $pdata break
+ lappend pkg(mi,$pmodule) $pname
+ lappend pkg(vi,$pmodule,$pname) $pvlist
+
+ foreach {pname pvlist} [ppackages $pmodule] {
+ lappend pkg(mp,$pmodule) $pname
+ lappend pkg(vp,$pmodule,$pname) $pvlist
+ }
+ }
+ !
+ =| {Packages mapped ...}
+ return
+}
+
+proc ::sak::validate::versions::Provided {m} {
+ variable pkg
+ if {![info exists pkg(mp,$m)]} { return {} }
+ return [lsort -dict $pkg(mp,$m)]
+}
+
+proc ::sak::validate::versions::Indexed {m} {
+ variable pkg
+ if {![info exists pkg(mi,$m)]} { return {} }
+ return [lsort -dict $pkg(mi,$m)]
+}
+
+proc ::sak::validate::versions::ProvidedVersions {m p} {
+ variable pkg
+ return [lsort -dict $pkg(vp,$m,$p)]
+}
+
+proc ::sak::validate::versions::IndexedVersions {m p} {
+ variable pkg
+ return [lsort -dict $pkg(vi,$m,$p)]
+}
+
+###
+
+proc ::sak::validate::versions::+e {msg} {
+ variable merrors ; incr merrors
+ variable errors ; incr errors
+ log "@@ ERROR $msg"
+ return
+}
+
+proc ::sak::validate::versions::+w {msg} {
+ variable mwarnings ; incr mwarnings
+ variable warnings ; incr warnings
+ log "@@ WARN $msg"
+ return
+}
+
+proc ::sak::validate::versions::Count {modules} {
+ variable maxml 0
+ !
+ foreach m [linsert $modules 0 Module] {
+ = "M $m"
+ set l [string length $m]
+ if {$l > $maxml} {set maxml $l}
+ }
+ =| "Validate versions (indexed vs. provided) ..."
+ return
+}
+
+proc ::sak::validate::versions::Head {m} {
+ variable maxml
+ += ${m}[blank [expr {$maxml - [string length $m]}]]
+ return
+}
+
+###
+
+proc ::sak::validate::versions::InitModuleCounters {} {
+ variable merrors 0
+ variable mwarnings 0
+ return
+}
+
+proc ::sak::validate::versions::ModuleSummary {} {
+ variable merrors
+ variable mwarnings
+
+ set err "E [F $merrors]"
+ set wrn "W [F $mwarnings]"
+
+ if {$mwarnings} { set wrn [=yel $wrn] ; >> warn }
+ if {$merrors} { set err [=red $err] ; >> fail }
+
+ =| "~~ $err $wrn"
+ return
+}
+
+###
+
+proc ::sak::validate::versions::InitCounters {} {
+ variable errors 0
+ variable warnings 0
+ return
+}
+
+proc ::sak::validate::versions::Summary {} {
+ variable errors
+ variable warnings
+
+ set err [F $errors]
+ set wrn [F $warnings]
+
+ if {$errors} { set err [=red $err] }
+ if {$warnings} { set wrn [=yel $wrn] }
+
+ sum ""
+ sum "Versions statistics"
+ sum "#Errors: $err"
+ sum "#Warnings: $wrn"
+ return
+}
+
+###
+
+proc ::sak::validate::versions::F {n} { format %6d $n }
+
+###
+
+proc ::sak::validate::versions::At {m} {
+ global distribution
+ return [file join $distribution modules $m]
+}
+
+# ###
+
+namespace eval ::sak::validate::versions {
+ # Max length of module names and patchlevel information.
+ variable maxml 0
+
+ # Counters across all modules
+ variable errors 0 ; # Number of errors found (= modules without pkg index)
+ variable warnings 0 ; # Number of warings
+
+ # Same counters, per module.
+ variable merrors 0
+ variable mwarnings 0
+
+ # Map from modules to packages and their versions.
+ variable pkg
+ array set pkg {}
+}
+
+##
+# ###
+
+package provide sak::validate::versions 1.0
diff --git a/tcllib/support/fossil-nav-integration.html b/tcllib/support/fossil-nav-integration.html
new file mode 100644
index 0000000..0c51a92
--- /dev/null
+++ b/tcllib/support/fossil-nav-integration.html
@@ -0,0 +1,91 @@
+<div class='fossil-doc' data-title='@TITLE@'>
+<style>
+ HTML {
+ background: #FFFFFF;
+ color: black;
+ }
+ BODY {
+ background: #FFFFFF;
+ color: black;
+ }
+ DIV.doctools {
+ margin-left: 10%;
+ margin-right: 10%;
+ }
+ DIV.doctools H1,DIV.doctools H2 {
+ margin-left: -5%;
+ }
+ H1, H2, H3, H4 {
+ margin-top: 1em;
+ font-family: sans-serif;
+ font-size: large;
+ color: #005A9C;
+ background: transparent;
+ text-align: left;
+ }
+ H1.doctools_title {
+ text-align: center;
+ }
+ UL,OL {
+ margin-right: 0em;
+ margin-top: 3pt;
+ margin-bottom: 3pt;
+ }
+ UL LI {
+ list-style: disc;
+ }
+ OL LI {
+ list-style: decimal;
+ }
+ DT {
+ padding-top: 1ex;
+ }
+ UL.doctools_toc,UL.doctools_toc UL, UL.doctools_toc UL UL {
+ font: normal 12pt/14pt sans-serif;
+ list-style: none;
+ }
+ LI.doctools_section, LI.doctools_subsection {
+ list-style: none;
+ margin-left: 0em;
+ text-indent: 0em;
+ padding: 0em;
+ }
+ PRE {
+ display: block;
+ font-family: monospace;
+ white-space: pre;
+ margin: 0%;
+ padding-top: 0.5ex;
+ padding-bottom: 0.5ex;
+ padding-left: 1ex;
+ padding-right: 1ex;
+ width: 100%;
+ }
+ PRE.doctools_example {
+ color: black;
+ background: #f5dcb3;
+ border: 1px solid black;
+ }
+ UL.doctools_requirements LI, UL.doctools_syntax LI {
+ list-style: none;
+ margin-left: 0em;
+ text-indent: 0em;
+ padding: 0em;
+ }
+ DIV.doctools_synopsis {
+ color: black;
+ background: #80ffff;
+ border: 1px solid black;
+ font-family: serif;
+ margin-top: 1em;
+ margin-bottom: 1em;
+ }
+ UL.doctools_syntax {
+ margin-top: 1em;
+ border-top: 1px solid black;
+ }
+ UL.doctools_requirements {
+ margin-bottom: 1em;
+ border-bottom: 1px solid black;
+ }
+</style>
diff --git a/tcllib/support/installation/actions.tcl b/tcllib/support/installation/actions.tcl
new file mode 100644
index 0000000..6978bf8
--- /dev/null
+++ b/tcllib/support/installation/actions.tcl
@@ -0,0 +1,112 @@
+# -*- 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 _tcl {module libdir} {
+ global distribution
+ xcopy \
+ [file join $distribution modules $module] \
+ [file join $libdir $module] \
+ 0 *.tcl
+ return
+}
+
+proc _tcr {module libdir} {
+ global distribution
+ xcopy \
+ [file join $distribution modules $module] \
+ [file join $libdir $module] \
+ 1 *.tcl
+ return
+}
+
+proc _rde {module libdir} {
+ global distribution
+
+ _tcl $module $libdir
+ xcopy \
+ [file join $distribution modules $module rde_critcl] \
+ [file join $libdir $module rde_critcl] \
+ 1
+ return
+}
+
+proc _doc {module libdir} {
+ global distribution
+
+ _tcl $module $libdir
+ xcopy \
+ [file join $distribution modules $module mpformats] \
+ [file join $libdir $module mpformats] \
+ 1
+ return
+}
+
+proc _msg {module libdir} {
+ global distribution
+
+ _tcl $module $libdir
+ xcopy \
+ [file join $distribution modules $module msgs] \
+ [file join $libdir $module msgs] \
+ 1
+ return
+}
+
+proc _tex {module libdir} {
+ global distribution
+
+ _tcl $module $libdir
+ xcopy \
+ [file join $distribution modules $module] \
+ [file join $libdir $module] \
+ 0 *.tex
+ return
+}
+
+proc _tci {module libdir} {
+ global distribution
+
+ _tcl $module $libdir
+ xcopyfile [file join $distribution modules $module tclIndex] \
+ [file join $libdir $module]
+ return
+}
+
+proc _trt {module libdir} {
+ global distribution
+
+ _tcr $module $libdir
+ xcopy \
+ [file join $distribution modules $module] \
+ [file join $libdir $module] \
+ 0 *.template
+ return
+}
+
+proc _manfile {f format ext docdir} { return }
+proc _man {module format ext docdir} { return }
+
+proc _exa {module exadir} {
+ global distribution
+ xcopy \
+ [file join $distribution examples $module] \
+ [file join $exadir $module] \
+ 1
+ return
+}
+
+proc _exax {actual module exadir} {
+ global distribution
+ xcopy \
+ [file join $distribution examples $actual] \
+ [file join $exadir $module] \
+ 1
+ return
+}
diff --git a/tcllib/support/installation/main.tcl b/tcllib/support/installation/main.tcl
new file mode 100755
index 0000000..2a2aea3
--- /dev/null
+++ b/tcllib/support/installation/main.tcl
@@ -0,0 +1,5 @@
+# -*- tcl -*-
+# Entrypoint for starkit and -pack based distributions
+
+# Delegate to the installer application
+source [file join [file dirname [info script]] installer.tcl]
diff --git a/tcllib/support/installation/man.macros b/tcllib/support/installation/man.macros
new file mode 100644
index 0000000..ddd073d
--- /dev/null
+++ b/tcllib/support/installation/man.macros
@@ -0,0 +1,267 @@
+.\" The -*- nroff -*- definitions below are for supplemental macros used
+.\" in Tcl/Tk manual entries.
+.\"
+.\" .AP type name in/out ?indent?
+.\" Start paragraph describing an argument to a library procedure.
+.\" type is type of argument (int, etc.), in/out is either "in", "out",
+.\" or "in/out" to describe whether procedure reads or modifies arg,
+.\" and indent is equivalent to second arg of .IP (shouldn't ever be
+.\" needed; use .AS below instead)
+.\"
+.\" .AS ?type? ?name?
+.\" Give maximum sizes of arguments for setting tab stops. Type and
+.\" name are examples of largest possible arguments that will be passed
+.\" to .AP later. If args are omitted, default tab stops are used.
+.\"
+.\" .BS
+.\" Start box enclosure. From here until next .BE, everything will be
+.\" enclosed in one large box.
+.\"
+.\" .BE
+.\" End of box enclosure.
+.\"
+.\" .CS
+.\" Begin code excerpt.
+.\"
+.\" .CE
+.\" End code excerpt.
+.\"
+.\" .VS ?version? ?br?
+.\" Begin vertical sidebar, for use in marking newly-changed parts
+.\" of man pages. The first argument is ignored and used for recording
+.\" the version when the .VS was added, so that the sidebars can be
+.\" found and removed when they reach a certain age. If another argument
+.\" is present, then a line break is forced before starting the sidebar.
+.\"
+.\" .VE
+.\" End of vertical sidebar.
+.\"
+.\" .DS
+.\" Begin an indented unfilled display.
+.\"
+.\" .DE
+.\" End of indented unfilled display.
+.\"
+.\" .SO ?manpage?
+.\" Start of list of standard options for a Tk widget. The manpage
+.\" argument defines where to look up the standard options; if
+.\" omitted, defaults to "options". The options follow on successive
+.\" lines, in three columns separated by tabs.
+.\"
+.\" .SE
+.\" End of list of standard options for a Tk widget.
+.\"
+.\" .OP cmdName dbName dbClass
+.\" Start of description of a specific option. cmdName gives the
+.\" option's name as specified in the class command, dbName gives
+.\" the option's name in the option database, and dbClass gives
+.\" the option's class in the option database.
+.\"
+.\" .UL arg1 arg2
+.\" Print arg1 underlined, then print arg2 normally.
+.\"
+.\" .QW arg1 ?arg2?
+.\" Print arg1 in quotes, then arg2 normally (for trailing punctuation).
+.\"
+.\" .PQ arg1 ?arg2?
+.\" Print an open parenthesis, arg1 in quotes, then arg2 normally
+.\" (for trailing punctuation) and then a closing parenthesis.
+.\"
+.\" # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
+.if t .wh -1.3i ^B
+.nr ^l \n(.l
+.ad b
+.\" # Start an argument description
+.de AP
+.ie !"\\$4"" .TP \\$4
+.el \{\
+. ie !"\\$2"" .TP \\n()Cu
+. el .TP 15
+.\}
+.ta \\n()Au \\n()Bu
+.ie !"\\$3"" \{\
+\&\\$1 \\fI\\$2\\fP (\\$3)
+.\".b
+.\}
+.el \{\
+.br
+.ie !"\\$2"" \{\
+\&\\$1 \\fI\\$2\\fP
+.\}
+.el \{\
+\&\\fI\\$1\\fP
+.\}
+.\}
+..
+.\" # define tabbing values for .AP
+.de AS
+.nr )A 10n
+.if !"\\$1"" .nr )A \\w'\\$1'u+3n
+.nr )B \\n()Au+15n
+.\"
+.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
+.nr )C \\n()Bu+\\w'(in/out)'u+2n
+..
+.AS Tcl_Interp Tcl_CreateInterp in/out
+.\" # BS - start boxed text
+.\" # ^y = starting y location
+.\" # ^b = 1
+.de BS
+.br
+.mk ^y
+.nr ^b 1u
+.if n .nf
+.if n .ti 0
+.if n \l'\\n(.lu\(ul'
+.if n .fi
+..
+.\" # BE - end boxed text (draw box now)
+.de BE
+.nf
+.ti 0
+.mk ^t
+.ie n \l'\\n(^lu\(ul'
+.el \{\
+.\" Draw four-sided box normally, but don't draw top of
+.\" box if the box started on an earlier page.
+.ie !\\n(^b-1 \{\
+\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
+.\}
+.el \}\
+\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
+.\}
+.\}
+.fi
+.br
+.nr ^b 0
+..
+.\" # VS - start vertical sidebar
+.\" # ^Y = starting y location
+.\" # ^v = 1 (for troff; for nroff this doesn't matter)
+.de VS
+.if !"\\$2"" .br
+.mk ^Y
+.ie n 'mc \s12\(br\s0
+.el .nr ^v 1u
+..
+.\" # VE - end of vertical sidebar
+.de VE
+.ie n 'mc
+.el \{\
+.ev 2
+.nf
+.ti 0
+.mk ^t
+\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
+.sp -1
+.fi
+.ev
+.\}
+.nr ^v 0
+..
+.\" # Special macro to handle page bottom: finish off current
+.\" # box/sidebar if in box/sidebar mode, then invoked standard
+.\" # page bottom macro.
+.de ^B
+.ev 2
+'ti 0
+'nf
+.mk ^t
+.if \\n(^b \{\
+.\" Draw three-sided box if this is the box's first page,
+.\" draw two sides but no top otherwise.
+.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
+.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
+.\}
+.if \\n(^v \{\
+.nr ^x \\n(^tu+1v-\\n(^Yu
+\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
+.\}
+.bp
+'fi
+.ev
+.if \\n(^b \{\
+.mk ^y
+.nr ^b 2
+.\}
+.if \\n(^v \{\
+.mk ^Y
+.\}
+..
+.\" # DS - begin display
+.de DS
+.RS
+.nf
+.sp
+..
+.\" # DE - end display
+.de DE
+.fi
+.RE
+.sp
+..
+.\" # SO - start of list of standard options
+.de SO
+'ie '\\$1'' .ds So \\fBoptions\\fR
+'el .ds So \\fB\\$1\\fR
+.SH "STANDARD OPTIONS"
+.LP
+.nf
+.ta 5.5c 11c
+.ft B
+..
+.\" # SE - end of list of standard options
+.de SE
+.fi
+.ft R
+.LP
+See the \\*(So manual entry for details on the standard options.
+..
+.\" # OP - start of full description for a single option
+.de OP
+.LP
+.nf
+.ta 4c
+Command-Line Name: \\fB\\$1\\fR
+Database Name: \\fB\\$2\\fR
+Database Class: \\fB\\$3\\fR
+.fi
+.IP
+..
+.\" # CS - begin code excerpt
+.de CS
+.RS
+.nf
+.ta .25i .5i .75i 1i
+..
+.\" # CE - end code excerpt
+.de CE
+.fi
+.RE
+..
+.\" # UL - underline word
+.de UL
+\\$1\l'|0\(ul'\\$2
+..
+.\" # QW - apply quotation marks to word
+.de QW
+.ie '\\*(lq'"' ``\\$1''\\$2
+.\"" fix emacs highlighting
+.el \\*(lq\\$1\\*(rq\\$2
+..
+.\" # PQ - apply parens and quotation marks to word
+.de PQ
+.ie '\\*(lq'"' (``\\$1''\\$2)\\$3
+.\"" fix emacs highlighting
+.el (\\*(lq\\$1\\*(rq\\$2)\\$3
+..
+.\" # QR - quoted range
+.de QR
+.ie '\\*(lq'"' ``\\$1''\\-``\\$2''\\$3
+.\"" fix emacs highlighting
+.el \\*(lq\\$1\\*(rq\\-\\*(lq\\$2\\*(rq\\$3
+..
+.\" # MT - "empty" string
+.de MT
+.QW ""
+..
diff --git a/tcllib/support/installation/modules.tcl b/tcllib/support/installation/modules.tcl
new file mode 100755
index 0000000..c90ae8b
--- /dev/null
+++ b/tcllib/support/installation/modules.tcl
@@ -0,0 +1,173 @@
+# -*- tcl -*-
+# --------------------------------------------------------------
+# List of modules to install and definitions guiding the process of
+# doing so.
+#
+# This file is shared between 'installer.tcl' and 'sak.tcl', like
+# 'package_version.tcl'. The swiss army knife requires access to the
+# data in this file to be able to check if there are modules in the
+# directory hierarchy, but missing in the list of installed modules.
+# --------------------------------------------------------------
+
+proc Exclude {m} {global excluded ; lappend excluded $m ; return }
+proc Application {a} {global apps ; lappend apps $a ; return }
+
+proc Module {m pkg doc exa} {
+ global modules guide
+
+ lappend modules $m
+ set guide($m,pkg) $pkg
+ set guide($m,doc) $doc
+ set guide($m,exa) $exa
+ return
+}
+
+set excluded [list]
+set modules [list]
+set apps [list]
+array set guide {}
+
+# --------------------------------------------------------------
+# @@ Registration START
+
+Exclude calendar
+Exclude exif
+
+# name pkg doc example
+Module aes _tcl _man _null
+Module amazon-s3 _tcl _man _null
+Module asn _tcl _man _null
+Module base32 _tcl _man _null
+Module base64 _tcl _man _null
+Module bee _tcl _man _null
+Module bench _tcl _null _null
+Module bibtex _tcl _man _exa
+Module blowfish _tcl _man _null
+Module cache _tcl _man _null
+Module calendar _tci _man _null
+Module clock _tcl _man _null
+Module cmdline _tcl _man _null
+Module comm _tcl _man _null
+Module control _tci _man _null
+Module coroutine _tcl _null _null
+Module counter _tcl _man _null
+Module crc _tcl _man _null
+Module cron _tcl _man _null
+Module csv _tcl _man _exa
+Module debug _tcl _null _null
+Module des _tcl _man _null
+Module dicttool _tcl _man _null
+Module dns _msg _man _exa
+Module docstrip _tcl _man _null
+Module doctools _doc _man _exa
+Module doctools2base _tcl _man _null
+Module doctools2idx _tcl _man _null
+Module doctools2toc _tcl _man _null
+Module dtplite _tcl _man _null
+Module exif _tcl _man _null
+Module fileutil _tcl _man _null
+Module ftp _tcl _man _exa
+Module ftpd _tcl _man _exa
+Module fumagic _tcl _man _null
+Module generator _tcl _man _null
+Module gpx _tcl _null _null
+Module grammar_aycock _tcl _man _null
+Module grammar_fa _tcl _man _null
+Module grammar_me _tcl _man _null
+Module grammar_peg _tcl _man _null
+Module hook _tcl _man _null
+Module http _tcl _man _null
+Module httpd _tcl _man _exa
+Module httpwget _tcl _null _null
+Module html _tcl _man _null
+Module htmlparse _tcl _man _exa
+Module ident _tcl _man _null
+Module imap4 _tcl _man _null
+Module inifile _tcl _man _null
+Module interp _tcl _man _null
+Module irc _tcl _man _exa
+Module javascript _tcl _man _null
+Module jpeg _tcl _man _null
+Module json _tcl _man _null
+Module lambda _tcl _man _null
+Module ldap _tcl _man _exa
+Module log _msg _man {_exax logger}
+Module markdown _tcl _man _null
+Module map _tcl _man _null
+Module mapproj _tcl _man _exa
+Module math _tci _man _exa
+Module md4 _tcl _man _null
+Module md5 _tcl _man _null
+Module md5crypt _tcl _man _null
+Module mime _tcl _man _exa
+Module multiplexer _tcl _man _null
+Module namespacex _tcl _man _null
+Module ncgi _tcl _man _null
+Module nettool _tcl _man _null
+Module nmea _tcl _man _null
+Module nns _tcl _man _null
+Module nntp _tcl _man _exa
+Module ntp _tcl _man _exa
+Module oauth _tcl _man _null
+Module oodialect _tcl _man _null
+Module oometa _tcl _man _null
+Module ooutil _tcl _man _null
+Module otp _tcl _man _null
+Module page _trt _man _null
+Module pki _tcl _man _null
+Module pluginmgr _tcl _man _null
+Module png _tcl _man _null
+Module pop3 _tcl _man _null
+Module pop3d _tcl _man _null
+Module processman _tcl _man _null
+Module profiler _tcl _man _null
+Module pt _rde _man _null
+Module rc4 _tcl _man _null
+Module rcs _tcl _man _null
+Module report _tcl _man _null
+Module rest _tcl _man _null
+Module ripemd _tcl _man _null
+Module sasl _tcl _man _exa
+Module sha1 _tcl _man _null
+Module simulation _tcl _man _null
+Module smtpd _tcl _man _exa
+Module snit _tcl _man _null
+Module soundex _tcl _man _null
+Module stooop _tcl _man _null
+Module string _tcl _man _null
+Module stringprep _tcl _man _null
+Module struct _tcl _man _exa
+Module tar _tcl _man _null
+Module tepam _tcl _man _exa
+Module term _tcr _man _exa
+Module textutil _tex _man _null
+Module tie _tcl _man _exa
+Module tiff _tcl _man _null
+Module tool _tcl _man _null
+Module tool_datatype _tcl _man _null
+Module transfer _tcl _man _null
+Module treeql _tcl _man _null
+Module try _tcl _man _null
+Module uev _tcl _man _null
+Module units _tcl _man _null
+Module uri _tcl _man _null
+Module uuid _tcl _man _null
+Module valtype _tcl _null _null
+Module virtchannel_base _tcl _man _null
+Module virtchannel_core _tcl _man _null
+Module virtchannel_transform _tcl _man _null
+Module websocket _tcl _man _null
+Module wip _tcl _man _null
+Module yaml _tcl _man _null
+Module zip _tcl _null _null
+
+Application dtplite
+Application nns
+Application nnsd
+Application nnslog
+Application page
+Application pt
+Application tcldocstrip
+
+# @@ Registration END
+# --------------------------------------------------------------
diff --git a/tcllib/support/installation/version.tcl b/tcllib/support/installation/version.tcl
new file mode 100644
index 0000000..42f6608
--- /dev/null
+++ b/tcllib/support/installation/version.tcl
@@ -0,0 +1,30 @@
+package_version 1.18
+package_name tcllib
+
+dist_exclude config
+dist_exclude modules/ftp/example
+dist_exclude modules/ftpd/examples
+dist_exclude modules/stats
+dist_exclude modules/fileinput
+
+critcl_main tcllibc tcllibc.tcl
+critcl base64c {base64/base64c.tcl base64/uuencode.tcl base64/yencode.tcl}
+critcl crcc {crc/crcc.tcl crc/sum.tcl crc/crc32.tcl}
+critcl jsonc json/jsonc.tcl
+critcl md4c md4/md4c.tcl
+critcl md5c md5/md5c.tcl
+critcl md5cryptc md5crypt/md5cryptc.tcl
+critcl rc4c rc4/rc4c.tcl
+critcl sha1c sha1/sha1c.tcl
+critcl sha256c sha1/sha256c.tcl
+critcl uuid uuid/uuid.tcl
+critcl struct_treec struct/tree_c.tcl
+critcl struct_graphc struct/graph_c.tcl
+critcl struct_setc struct/sets_c.tcl
+critcl struct_stackc struct/stack_c.tcl
+critcl struct_queuec struct/queue_c.tcl
+critcl base32c base32/base32_c.tcl
+critcl base32hexc base32/base32hex_c.tcl
+critcl ipMorec dns/ipMoreC.tcl
+critcl ptc {pt/pt_rdengine_c.tcl pt/pt_parse_peg_c.tcl}
+critcl_notes {Note: you can ignore warnings for tcllibc.tcl, base64c.tcl and crcc.tcl.}
diff --git a/tcllib/support/releases/PACKAGES b/tcllib/support/releases/PACKAGES
new file mode 100644
index 0000000..10baf79
--- /dev/null
+++ b/tcllib/support/releases/PACKAGES
@@ -0,0 +1,424 @@
+@@ RELEASE 1.17
+
+S3 1.0.3
+SASL 1.3.3
+SASL::NTLM 1.1.2
+SASL::SCRAM 0.1
+SASL::XGoogleToken 1.0.1
+aes 1.2.1
+ascii85 1.0
+asn 0.8.4
+autoproxy 1.5.3
+base32 0.1
+base32::core 0.1
+base32::hex 0.1
+base64 2.4.2
+bee 0.1
+bench 0.4
+bench::in 0.1
+bench::out::csv 0.1.2
+bench::out::text 0.1.2
+bibtex 0.6
+blowfish 1.0.4
+cache::async 0.3
+calendar 0.2
+char 1.0.1
+cksum 1.1.4
+clock::iso8601 0.1
+clock::rfc2822 0.1
+cmdline 1.5
+comm 4.6.3.1
+configuration 1
+control 0.1.3
+coroutine 1.1.3
+coroutine::auto 1.1.3
+counter 2.0.4
+crc16 1.1.2
+crc32 1.3.2
+cron 1.1
+csv 0.8
+debug 1.0.5
+debug::caller 1
+debug::heartbeat 1
+debug::timestamp 1
+des 1.1.0
+dns 1.3.5
+docstrip 1.2
+docstrip::util 1.3
+doctools 1.4.19
+doctools::changelog 1.1
+doctools::config 0.1
+doctools::cvs 1
+doctools::html 0.1
+doctools::html::cssdefaults 0.1
+doctools::idx 1.0.5
+doctools::idx 2
+doctools::idx::export 0.1
+doctools::idx::export::docidx 0.1
+doctools::idx::export::html 0.2
+doctools::idx::export::json 0.1
+doctools::idx::export::nroff 0.3
+doctools::idx::export::text 0.2
+doctools::idx::export::wiki 0.2
+doctools::idx::import 0.1
+doctools::idx::import::docidx 0.1
+doctools::idx::import::json 0.1
+doctools::idx::parse 0.1
+doctools::idx::structure 0.1
+doctools::msgcat 0.1
+doctools::msgcat::idx::c 0.1
+doctools::msgcat::idx::de 0.1
+doctools::msgcat::idx::en 0.1
+doctools::msgcat::idx::fr 0.1
+doctools::msgcat::toc::c 0.1
+doctools::msgcat::toc::de 0.1
+doctools::msgcat::toc::en 0.1
+doctools::msgcat::toc::fr 0.1
+doctools::nroff::man_macros 0.1
+doctools::paths 0.1
+doctools::tcl::parse 0.1
+doctools::text 0.1
+doctools::toc 1.1.4
+doctools::toc 2
+doctools::toc::export 0.1
+doctools::toc::export::doctoc 0.1
+doctools::toc::export::html 0.1
+doctools::toc::export::json 0.1
+doctools::toc::export::nroff 0.2
+doctools::toc::export::text 0.1
+doctools::toc::export::wiki 0.1
+doctools::toc::import 0.1
+doctools::toc::import::doctoc 0.1
+doctools::toc::import::json 0.1
+doctools::toc::parse 0.1
+doctools::toc::structure 0.1
+dtplite 1.2
+exif 1.1.2
+fileutil 1.14.10
+fileutil::decode 0.2
+fileutil::magic::cfront 1.0
+fileutil::magic::cgen 1.0
+fileutil::magic::filetype 1.0.2
+fileutil::magic::mimetype 1.0.2
+fileutil::magic::rt 1.0
+fileutil::multi 0.1
+fileutil::multi::op 0.5.3
+fileutil::traverse 0.5
+ftp 2.4.13
+ftp::geturl 0.2.1
+ftpd 1.2.6
+generator 0.1
+gpx 1
+grammar::aycock 1.0
+grammar::aycock::debug 1.0
+grammar::aycock::runtime 1.0
+grammar::fa 0.5
+grammar::fa::dacceptor 0.1.1
+grammar::fa::dexec 0.2
+grammar::fa::op 0.4.1
+grammar::me::cpu 0.2
+grammar::me::cpu::core 0.2
+grammar::me::cpu::gasm 0.1
+grammar::me::tcl 0.1
+grammar::me::util 0.1
+grammar::peg 0.2
+grammar::peg::interp 0.1.1
+hook 0.1
+html 1.4.4
+htmlparse 1.2.1
+huddle 0.1.5
+ident 0.42
+imap4 0.5.2
+inifile 0.3
+interp 0.1.2
+interp::delegate::method 0.2
+interp::delegate::proc 0.2
+ip 1.3
+irc 0.6.1
+javascript 1.0.2
+jpeg 0.5
+json 1.3.3
+json::write 1.0.3
+lambda 1
+ldap 1.8
+ldapx 1.0
+log 1.3
+logger 0.9.4
+logger::appender 1.3
+logger::utils 1.3
+map::geocode::nominatim 0.1
+map::slippy 0.5
+map::slippy::cache 0.2
+map::slippy::fetcher 0.3
+mapproj 1.0
+math 1.2.5
+math::bigfloat 1.2.2
+math::bigfloat 2.0.2
+math::bignum 3.1.1
+math::calculus 0.8.1
+math::calculus::symdiff 1.0
+math::complexnumbers 1.0.2
+math::constants 1.0.1
+math::decimal 1.0.3
+math::fourier 1.0.2
+math::fuzzy 0.2.1
+math::geometry 1.1.3
+math::interpolate 1.1
+math::linearalgebra 1.1.5
+math::machineparameters 0.1
+math::numtheory 1.0
+math::optimize 1.0.1
+math::polynomials 1.0.1
+math::rationalfunctions 1.0.1
+math::roman 1.0
+math::special 0.3.0
+math::statistics 0.9.3
+md4 1.0.6
+md5 1.4.4
+md5 2.0.7
+md5crypt 1.1.0
+mime 1.6
+multiplexer 0.2
+nameserv 0.4.2
+nameserv::auto 0.3
+nameserv::common 0.1
+nameserv::server 0.3.2
+namespacex 0.1
+ncgi 1.4.3
+nettool 0.4
+nmea 1.0.0
+nntp 0.2.1
+oauth 1
+odie::processman 0.3
+oo::util 1.2.1
+otp 1.0.0
+page::analysis::peg::emodes 0.1
+page::analysis::peg::minimize 0.1
+page::analysis::peg::reachable 0.1
+page::analysis::peg::realizable 0.1
+page::compiler::peg::mecpu 0.1.1
+page::config::peg 0.1
+page::gen::peg::canon 0.1
+page::gen::peg::cpkg 0.1
+page::gen::peg::hb 0.1
+page::gen::peg::me 0.1
+page::gen::peg::mecpu 0.1
+page::gen::peg::ser 0.1
+page::gen::tree::text 0.1
+page::parse::lemon 0.1
+page::parse::peg 0.1
+page::parse::peghb 0.1
+page::parse::pegser 0.1
+page::pluginmgr 0.2
+page::reader::hb 0.1
+page::reader::lemon 0.1
+page::reader::peg 0.1
+page::reader::ser 0.1
+page::reader::treeser 0.1
+page::transform::mecpu 0.1
+page::transform::reachable 0.1
+page::transform::realizable 0.1
+page::util::flow 0.1
+page::util::norm::lemon 0.1
+page::util::norm::peg 0.1
+page::util::peg 0.1
+page::util::quote 0.1
+page::writer::hb 0.1
+page::writer::identity 0.1
+page::writer::me 0.1
+page::writer::mecpu 0.1.1
+page::writer::null 0.1
+page::writer::peg 0.1
+page::writer::ser 0.1
+page::writer::tpc 0.1
+page::writer::tree 0.1
+paths 1
+picoirc 0.5.1
+pki 0.6
+pluginmgr 0.3
+png 0.2
+pop3 1.9
+pop3d 1.1.0
+pop3d::dbox 1.0.2
+pop3d::udb 1.1
+profiler 0.3
+pt::ast 1.1
+pt::cparam::configuration::critcl 1.0.2
+pt::cparam::configuration::tea 0.1
+pt::parse::peg 1.0.1
+pt::pe 1.0.2
+pt::pe::op 1
+pt::peg 1
+pt::peg::container 1
+pt::peg::container::peg 1
+pt::peg::export 1
+pt::peg::export::container 1
+pt::peg::export::json 1
+pt::peg::export::peg 1
+pt::peg::from::json 1
+pt::peg::from::peg 1.0.3
+pt::peg::import 1
+pt::peg::import::json 1
+pt::peg::import::peg 1
+pt::peg::interp 1.0.1
+pt::peg::op 1.0.1
+pt::peg::to::container 1
+pt::peg::to::cparam 1.1.3
+pt::peg::to::json 1
+pt::peg::to::param 1.0.1
+pt::peg::to::peg 1.0.2
+pt::peg::to::tclparam 1.0.2
+pt::pgen 1.0.3
+pt::rde 1.0.3
+pt::rde::oo 1.0.3
+pt::tclparam::configuration::snit 1.0.2
+pt::tclparam::configuration::tcloo 1.0.4
+pt::util 1
+rc4 1.1.0
+rcs 0.1
+report 0.3.2
+resolv 1.0.3
+rest 1.0.1
+ripemd128 1.0.5
+ripemd160 1.0.5
+sha1 1.1.1
+sha1 2.0.3
+sha256 1.0.3
+simulation::annealing 0.2
+simulation::montecarlo 0.1
+simulation::random 0.3.1
+smtp 1.4.5
+smtpd 1.5
+snit 1.4.2
+snit 2.3.2
+soundex 1.0
+spf 1.1.1
+stooop 4.4.1
+string::token 1
+string::token::shell 1.2
+stringprep 1.0.1
+stringprep::data 1.0.1
+struct 1.4
+struct 2.1
+struct::disjointset 1.0
+struct::graph 1.2.1
+struct::graph 2.4
+struct::graph::op 0.11.3
+struct::list 1.8.3
+struct::matrix 1.2.1
+struct::matrix 2.0.3
+struct::pool 1.2.3
+struct::prioqueue 1.4
+struct::queue 1.4.5
+struct::record 1.2.1
+struct::set 2.2.3
+struct::skiplist 1.3
+struct::stack 1.5.3
+struct::tree 1.2.2
+struct::tree 2.1.2
+sum 1.1.2
+switched 2.2.1
+tar 0.10
+tcl::chan::cat 1.0.2
+tcl::chan::core 1
+tcl::chan::events 1
+tcl::chan::facade 1.0.1
+tcl::chan::fifo 1
+tcl::chan::fifo2 1
+tcl::chan::halfpipe 1
+tcl::chan::memchan 1.0.3
+tcl::chan::null 1
+tcl::chan::nullzero 1
+tcl::chan::random 1
+tcl::chan::std 1.0.1
+tcl::chan::string 1.0.2
+tcl::chan::textwindow 1
+tcl::chan::variable 1.0.3
+tcl::chan::zero 1
+tcl::randomseed 1
+tcl::transform::adler32 1
+tcl::transform::base64 1
+tcl::transform::core 1
+tcl::transform::counter 1
+tcl::transform::crc32 1
+tcl::transform::hex 1
+tcl::transform::identity 1
+tcl::transform::limitsize 1
+tcl::transform::observe 1
+tcl::transform::otp 1
+tcl::transform::rot 1
+tcl::transform::spacer 1
+tcl::transform::zlib 1.0.1
+tclDES 1.0.0
+tclDESjr 1.0.0
+tepam 0.5
+tepam::doc_gen 0.1.1
+term 0.1
+term::ansi::code 0.2
+term::ansi::code::attr 0.1
+term::ansi::code::ctrl 0.2
+term::ansi::code::macros 0.1
+term::ansi::ctrl::unix 0.1.1
+term::ansi::send 0.2
+term::interact::menu 0.1
+term::interact::pager 0.1
+term::receive 0.1
+term::receive::bind 0.1
+term::send 0.1
+text::write 1
+textutil 0.8
+textutil::adjust 0.7.3
+textutil::expander 1.3.1
+textutil::repeat 0.7
+textutil::split 0.7
+textutil::string 0.8
+textutil::tabify 0.7
+textutil::trim 0.7
+tie 1.1
+tie::std::array 1.0
+tie::std::dsource 1.0
+tie::std::file 1.0.4
+tie::std::growfile 1.0
+tie::std::log 1.0
+tie::std::rarray 1.0
+tiff 0.2.1
+time 1.2.1
+transfer::connect 0.2
+transfer::copy 0.3
+transfer::copy::queue 0.1
+transfer::data::destination 0.2
+transfer::data::source 0.2
+transfer::receiver 0.2
+transfer::transmitter 0.2
+treeql 1.3.1
+try 1
+uevent 0.3.1
+uevent::onidle 0.1
+unicode 1.0.0
+unicode::data 1.0.0
+units 2.1.1
+uri 1.2.5
+uri::urn 1.0.3
+uuencode 1.1.5
+uuid 1.0.4
+valtype::common 1
+valtype::creditcard::amex 1
+valtype::creditcard::discover 1
+valtype::creditcard::mastercard 1
+valtype::creditcard::visa 1
+valtype::gs1::ean13 1
+valtype::iban 1.5
+valtype::imei 1
+valtype::isbn 1
+valtype::luhn 1
+valtype::luhn5 1
+valtype::usnpi 1
+valtype::verhoeff 1
+websocket 1.4
+wip 1.2
+wip 2.2
+xsxp 1.0
+yaml 0.3.7
+yencode 1.1.3
+zipfile::decode 0.6.1
+zipfile::encode 0.3
diff --git a/tcllib/support/releases/history/README-1.10.txt b/tcllib/support/releases/history/README-1.10.txt
new file mode 100644
index 0000000..eaf56ed
--- /dev/null
+++ b/tcllib/support/releases/history/README-1.10.txt
@@ -0,0 +1,278 @@
+Overview
+========
+
+ 7 new packages in 4 new modules and 1 module with 2 new packages.
+ 43 changed packages.
+164 unchanged packages (or non-visible changes, like testsuites)
+
+New in Tcllib 1.10
+==================
+ Tcllib 1.10
+Module Package New Version Comments
+------ ------- ----------- -----------------------
+fileutil fileutil::multi 0.1 multi-file operations
+ fileutil::multi::op 0.5 ditto, OO API
+------ ------- ----------- -----------------------
+mapproj mapproj 1.0 Map projections.
+------ ------- ----------- -----------------------
+nns nameserv 0.3 nameservice client
+ nameserv::auto 0.1 nameservice extended client
+ nameserv::common 0.1 nameservice shared code
+ nameserv::server 0.3 nameservice server
+------ ------- ----------- -----------------------
+uev uevent 0.1.2 user events
+------ ------- ----------- -----------------------
+wip wip 1.0 word interpreter Tcl 8.4
+ wip 2.0 word interpreter Tcl 8.5
+------ ------- ----------- -----------------------
+
+Changes from Tcllib 1.9 to 1.10
+===============================
+
+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.
+
+ Tcllib 1.9 Tcllib 1.10
+Module Package Old version New Version Comments
+------ ------- ----------- ----------- ---------------
+asn asn 0.7 0.8.1 D, B
+base64 uuencode 1.1.3 1.1.4 B, D
+------ ------- ----------- ----------- ---------------
+bench bench 0.1 0.3.1 EF, D, B
+ bench::out::csv 0.1.1 0.1.2 B
+ bench::out::text 0.1.1 0.1.2 B
+------ ------- ----------- ----------- ---------------
+blowfish blowfish 1.0.2 1.0.3 B, D
+comm comm 4.4 4.5.6 EF (futures), B, D
+des des 1.0.0 1.1.0 EF (padding), D
+------ ------- ----------- ----------- ---------------
+dns dns 1.3.1 1.3.3 B, D
+ ip 1.1.1 1.1.2 B, D
+------ ------- ----------- ----------- ---------------
+doctools doctools 1.2.1 1.3 EF (syntax), B, D, T
+ doctools::idx 0.2.1 0.3 EF (syntax), D, T
+ doctools::toc 0.2.1 0.3 EF (syntax), D, T
+------ ------- ----------- ----------- ---------------
+fileutil fileutil 1.9 1.13.3 EF, B, T, D
+ fileutil::traverse 0.1 0.3 B
+------ ------- ----------- ----------- ---------------
+ftp ftp 2.4.4 2.4.8 B
+ftpd ftpd 1.2.2 1.2.3 B, D
+------ ------- ----------- ----------- ---------------
+grammar_fa grammar::fa 0.2 0.3 EF, D
+ grammar::fa::dexec 0.1.1 0.2 EF (ext. introspection), D
+ grammar::fa::op 0.2 0.4 EF (nullary .|, 2regexp), D
+------ ------- ----------- ----------- ---------------
+http autoproxy 1.3 1.4 B, D
+inifile inifile 0.2 0.2.1 B, D
+interp interp 0.1 0.1.1 B, D, T
+------ ------- ----------- ----------- ---------------
+ldap ldap 1.6.6 1.6.8 B, D
+ ldapx 0.2.2 1.0 API, B
+------ ------- ----------- ----------- ---------------
+log logger 0.7 0.8 EF, D
+------ ------- ----------- ----------- ---------------
+math math::linearalgebra 1.0.1 1.0.2 B, D
+ math::special 0.2 0.2.1 B, D
+ math::statistics 0.3 0.5 EF (mv linreg), D, T
+------ ------- ----------- ----------- ---------------
+mime mime 1.5.1 1.5.2 B, T, D
+ smtp 1.4.2 1.4.4 B, D
+------ ------- ----------- ----------- ---------------
+nmea nmea 0.1 0.1.1 B, D
+page page::compiler::peg::mecpu 0.1 0.1.1 B
+png png 0.1.1 0.1.2 B, D, T
+------ ------- ----------- ----------- ---------------
+sasl SASL::NTLM 1.1.0 1.1.1 B, D
+ SASL::XGoogleToken 1.0.0 1.0.1 B, D
+------ ------- ----------- ----------- ---------------
+sha1 sha1 2.0.2 2.0.3 B, D, T
+ sha256 1.0.1 1.0.2 B, D, T
+------ ------- ----------- ----------- ---------------
+snit snit 1.2 1.3.1 EF (introspection, -class), B
+ snit 2.1 2.2.1 EF (introspection, -class), B
+------ ------- ----------- ----------- ---------------
+struct struct::graph 2.1 2.2 EF (Critcl), T, D
+ struct::list 1.6 1.6.1 B
+ struct::set 2.1.1 2.2.1 EF (Critcl), B, T, D
+------ ------- ----------- ----------- ---------------
+tar tar 0.2 0.4 B, D
+uri uri 1.2 1.2.1 B, D
+------ ------- ----------- ----------- ---------------
+
+
+Invisible or no changes
+------ ------- ----------- ----------- ---------------
+aes aes 1.0.0 D
+base32 base32 0.1 D
+ base32::core 0.1 D
+ base32::hex 0.1 D
+base64 base64 2.3.2 D
+ yencode 1.1.1 D
+bee bee 0.1 D
+bench bench::in 0.1 D
+bibtex bibtex 0.5 D
+calendar calendar 0.2
+cmdline cmdline 1.3 D, T
+control control 0.1.3 D
+counter counter 2.0.4 D
+crc cksum 1.1.1 D
+ crc16 1.1.1 D
+ crc32 1.3 D
+ sum 1.1.0 D
+csv csv 0.7 D
+des tclDES 1.0.0
+ tclDESjr 1.0.0
+dns ip 1.1.1 B
+ resolv 1.0.3
+ spf 1.1.0
+docstrip docstrip 1.2
+ docstrip::util 1.2
+doctools doctools::changelog 0.1.1
+ doctools::cvs 0.1.1
+exif exif 1.1.2 D
+ftp ftp::geturl 0.2
+fumagic fileutil::magic::cfront 1.0
+ fileutil::magic::cgen 1.0
+ fileutil::magic::filetype 1.0.2 D
+ fileutil::magic::mimetype 1.0.2 D
+ fileutil::magic::rt 1.0
+grammar_fa grammar::fa::dacceptor 0.1.1 D
+grammar_me grammar::me::cpu 0.2 D, T
+ grammar::me::cpu::core 0.2 D, T
+ grammar::me::cpu::gasm 0.1 D, T
+ grammar::me::tcl 0.1 D, T
+ grammar::me::util 0.1 D, T
+grammar_peg grammar::peg 0.1 D
+ grammar::peg::interp 0.1 D
+html html 1.4 D
+htmlparse htmlparse 1.1.2 D, T
+ident ident 0.42 D
+interp interp::delegate::method 0.2
+ interp::delegate::proc 0.2
+irc irc 0.6 D
+javascript javascript 1.0.2 D
+jpeg jpeg 0.3 D
+json json 1.0 D
+log log 1.2 D
+ logger::appender 1.3 D
+ logger::utils 1.3 D
+math math 1.2.4 D
+ math::bigfloat 1.2.1 D
+ math::bigfloat 2.0 D
+ math::bignum 3.1.1 D
+ math::calculus 0.7 D
+ math::complexnumbers 1.0.2 D
+ math::constants 1.0.1 D
+ math::fourier 1.0.2 D
+ math::fuzzy 0.2 T, D
+ math::geometry 1.0.3 D
+ math::interpolate 1.0.2 D
+ math::optimize 1.0 D
+ math::polynomials 1.0.1 D
+ math::rationalfunctions 1.0.1 D
+ math::roman 1.0 D
+md4 md4 1.0.4 D
+md5 md5 1.4.4 D
+ md5 2.0.5 D
+md5crypt md5crypt 1.0.0 D
+multiplexer multiplexer 0.2 D, T
+ncgi ncgi 1.3.2 D, T
+nntp nntp 0.2.1 D
+ntp time 1.2.1 D
+otp otp 1.0.0 D
+page page::analysis::peg::emodes 0.1
+ page::analysis::peg::minimize 0.1
+ page::analysis::peg::reachable 0.1
+ page::analysis::peg::realizable 0.1
+ page::gen::peg::canon 0.1
+ page::gen::peg::cpkg 0.1
+ page::gen::peg::hb 0.1
+ page::gen::peg::me 0.1
+ page::gen::peg::mecpu 0.1
+ page::gen::peg::ser 0.1
+ page::gen::tree::text 0.1
+ page::parse::lemon 0.1
+ page::parse::peg 0.1
+ page::parse::peghb 0.1
+ page::parse::pegser 0.1
+ page::pluginmgr 0.2
+ page::util::flow 0.1
+ page::util::norm::lemon 0.1
+ page::util::norm::peg 0.1
+ page::util::peg 0.1
+ page::util::quote 0.1
+pluginmgr pluginmgr 0.1 D
+pop3 pop3 1.6.3 D, T
+pop3d pop3d 1.1.0 D, T
+ pop3d::dbox 1.0.2 D
+ pop3d::udb 1.1 D
+profiler profiler 0.3 D
+rc4 rc4 1.1.0 D
+rcs rcs 0.1 D
+report report 0.3.1 D
+ripemd ripemd128 1.0.3 D
+ ripemd160 1.0.3 D
+sasl SASL 1.3.1 D
+ sha1 1.1.0 D, T
+smtpd smtpd 1.4.0 D
+soundex soundex 1.0 D
+stooop stooop 4.4.1 D, T
+ switched 2.2.1
+struct struct 1.4 D
+ struct 2.1 D
+ struct::graph 1.2.1 D
+ struct::matrix 1.2.1 D
+ struct::matrix 2.0.1 D
+ struct::pool 1.2.1 D
+ struct::prioqueue 1.3.1 D
+ struct::queue 1.4 D
+ struct::record 1.2.1 D
+ struct::skiplist 1.3 D
+ struct::stack 1.3.1 D
+ struct::tree 1.2.2 D
+ struct::tree 2.1.1 D
+term term 0.1 D
+ term::interact::menu 0.1 D
+ term::interact::pager 0.1 D
+ term::receive 0.1 D
+ term::receive::bind 0.1 D
+ term::send 0.1 D
+textutil textutil 0.7.1 D
+ textutil::adjust 0.7 D
+ textutil::expander 1.3.1 D
+ textutil::repeat 0.7 D
+ textutil::split 0.7 D
+ textutil::string 0.7 D
+ textutil::tabify 0.7 D
+ textutil::trim 0.7 D
+tie tie 1.1 D, T
+ tie::std::array 1.0 D, T
+ tie::std::dsource 1.0 D, T
+ tie::std::file 1.0.2 D, T
+ tie::std::growfile 1.0 D, T
+ tie::std::log 1.0 D, T
+ tie::std::rarray 1.0 D, T
+tiff tiff 0.1 D
+transfer transfer::connect 0.1 D
+ transfer::copy 0.1 D
+ transfer::copy::queue 0.1 D
+ transfer::data::destination 0.1 D
+ transfer::data::source 0.1 D
+ transfer::receiver 0.1 D
+ transfer::transmitter 0.1 D
+treeql treeql 1.3.1 D, T
+units units 2.1 D
+uri uri::urn 1.0.2 D
+uuid uuid 1.0.1 D
+------ ------- ----------- ----------- ---------------
diff --git a/tcllib/support/releases/history/README-1.11.1.txt b/tcllib/support/releases/history/README-1.11.1.txt
new file mode 100644
index 0000000..1d99f93
--- /dev/null
+++ b/tcllib/support/releases/history/README-1.11.1.txt
@@ -0,0 +1,59 @@
+Overview
+========
+
+ 4 new packages in 2 new modules.
+ 2 new packages in 2 existing modules.
+ 9 changed packages in 9 modules.
+
+New in Tcllib 1.11.1
+==================
+
+Module Package New Version Comments
+------ ------- ----------- -----------------------
+cache cache::async 0.1 In-memory cache, async result return.
+------ ------- ----------- -----------------------
+map map::slippy 0.1 Open Street Map. Commons,
+ map::slippy::fetcher 0.1 fetching map tiles, and
+ map::slippy::cache 0.1 local cache of map tiles.
+------ ------- ----------- -----------------------
+uevent uevent::onidle 0.1 Merge idle requests for some action.
+------ ------- ----------- -----------------------
+struct struct::graph::op 0.9 Graph operations, GSoC 2008
+------ ------- ----------- -----------------------
+
+Changes from Tcllib 1.11 to 1.11.1
+==================================
+
+ Tcllib 1.11 Tcllib 1.11.1
+Module Package Old version New Version Comments
+------ ------- ----------- ----------- ---------------
+base64 yencode 1.1.1 1.1.2 B
+dns dns 1.3.2 1.3.3 B
+doctools doctools 1.3.5 1.4 EF, D, T
+fileutil fileutil 1.13.4 1.13.5 B
+ldap ldap 1.7 1.8 EF
+math math::linalg 1.0.1 1.1 EF, B, T
+nns nameserv 0.4.1 0.4.2 B
+struct struct::graph 2.3 2.3.1 B
+------ ------- ----------- ----------- ---------------
+
+Invisible changes (no version change)
+------ ------- ----------- ----------- ---------------
+asn asn 0.8 D
+base64 uuencode 1.1.4 T
+tar tar 0.4 D
+------ ------- ----------- ----------- ---------------
+
+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.
diff --git a/tcllib/support/releases/history/README-1.11.txt b/tcllib/support/releases/history/README-1.11.txt
new file mode 100644
index 0000000..86129d1
--- /dev/null
+++ b/tcllib/support/releases/history/README-1.11.txt
@@ -0,0 +1,274 @@
+Overview
+========
+
+ 11 new packages in 4 new modules, and 2 new packages in 2 existing modules.
+ 62 changed packages.
+159 unchanged packages (or non-visible changes, like testsuites)
+
+New in Tcllib 1.11
+==================
+ Tcllib 1.10
+Module Package New Version Comments
+------ ------- ----------- -----------------------
+amazon-s3 S3 1.0.0 access to amazon's S3 service
+ xsxp 1.0 XML processing helper
+------ ------- ----------- -----------------------
+irc picoirc 0.5.1 minimal irc client
+------ ------- ----------- -----------------------
+simulation simulation::annealing 0.2 simulation tools
+ simulation::montecarlo 0.1
+ simulation::random 0.1
+------ ------- ----------- -----------------------
+stringprep stringprep 1.0.0 preparation for
+ stringprep::data 1.0.0 internationalized
+ unicode 1.0.0 strings
+ unicode::data 1.0.0
+------ ------- ----------- -----------------------
+struct struct::disjointset 1.0 union-merge structure
+------ ------- ----------- -----------------------
+yaml huddle 0.1.3 generic serialization format
+ yaml 0.3.3 YAML processing
+------ ------- ----------- -----------------------
+
+Changes from Tcllib 1.10 to 1.11
+================================
+
+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.
+
+ Tcllib 1.10 Tcllib 1.11
+Module Package Old version New Version Comments
+------ ------- ----------- ----------- ---------------
+aes aes 1.0.0 1.0.1 B, D, T
+asn asn 0.8.1 0.8.3 B, D
+base64 base64 2.3.2 2.4 Changed defaults, B, D
+bench bench 0.3.1 0.4 I
+blowfish blowfish 1.0.3 1.0.4 T
+cmdline cmdline 1.3 1.3.1 B, D
+comm comm 4.5.6 4.5.7 B, D
+crc cksum 1.1.1 1.1.2 B, D
+csv csv 0.7 0.7.1 B
+dns spf 1.1.0 1.1.1 B
+doctools doctools 1.3 1.3.5 B
+ doctools::changelog 0.1.1 1 Accept maturity
+ doctools::cvs 0.1.1 1 .
+ doctools::idx 0.3 1 .
+ doctools::toc 0.3 1 .
+fileutil fileutil 1.13.3 1.13.4 B
+ fileutil::multi::op 0.5 0.5.2 B
+ fileutil::traverse 0.3 0.4 B
+ftp ftp 2.4.8 2.4.9 B, D
+ ftp::geturl 0.2 0.2.1 B
+ftpd ftpd 1.2.3 1.2.4 B
+grammar_fa grammar::fa::op 0.4 0.4.1 B
+htmlparse htmlparse 1.1.2 1.1.3 B, D
+http autoproxy 1.4 1.5.1 I, B, D
+inifile inifile 0.2.1 0.2.3 I, B, D
+irc irc 0.6 0.6.1 B, D
+jpeg jpeg 0.3 0.3.3 D, B, T
+ldap ldap 1.6.8 1.7 EF, B
+log log 1.2 1.2.1 B, D
+math math::bigfloat 1.2.1 1.2.2 B
+ math::bigfloat 2.0 2.0.1 B
+ math::calculus 0.7 0.7.1 B
+ math::linearalgebra 1.0.2 1.0.3 B, T
+ math::special 0.2.1 0.2.2 B
+ math::statistics 0.5 0.6 EF, D, T
+md4 md4 1.0.4 1.0.5 B
+md5 md5 2.0.5 2.0.7 B
+md5crypt md5crypt 1.0.0 1.1.0 EF
+mime mime 1.5.2 1.5.4 B
+ smtp 1.4.4 1.4.5 B
+nmea nmea 0.1.1 0.2.0 EF, B, D
+nns nameserv 0.3 0.4.1 B, D
+ nameserv::auto 0.1 0.3 I, B, D
+ nameserv::server 0.3 0.3.2 I, B, D
+pluginmgr pluginmgr 0.1 0.2 B, D
+sasl SASL 1.3.1 1.3.2 B
+struct struct::graph 2.2 2.3 EF, T
+ struct::list 1.6.1 1.7 B, T, EF
+ struct::matrix 2.0.1 2.0.2 B
+ struct::prioqueue 1.3.1 1.4 EF
+ struct::queue 1.4 1.4.1 I, D
+ struct::set 2.2.1 2.2.3 B, T
+ struct::stack 1.3.1 1.3.3 P, T, I, D
+term term::ansi::code::ctrl 0.1 0.1.1 B, D
+textutil textutil::string 0.7 0.7.1 P, D
+tie tie::std::file 1.0.2 1.0.4 B, D
+tiff tiff 0.1 0.2.1 B, T, D
+transfer transfer::copy 0.1 0.2 B
+uev uevent 0.1.2 0.2 EF, B
+wip wip 1.0 1.1.1 EF, B
+ wip 2.0 2.1.1 EF, B
+------ ------- ----------- ----------- ---------------
+
+
+Invisible or no changes
+------ ------- ----------- ----------- ---------------
+base32 base32 0.1 T, D
+ base32::core 0.1 T, D
+ base32::hex 0.1 T, D
+base64 uuencode 1.1.4 D
+ yencode 1.1.1 D
+bee bee 0.1 D
+bench bench::in 0.1
+ bench::out::csv 0.1.2
+ bench::out::text 0.1.2
+bibtex bibtex 0.5 D
+calendar calendar 0.2
+control control 0.1.3
+counter counter 2.0.4
+crc crc16 1.1.1 D
+ crc32 1.3 D
+ sum 1.1.0 D
+des des 1.1.0
+dns dns 1.3.2
+ ip 1.1.2
+ resolv 1.0.3
+docstrip docstrip 1.2
+ docstrip::util 1.2
+exif exif 1.1.2 D
+fileutil fileutil::multi 0.1 D
+fumagic fileutil::magic::cfront 1.0 D
+ fileutil::magic::cgen 1.0 D
+ fileutil::magic::filetype 1.0.2 D
+ fileutil::magic::mimetype 1.0.2 D
+ fileutil::magic::rt 1.0 D
+grammar_fa grammar::fa 0.3
+ grammar::fa::dacceptor 0.1.1
+ grammar::fa::dexec 0.2
+grammar_me grammar::me::cpu 0.2 D
+ grammar::me::cpu::core 0.2 D
+ grammar::me::cpu::gasm 0.1 D
+ grammar::me::tcl 0.1 D
+ grammar::me::util 0.1 D
+grammar_peg grammar::peg 0.1 D
+ grammar::peg::interp 0.1 D
+html html 1.4
+ident ident 0.42 D
+interp interp 0.1.1
+ interp::delegate::method 0.2
+ interp::delegate::proc 0.2
+javascript javascript 1.0.2
+json json 1.0 D, T
+ldap ldapx 1.0 D
+log logger 0.8
+ logger::appender 1.3
+ logger::utils 1.3
+mapproj mapproj 1.0
+math math 1.2.4
+ math::bignum 3.1.1
+ math::complexnumbers 1.0.2
+ math::constants 1.0.1 T
+ math::fourier 1.0.2
+ math::fuzzy 0.2
+ math::geometry 1.0.3
+ math::interpolate 1.0.2
+ math::optimize 1.0
+ math::polynomials 1.0.1
+ math::rationalfunctions 1.0.1
+ math::roman 1.0 D
+md5 md5 1.4.4
+multiplexer multiplexer 0.2
+ncgi ncgi 1.3.2 D
+nns nameserv::common 0.1
+nntp nntp 0.2.1
+ntp time 1.2.1
+otp otp 1.0.0
+page page::analysis::peg::emodes 0.1
+ page::analysis::peg::minimize 0.1
+ page::analysis::peg::reachable 0.1
+ page::analysis::peg::realizable 0.1
+ page::compiler::peg::mecpu 0.1.1
+ page::gen::peg::canon 0.1
+ page::gen::peg::cpkg 0.1
+ page::gen::peg::hb 0.1
+ page::gen::peg::me 0.1
+ page::gen::peg::mecpu 0.1
+ page::gen::peg::ser 0.1
+ page::gen::tree::text 0.1
+ page::parse::lemon 0.1
+ page::parse::peg 0.1
+ page::parse::peghb 0.1
+ page::parse::pegser 0.1
+ page::pluginmgr 0.2
+ page::util::flow 0.1
+ page::util::norm::lemon 0.1
+ page::util::norm::peg 0.1
+ page::util::peg 0.1
+ page::util::quote 0.1
+ pop3d::dbox 1.0.2
+png png 0.1.2 D
+pop3d pop3d 1.1.0
+ pop3d::udb 1.1
+pop3 pop3 1.6.3
+profiler profiler 0.3
+rc4 rc4 1.1.0
+rcs rcs 0.1 D
+report report 0.3.1
+ripemd ripemd128 1.0.3
+ ripemd160 1.0.3
+sasl SASL::NTLM 1.1.1
+ SASL::XGoogleToken 1.0.1
+sha1 sha1 1.1.0 D
+ sha1 2.0.3 D
+ sha256 1.0.2 D
+smtpd smtpd 1.4.0
+snit snit 1.3.1 D, T
+ snit 2.2.1 D, T
+soundex soundex 1.0 D
+stooop stooop 4.4.1
+ switched 2.2.1
+ tclDES 1.0.0
+ tclDESjr 1.0.0
+struct struct 1.4
+ struct 2.1
+ struct::graph 1.2.1
+ struct::matrix 1.2.1
+ struct::pool 1.2.1
+ struct::record 1.2.1
+ struct::skiplist 1.3
+ struct::tree 1.2.2
+ struct::tree 2.1.1 T
+tar tar 0.4 D
+term term 0.1 D
+ term::interact::menu 0.1 D
+ term::interact::pager 0.1 D
+ term::receive 0.1 D
+ term::receive::bind 0.1 D
+ term::send 0.1 D
+textutil textutil 0.7.1 D
+ textutil::adjust 0.7 D
+ textutil::expander 1.3.1 D
+ textutil::repeat 0.7 D
+ textutil::split 0.7 D
+ textutil::tabify 0.7 D
+ textutil::trim 0.7 D
+tie tie 1.1
+ tie::std::array 1.0 D
+ tie::std::dsource 1.0 D
+ tie::std::growfile 1.0 D
+ tie::std::log 1.0 D
+ tie::std::rarray 1.0 D
+transfer transfer::connect 0.1
+ transfer::copy::queue 0.1
+ transfer::data::destination 0.1
+ transfer::data::source 0.1
+ transfer::receiver 0.1
+ transfer::transmitter 0.1
+treeql treeql 1.3.1
+units units 2.1 D
+uri uri 1.2.1
+ uri::urn 1.0.2 D
+uuid uuid 1.0.1
+------ ------- ----------- ----------- ---------------
diff --git a/tcllib/support/releases/history/README-1.12.txt b/tcllib/support/releases/history/README-1.12.txt
new file mode 100644
index 0000000..d4f06b8
--- /dev/null
+++ b/tcllib/support/releases/history/README-1.12.txt
@@ -0,0 +1,271 @@
+Overview
+========
+
+ 72 new packages in 10 modules
+ 46 changed packages in 25 modules
+ 14 internally changed packages in 12 modules
+ 166 unchanged packages in 65 modules
+ 301 packages, total in 95 modules, total
+
+New in tcllib 1.12
+==================
+
+ Module Package New Version Comments
+ ----------------------- ------------------------------- ------------- -----------------------------------------------
+ coroutine coroutine 1 Tcl 8.6+ coroutine/event utilities
+ coroutine::auto 1 s.a.
+ ----------------------- ------------------------------- ------------- -----------------------------------------------
+ doctools2base doctools::config 0.1 doctools v2 foundation
+ doctools::html 0.1
+ doctools::html::cssdefaults 0.1
+ doctools::msgcat 0.1
+ doctools::nroff::man_macros 0.1
+ doctools::paths 0.1
+ doctools::tcl::parse 0.1
+ doctools::text 0.1
+ ----------------------- ------------------------------- ------------- -----------------------------------------------
+ doctools2idx doctools::idx::export 0.1 doctools v2 index handling
+ doctools::idx::export::docidx 0.1
+ doctools::idx::export::html 0.2
+ doctools::idx::export::json 0.1
+ doctools::idx::export::nroff 0.3
+ doctools::idx::export::text 0.2
+ doctools::idx::export::wiki 0.2
+ doctools::idx::import 0.1
+ doctools::idx::import::docidx 0.1
+ doctools::idx::import::json 0.1
+ doctools::idx::parse 0.1
+ doctools::idx::structure 0.1
+ doctools::msgcat::idx::c 0.1
+ doctools::msgcat::idx::de 0.1
+ doctools::msgcat::idx::en 0.1
+ doctools::msgcat::idx::fr 0.1
+ ----------------------- ------------------------------- ------------- -----------------------------------------------
+ doctools2toc doctools::msgcat::toc::c 0.1 doctools v2 TOC handling
+ doctools::msgcat::toc::de 0.1
+ doctools::msgcat::toc::en 0.1
+ doctools::msgcat::toc::fr 0.1
+ doctools::toc::export 0.1
+ doctools::toc::export::doctoc 0.1
+ doctools::toc::export::html 0.1
+ doctools::toc::export::json 0.1
+ doctools::toc::export::nroff 0.2
+ doctools::toc::export::text 0.1
+ doctools::toc::export::wiki 0.1
+ doctools::toc::import 0.1
+ doctools::toc::import::doctoc 0.1
+ doctools::toc::import::json 0.1
+ doctools::toc::parse 0.1
+ doctools::toc::structure 0.1
+ ----------------------- ------------------------------- ------------- -----------------------------------------------
+ json json::write 1 JSON generation
+ math math::machineparameters 0.1 Determine double-precision machine parameters
+ rest rest 1.0.0 Specify RESTful interfaces to webservices
+ ----------------------- ------------------------------- ------------- -----------------------------------------------
+ virtchannel_base tcl::chan::fifo 1 Various basic reflected/virtual channels
+ tcl::chan::fifo2 1
+ tcl::chan::halfpipe 1
+ tcl::chan::memchan 1
+ tcl::chan::null 1
+ tcl::chan::nullzero 1
+ tcl::chan::random 1
+ tcl::chan::string 1
+ tcl::chan::textwindow 1
+ tcl::chan::variable 1
+ tcl::chan::zero 1
+ tcl::randomseed 1
+ ----------------------- ------------------------------- ------------- -----------------------------------------------
+ virtchannel_core tcl::chan::core 1 Core services for OO based reflected
+ tcl::chan::events 1 channels and transformations
+ tcl::transform::core 1
+ ----------------------- ------------------------------- ------------- -----------------------------------------------
+ virtchannel_transform tcl::transform::adler32 1 Various basic channel transforms
+ tcl::transform::base64 1
+ tcl::transform::counter 1
+ tcl::transform::crc32 1
+ tcl::transform::hex 1
+ tcl::transform::identity 1
+ tcl::transform::limitsize 1
+ tcl::transform::observe 1
+ tcl::transform::otp 1
+ tcl::transform::rot 1
+ tcl::transform::spacer 1
+ tcl::transform::zlib 1
+ ----------------------- ------------------------------- ------------- -----------------------------------------------
+
+Changes from tcllib 1.11.1 to 1.12
+==================================
+
+ tcllib 1.11.1 tcllib 1.12
+ Module Package Old Version New Version Comments
+ -------------- ----------------------------- --------------- ------------- ------------
+ base64 base64 2.4 2.4.1 B
+ uuencode 1.1.4 1.1.5 B
+ yencode 1.1.2 1.1.3 B
+ -------------- ----------------------------- --------------- ------------- ------------
+ comm comm 4.5.7 4.6.1 EF B
+ -------------- ----------------------------- --------------- ------------- ------------
+ crc cksum 1.1.2 1.1.3 B
+ crc32 1.3 1.3.1 B D
+ -------------- ----------------------------- --------------- ------------- ------------
+ dns ip 1.1.2 1.1.3 B
+ -------------- ----------------------------- --------------- ------------- ------------
+ doctools doctools 1.4 1.4.3 B
+ doctools::idx 1 1.0.3 D B API
+ doctools::idx 2 D B API
+ doctools::toc 1 1.1.2 D B EF API
+ doctools::toc 2 D B EF API
+ -------------- ----------------------------- --------------- ------------- ------------
+ doctools2idx doctools::idx 1 1.0.3 API
+ doctools::idx 2 API
+ -------------- ----------------------------- --------------- ------------- ------------
+ doctools2toc doctools::toc 1 1.1.2 API
+ doctools::toc 2 API
+ -------------- ----------------------------- --------------- ------------- ------------
+ fileutil fileutil 1.13.5 1.14.2 EF B
+ fileutil::multi::op 0.5.2 0.5.3 B
+ fileutil::traverse 0.4 0.4.1 B
+ -------------- ----------------------------- --------------- ------------- ------------
+ grammar_fa grammar::fa 0.3 0.4 EF B
+ htmlparse htmlparse 1.1.3 1.2 I
+ jpeg jpeg 0.3.3 0.3.5 B
+ json json 1.0 1.0.1 B T
+ -------------- ----------------------------- --------------- ------------- ------------
+ log log 1.2.1 1.3 I B D
+ logger 0.8 0.9 EF
+ -------------- ----------------------------- --------------- ------------- ------------
+ math math 1.2.4 1.2.5 B
+ math::geometry 1.0.3 1.0.4 B
+ math::interpolate 1.0.2 1.0.3 B
+ math::linearalgebra 1.1 1.1.3 B T
+ math::statistics 0.6 0.6.3 B
+ -------------- ----------------------------- --------------- ------------- ------------
+ nmea nmea 0.2.0 API
+ nmea 1.0.0 API
+ -------------- ----------------------------- --------------- ------------- ------------
+ pluginmgr pluginmgr 0.2 0.3 EF
+ pop3 pop3 1.6.3 1.7 EF T
+ -------------- ----------------------------- --------------- ------------- ------------
+ ripemd ripemd128 1.0.3 1.0.4 B
+ ripemd160 1.0.3 1.0.4 B
+ -------------- ----------------------------- --------------- ------------- ------------
+ snit snit 1.3.1 1.4.1 EF B
+ snit 2.2.1 2.3.1 EF B
+ -------------- ----------------------------- --------------- ------------- ------------
+ stringprep stringprep 1.0.0 1.0.1 B
+ stringprep::data 1.0.0 1.0.1 B
+ -------------- ----------------------------- --------------- ------------- ------------
+ struct struct::graph 1.2.1 1.2.1 EF B
+ struct::graph 2.3.1 2.4 EF B
+ struct::graph::op 0.9 0.11.3 EF
+ struct::stack 1.3.3 1.4 EF
+ struct::tree 1.2.2 1.2.2 B
+ struct::tree 2.1.1 2.1.2 B
+ -------------- ----------------------------- --------------- ------------- ------------
+ tar tar 0.4 0.6 EF
+ -------------- ----------------------------- --------------- ------------- ------------
+ transfer transfer::connect 0.1 0.2 EF I
+ transfer::copy 0.2 0.3 I B
+ transfer::data::destination 0.1 0.2 EF I
+ transfer::data::source 0.1 0.2 EF I
+ transfer::receiver 0.1 0.2 EF I
+ transfer::transmitter 0.1 0.2 EF I
+ -------------- ----------------------------- --------------- ------------- ------------
+ wip wip 1.1.1 1.1.2 B
+ wip 2.1.1 2.1.2 B
+ -------------- ----------------------------- --------------- ------------- ------------
+ yaml huddle 0.1.3 0.1.4 B D T
+ yaml 0.3.3 0.3.5 B D T
+ -------------- ----------------------------- --------------- ------------- ------------
+
+Invisible changes (documentation, testsuites)
+=============================================
+
+ tcllib 1.11.1 tcllib 1.12
+ Module Package Old Version New Version Comments
+ ---------- ---------------- --------------- ------------- ----------
+ aes aes 1.0.1 1.0.1 D
+ control control 0.1.3 0.1.3 T
+ crc sum 1.1.0 1.1.0 critcl
+ csv csv 0.7.1 0.7.1 D
+ ---------- ---------------- --------------- ------------- ----------
+ docstrip docstrip 1.2 1.2 D
+ docstrip::util 1.2 1.2 D
+ ---------- ---------------- --------------- ------------- ----------
+ md4 md4 1.0.5 1.0.5 critcl
+ ---------- ---------------- --------------- ------------- ----------
+ md5 md5 1.4.4 1.4.4 critcl
+ md5 2.0.7 2.0.7 critcl
+ ---------- ---------------- --------------- ------------- ----------
+ md5crypt md5crypt 1.1.0 1.1.0 critcl
+ pop3d pop3d 1.1.0 1.1.0 D T
+ rc4 rc4 1.1.0 1.1.0 critcl
+ ---------- ---------------- --------------- ------------- ----------
+ sha1 sha1 1.1.0 1.1.0 critcl
+ sha1 2.0.3 2.0.3 critcl
+ sha256 1.0.2 1.0.2 critcl
+ ---------- ---------------- --------------- ------------- ----------
+ struct struct::list 1.7 1.7 T
+ ---------- ---------------- --------------- ------------- ----------
+
+Unchanged
+=========
+
+ asn, autoproxy, base32, base32::core, base32::hex, bee, bench,
+ bench::in, bench::out::csv, bench::out::text, bibtex, blowfish,
+ cache::async, calendar, cmdline, counter, crc16, des, dns,
+ doctools::changelog, doctools::cvs, exif,
+ fileutil::magic::cfront, fileutil::magic::cgen,
+ fileutil::magic::filetype, fileutil::magic::mimetype,
+ fileutil::magic::rt, fileutil::multi, ftp, ftp::geturl, ftpd,
+ 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, html, ident, inifile,
+ interp, interp::delegate::method, interp::delegate::proc, irc,
+ javascript, ldap, ldapx, logger::appender, logger::utils,
+ map::slippy, map::slippy::cache, map::slippy::fetcher, mapproj,
+ math::bigfloat, math::bignum, math::calculus,
+ math::complexnumbers, math::constants, math::fourier,
+ math::fuzzy, math::optimize, math::polynomials,
+ math::rationalfunctions, math::roman, math::special, mime,
+ multiplexer, nameserv, nameserv::auto, nameserv::common,
+ nameserv::server, ncgi, nntp, otp, page::analysis::peg::emodes,
+ page::analysis::peg::minimize, page::analysis::peg::reachable,
+ page::analysis::peg::realizable, page::compiler::peg::mecpu,
+ 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::util::flow, page::util::norm::lemon,
+ page::util::norm::peg, page::util::peg, page::util::quote,
+ picoirc, png, pop3d::dbox, pop3d::udb, profiler, rcs, report,
+ resolv, S3, SASL, SASL::NTLM, SASL::XGoogleToken,
+ simulation::annealing, simulation::montecarlo,
+ simulation::random, smtp, smtpd, soundex, spf, stooop, struct,
+ struct::disjointset, struct::matrix, struct::pool,
+ struct::prioqueue, struct::queue, struct::record, struct::set,
+ struct::skiplist, switched, tclDES, tclDESjr, term,
+ term::interact::menu, term::interact::pager, term::receive,
+ term::receive::bind, term::send, textutil, textutil::adjust,
+ textutil::expander, textutil::repeat, textutil::split,
+ textutil::string, textutil::tabify, textutil::trim, tie,
+ tie::std::array, tie::std::dsource, tie::std::file,
+ tie::std::growfile, tie::std::log, tie::std::rarray, tiff, time,
+ transfer::copy::queue, treeql, uevent, uevent::onidle, unicode,
+ unicode::data, units, uri, uri::urn, uuid, xsxp
+
+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.
+
diff --git a/tcllib/support/releases/history/README-1.13.txt b/tcllib/support/releases/history/README-1.13.txt
new file mode 100644
index 0000000..282887a
--- /dev/null
+++ b/tcllib/support/releases/history/README-1.13.txt
@@ -0,0 +1,272 @@
+Overview
+========
+
+ 44 new packages in 10 modules
+ 29 changed packages in 24 modules
+ 62 internally changed packages in 11 modules
+ 207 unchanged packages in 79 modules
+ 348 packages, total in 103 modules, total
+
+New in tcllib 1.13
+==================
+
+ Module Package New Version Comments
+ ---------------- ------------------------------------ ------------- ----------
+ base64 ascii85 1.0
+ gpx gpx 1
+ ---------------- ------------------------------------ ------------- ----------
+ grammar_aycock grammar::aycock 1.0
+ grammar::aycock::debug 1.0
+ grammar::aycock::runtime 1.0
+ ---------------- ------------------------------------ ------------- ----------
+ hook hook 0.1
+ imap4 imap4 0.3
+ ---------------- ------------------------------------ ------------- ----------
+ math math::calculus::symdiff 1.0
+ math::numtheory 1.0
+ ---------------- ------------------------------------ ------------- ----------
+ namespacex namespacex 0.1
+ pki pki 0.1
+ ---------------- ------------------------------------ ------------- ----------
+ pt char 1
+ configuration 1
+ paths 1
+ pt::ast 1.1
+ pt::cparam::configuration::critcl 1.0.1
+ pt::parse::peg 1
+ pt::pe 1
+ pt::pe::op 1
+ pt::peg 1
+ pt::peg::container 1
+ pt::peg::container::peg 1
+ pt::peg::export 1
+ pt::peg::export::container 1
+ pt::peg::export::json 1
+ pt::peg::export::peg 1
+ pt::peg::from::json 1
+ pt::peg::from::peg 1
+ pt::peg::import 1
+ pt::peg::import::json 1
+ pt::peg::interp 1
+ pt::peg::op 1
+ pt::peg::to::container 1
+ pt::peg::to::cparam 1.0.1
+ pt::peg::to::json 1
+ pt::peg::to::param 1
+ pt::peg::to::peg 1
+ pt::peg::to::tclparam 1
+ pt::pgen 1
+ pt::rde 1.0.1
+ pt::tclparam::configuration::snit 1.0.1
+ pt::tclparam::configuration::tcloo 1.0.1
+ text::write 1
+ ---------------- ------------------------------------ ------------- ----------
+ tepam tepam 0.2.0
+ ---------------- ------------------------------------ ------------- ----------
+
+Changes from tcllib 1.12 to 1.13
+================================
+
+ tcllib 1.12 tcllib 1.13
+ Module Package Old Version New Version Comments
+ -------------- --------------------- ------------- ------------- ----------
+ aes aes 1.0.1 1.0.2 B
+ asn asn 0.8.3 0.8.4 B
+ base64 base64 2.4.1 2.4.2 D B
+ cmdline cmdline 1.3.1 1.3.2 D B
+ comm comm 4.6.1 4.6.2 B
+ csv csv 0.7.1 0.7.2 D B
+ dns ip 1.1.3 1.2 EF
+ docstrip docstrip::util 1.2 1.3 D EF B
+ -------------- --------------------- ------------- ------------- ----------
+ doctools doctools 1.4.3 1.4.11 EF B
+ doctools::idx 1.0.3 1.0.4 B
+ doctools::idx 2 2 B
+ doctools::toc 1.1.2 1.1.3 B
+ doctools::toc 2 2 B
+ -------------- --------------------- ------------- ------------- ----------
+ doctools2idx doctools::idx 1.0.3 1.0.4 B
+ doctools::idx 2 2 B
+ -------------- --------------------- ------------- ------------- ----------
+ doctools2toc doctools::toc 1.1.2 1.1.3 B
+ doctools::toc 2 2 B
+ -------------- --------------------- ------------- ------------- ----------
+ fileutil fileutil 1.14.2 1.14.4 B EF
+ ftpd ftpd 1.2.4 1.2.5 B
+ json json 1.0.1 1.1.1 I B
+ map map::slippy 0.2 0.3 B
+ -------------- --------------------- ------------- ------------- ----------
+ math math::fuzzy 0.2 0.2.1 B
+ math::geometry 1.0.4 1.1.2 EF B D
+ math::linearalgebra 1.1.3 1.1.4 B
+ math::statistics 0.6.3 0.7.0 EF T
+ -------------- --------------------- ------------- ------------- ----------
+ pop3 pop3 1.7 1.8 EF
+ sha1 sha256 1.0.2 1.0.3 B
+ -------------- --------------------- ------------- ------------- ----------
+ snit snit 1.4.1 1.4.2 D B
+ snit 2.3.1 2.3.2 D B
+ -------------- --------------------- ------------- ------------- ----------
+ struct struct::list 1.7 1.8 EF T D
+ struct::queue 1.4.1 1.4.2 I T
+ struct::stack 1.4 1.5.1 EF I
+ -------------- --------------------- ------------- ------------- ----------
+ tar tar 0.6 0.7 EF
+ units units 2.1 2.1.1 B
+ -------------- --------------------- ------------- ------------- ----------
+ wip wip 1.1.2 1.2 EF
+ wip 2.1.2 2.2 EF
+ -------------- --------------------- ------------- ------------- ----------
+ yaml huddle 0.1.4 0.1.5 B
+ -------------- --------------------- ------------- ------------- ----------
+
+Invisible changes (documentation, testsuites)
+=============================================
+
+ tcllib 1.12 tcllib 1.13
+ Module Package Old Version New Version Comments
+ ----------------------- ------------------------------- ------------- ------------- ----------
+ coroutine coroutine 1 1 D
+ coroutine::auto 1 1 D
+ ----------------------- ------------------------------- ------------- ------------- ----------
+ doctools2base doctools::msgcat 0.1 0.1 D
+ ----------------------- ------------------------------- ------------- ------------- ----------
+ doctools2idx doctools::idx::export 0.1 0.1 D
+ doctools::idx::export::docidx 0.1 0.1 D
+ doctools::idx::export::html 0.2 0.2 D
+ doctools::idx::export::json 0.1 0.1 D
+ doctools::idx::export::nroff 0.3 0.3 D
+ doctools::idx::export::text 0.2 0.2 D
+ doctools::idx::export::wiki 0.2 0.2 D
+ doctools::idx::import 0.1 0.1 D
+ doctools::idx::import::docidx 0.1 0.1 D
+ doctools::idx::import::json 0.1 0.1 D
+ doctools::msgcat::idx::c 0.1 0.1 D
+ doctools::msgcat::idx::de 0.1 0.1 D
+ doctools::msgcat::idx::en 0.1 0.1 D
+ doctools::msgcat::idx::fr 0.1 0.1 D
+ ----------------------- ------------------------------- ------------- ------------- ----------
+ doctools2toc doctools::msgcat::toc::c 0.1 0.1 D
+ doctools::msgcat::toc::de 0.1 0.1 D
+ doctools::msgcat::toc::en 0.1 0.1 D
+ doctools::msgcat::toc::fr 0.1 0.1 D
+ doctools::toc::export 0.1 0.1 D
+ doctools::toc::export::doctoc 0.1 0.1 D
+ doctools::toc::export::html 0.1 0.1 D
+ doctools::toc::export::json 0.1 0.1 D
+ doctools::toc::export::nroff 0.2 0.2 D
+ doctools::toc::export::text 0.1 0.1 D
+ doctools::toc::export::wiki 0.1 0.1 D
+ doctools::toc::import 0.1 0.1 D
+ doctools::toc::import::doctoc 0.1 0.1 D
+ doctools::toc::import::json 0.1 0.1 D
+ ----------------------- ------------------------------- ------------- ------------- ----------
+ http autoproxy 1.5.1 1.5.1 D
+ mime smtp 1.4.5 1.4.5 D
+ simulation simulation::random 0.1 0.1 D
+ struct struct::graph::op 0.11.3 0.11.3 D T
+ ----------------------- ------------------------------- ------------- ------------- ----------
+ virtchannel_base tcl::chan::fifo 1 1 D
+ tcl::chan::fifo2 1 1 D
+ tcl::chan::halfpipe 1 1 D
+ tcl::chan::memchan 1 1 D
+ tcl::chan::null 1 1 D
+ tcl::chan::nullzero 1 1 D
+ tcl::chan::random 1 1 D
+ tcl::chan::string 1 1 D
+ tcl::chan::textwindow 1 1 D
+ tcl::chan::variable 1 1 D
+ tcl::chan::zero 1 1 D
+ tcl::randomseed 1 1 D
+ ----------------------- ------------------------------- ------------- ------------- ----------
+ virtchannel_core tcl::chan::core 1 1 D
+ tcl::chan::events 1 1 D
+ tcl::transform::core 1 1 D
+ ----------------------- ------------------------------- ------------- ------------- ----------
+ virtchannel_transform tcl::transform::adler32 1 1 D
+ tcl::transform::base64 1 1 D
+ tcl::transform::counter 1 1 D
+ tcl::transform::crc32 1 1 D
+ tcl::transform::hex 1 1 D
+ tcl::transform::identity 1 1 D
+ tcl::transform::limitsize 1 1 D
+ tcl::transform::observe 1 1 D
+ tcl::transform::otp 1 1 D
+ tcl::transform::rot 1 1 D
+ tcl::transform::spacer 1 1 D
+ tcl::transform::zlib 1 1 D
+ ----------------------- ------------------------------- ------------- ------------- ----------
+
+Unchanged
+=========
+
+ base32, base32::core, base32::hex, bee, bench, bench::in,
+ bench::out::csv, bench::out::text, bibtex, blowfish,
+ cache::async, calendar, cksum, control, counter, crc16, crc32,
+ des, dns, docstrip, doctools::changelog, doctools::config,
+ doctools::cvs, doctools::html, doctools::html::cssdefaults,
+ doctools::idx::parse, doctools::idx::structure,
+ doctools::nroff::man_macros, doctools::paths,
+ doctools::tcl::parse, doctools::text, doctools::toc::parse,
+ doctools::toc::structure, exif, fileutil::magic::cfront,
+ fileutil::magic::cgen, fileutil::magic::filetype,
+ fileutil::magic::mimetype, fileutil::magic::rt, fileutil::multi,
+ fileutil::multi::op, fileutil::traverse, ftp, ftp::geturl,
+ 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, html, htmlparse, ident,
+ inifile, interp, interp::delegate::method,
+ interp::delegate::proc, irc, javascript, jpeg, json::write,
+ ldap, ldapx, log, logger, logger::appender, logger::utils,
+ map::slippy::cache, map::slippy::fetcher, mapproj, math,
+ math::bigfloat, math::bignum, math::calculus,
+ math::complexnumbers, math::constants, math::fourier,
+ math::interpolate, math::machineparameters, math::optimize,
+ math::polynomials, math::rationalfunctions, math::roman,
+ math::special, md4, md5, md5crypt, mime, multiplexer, nameserv,
+ nameserv::auto, nameserv::common, nameserv::server, ncgi, nmea,
+ nntp, otp, page::analysis::peg::emodes,
+ page::analysis::peg::minimize, page::analysis::peg::reachable,
+ page::analysis::peg::realizable, page::compiler::peg::mecpu,
+ 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::util::flow, page::util::norm::lemon,
+ page::util::norm::peg, page::util::peg, page::util::quote,
+ picoirc, pluginmgr, png, pop3d, pop3d::dbox, pop3d::udb,
+ profiler, rc4, rcs, report, resolv, rest, ripemd128, ripemd160,
+ S3, SASL, SASL::NTLM, SASL::XGoogleToken, sha1,
+ simulation::annealing, simulation::montecarlo, smtpd, soundex,
+ spf, stooop, stringprep, stringprep::data, struct,
+ struct::disjointset, struct::graph, struct::matrix,
+ struct::pool, struct::prioqueue, struct::record, struct::set,
+ struct::skiplist, struct::tree, sum, switched, tclDES, tclDESjr,
+ term, term::interact::menu, term::interact::pager,
+ term::receive, term::receive::bind, term::send, textutil,
+ textutil::adjust, textutil::expander, textutil::repeat,
+ textutil::split, textutil::string, textutil::tabify,
+ textutil::trim, tie, tie::std::array, tie::std::dsource,
+ tie::std::file, tie::std::growfile, tie::std::log,
+ tie::std::rarray, tiff, time, transfer::connect, transfer::copy,
+ transfer::copy::queue, transfer::data::destination,
+ transfer::data::source, transfer::receiver,
+ transfer::transmitter, treeql, uevent, uevent::onidle, unicode,
+ unicode::data, uri, uri::urn, uuencode, uuid, xsxp, yaml,
+ yencode
+
+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.
+
diff --git a/tcllib/support/releases/history/README-1.14.txt b/tcllib/support/releases/history/README-1.14.txt
new file mode 100644
index 0000000..b9b83aa
--- /dev/null
+++ b/tcllib/support/releases/history/README-1.14.txt
@@ -0,0 +1,219 @@
+Overview
+========
+
+ 21 new packages in 7 modules
+ 30 changed packages in 24 modules
+ 8 internally changed packages in 8 modules
+ 328 unchanged packages in 89 modules
+ 393 packages, total in 107 modules, total
+
+New in tcllib 1.14
+==================
+
+ Module Package New Version Comments
+ ------------------ --------------------------------- ------------- ----------
+ lambda lambda 1
+ math math::decimal 1.0.2 T
+ ooutil oo::util 1
+ pt pt::peg::import::peg 1
+ try try 1
+ ------------------ --------------------------------- ------------- ----------
+ valtype valtype::common 1
+ valtype::creditcard::amex 1
+ valtype::creditcard::discover 1
+ valtype::creditcard::mastercard 1
+ valtype::creditcard::visa 1
+ valtype::gs1::ean13 1
+ valtype::iban 1
+ valtype::imei 1
+ valtype::isbn 1
+ valtype::luhn 1
+ valtype::luhn5 1
+ valtype::usnpi 1
+ valtype::verhoeff 1
+ ------------------ --------------------------------- ------------- ----------
+ virtchannel_base tcl::chan::cat 1.0.1
+ tcl::chan::facade 1.0.1
+ tcl::chan::std 1.0.1
+ ------------------ --------------------------------- ------------- ----------
+
+Changes from tcllib 1.13 to 1.14
+================================
+
+ tcllib 1.13 tcllib 1.14
+ Module Package Old Version New Version Comments
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ cmdline cmdline 1.3.2 1.3.3 B T
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ coroutine coroutine 1 1.1 B
+ coroutine::auto 1 1.1 B
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ csv csv 0.7.2 0.7.3 B D T
+ doctools doctools 1.4.11 1.4.13 B T
+ fileutil fileutil::traverse 0.4.1 0.4.2 B
+ ftp ftp 2.4.9 2.4.11 B
+ ftpd ftpd 1.2.5 1.2.6 B
+ grammar_peg grammar::peg::interp 0.1 0.1.1 B
+ inifile inifile 0.2.3 0.2.4 B
+ interp interp 0.1.1 0.1.2 B
+ jpeg jpeg 0.3.5 0.4.0 I D
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ json json 1.1.1 1.1.2 B T
+ json::write 1 1.0.1 B
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ map map::slippy 0.3 0.4 B D T
+ pki pki 0.1 0.2 B T
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ pt pt::pgen 1 1.0.1 B
+ pt::rde 1.0.1 1.0.2 B T
+ pt::tclparam::configuration::tcloo 1.0.1 1.0.2 B T
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ rest rest 1.0.0 1.0 ---
+ simulation simulation::random 0.1 0.3 B D
+ smtpd smtpd 1.4.0 1.5 EF
+ struct struct::list 1.8 1.8.1 B
+ term term::ansi::ctrl::unix 0.1 0.1.1 B
+ textutil textutil::adjust 0.7 0.7.1 B
+ uri uri 1.2.1 1.2.2 B
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ virtchannel_base tcl::chan::memchan 1 1.0.2 B
+ tcl::chan::string 1 1.0.1 B
+ tcl::chan::variable 1 1.0.2 B
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ yaml yaml 0.3.5 0.3.6 B
+ ------------------ ------------------------------------ ------------- ------------- ----------
+
+Invisible changes (documentation, testsuites)
+=============================================
+
+ tcllib 1.13 tcllib 1.14
+ Module Package Old Version New Version Comments
+ ------------- ----------------------------------- ------------- ------------- ----------
+ base64 base64 2.4.2 2.4.2 T
+ hook hook 0.1 0.1 D
+ math math::linearalgebra 1.1.4 1.1.4 D
+ multiplexer multiplexer 0.2 0.2 T
+ pop3 pop3 1.8 1.8 T
+ pop3d pop3d 1.1.0 1.1.0 T
+ pt pt::cparam::configuration::critcl 1.0.1 1.0.1 T
+ tepam tepam 0.2.0 0.2.0 T
+ ------------- ----------------------------------- ------------- ------------- ----------
+
+Unchanged
+=========
+
+ aes, ascii85, asn, autoproxy, base32, base32::core, base32::hex,
+ bee, bench, bench::in, bench::out::csv, bench::out::text,
+ bibtex, blowfish, cache::async, calendar, char, cksum, comm,
+ configuration, control, counter, crc16, crc32, des, dns,
+ docstrip, docstrip::util, doctools::changelog, doctools::config,
+ doctools::cvs, doctools::html, doctools::html::cssdefaults,
+ doctools::idx, doctools::idx, doctools::idx::export,
+ 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, 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::paths,
+ doctools::tcl::parse, doctools::text, doctools::toc,
+ doctools::toc, doctools::toc::export,
+ 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, doctools::toc::import::doctoc,
+ doctools::toc::import::json, doctools::toc::parse,
+ doctools::toc::structure, exif, fileutil,
+ fileutil::magic::cfront, fileutil::magic::cgen,
+ fileutil::magic::filetype, fileutil::magic::mimetype,
+ fileutil::magic::rt, fileutil::multi, fileutil::multi::op,
+ ftp::geturl, 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, html,
+ htmlparse, huddle, ident, imap4, interp::delegate::method,
+ interp::delegate::proc, ip, irc, javascript, ldap, ldapx, log,
+ logger, logger::appender, logger::utils, map::slippy::cache,
+ map::slippy::fetcher, mapproj, math, math::bigfloat,
+ math::bignum, math::calculus, math::calculus::symdiff,
+ math::complexnumbers, math::constants, math::fourier,
+ math::fuzzy, math::geometry, math::interpolate,
+ math::machineparameters, math::numtheory, math::optimize,
+ math::polynomials, math::rationalfunctions, math::roman,
+ math::special, math::statistics, md4, md5, md5crypt, mime,
+ nameserv, nameserv::auto, nameserv::common, nameserv::server,
+ namespacex, ncgi, nmea, nntp, 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, paths, picoirc, pluginmgr, png, pop3d::dbox,
+ pop3d::udb, profiler, pt::ast, pt::parse::peg, pt::pe,
+ pt::pe::op, pt::peg, pt::peg::container,
+ pt::peg::container::peg, pt::peg::export,
+ pt::peg::export::container, pt::peg::export::json,
+ pt::peg::export::peg, pt::peg::from::json, pt::peg::from::peg,
+ pt::peg::import, pt::peg::import::json, pt::peg::interp,
+ pt::peg::op, 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::tclparam::configuration::snit, rc4,
+ rcs, report, resolv, ripemd128, ripemd160, S3, SASL, SASL::NTLM,
+ SASL::XGoogleToken, sha1, sha256, simulation::annealing,
+ simulation::montecarlo, smtp, snit, soundex, spf, stooop,
+ stringprep, stringprep::data, struct, struct::disjointset,
+ struct::graph, struct::graph::op, struct::matrix, struct::pool,
+ struct::prioqueue, struct::queue, struct::record, struct::set,
+ struct::skiplist, struct::stack, struct::tree, sum, switched,
+ tar, tcl::chan::core, tcl::chan::events, tcl::chan::fifo,
+ tcl::chan::fifo2, tcl::chan::halfpipe, tcl::chan::null,
+ tcl::chan::nullzero, tcl::chan::random, tcl::chan::textwindow,
+ 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,
+ term, term::ansi::code, term::ansi::code::attr,
+ term::ansi::code::ctrl, term::ansi::code::macros,
+ term::ansi::send, term::interact::menu, term::interact::pager,
+ term::receive, term::receive::bind, term::send, text::write,
+ textutil, textutil::expander, textutil::repeat, textutil::split,
+ textutil::string, textutil::tabify, textutil::trim, tie,
+ tie::std::array, tie::std::dsource, tie::std::file,
+ tie::std::growfile, tie::std::log, tie::std::rarray, tiff, time,
+ transfer::connect, transfer::copy, transfer::copy::queue,
+ transfer::data::destination, transfer::data::source,
+ transfer::receiver, transfer::transmitter, treeql, uevent,
+ uevent::onidle, unicode, unicode::data, units, uri::urn,
+ uuencode, uuid, wip, xsxp, yencode
+
+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.
+
diff --git a/tcllib/support/releases/history/README-1.15.txt b/tcllib/support/releases/history/README-1.15.txt
new file mode 100644
index 0000000..8ee8383
--- /dev/null
+++ b/tcllib/support/releases/history/README-1.15.txt
@@ -0,0 +1,220 @@
+Overview
+========
+
+ 7 new packages in 5 modules
+ 33 changed packages in 29 modules
+ 10 internally changed packages in 6 modules
+ 344 unchanged packages in 90 modules
+ 400 packages, total in 110 modules, total
+
+New in tcllib 1.15
+==================
+
+ Module Package New Version Comments
+ ----------- ------------------------- ------------- ----------
+ clock clock::iso8601 0.1
+ clock::rfc2822 0.1
+ ----------- ------------------------- ------------- ----------
+ fileutil fileutil::decode 0.1
+ generator generator 0.1
+ map map::geocode::nominatim 0.1
+ ----------- ------------------------- ------------- ----------
+ zip zipfile::decode 0.2
+ zipfile::encode 0.1
+ ----------- ------------------------- ------------- ----------
+
+Changes from tcllib 1.14 to 1.15
+================================
+
+ tcllib 1.14 tcllib 1.15
+ Module Package Old Version New Version Comments
+ ------------------ ------------------------ ------------- ------------- ----------
+ aes aes 1.0.2 1.1 D EF
+ crc crc16 1.1.1 1.1.2 B
+ csv csv 0.7.3 0.8 EF
+ doctools doctools 1.4.13 1.4.14 T B
+ ------------------ ------------------------ ------------- ------------- ----------
+ fileutil fileutil 1.14.4 1.14.5 B
+ fileutil::traverse 0.4.2 0.4.3 B
+ ------------------ ------------------------ ------------- ------------- ----------
+ grammar_peg grammar::peg 0.1 0.2 B
+ htmlparse htmlparse 1.2 1.2.1 B
+ http autoproxy 1.5.1 1.5.3 B
+ imap4 imap4 0.3 0.4 EF
+ inifile inifile 0.2.4 0.2.5 B
+ json json::write 1.0.1 1.0.2 B
+ log logger 0.9 0.9.3 B
+ ------------------ ------------------------ ------------- ------------- ----------
+ map map::slippy 0.4 0.5 EF
+ map::slippy::fetcher 0.2 0.3 EF
+ ------------------ ------------------------ ------------- ------------- ----------
+ math math::statistics 0.7.0 0.8.0 EF
+ mime mime 1.5.4 1.5.6 B
+ ncgi ncgi 1.3.2 1.4.1 EF B T D
+ ooutil oo::util 1 1.1 EF
+ pki pki 0.2 0.6 EF
+ png png 0.1.2 0.2 EF
+ pop3 pop3 1.8 1.9 B T
+ simulation simulation::random 0.3 0.3.1 B
+ ------------------ ------------------------ ------------- ------------- ----------
+ struct struct::list 1.8.1 1.8.2 B T
+ struct::queue 1.4.2 1.4.4 B T D
+ struct::stack 1.5.1 1.5.3 B T
+ ------------------ ------------------------ ------------- ------------- ----------
+ tar tar 0.7 0.7.1 B
+ tepam tepam 0.2.0 0.4.0 EF D T
+ term term::ansi::code::ctrl 0.1.1 0.1.2 B
+ uev uevent 0.2 0.3.1 EF B
+ uuid uuid 1.0.1 1.0.2 B
+ valtype valtype::iban 1 1.1 EF
+ virtchannel_base tcl::chan::cat 1.0.1 1.0.2 B
+ ------------------ ------------------------ ------------- ------------- ----------
+
+Invisible changes (documentation, testsuites)
+=============================================
+
+ tcllib 1.14 tcllib 1.15
+ Module Package Old Version New Version Comments
+ ------------ ------------------------ ------------- ------------- ----------
+ base64 base64 2.4.2 2.4.2 D
+ cmdline cmdline 1.3.3 1.3.3 T
+ ------------ ------------------------ ------------- ------------- ----------
+ grammar_me grammar::me::cpu 0.2 0.2 T
+ grammar::me::cpu::core 0.2 0.2 T
+ grammar::me::cpu::gasm 0.1 0.1 T
+ grammar::me::tcl 0.1 0.1 T
+ grammar::me::util 0.1 0.1 T
+ ------------ ------------------------ ------------- ------------- ----------
+ irc irc 0.6.1 0.6.1 D
+ ------------ ------------------------ ------------- ------------- ----------
+ struct struct::tree 1.2.2 1.2.2 D
+ struct::tree 2.1.2 2.1.2 D
+ ------------ ------------------------ ------------- ------------- ----------
+ try try 1 1 D
+ ------------ ------------------------ ------------- ------------- ----------
+
+Unchanged
+=========
+
+ ascii85, asn, base32, base32::core, base32::hex, bee, bench,
+ bench::in, bench::out::csv, bench::out::text, bibtex, blowfish,
+ cache::async, calendar, char, cksum, comm, configuration,
+ control, coroutine, coroutine::auto, counter, crc32, des, dns,
+ docstrip, docstrip::util, doctools::changelog, doctools::config,
+ doctools::cvs, doctools::html, doctools::html::cssdefaults,
+ doctools::idx, doctools::idx, doctools::idx::export,
+ 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, 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::paths,
+ doctools::tcl::parse, doctools::text, doctools::toc,
+ doctools::toc, doctools::toc::export,
+ 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, doctools::toc::import::doctoc,
+ doctools::toc::import::json, doctools::toc::parse,
+ doctools::toc::structure, exif, fileutil::magic::cfront,
+ fileutil::magic::cgen, fileutil::magic::filetype,
+ fileutil::magic::mimetype, fileutil::magic::rt, fileutil::multi,
+ fileutil::multi::op, ftp, ftp::geturl, ftpd, gpx,
+ grammar::aycock, grammar::aycock::debug,
+ grammar::aycock::runtime, grammar::fa, grammar::fa::dacceptor,
+ grammar::fa::dexec, grammar::fa::op, grammar::peg::interp, hook,
+ html, huddle, ident, interp, interp::delegate::method,
+ interp::delegate::proc, ip, javascript, jpeg, json, lambda,
+ ldap, ldapx, log, logger::appender, logger::utils,
+ map::slippy::cache, mapproj, math, math::bigfloat, math::bignum,
+ math::calculus, math::calculus::symdiff, math::complexnumbers,
+ math::constants, math::decimal, math::fourier, math::fuzzy,
+ math::geometry, math::interpolate, math::linearalgebra,
+ math::machineparameters, math::numtheory, math::optimize,
+ math::polynomials, math::rationalfunctions, math::roman,
+ math::special, md4, md5, md5crypt, multiplexer, nameserv,
+ nameserv::auto, nameserv::common, nameserv::server, namespacex,
+ nmea, nntp, 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, paths, picoirc, pluginmgr, pop3d,
+ pop3d::dbox, pop3d::udb, profiler, pt::ast,
+ pt::cparam::configuration::critcl, pt::parse::peg, pt::pe,
+ pt::pe::op, pt::peg, pt::peg::container,
+ pt::peg::container::peg, pt::peg::export,
+ pt::peg::export::container, pt::peg::export::json,
+ pt::peg::export::peg, pt::peg::from::json, pt::peg::from::peg,
+ pt::peg::import, pt::peg::import::json, pt::peg::import::peg,
+ pt::peg::interp, pt::peg::op, 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::tclparam::configuration::snit,
+ pt::tclparam::configuration::tcloo, rc4, rcs, report, resolv,
+ rest, ripemd128, ripemd160, S3, SASL, SASL::NTLM,
+ SASL::XGoogleToken, sha1, sha256, simulation::annealing,
+ simulation::montecarlo, smtp, smtpd, snit, soundex, spf, stooop,
+ stringprep, stringprep::data, struct, struct::disjointset,
+ struct::graph, struct::graph::op, struct::matrix, struct::pool,
+ struct::prioqueue, struct::record, struct::set,
+ struct::skiplist, sum, switched, tcl::chan::core,
+ tcl::chan::events, tcl::chan::facade, tcl::chan::fifo,
+ tcl::chan::fifo2, tcl::chan::halfpipe, 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, term, term::ansi::code,
+ term::ansi::code::attr, 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, textutil::adjust,
+ textutil::expander, textutil::repeat, textutil::split,
+ textutil::string, textutil::tabify, textutil::trim, tie,
+ tie::std::array, tie::std::dsource, tie::std::file,
+ tie::std::growfile, tie::std::log, tie::std::rarray, tiff, time,
+ transfer::connect, transfer::copy, transfer::copy::queue,
+ transfer::data::destination, transfer::data::source,
+ transfer::receiver, transfer::transmitter, treeql,
+ 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::imei,
+ valtype::isbn, valtype::luhn, valtype::luhn5, valtype::usnpi,
+ valtype::verhoeff, wip, xsxp, yaml, yencode
+
+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.
+
diff --git a/tcllib/support/releases/history/README-1.16.txt b/tcllib/support/releases/history/README-1.16.txt
new file mode 100644
index 0000000..d820acb
--- /dev/null
+++ b/tcllib/support/releases/history/README-1.16.txt
@@ -0,0 +1,516 @@
+Overview
+========
+
+ 11 new packages in 7 modules
+ 45 changed packages in 26 modules
+ 288 internally changed packages in 100 modules
+ 61 unchanged packages in 11 modules
+ 411 packages, total in 114 modules, total
+
+New in tcllib 1.16
+==================
+
+ Module Package New Version Comments
+ ----------- ---------------------- ------------- ----------
+ debug debug 1.0.2
+ debug::caller 1
+ debug::heartbeat 1
+ debug::timestamp 1
+ ----------- ---------------------- ------------- ----------
+ dtplite dtplite 1.1
+ pt pt::rde::oo 1.0.2
+ sasl SASL::SCRAM 0.1
+ ----------- ---------------------- ------------- ----------
+ string string::token 1
+ string::token::shell 1.1
+ ----------- ---------------------- ------------- ----------
+ tepam tepam::doc_gen 0.1.1
+ websocket websocket 1.3
+ ----------- ---------------------- ------------- ----------
+
+Changes from tcllib 1.15 to 1.16
+================================
+
+ tcllib 1.15 tcllib 1.16
+ Module Package Old Version New Version Comments
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ aes aes 1.1 1.1.1 B D T
+ coroutine coroutine::auto 1.1 1.1.1 B D
+ dns ip 1.2 1.2.2 B D T
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ doctools doctools 1.4.14 1.4.17 B D T
+ doctools::changelog 1 1.1 D
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ fileutil fileutil 1.14.5 1.14.6 B D T
+ fileutil::decode 0.1 0.2 B
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ ftp ftp 2.4.11 2.4.12 B D
+ grammar_fa grammar::fa 0.4 0.5 B D
+ imap4 imap4 0.4 0.5.2 B D EF
+ jpeg jpeg 0.4.0 0.5 B D T
+ json json 1.1.2 1.3.2 D EF T
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ math math::calculus 0.7.1 0.7.2 B D
+ math::decimal 1.0.2 1.0.3 B D
+ math::geometry 1.1.2 1.1.3 B D
+ math::interpolate 1.0.3 1.1 B D T
+ math::statistics 0.8.0 0.9 D EF T
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ mime mime 1.5.6 1.6 D EF T
+ ncgi ncgi 1.4.1 1.4.2 B D T
+ ooutil oo::util 1.1 1.2 D EF
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ pt pt::peg::from::peg 1 1.0.2 B D T
+ pt::peg::op 1 1.0.1 B D
+ pt::peg::to::peg 1 1.0.1 B D T
+ pt::pgen 1.0.1 1.0.2 B D
+ pt::tclparam::configuration::tcloo 1.0.2 1.0.3 D T
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ rest rest 1.0 1.0.1 B D
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ sasl SASL 1.3.2 1.3.3 B D T
+ SASL::NTLM 1.1.1 1.1.2 B D T
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ struct struct::list 1.8.2 1.8.3 B D T
+ struct::matrix 1.2.1 1.2.1 D
+ struct::matrix 2.0.2 2.0.3 D
+ struct::queue 1.4.4 1.4.5 B D T
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ tar tar 0.7.1 0.9 B D T
+ tepam tepam 0.4.0 0.5.0 B D T
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ term term::ansi::code 0.1 0.2 B D
+ term::ansi::code::ctrl 0.1.2 0.2 B D
+ term::ansi::send 0.1 0.2 B D
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ textutil textutil 0.7.1 0.8 D EF
+ textutil::string 0.7.1 0.8 D EF T
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ uri uri 1.2.2 1.2.4 B D T
+ valtype valtype::iban 1.1 1.4 D EF T
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ virtchannel_base tcl::chan::memchan 1.0.2 1.0.3 B D
+ tcl::chan::string 1.0.1 1.0.2 B D
+ tcl::chan::variable 1.0.2 1.0.3 B D
+ ------------------ ------------------------------------ ------------- ------------- ----------
+ zip zipfile::decode 0.2 0.4 B D
+ zipfile::encode 0.1 0.3 B D
+ ------------------ ------------------------------------ ------------- ------------- ----------
+
+Invisible changes (documentation, testsuites)
+=============================================
+
+ tcllib 1.15 tcllib 1.16
+ Module Package Old Version New Version Comments
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ amazon-s3 S3 1.0.0 1.0.0 D
+ xsxp 1.0 1.0 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ asn asn 0.8.4 0.8.4 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ base32 base32 0.1 0.1 D
+ base32::core 0.1 0.1 D
+ base32::hex 0.1 0.1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ base64 ascii85 1.0 1.0 D
+ base64 2.4.2 2.4.2 D
+ uuencode 1.1.5 1.1.5 D
+ yencode 1.1.3 1.1.3 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ bee bee 0.1 0.1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ bench bench 0.4 0.4 D
+ bench::in 0.1 0.1 D
+ bench::out::csv 0.1.2 0.1.2 D
+ bench::out::text 0.1.2 0.1.2 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ bibtex bibtex 0.5 0.5 D
+ blowfish blowfish 1.0.4 1.0.4 D
+ cache cache::async 0.3 0.3 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ clock clock::iso8601 0.1 0.1 D T
+ clock::rfc2822 0.1 0.1 D T
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ cmdline cmdline 1.3.3 1.3.3 D
+ comm comm 4.6.2 4.6.2 D
+ control control 0.1.3 0.1.3 D
+ coroutine coroutine 1.1 1.1 D
+ counter counter 2.0.4 2.0.4 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ crc cksum 1.1.3 1.1.3 D
+ crc16 1.1.2 1.1.2 D
+ crc32 1.3.1 1.3.1 D
+ sum 1.1.0 1.1.0 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ csv csv 0.8 0.8 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ des des 1.1.0 1.1.0 D
+ tclDES 1.0.0 1.0.0 D
+ tclDESjr 1.0.0 1.0.0 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ dns dns 1.3.3 1.3.3 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ docstrip docstrip 1.2 1.2 D
+ docstrip::util 1.3 1.3 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ doctools doctools::cvs 1 1 D
+ doctools::idx 1.0.4 1.0.4 D
+ doctools::idx 2 2 D
+ doctools::toc 1.1.3 1.1.3 D
+ doctools::toc 2 2 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ doctools2base doctools::html::cssdefaults 0.1 0.1 D
+ doctools::msgcat 0.1 0.1 D
+ doctools::nroff::man_macros 0.1 0.1 D
+ doctools::tcl::parse 0.1 0.1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ doctools2idx doctools::idx 1.0.4 1.0.4 D
+ doctools::idx 2 2 D
+ doctools::idx::export 0.1 0.1 D
+ doctools::idx::export::html 0.2 0.2 D
+ doctools::idx::export::json 0.1 0.1 D
+ doctools::idx::export::nroff 0.3 0.3 D
+ doctools::idx::export::text 0.2 0.2 D
+ doctools::idx::export::wiki 0.2 0.2 D
+ doctools::idx::import 0.1 0.1 D
+ doctools::idx::import::json 0.1 0.1 D
+ doctools::idx::parse 0.1 0.1 D
+ doctools::idx::structure 0.1 0.1 D
+ doctools::msgcat::idx::c 0.1 0.1 D
+ doctools::msgcat::idx::de 0.1 0.1 D
+ doctools::msgcat::idx::en 0.1 0.1 D
+ doctools::msgcat::idx::fr 0.1 0.1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ doctools2toc doctools::msgcat::toc::c 0.1 0.1 D
+ doctools::msgcat::toc::de 0.1 0.1 D
+ doctools::msgcat::toc::en 0.1 0.1 D
+ doctools::msgcat::toc::fr 0.1 0.1 D
+ doctools::toc 1.1.3 1.1.3 D
+ doctools::toc 2 2 D
+ doctools::toc::export 0.1 0.1 D
+ doctools::toc::export::html 0.1 0.1 D
+ doctools::toc::export::json 0.1 0.1 D
+ doctools::toc::export::nroff 0.2 0.2 D
+ doctools::toc::export::text 0.1 0.1 D
+ doctools::toc::export::wiki 0.1 0.1 D
+ doctools::toc::import 0.1 0.1 D
+ doctools::toc::import::json 0.1 0.1 D
+ doctools::toc::parse 0.1 0.1 D
+ doctools::toc::structure 0.1 0.1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ exif exif 1.1.2 1.1.2 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ fileutil fileutil::multi 0.1 0.1 D
+ fileutil::multi::op 0.5.3 0.5.3 D
+ fileutil::traverse 0.4.3 0.4.3 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ ftp ftp::geturl 0.2.1 0.2.1 D
+ ftpd ftpd 1.2.6 1.2.6 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ fumagic fileutil::magic::cfront 1.0 1.0 D
+ fileutil::magic::cgen 1.0 1.0 D
+ fileutil::magic::filetype 1.0.2 1.0.2 D
+ fileutil::magic::mimetype 1.0.2 1.0.2 D
+ fileutil::magic::rt 1.0 1.0 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ generator generator 0.1 0.1 D
+ gpx gpx 1 1 D
+ grammar_aycock grammar::aycock 1.0 1.0 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ grammar_fa grammar::fa::dacceptor 0.1.1 0.1.1 D
+ grammar::fa::dexec 0.2 0.2 D
+ grammar::fa::op 0.4.1 0.4.1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ grammar_me grammar::me::cpu 0.2 0.2 D
+ grammar::me::cpu::core 0.2 0.2 D
+ grammar::me::cpu::gasm 0.1 0.1 D
+ grammar::me::tcl 0.1 0.1 D
+ grammar::me::util 0.1 0.1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ grammar_peg grammar::peg 0.2 0.2 D
+ grammar::peg::interp 0.1.1 0.1.1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ hook hook 0.1 0.1 D
+ html html 1.4 1.4 D
+ htmlparse htmlparse 1.2.1 1.2.1 D
+ http autoproxy 1.5.3 1.5.3 D
+ ident ident 0.42 0.42 D
+ inifile inifile 0.2.5 0.2.5 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ interp interp 0.1.2 0.1.2 D
+ interp::delegate::method 0.2 0.2 D
+ interp::delegate::proc 0.2 0.2 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ irc irc 0.6.1 0.6.1 D
+ picoirc 0.5.1 0.5.1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ javascript javascript 1.0.2 1.0.2 D
+ json json::write 1.0.2 1.0.2 D T
+ lambda lambda 1 1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ ldap ldap 1.8 1.8 D
+ ldapx 1.0 1.0 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ log log 1.3 1.3 D
+ logger 0.9.3 0.9.3 D
+ logger::appender 1.3 1.3 D
+ logger::utils 1.3 1.3 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ map map::geocode::nominatim 0.1 0.1 D
+ map::slippy 0.5 0.5 D
+ map::slippy::cache 0.2 0.2 D
+ map::slippy::fetcher 0.3 0.3 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ mapproj mapproj 1.0 1.0 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ math math 1.2.5 1.2.5 D T
+ math::bigfloat 1.2.2 1.2.2 D
+ math::bigfloat 2.0.1 2.0.1 D
+ math::bignum 3.1.1 3.1.1 D
+ math::calculus::symdiff 1.0 1.0 D
+ math::complexnumbers 1.0.2 1.0.2 D
+ math::constants 1.0.1 1.0.1 D
+ math::fourier 1.0.2 1.0.2 D
+ math::fuzzy 0.2.1 0.2.1 D
+ math::linearalgebra 1.1.4 1.1.4 D
+ math::machineparameters 0.1 0.1 D
+ math::numtheory 1.0 1.0 D
+ math::optimize 1.0 1.0 D
+ math::polynomials 1.0.1 1.0.1 D
+ math::rationalfunctions 1.0.1 1.0.1 D
+ math::roman 1.0 1.0 D
+ math::special 0.2.2 0.2.2 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ md4 md4 1.0.5 1.0.5 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ md5 md5 1.4.4 1.4.4 D
+ md5 2.0.7 2.0.7 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ md5crypt md5crypt 1.1.0 1.1.0 D
+ mime smtp 1.4.5 1.4.5 D
+ multiplexer multiplexer 0.2 0.2 D
+ namespacex namespacex 0.1 0.1 D
+ nmea nmea 1.0.0 1.0.0 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ nns nameserv 0.4.2 0.4.2 D
+ nameserv::auto 0.3 0.3 D
+ nameserv::common 0.1 0.1 D
+ nameserv::server 0.3.2 0.3.2 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ nntp nntp 0.2.1 0.2.1 D
+ ntp time 1.2.1 1.2.1 D
+ otp otp 1.0.0 1.0.0 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ page page::pluginmgr 0.2 0.2 D
+ page::util::flow 0.1 0.1 D
+ page::util::norm::lemon 0.1 0.1 D
+ page::util::norm::peg 0.1 0.1 D
+ page::util::peg 0.1 0.1 D
+ page::util::quote 0.1 0.1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ pki pki 0.6 0.6 D
+ pluginmgr pluginmgr 0.3 0.3 D
+ png png 0.2 0.2 D
+ pop3 pop3 1.9 1.9 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ pop3d pop3d 1.1.0 1.1.0 D
+ pop3d::dbox 1.0.2 1.0.2 D
+ pop3d::udb 1.1 1.1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ profiler profiler 0.3 0.3 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ pt pt::ast 1.1 1.1 D T
+ pt::cparam::configuration::critcl 1.0.1 1.0.1 T
+ pt::parse::peg 1 1 D T
+ pt::pe 1 1 D T
+ pt::pe::op 1 1 D
+ pt::peg 1 1 D T
+ pt::peg::container 1 1 D
+ pt::peg::export 1 1 D
+ pt::peg::export::json 1 1 T
+ pt::peg::export::peg 1 1 T
+ pt::peg::from::json 1 1 T
+ pt::peg::import 1 1 D
+ pt::peg::import::json 1 1 T
+ pt::peg::import::peg 1 1 T
+ pt::peg::interp 1 1 D T
+ pt::peg::to::container 1 1 T
+ pt::peg::to::cparam 1.0.1 1.0.1 T
+ pt::peg::to::json 1 1 T
+ pt::peg::to::param 1 1 T
+ pt::peg::to::tclparam 1 1 T
+ pt::rde 1.0.2 1.0.2 D
+ pt::tclparam::configuration::snit 1.0.1 1.0.1 T
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ rc4 rc4 1.1.0 1.1.0 D
+ rcs rcs 0.1 0.1 D
+ report report 0.3.1 0.3.1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ ripemd ripemd128 1.0.4 1.0.4 D
+ ripemd160 1.0.4 1.0.4 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ sasl SASL::XGoogleToken 1.0.1 1.0.1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ sha1 sha1 1.1.0 1.1.0 B D
+ sha1 2.0.3 2.0.3 B D
+ sha256 1.0.3 1.0.3 B D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ simulation simulation::annealing 0.2 0.2 D
+ simulation::montecarlo 0.1 0.1 D
+ simulation::random 0.3.1 0.3.1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ smtpd smtpd 1.5 1.5 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ snit snit 1.4.2 1.4.2 D
+ snit 2.3.2 2.3.2 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ soundex soundex 1.0 1.0 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ stooop stooop 4.4.1 4.4.1 D
+ switched 2.2.1 2.2.1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ stringprep stringprep 1.0.1 1.0.1 D
+ stringprep::data 1.0.1 1.0.1 D
+ unicode 1.0.0 1.0.0 D
+ unicode::data 1.0.0 1.0.0 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ struct struct::disjointset 1.0 1.0 D
+ struct::graph 1.2.1 1.2.1 D
+ struct::graph 2.4 2.4 D
+ struct::graph::op 0.11.3 0.11.3 D
+ struct::pool 1.2.1 1.2.1 D
+ struct::prioqueue 1.4 1.4 D
+ struct::record 1.2.1 1.2.1 D
+ struct::set 2.2.3 2.2.3 D
+ struct::skiplist 1.3 1.3 D
+ struct::stack 1.5.3 1.5.3 D
+ struct::tree 1.2.2 1.2.2 D
+ struct::tree 2.1.2 2.1.2 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ term term 0.1 0.1 D
+ term::ansi::code::attr 0.1 0.1 D
+ term::ansi::code::macros 0.1 0.1 D
+ term::ansi::ctrl::unix 0.1.1 0.1.1 D
+ term::interact::menu 0.1 0.1 D
+ term::interact::pager 0.1 0.1 D
+ term::receive 0.1 0.1 D
+ term::receive::bind 0.1 0.1 D
+ term::send 0.1 0.1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ textutil textutil::adjust 0.7.1 0.7.1 D
+ textutil::expander 1.3.1 1.3.1 D T
+ textutil::repeat 0.7 0.7 D
+ textutil::split 0.7 0.7 D
+ textutil::tabify 0.7 0.7 D
+ textutil::trim 0.7 0.7 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ tie tie 1.1 1.1 D
+ tiff tiff 0.2.1 0.2.1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ transfer transfer::connect 0.2 0.2 D
+ transfer::copy 0.3 0.3 D
+ transfer::data::destination 0.2 0.2 D
+ transfer::data::source 0.2 0.2 D
+ transfer::receiver 0.2 0.2 D
+ transfer::transmitter 0.2 0.2 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ treeql treeql 1.3.1 1.3.1 D
+ try try 1 1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ uev uevent 0.3.1 0.3.1 D
+ uevent::onidle 0.1 0.1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ units units 2.1.1 2.1.1 D
+ uri uri::urn 1.0.2 1.0.2 D
+ uuid uuid 1.0.2 1.0.2 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ valtype valtype::common 1 1 D
+ valtype::creditcard::amex 1 1 D
+ valtype::creditcard::discover 1 1 D
+ valtype::creditcard::mastercard 1 1 D
+ valtype::creditcard::visa 1 1 D
+ valtype::gs1::ean13 1 1 D
+ valtype::imei 1 1 D
+ valtype::isbn 1 1 D
+ valtype::luhn 1 1 D
+ valtype::luhn5 1 1 D
+ valtype::usnpi 1 1 D
+ valtype::verhoeff 1 1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ virtchannel_base tcl::chan::cat 1.0.2 1.0.2 D
+ tcl::chan::facade 1.0.1 1.0.1 D
+ tcl::chan::fifo 1 1 D
+ tcl::chan::fifo2 1 1 D
+ tcl::chan::halfpipe 1 1 D
+ tcl::chan::null 1 1 D
+ tcl::chan::nullzero 1 1 D
+ tcl::chan::random 1 1 D
+ tcl::chan::std 1.0.1 1.0.1 D
+ tcl::chan::textwindow 1 1 D
+ tcl::chan::zero 1 1 D
+ tcl::randomseed 1 1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ virtchannel_core tcl::chan::core 1 1 D
+ tcl::chan::events 1 1 D
+ tcl::transform::core 1 1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ virtchannel_transform tcl::transform::adler32 1 1 D
+ tcl::transform::base64 1 1 D
+ tcl::transform::counter 1 1 D
+ tcl::transform::crc32 1 1 D
+ tcl::transform::hex 1 1 D
+ tcl::transform::identity 1 1 D
+ tcl::transform::limitsize 1 1 D
+ tcl::transform::observe 1 1 D
+ tcl::transform::otp 1 1 D
+ tcl::transform::rot 1 1 D
+ tcl::transform::spacer 1 1 D
+ tcl::transform::zlib 1 1 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ wip wip 1.2 1.2 D
+ wip 2.2 2.2 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+ yaml huddle 0.1.5 0.1.5 D
+ yaml 0.3.6 0.3.6 D
+ ----------------------- ----------------------------------- ------------- ------------- ----------
+
+Unchanged
+=========
+
+ calendar, char, configuration, doctools::config, doctools::html,
+ doctools::idx::export::docidx, doctools::idx::import::docidx,
+ doctools::paths, doctools::text, doctools::toc::export::doctoc,
+ doctools::toc::import::doctoc, grammar::aycock::debug,
+ grammar::aycock::runtime, 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::reader::hb, page::reader::lemon, page::reader::peg,
+ page::reader::ser, page::reader::treeser,
+ page::transform::mecpu, page::transform::reachable,
+ page::transform::realizable, 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, paths,
+ pt::peg::container::peg, pt::peg::export::container, resolv,
+ spf, struct, text::write, tie::std::array, tie::std::dsource,
+ tie::std::file, tie::std::growfile, tie::std::log,
+ tie::std::rarray, transfer::copy::queue
+
+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.
+
diff --git a/tcllib/support/releases/history/README-1.17.txt b/tcllib/support/releases/history/README-1.17.txt
new file mode 100644
index 0000000..0f3e045
--- /dev/null
+++ b/tcllib/support/releases/history/README-1.17.txt
@@ -0,0 +1,315 @@
+Overview
+========
+
+ 6 new packages in 5 modules
+ 66 changed packages in 39 modules
+ 46 internally changed packages in 31 modules
+ 293 unchanged packages in 74 modules
+ 418 packages, total in 118 modules, total
+
+New in tcllib 1.17
+==================
+
+ Module Package New Version Comments
+ ------------ -------------------------------- ------------- ----------
+ cron cron 1.1
+ nettool nettool 0.4
+ oauth oauth 1
+ processman odie::processman 0.3
+ ------------ -------------------------------- ------------- ----------
+ pt pt::cparam::configuration::tea 0.1
+ pt::util 1
+ ------------ -------------------------------- ------------- ----------
+
+Changes from tcllib 1.16 to 1.17
+================================
+
+ tcllib 1.16 tcllib 1.17
+ Module Package Old Version New Version Comments
+ ----------------------- ------------------------------------ ------------- ------------- ----------
+ aes aes 1.1.1 1.2.1 I P
+ amazon-s3 S3 1.0.0 1.0.3 B D P
+ bibtex bibtex 0.5 0.6 B EF
+ cmdline cmdline 1.3.3 1.5 D EF I T
+ comm comm 4.6.2 4.6.3.1 B D
+ ----------------------- ------------------------------------ ------------- ------------- ----------
+ coroutine coroutine 1.1 1.1.3 B D
+ coroutine::auto 1.1.1 1.1.3 B D
+ ----------------------- ------------------------------------ ------------- ------------- ----------
+ crc cksum 1.1.3 1.1.4 B D I
+ crc32 1.3.1 1.3.2 B D I
+ sum 1.1.0 1.1.2 B D I T
+ ----------------------- ------------------------------------ ------------- ------------- ----------
+ debug debug 1.0.2 1.0.5 B D EF
+ ----------------------- ------------------------------------ ------------- ------------- ----------
+ dns dns 1.3.3 1.3.5 B D I
+ ip 1.2.2 1.3 D EF I T
+ ----------------------- ------------------------------------ ------------- ------------- ----------
+ doctools doctools 1.4.17 1.4.19 B D I
+ doctools::idx 1.0.4 1.0.5 B D I
+ doctools::idx 2 2 B D I
+ doctools::toc 1.1.3 1.1.4 B D I
+ doctools::toc 2 2 B D I
+ ----------------------- ------------------------------------ ------------- ------------- ----------
+ doctools2idx doctools::idx 1.0.4 1.0.5 B D I
+ doctools::idx 2 2 B D I
+ ----------------------- ------------------------------------ ------------- ------------- ----------
+ doctools2toc doctools::toc 1.1.3 1.1.4 B D I
+ doctools::toc 2 2 B D I
+ ----------------------- ------------------------------------ ------------- ------------- ----------
+ dtplite dtplite 1.1 1.2 D I
+ ----------------------- ------------------------------------ ------------- ------------- ----------
+ fileutil fileutil 1.14.6 1.14.10 B D T
+ fileutil::traverse 0.4.3 0.5 B D T
+ ----------------------- ------------------------------------ ------------- ------------- ----------
+ ftp ftp 2.4.12 2.4.13 B D
+ html html 1.4 1.4.4 B D T
+ inifile inifile 0.2.5 0.3 D EF I T
+ ----------------------- ------------------------------------ ------------- ------------- ----------
+ json json 1.3.2 1.3.3 B D T
+ json::write 1.0.2 1.0.3 B D T
+ ----------------------- ------------------------------------ ------------- ------------- ----------
+ log logger 0.9.3 0.9.4 B D T
+ ----------------------- ------------------------------------ ------------- ------------- ----------
+ math math::bigfloat 1.2.2 1.2.2 B T
+ math::bigfloat 2.0.1 2.0.2 B T
+ math::calculus 0.7.2 0.8.1 B D EF T
+ math::linearalgebra 1.1.4 1.1.5 B D T
+ math::optimize 1.0 1.0.1 B T
+ math::special 0.2.2 0.3.0 D EF T
+ math::statistics 0.9 0.9.3 B D EF T
+ ----------------------- ------------------------------------ ------------- ------------- ----------
+ md4 md4 1.0.5 1.0.6 B D I
+ ncgi ncgi 1.4.2 1.4.3 B D T
+ ooutil oo::util 1.2 1.2.1 B D T
+ ----------------------- ------------------------------------ ------------- ------------- ----------
+ pt char 1 1.0.1 D I T
+ pt::cparam::configuration::critcl 1.0.1 1.0.2 B D I T
+ pt::parse::peg 1 1.0.1 B I T
+ pt::pe 1 1.0.2 B D EF I
+ pt::peg::from::peg 1.0.2 1.0.3 D EF
+ pt::peg::interp 1 1.0.1 D EF
+ pt::peg::to::cparam 1.0.1 1.1.3 B D EF
+ pt::peg::to::param 1 1.0.1 B
+ pt::peg::to::peg 1.0.1 1.0.2 D EF
+ pt::peg::to::tclparam 1 1.0.2 B D EF
+ pt::pgen 1.0.2 1.0.3 EF T
+ pt::rde 1.0.2 1.0.3 B D EF
+ pt::rde::oo 1.0.2 1.0.3 B
+ pt::tclparam::configuration::snit 1.0.1 1.0.2 D EF
+ pt::tclparam::configuration::tcloo 1.0.3 1.0.4 D EF
+ ----------------------- ------------------------------------ ------------- ------------- ----------
+ report report 0.3.1 0.3.2 D EF
+ ----------------------- ------------------------------------ ------------- ------------- ----------
+ ripemd ripemd128 1.0.4 1.0.5 B D I
+ ripemd160 1.0.4 1.0.5 B D I
+ ----------------------- ------------------------------------ ------------- ------------- ----------
+ sha1 sha1 1.1.0 1.1.1 B I T
+ sha1 2.0.3 2.0.3 B I T
+ ----------------------- ------------------------------------ ------------- ------------- ----------
+ string string::token::shell 1.1 1.2 D EF T
+ struct struct::pool 1.2.1 1.2.3 D I T
+ tar tar 0.9 0.10 B D T
+ tepam tepam 0.5.0 0.5 I
+ textutil textutil::adjust 0.7.1 0.7.3 B D T
+ ----------------------- ------------------------------------ ------------- ------------- ----------
+ uri uri 1.2.4 1.2.5 B D T
+ uri::urn 1.0.2 1.0.3 B D I T
+ ----------------------- ------------------------------------ ------------- ------------- ----------
+ uuid uuid 1.0.2 1.0.4 B D I
+ valtype valtype::iban 1.4 1.5 B D EF T
+ virtchannel_transform tcl::transform::zlib 1 1.0.1 B
+ websocket websocket 1.3 1.4 B D EF
+ yaml yaml 0.3.6 0.3.7 B D T
+ zip zipfile::decode 0.4 0.6.1 B D EF
+ ----------------------- ------------------------------------ ------------- ------------- ----------
+
+Invisible changes (documentation, testsuites)
+=============================================
+
+ tcllib 1.16 tcllib 1.17
+ Module Package Old Version New Version Comments
+ ----------- ----------------------------- ------------- ------------- ----------
+ amazon-s3 xsxp 1.0 1.0 D
+ ----------- ----------------------------- ------------- ------------- ----------
+ base32 base32 0.1 0.1 I
+ base32::hex 0.1 0.1 I
+ ----------- ----------------------------- ------------- ------------- ----------
+ base64 uuencode 1.1.5 1.1.5 I
+ yencode 1.1.3 1.1.3 I
+ ----------- ----------------------------- ------------- ------------- ----------
+ blowfish blowfish 1.0.4 1.0.4 I
+ calendar calendar 0.2 0.2 I
+ control control 0.1.3 0.1.3 I
+ crc crc16 1.1.2 1.1.2 D I
+ des des 1.1.0 1.1.0 I
+ ----------- ----------------------------- ------------- ------------- ----------
+ dns resolv 1.0.3 1.0.3 I
+ spf 1.1.1 1.1.1 I
+ ----------- ----------------------------- ------------- ------------- ----------
+ http autoproxy 1.5.3 1.5.3 D I
+ imap4 imap4 0.5.2 0.5.2 D
+ ----------- ----------------------------- ------------- ------------- ----------
+ irc irc 0.6.1 0.6.1 I
+ picoirc 0.5.1 0.5.1 I
+ ----------- ----------------------------- ------------- ------------- ----------
+ ldap ldap 1.8 1.8 D
+ log logger::utils 1.3 1.3 D
+ math math 1.2.5 1.2.5 I
+ ----------- ----------------------------- ------------- ------------- ----------
+ md5 md5 1.4.4 1.4.4 I
+ md5 2.0.7 2.0.7 I
+ ----------- ----------------------------- ------------- ------------- ----------
+ md5crypt md5crypt 1.1.0 1.1.0 I
+ mime smtp 1.4.5 1.4.5 D I
+ ntp time 1.2.1 1.2.1 I
+ otp otp 1.0.0 1.0.0 I
+ pop3 pop3 1.9 1.9 D
+ ----------- ----------------------------- ------------- ------------- ----------
+ pop3d pop3d 1.1.0 1.1.0 I T
+ pop3d::dbox 1.0.2 1.0.2 I T
+ pop3d::udb 1.1 1.1 I
+ ----------- ----------------------------- ------------- ------------- ----------
+ pt pt::peg::op 1.0.1 1.0.1 D
+ rc4 rc4 1.1.0 1.1.0 I
+ rest rest 1.0.1 1.0.1 D
+ ----------- ----------------------------- ------------- ------------- ----------
+ sasl SASL 1.3.3 1.3.3 I
+ SASL::NTLM 1.1.2 1.1.2 I
+ SASL::SCRAM 0.1 0.1 I
+ SASL::XGoogleToken 1.0.1 1.0.1 D I
+ ----------- ----------------------------- ------------- ------------- ----------
+ sha1 sha256 1.0.3 1.0.3 I T
+ smtpd smtpd 1.5 1.5 D I
+ ----------- ----------------------------- ------------- ------------- ----------
+ struct struct::matrix 1.2.1 1.2.1 D
+ struct::matrix 2.0.3 2.0.3 D
+ ----------- ----------------------------- ------------- ------------- ----------
+ tepam tepam::doc_gen 0.1.1 0.1.1 I
+ ----------- ----------------------------- ------------- ------------- ----------
+ transfer transfer::connect 0.2 0.2 D
+ transfer::copy 0.3 0.3 D
+ transfer::copy::queue 0.1 0.1 D
+ transfer::data::destination 0.2 0.2 D
+ transfer::data::source 0.2 0.2 D
+ transfer::receiver 0.2 0.2 D
+ transfer::transmitter 0.2 0.2 D
+ ----------- ----------------------------- ------------- ------------- ----------
+
+Unchanged
+=========
+
+ ascii85, asn, base32::core, base64, bee, bench, bench::in,
+ bench::out::csv, bench::out::text, cache::async, clock::iso8601,
+ clock::rfc2822, configuration, counter, csv, debug::caller,
+ debug::heartbeat, debug::timestamp, docstrip, docstrip::util,
+ doctools::changelog, doctools::config, doctools::cvs,
+ doctools::html, doctools::html::cssdefaults,
+ doctools::idx::export, 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,
+ 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::paths, doctools::tcl::parse, doctools::text,
+ doctools::toc::export, 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,
+ doctools::toc::import::doctoc, doctools::toc::import::json,
+ doctools::toc::parse, doctools::toc::structure, exif,
+ fileutil::decode, fileutil::magic::cfront,
+ fileutil::magic::cgen, fileutil::magic::filetype,
+ fileutil::magic::mimetype, fileutil::magic::rt, fileutil::multi,
+ fileutil::multi::op, 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, huddle, ident, interp,
+ interp::delegate::method, interp::delegate::proc, javascript,
+ jpeg, lambda, ldapx, log, logger::appender,
+ map::geocode::nominatim, map::slippy, map::slippy::cache,
+ map::slippy::fetcher, mapproj, math::bignum,
+ math::calculus::symdiff, math::complexnumbers, math::constants,
+ math::decimal, math::fourier, math::fuzzy, math::geometry,
+ math::interpolate, math::machineparameters, math::numtheory,
+ math::polynomials, math::rationalfunctions, math::roman, mime,
+ multiplexer, nameserv, nameserv::auto, nameserv::common,
+ nameserv::server, namespacex, nmea, nntp,
+ 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, paths, pki, pluginmgr, png, profiler,
+ pt::ast, pt::pe::op, pt::peg, pt::peg::container,
+ pt::peg::container::peg, pt::peg::export,
+ pt::peg::export::container, pt::peg::export::json,
+ pt::peg::export::peg, pt::peg::from::json, pt::peg::import,
+ pt::peg::import::json, pt::peg::import::peg,
+ pt::peg::to::container, pt::peg::to::json, rcs,
+ simulation::annealing, simulation::montecarlo,
+ simulation::random, snit, soundex, stooop, string::token,
+ stringprep, stringprep::data, struct, struct::disjointset,
+ struct::graph, struct::graph::op, struct::list,
+ struct::prioqueue, struct::queue, struct::record, struct::set,
+ struct::skiplist, struct::stack, struct::tree, switched,
+ tcl::chan::cat, tcl::chan::core, tcl::chan::events,
+ tcl::chan::facade, tcl::chan::fifo, tcl::chan::fifo2,
+ tcl::chan::halfpipe, 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, tclDES, tclDESjr, 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, textutil::expander,
+ textutil::repeat, textutil::split, textutil::string,
+ textutil::tabify, textutil::trim, tie, tie::std::array,
+ tie::std::dsource, tie::std::file, tie::std::growfile,
+ tie::std::log, tie::std::rarray, tiff, treeql, try, uevent,
+ uevent::onidle, unicode, unicode::data, units, valtype::common,
+ valtype::creditcard::amex, valtype::creditcard::discover,
+ valtype::creditcard::mastercard, valtype::creditcard::visa,
+ valtype::gs1::ean13, valtype::imei, valtype::isbn,
+ valtype::luhn, valtype::luhn5, valtype::usnpi,
+ valtype::verhoeff, wip, zipfile::encode
+
+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.
+
diff --git a/tcllib/support/releases/history/README-1.18.txt b/tcllib/support/releases/history/README-1.18.txt
new file mode 100644
index 0000000..38c8a23
--- /dev/null
+++ b/tcllib/support/releases/history/README-1.18.txt
@@ -0,0 +1,263 @@
+Overview
+========
+
+ 18 new packages in 14 modules
+ 32 changed packages in 22 modules
+ 24 internally changed packages in 18 modules
+ 357 unchanged packages in 97 modules
+ 438 packages, total in 126 modules, total
+
+New in tcllib 1.18
+==================
+
+ Module Package New Version Comments
+ --------------- ------------------- ------------- ----------
+ dicttool dicttool 1.0
+ --------------- ------------------- ------------- ----------
+ httpd httpd 4.0
+ httpd::content 4.0
+ httpd::dispatch 4.0
+ scgi::app 0.1
+ --------------- ------------------- ------------- ----------
+ httpwget http::wget 0.1
+ markdown Markdown 1.0
+ math math::exact 1.0
+ nns nameserv::cluster 0.2.3
+ oodialect oo::dialect 0.3
+ --------------- ------------------- ------------- ----------
+ oometa oo::meta 0.4.1
+ oo::option 0.3
+ --------------- ------------------- ------------- ----------
+ processman processman 0.3
+ tool tool 0.5
+ tool_datatype tool::datatype 0.1
+ try throw 1
+ yaml huddle::json 0.1
+ zip zipfile::mkzip 1.2
+ --------------- ------------------- ------------- ----------
+
+Changes from tcllib 1.17 to 1.18
+================================
+
+ tcllib 1.17 tcllib 1.18
+ Module Package Old Version New Version Comments
+ ----------- ------------------------- ------------- ------------- ----------
+ cron cron 1.1 1.2.1 B EF
+ csv csv 0.8 0.8.1 B
+ ----------- ------------------------- ------------- ------------- ----------
+ debug debug 1.0.5 1.0.6 B D EF
+ debug::caller 1 1.1 EF
+ ----------- ------------------------- ------------- ------------- ----------
+ docstrip docstrip::util 1.3 1.3.1 B D
+ dtplite dtplite 1.2 1.3 B EF
+ ----------- ------------------------- ------------- ------------- ----------
+ fileutil fileutil 1.14.10 1.15 B D EF T
+ fileutil::traverse 0.5 0.6 B D T
+ ----------- ------------------------- ------------- ------------- ----------
+ ftp ftp::geturl 0.2.1 0.2.2 B
+ ftpd ftpd 1.2.6 1.3 B EF
+ htmlparse htmlparse 1.2.1 1.2.2 D EF T
+ imap4 imap4 0.5.2 0.5.3 D EF
+ irc picoirc 0.5.1 0.5.2 B D
+ map map::slippy::fetcher 0.3 0.4 D EF
+ ----------- ------------------------- ------------- ------------- ----------
+ math math::calculus::symdiff 1.0 1.0.1 B T
+ math::constants 1.0.1 1.0.2 B D
+ math::statistics 0.9.3 B EF
+ math::statistics 1.0 B EF
+ ----------- ------------------------- ------------- ------------- ----------
+ nettool nettool 0.4 0.5.1 B EF I
+ ooutil oo::util 1.2.1 1.2.2 B D T
+ ----------- ------------------------- ------------- ------------- ----------
+ pt pt::pe::op 1 1.0.1 B D T
+ pt::peg::to::tclparam 1.0.2 1.0.3 B D T
+ pt::rde 1.0.3 1.1 B D I T
+ pt::rde::oo 1.0.3 1.1 D I
+ pt::util 1 1.1 B
+ ----------- ------------------------- ------------- ------------- ----------
+ rest rest 1.0.1 1.0.2 B D
+ tie tie::std::rarray 1.0 1.0.1 B D T
+ uri uri 1.2.5 1.2.6 D EF T
+ uuid uuid 1.0.4 1.0.5 B I
+ ----------- ------------------------- ------------- ------------- ----------
+ yaml huddle 0.1.5 0.2 D I T
+ yaml 0.3.7 0.3.9 D I T
+ ----------- ------------------------- ------------- ------------- ----------
+ zip zipfile::decode 0.6.1 0.7 EF I
+ zipfile::encode 0.3 0.4 B D
+ ----------- ------------------------- ------------- ------------- ----------
+
+Invisible changes (documentation, testsuites)
+=============================================
+
+ tcllib 1.17 tcllib 1.18
+ Module Package Old Version New Version Comments
+ ------------- -------------------- ------------- ------------- ----------
+ base64 uuencode 1.1.5 1.1.5 I
+ yencode 1.1.3 1.1.3 I
+ ------------- -------------------- ------------- ------------- ----------
+ crc crc32 1.3.2 1.3.2 I
+ sum 1.1.2 1.1.2 I
+ ------------- -------------------- ------------- ------------- ----------
+ dns spf 1.1.1 1.1.1 I
+ docstrip docstrip 1.2 1.2 D
+ ------------- -------------------- ------------- ------------- ----------
+ doctools doctools 1.4.19 1.4.19 EF
+ doctools::idx 1.0.5 1.0.5 EF
+ doctools::idx 2 2 EF
+ doctools::toc 1.1.4 1.1.4 EF
+ doctools::toc 2 2 EF
+ ------------- -------------------- ------------- ------------- ----------
+ gpx gpx 1 1 T
+ json json 1.3.3 1.3.3 B
+ ldap ldapx 1.0 1.0 D
+ math math::special 0.3.0 0.3.0 D
+ md4 md4 1.0.6 1.0.6 I
+ ------------- -------------------- ------------- ------------- ----------
+ md5 md5 1.4.4 1.4.4 I
+ md5 2.0.7 2.0.7 I
+ ------------- -------------------- ------------- ------------- ----------
+ multiplexer multiplexer 0.2 0.2 T
+ nns nameserv::auto 0.3 0.3 D
+ processman odie::processman 0.3 0.3 B I
+ rc4 rc4 1.1.0 1.1.0 T
+ ------------- -------------------- ------------- ------------- ----------
+ ripemd ripemd128 1.0.5 1.0.5 I
+ ripemd160 1.0.5 1.0.5 I
+ ------------- -------------------- ------------- ------------- ----------
+ sha1 sha1 1.1.1 1.1.1 I
+ sha1 2.0.3 2.0.3 I
+ sha256 1.0.3 1.0.3 I
+ ------------- -------------------- ------------- ------------- ----------
+ textutil textutil::expander 1.3.1 1.3.1 I
+ ------------- -------------------- ------------- ------------- ----------
+
+Unchanged
+=========
+
+ aes, ascii85, asn, autoproxy, base32, base32::core, base32::hex,
+ base64, bee, bench, bench::in, bench::out::csv,
+ bench::out::text, bibtex, blowfish, cache::async, calendar,
+ char, cksum, clock::iso8601, clock::rfc2822, cmdline, comm,
+ configuration, control, coroutine, coroutine::auto, counter,
+ crc16, debug::heartbeat, debug::timestamp, des, dns,
+ doctools::changelog, doctools::config, doctools::cvs,
+ doctools::html, doctools::html::cssdefaults, doctools::idx,
+ doctools::idx::export, 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,
+ 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::paths, doctools::tcl::parse, doctools::text,
+ doctools::toc, doctools::toc::export,
+ 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, doctools::toc::import::doctoc,
+ doctools::toc::import::json, doctools::toc::parse,
+ doctools::toc::structure, exif, fileutil::decode,
+ fileutil::magic::cfront, fileutil::magic::cgen,
+ fileutil::magic::filetype, fileutil::magic::mimetype,
+ fileutil::magic::rt, fileutil::multi, fileutil::multi::op, ftp,
+ generator, 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, html, ident, inifile, interp,
+ interp::delegate::method, interp::delegate::proc, ip, irc,
+ javascript, jpeg, json::write, lambda, ldap, log, logger,
+ logger::appender, logger::utils, map::geocode::nominatim,
+ map::slippy, map::slippy::cache, mapproj, math, math::bigfloat,
+ math::bignum, math::calculus, math::complexnumbers,
+ math::decimal, math::fourier, math::fuzzy, math::geometry,
+ math::interpolate, math::linearalgebra, math::machineparameters,
+ math::numtheory, math::optimize, math::polynomials,
+ math::rationalfunctions, math::roman, md5crypt, mime, nameserv,
+ nameserv::common, nameserv::server, namespacex, ncgi, nmea,
+ nntp, oauth, 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, paths, pki, pluginmgr, png, pop3, pop3d,
+ pop3d::dbox, pop3d::udb, profiler, pt::ast,
+ pt::cparam::configuration::critcl,
+ pt::cparam::configuration::tea, pt::parse::peg, pt::pe, pt::peg,
+ pt::peg::container, pt::peg::container::peg, pt::peg::export,
+ pt::peg::export::container, pt::peg::export::json,
+ pt::peg::export::peg, pt::peg::from::json, pt::peg::from::peg,
+ pt::peg::import, pt::peg::import::json, pt::peg::import::peg,
+ pt::peg::interp, pt::peg::op, pt::peg::to::container,
+ pt::peg::to::cparam, pt::peg::to::json, pt::peg::to::param,
+ pt::peg::to::peg, pt::pgen, pt::tclparam::configuration::snit,
+ pt::tclparam::configuration::tcloo, rcs, report, resolv, S3,
+ SASL, SASL::NTLM, SASL::SCRAM, SASL::XGoogleToken,
+ simulation::annealing, simulation::montecarlo,
+ simulation::random, smtp, smtpd, snit, soundex, stooop,
+ string::token, string::token::shell, stringprep,
+ stringprep::data, struct, struct::disjointset, struct::graph,
+ struct::graph::op, struct::list, struct::matrix, struct::pool,
+ struct::prioqueue, struct::queue, struct::record, struct::set,
+ struct::skiplist, struct::stack, struct::tree, switched, tar,
+ tcl::chan::cat, tcl::chan::core, tcl::chan::events,
+ tcl::chan::facade, tcl::chan::fifo, tcl::chan::fifo2,
+ tcl::chan::halfpipe, 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, textutil::adjust, textutil::repeat, textutil::split,
+ textutil::string, textutil::tabify, textutil::trim, tie,
+ tie::std::array, tie::std::dsource, tie::std::file,
+ tie::std::growfile, tie::std::log, tiff, time,
+ transfer::connect, transfer::copy, transfer::copy::queue,
+ transfer::data::destination, transfer::data::source,
+ transfer::receiver, transfer::transmitter, treeql, try, uevent,
+ uevent::onidle, unicode, unicode::data, units, uri::urn,
+ 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
+
+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.
+
diff --git a/tcllib/support/releases/history/README-1.4.txt b/tcllib/support/releases/history/README-1.4.txt
new file mode 100644
index 0000000..55fb516
--- /dev/null
+++ b/tcllib/support/releases/history/README-1.4.txt
@@ -0,0 +1,99 @@
+New in Tcllib 1.4
+=================
+ Tcllib 1.3 Tcllib 1.4
+Module Package Old Version New version Comments
+------ ------- ----------- ----------- -------------------------------
+crc crc16 -- 1.0.1 More crc's
+des -- 0.8 Data Encryption Standard
+------ ------- ----------- ----------- -------------------------------
+doctools doctools -- 1.0 Documentation tools, first time
+ doctools::toc -- 0.1 as packages. Regular documenation,
+ doctools::idx -- 0.1 table of contents, keyword indices,
+ doctools::cvs -- 0.1 parsing of ChangeLogs and cvs logs.
+ doctools::changelog -- 0.1
+------ ------- ----------- ----------- -------------------------------
+dns resolv -- 1.0 Resolver on top of basic dns, mini-cache
+log logger -- 0.1 Alternate logging.
+math statistics -- 0.1 Statistics package
+math optimization -- 0.1 Optimization package
+md4 -- 1.0 Another hash algorithm
+ntp time -- 1.0.1 TIME protocol
+------ ------- ----------- ----------- -------------------------------
+struct 1.2.1 1.3
+ record / Variable record's
+ list / Extended list manipulation
+------ ------- ----------- ----------- -------------------------------
+soundex -- 1.0 Phonetic string comparison
+------ ------- ----------- ----------- -------------------------------
+
+
+Changes from Tcllib 1.3 to 1.4
+==============================
+
+Legend
+ P : Performance enhancement.
+ B : Bug fixes.
+ D : Documentation updates.
+ EF: Extended functionality.
+ EX: New examples.
+
+ Tcllib 1.3 Tcllib 1.4
+Module Package Old Version New version Comments
+------ ------- ----------- ----------- -------------------------------
+base64 base64 2.2.1 2.2.2 P
+ uuencode 1.0.1 1.0.2 B
+ yencode 1.0 1.0.1 B
+------ ------- ----------- ----------- -------------------------------
+calendar 0.1 0.2 B
+cmdline 1.2 1.2.1 B P
+comm 4.0 4.0.1 B P
+control 0.1.1 0.1.2 D
+counter 2.0 2.0.1 B P
+------ ------- ----------- ----------- -------------------------------
+crc cksum 1.0 1.0.1 D, Internal chunking
+ crc32 1.0 1.0.1 B D, Internal chunking
+ sum 1.0 1.0.1 D
+------ ------- ----------- ----------- -------------------------------
+csv 0.3 0.4 B D
+dns dns 1.0.1 1.0.3 B, TclUDP fallback
+exif 1.0 1.1 B P EF
+fileutil 1.4 1.5 B P
+------ ------- ----------- ----------- -------------------------------
+ftp ftp 2.3.1 2.4 B EF
+ ftp::geturl 0.1 0.2 B
+------ ------- ----------- ----------- -------------------------------
+ftpd 1.1.2 1.1.3 B
+html 1.2.1 1.2.2 B
+htmlparse 0.3 0.3.1 B P
+irc 0.2 0.3 B EX
+javascript 1.0 1.0.1 D
+log log 1.0.1 1.0.2 D
+math math 1.2.1 1.2.2 D
+md5 1.4.2 1.4.3 B P
+------ ------- ----------- ----------- -------------------------------
+mime mime 1.3.2 1.3.3 B D
+ smtp 1.3.2 1.3.3 B D EX
+------ ------- ----------- ----------- -------------------------------
+ncgi 1.2.1 1.2.2 B P
+nntp 0.2 0.2.1 D P
+pop3 1.5.1 1.6 B D EF
+------ ------- ----------- ----------- -------------------------------
+pop3d pop3d 1.0 1.0.1 B D
+ pop3d::dbox 1.0 1.1 EF
+ pop3d::udb 1.0 1.0.1 D
+------ ------- ----------- ----------- -------------------------------
+profiler 0.2 0.2.1 B P
+report 0.3 0.3.1 D
+sha1 1.0.2 1.0.3 B
+smtpd 1.0 1.2.1 B D EF
+stooop 4.4 4.4.1 D
+------ ------- ----------- ----------- -------------------------------
+struct 1.2.1 1.3 B EF EX
+ \ graph Use cgraph if present.
+------ ------- ----------- ----------- -------------------------------
+textutil textutil 0.5 0.6 P EF (TeX based hyphenation!)
+ expander 1.0.1 1.2 EF
+------ ------- ----------- ----------- -------------------------------
+uri uri 1.1.1 1.1.2 B P
+ uri::urn 1.0 1.0.1 B
+------ ------- ----------- ----------- -------------------------------
diff --git a/tcllib/support/releases/history/README-1.6.1.txt b/tcllib/support/releases/history/README-1.6.1.txt
new file mode 100644
index 0000000..137cbce
--- /dev/null
+++ b/tcllib/support/releases/history/README-1.6.1.txt
@@ -0,0 +1,47 @@
+Overview
+========
+
+Tcllib 1.6.1 is a bugfix release. This means that the enhancements and
+extensions which have been made to the main line are _not_ present in
+this branch.
+
+New in Tcllib 1.6.1
+===================
+
+Nothing. See the Overview for an explanation.
+
+
+Changes from Tcllib 1.6 to 1.6.1
+================================
+
+Legend
+ B : Bug fixes. \
+ D : Documentation updates. > Implies change of patchlevel.
+ EX : New examples. >
+ P : Performance enhancement. /
+
+ Tcllib 1.6 Tcllib 1.6.1
+Module Package Old version New Version Comments
+------ ------- ----------- ----------- -------------------------------
+base64 uuencode 1.1 1.1.1 B
+crc crc32 1.1 1.1.1 B
+csv 0.5 0.5.1 B
+------ ------- ----------- ----------- -------------------------------
+doctools doctools 1.0.1 1.0.2 B
+------ ------- ----------- ----------- -------------------------------
+fileutil 1.6 1.6.1 B
+ftpd 1.2 1.2.1 B
+inifile 0.1 0.1 B (Testsuite, nothing functional)
+log log 1.1 1.1.1 B (Defaults)
+ntp time 1.0.2 1.0.3 B
+md4 1.0.1 1.0.2 B
+md5 2.0.0 2.0.1 B
+------ ------- ----------- ----------- -------------------------------
+mime mime 1.3.4 1.3.6 B
+ smtp 1.3.4 1.3.6 B
+------ ------- ----------- ----------- -------------------------------
+snit 0.93 0.93 B (Index, testsuite only)
+struct sets 2.0 2.0 B (Typo police)
+textutil textutil 0.6 0.6.1 B
+uri uri 1.1.3 1.1.4 B
+------ ------- ----------- ----------- -------------------------------
diff --git a/tcllib/support/releases/history/README-1.6.txt b/tcllib/support/releases/history/README-1.6.txt
new file mode 100644
index 0000000..7d3e3e2
--- /dev/null
+++ b/tcllib/support/releases/history/README-1.6.txt
@@ -0,0 +1,88 @@
+New in Tcllib 1.6
+=================
+ Tcllib 1.4 Tcllib 1.6
+Module Package Old version New Version Comments
+------ ------- ----------- ----------- -------------------------------
+inifile -- 0.1 Handling of Window .ini files.
+------ ------- ----------- ----------- -------------------------------
+md5crypt -- 1.0.0 MD5 based password hashing.
+multiplexer -- 0.2 Message multiplexing.
+snit -- 0.92 pure-Tcl OO system.
+------ ------- ----------- ----------- -------------------------------
+struct 1.3 2.0
+ \ set Set manipulation.
+------ ------- ----------- ----------- -------------------------------
+
+
+Changes from Tcllib 1.4 to 1.6
+==============================
+
+Legend
+ API: ** incompatible ** API changes. > Implies change of major version.
+ EF : Extended functionality, API. > Implies change of minor verson.
+ B : Bug fixes. \
+ D : Documentation updates. > Implies change of patchlevel.
+ EX : New examples. >
+ P : Performance enhancement. /
+
+ Tcllib 1.4 Tcllib 1.6
+Module Package Old version New Version Comments
+------ ------- ----------- ----------- -------------------------------
+base64 base64 2.2.2 2.3 B, EF (Trf)
+ uuencode 1.0.2 1.1 EF (critcl)
+ yencode 1.0.1 1.1 EF (critcl)
+------ ------- ----------- ----------- -------------------------------
+cmdline 1.2.1 1.2.2 B
+comm 4.0.1 4.2 B, EF (async return callback)
+counter 2.0.1 2.0.2 B
+------ ------- ----------- ----------- -------------------------------
+crc crc16 1.0.1 1.1 EF (xmodem)
+ crc32 1.0.1 1.1 EF (-channel)
+ sum 1.0.1 1.1.0 EF (-channel)
+------ ------- ----------- ----------- -------------------------------
+csv 0.4 0.5 D
+des 0.8 0.8.1 B
+------ ------- ----------- ----------- -------------------------------
+dns dns 1.0.4 1.1 EF (SOA decode)
+ resolv 1.0.2 1.0.3 P
+------ ------- ----------- ----------- -------------------------------
+doctools doctools 1.0 1.0.1 B, +French msgcat
+exif 1.1 1.1.1 B
+fileutil 1.5 1.6 B, EF
+------ ------- ----------- ----------- -------------------------------
+ftp ftp 2.4 2.4.1 B
+------ ------- ----------- ----------- -------------------------------
+ftpd 1.1.3 1.2 B, EF
+htmlparse 0.3.1 1.0 B, +switch to struct 2.0
+irc 0.3 0.4 B, EF
+------ ------- ----------- ----------- -------------------------------
+log log 1.0.2 1.1 B, EF
+ logger 0.1 0.3 B, EF
+------ ------- ----------- ----------- -------------------------------
+math math::calculus 0.5 0.5.1 B
+ math::statistics 0.1 0.1.1 B
+------ ------- ----------- ----------- -------------------------------
+md4 1.0.0 1.0.1 B
+md5 1.4.3 2.0.0 API ** INCOMPATIBLE API CHANGES **
+------ ------- ----------- ----------- -------------------------------
+mime mime 1.3.3 1.3.4 B
+ smtp 1.3.3 1.3.4 B, EF (tls)
+------ ------- ----------- ----------- -------------------------------
+ntp time 1.0.1 1.0.2 B
+------ ------- ----------- ----------- -------------------------------
+ncgi 1.2.2 1.2.3 B
+pop3 1.6 1.6.1 B
+------ ------- ----------- ----------- -------------------------------
+pop3d pop3d 1.0.1 1.0.2 B
+------ ------- ----------- ----------- -------------------------------
+profiler 0.2.1 0.2.2 B
+------ ------- ----------- ----------- -------------------------------
+struct1 struct 1.3 1.4 B, EF
+struct struct 1.3 2.0 API, B, EF
+ \ list | ** INCOMPATIBLE API CHANGES **
+ \ graph | ** INCOMPATIBLE API CHANGES **
+ \ tree | ** INCOMPATIBLE API CHANGES **
+------ ------- ----------- ----------- -------------------------------
+textutil expander 1.2 1.2.1 B
+uri uri 1.1.2 1.1.3 B
+------ ------- ----------- ----------- -------------------------------
diff --git a/tcllib/support/releases/history/README-1.7.txt b/tcllib/support/releases/history/README-1.7.txt
new file mode 100644
index 0000000..d895326
--- /dev/null
+++ b/tcllib/support/releases/history/README-1.7.txt
@@ -0,0 +1,141 @@
+New in Tcllib 1.7
+=================
+ Tcllib 1.7
+Module Package New Version Comments
+------ ------- ----------- -------------------------------
+asn 0.1 Partial ASN de- & encoder.
+bee 0.1 B de- & encoder (BitTorrent Serialization)
+------ ------- ----------- -------------------------------
+dns ip 1.0.0 IP address manipulation
+ spf 1.1.0 Sender Policy Framework
+------ ------- ----------- -------------------------------
+grammar_fa grammar::fa 0.1 Finite Automaton Container
+ grammar::fa::dacceptor 0.1 FA acceptor
+ grammar::fa::dexec 0.1 FA interpreter
+ grammar::fa::op 0.1 FA operations
+------ ------- ----------- -------------------------------
+http autoproxy 1.2.0 Http proxy
+------ ------- ----------- -------------------------------
+ident 0.42 RFC 1413 IDENT client
+jpeg 0.1 JPEG images, meta data manipulation
+ldap 1.2 RFC 2251 LDAP client
+------ ------- ----------- -------------------------------
+math math::complexnumbers 1.0 Complex number arithmetics
+ math::constants 1.0 Important mathematical constants
+ math::interpolate 1.0 Interpolation for n-dimensional data
+ math::polynomials 1.0 Polynomial arithmetics
+ math::rationalfunctions 1.0 Arithmetics on rationals over polynomials
+ math::special 0.1 Bessel functions, Elliptics, ...
+ math::fourier 1.0 Fourier Transform
+------ ------- ----------- -------------------------------
+png 0.1 PNG images, meta data manipulation
+rc4 1.0.0 RC4 stream cipher
+------ ------- ----------- -------------------------------
+ripemd ripemd128 1.0.0 RIPEMD Hash algorithm
+ ripemd160 1.0.0
+------ ------- ----------- -------------------------------
+tar 0.1 Tar file creation & manipulation
+------ ------- ----------- -------------------------------
+tie tie 1.0 Persistence for Tcl arrays.
+ tie::std::array 1.0 Various data sources for the
+ tie::std::dsource 1.0 persistence.
+ tie::std::file 1.0
+ tie::std::log 1.0
+ tie::std::rarray 1.0
+------ ------- ----------- -------------------------------
+treeql 1.1 Tree Query Language, CoST inspired
+------ ------- ----------- -------------------------------
+uuid 1.0.0 Generation of universally unique identifiers
+------ ------- ----------- -------------------------------
+
+
+Changes from Tcllib 1.6 to 1.7
+==============================
+
+Legend
+ API: ** incompatible ** API changes. > Implies change of major version.
+ EF : Extended functionality, API. > Implies change of minor verson.
+ B : Bug fixes. \
+ D : Documentation updates. > Implies change of patchlevel.
+ EX : New examples. >
+ P : Performance enhancement. /
+ TS : Test suite fix /
+
+ Tcllib 1.6.1 Tcllib 1.7
+Module Package Old version New Version Comments
+------ ------- ----------- ----------- -------------------------------
+base64 base64 2.3 2.3.1 D
+ uuencode 1.1.1 1.1.2 B
+ yencode 1.1 1.1.1 D
+------ ------- ----------- ----------- -------------------------------
+crc crc32 1.1.1 1.2 BF
+------ ------- ----------- ----------- -------------------------------
+cmdline 1.2.2 1.2.3 D, TS
+comm 4.2 4.2.1 D
+counter 2.0.2 2.0.3 B, P
+des 0.8.1 0.8.2 P
+------ ------- ----------- ----------- -------------------------------
+dns dns 1.1 1.2.0 B, EF (ipv6)
+------ ------- ----------- ----------- -------------------------------
+doctools doctools 1.0.2 1.1 D, B, P, EF
+ - changelog 0.1 0.1.1 D
+ - cvs 0.1 0.1.1 D
+ - idx 0.1 0.2 D, B, EF
+ - toc 0.1 0.2 D, B, EF
+------ ------- ----------- ----------- -------------------------------
+exif 1.1.1 1.1.2 B
+fileutil 1.6.1 1.7 EF, D, TS
+ftpd 1.2.1 1.2.2 B
+html 1.2.2 1.2.3 D
+htmlparse 1.0 1.1 B, EF (empty tags)
+irc 0.4 0.5 P, EF (logger)
+------ ------- ----------- ----------- -------------------------------
+log log 1.1.1 1.2 D, EF
+ logger 0.3 0.5 B, EF
+------ ------- ----------- ----------- -------------------------------
+math - calculus 0.5.1 0.6 EF (regula falsi)
+ - optimize 0.1 0.2 EF
+ - statistics 0.1.1 0.1.2 P
+ - geometry 1.0.1 1.0.2 D
+------ ------- ----------- ----------- -------------------------------
+mime mime 1.3.6 1.4 Sync
+ smtp 1.3.6 1.4 D, EF (auth, sasl)
+------ ------- ----------- ----------- -------------------------------
+ntp time 1.0.3 1.1 B
+------ ------- ----------- ----------- -------------------------------
+pop3 1.6.1 1.6.2 TS
+------ ------- ----------- ----------- -------------------------------
+pop3d pop3d 1.0.2 1.0.3 B (md5 switch)
+ - dbox 1.0.1 1.0.2 TS
+------ ------- ----------- ----------- -------------------------------
+smtpd 1.2.1 1.3.0 B, EF (secure)
+------ ------- ----------- ----------- -------------------------------
+snit 0.93 0.97 API, EF (macros, pragmas, hierarchical)
+------ ------- ----------- ----------- -------------------------------
+struct 2.0 2.1 Exploded into many packages
+ - graph 2.0 B
+ - list 1.4 --
+ - matrix 2.0 B
+ - pool 1.2.1 --
+ - prioqueue 1.3 --
+ - queue 1.3 B
+ - record 1.2.1 B
+ - set 2.1 B
+ - skiplist 1.3 P
+ - stack 1.3 B
+ - tree 2.0 B, EF
+------ ------- ----------- ----------- -------------------------------
+textutil textutil 0.6.1 0.6.2 B
+ - expander 1.2.1 1.3 TS, D, B, EF (location)
+------ ------- ----------- ----------- -------------------------------
+uri uri::urn 1.0.1 1.0.2 B
+------ ------- ----------- ----------- -------------------------------
+
+Unchanged Modules/Packages
+==========================
+
+calendar, crc (cksum, crc16, sum), control, csv, dns (resolv),
+ftp (ftp, ftp::geturl), inifile, javascript, math (math::fuzzy), md4,
+md5, md5crypt, multiplexer, ncgi, nntp, profiler, report, sha1,
+soundex, stoop (stooop, switched), pop3d (pop3d::udb), uri
+
diff --git a/tcllib/support/releases/history/README-1.8.txt b/tcllib/support/releases/history/README-1.8.txt
new file mode 100644
index 0000000..c311166
--- /dev/null
+++ b/tcllib/support/releases/history/README-1.8.txt
@@ -0,0 +1,203 @@
+New in Tcllib 1.8
+=================
+ Tcllib 1.8
+Module Package New Version Comments
+------ ------- ----------- -------------------------------
+aes aes 1.0.0 AES Encryption
+bibtex bibtex 0.5 Processing of BibTeX bibliographies
+blowfish blowfish 1.0.0 Blowfish Encryption
+------ ------- ----------- -------------------------------
+des tclDES 1.0.0 DES encryption
+ tclDESjr 1.0.0
+------ ------- ----------- -------------------------------
+docstrip docstrip 1.2 Literate programming tools
+ docstrip::util 1.2
+------ ------- ----------- -------------------------------
+fumagic fileutil::magic::filetype 1.0 File types basic on magic numbers.
+ fileutil::magic::mimetype 1.0
+------ ------- ----------- -------------------------------
+grammar_me grammar::me::cpu 0.1 Match Engine. Foundation for
+ grammar::me::cpu::core 0.1 parsers.
+ grammar::me::tcl 0.1
+ grammar::me::util 0.1
+------ ------- ----------- -------------------------------
+grammar_peg grammar::peg 0.1 Container for Parsing Expression
+ grammar::peg::interp 0.1 Grammars, PEG interpreter.
+------ ------- ----------- -------------------------------
+log logger::appender 1.2 Utilities for logger.
+ logger::utils 1.2
+------ ------- ----------- -------------------------------
+math math::bigfloat 1.2 Arbitrary-precision floating point.
+ math::linearalgebra 1.0 Matrix & vector processing.
+ math::roman 1.0 Handling of roman numerals.
+------ ------- ----------- -------------------------------
+page page::analysis::* 0.1 Parser generator packages. Plugin
+ page::config::peg 0.1 based. Can be used for arbitrary
+ page::gen::* 0.1 text processing as well because
+ page::parse::* 0.1 of that.
+ page::pluginmgr 0.1
+ page::reader::* 0.1
+ page::transform::* 0.1
+ page::util::* 0.1
+ page::writer::* 0.1
+------ ------- ----------- -------------------------------
+pluginmgr pluginmgr 0.1 Generic plugin management.
+rcs rcs 0.1 Processing of RCS patches.
+sha sha256 1.0.1 Extended SHA hash
+------ ------- ----------- -------------------------------
+sasl SASL 1.0.0 Simple Authentication & Security Layer
+ SASL::NTLM 1.0.0
+------ ------- ----------- -------------------------------
+snit snit 2.0 Snit for Tcl 8.5
+units units 2.1 Unit conversions.
+------ ------- ----------- -------------------------------
+
+
+Changes from Tcllib 1.7 to 1.8
+==============================
+
+Legend
+ API: ** incompatible ** API changes. > Implies change of major version.
+ EF : Extended functionality, API. \ Implies change of minor verson.
+ I : Major rewrite, but no API change/
+ B : Bug fixes. \
+ D : Documentation updates. > Implies change of patchlevel.
+ EX : New examples. >
+ P : Performance enhancement. /
+ TS : Test suite fix /
+
+ Tcllib 1.7 Tcllib 1.8
+Module Package Old version New Version Comments
+------ ------- ----------- ----------- -------------------------------
+asn asn 0.1 0.4 EF, B, TS, D
+------ ------- ----------- ----------- -------------------------------
+base64 uuencode 1.1.2 1.1.3 TS
+ base64 2.3.1 2.3.2 D
+------ ------- ----------- ----------- -------------------------------
+cmdline cmdline 1.2.3 1.2.4 B, TS
+------ ------- ----------- ----------- -------------------------------
+comm comm 4.2.1 4.3 D, EF
+------ ------- ----------- ----------- -------------------------------
+control control 0.1.2 0.1.3 TS
+------ ------- ----------- ----------- -------------------------------
+counter counter 2.0.3 2.0.4 B
+------ ------- ----------- ----------- -------------------------------
+crc crc32 1.2 1.3 TS, B, I
+ crc16 1.1 1.1.1 B
+ cksum 1.0.1 1.1.0 D, TS, I
+------ ------- ----------- ----------- -------------------------------
+csv csv 0.5.1 0.6 TS, EF
+------ ------- ----------- ----------- -------------------------------
+des des 0.8.2 1.0.0 ** API **, Import tclDES(jr), s.a.
+------ ------- ----------- ----------- -------------------------------
+dns ip 1.0.0 1.1.0 EF, D
+ dns 1.2.0 1.3.0 B, D, EF
+------ ------- ----------- ----------- -------------------------------
+doctools doctools 1.1 1.2 EF, B, TS
+ - idx 0.2 0.2.1 B, TS
+ - toc 0.2 0.2.1 B, TS
+------ ------- ----------- ----------- -------------------------------
+fileutil fileutil 1.7 1.8 D, B, TS, EF
+------ ------- ----------- ----------- -------------------------------
+ftp ftp 2.4.1 2.4.2 B
+------ ------- ----------- ----------- -------------------------------
+grammar_fa grammar::fa 0.1 0.1.1 TS
+ - op 0.1 0.1.1 TS
+ - dexec 0.1 0.1.1 TS
+ - dacceptor 0.1 0.1.1 TS
+------ ------- ----------- ----------- -------------------------------
+html html 1.2.3 1.3 B, TS, EF
+------ ------- ----------- ----------- -------------------------------
+htmlparse htmlparse 1.1 1.1.1 B, TS
+------ ------- ----------- ----------- -------------------------------
+http autoproxy 1.2.0 1.2.1 B
+------ ------- ----------- ----------- -------------------------------
+inifile inifile 0.1 0.1.1 B, TS
+------ ------- ----------- ----------- -------------------------------
+javascript javascript 1.0.1 1.0.2 B
+------ ------- ----------- ----------- -------------------------------
+jpeg jpeg 0.1 0.2 ** API **
+------ ------- ----------- ----------- -------------------------------
+ldap ldap 1.2 1.2.1 B
+------ ------- ----------- ----------- -------------------------------
+log logger 0.5 0.6.1 B, TS, D, EF
+------ ------- ----------- ----------- -------------------------------
+math math 1.2.2 1.2.3 B, TS
+ - bignum 3.0 3.1 B, D, TS, EF
+ - calculus 0.6 0.6.1 B, TS
+ - complexnumbers 1.0 1.0.1 TS
+ - constants 1.0 1.0.1 B, TS
+ - fourier 1.0 1.0.1 TS
+ - geometry 1.0.2 1.0.3 D
+ - interpolate 1.0 1.0.1 B, TS
+ - optimize 0.2 1.0 B, D, TS, EF
+ - polynomials 1.0 1.0.1 TS
+ - rationalfunctions 1.0 1.0.1 B
+ - special 0.1 0.2 B, TS, EF
+ - statistics 0.1.2 0.2 B, TS, EF
+------ ------- ----------- ----------- -------------------------------
+md4 md4 1.0.2 1.0.3 B, TS
+------ ------- ----------- ----------- -------------------------------
+md5 md5 1.4.3 1.4.4 B, TS, D
+ md5 2.0.1 2.0.4 B, TS
+------ ------- ----------- ----------- -------------------------------
+mime smtp 1.4 1.4.1 B
+ mime 1.4 1.4.2 B
+------ ------- ----------- ----------- -------------------------------
+ncgi ncgi 1.2.3 1.3 EF
+------ ------- ----------- ----------- -------------------------------
+ntp time 1.1 1.2 B, TS, EF (ceptcl)
+------ ------- ----------- ----------- -------------------------------
+png png 0.1 0.1.1 B
+------ ------- ----------- ----------- -------------------------------
+pop3 pop3 1.6.2 1.6.3 B/TS
+------ ------- ----------- ----------- -------------------------------
+pop3d pop3d 1.0.3 1.1.0 B, TS, EF
+------ ------- ----------- ----------- -------------------------------
+profiler profiler 0.2.2 0.2.3 B
+------ ------- ----------- ----------- -------------------------------
+rc4 rc4 1.0.0 1.0.1 D, B, TS
+------ ------- ----------- ----------- -------------------------------
+ripemd ripemd128 1.0.0 1.0.3 TS, D, B
+ ripemd160 1.0.0 1.0.3 TS, D, B
+------ ------- ----------- ----------- -------------------------------
+sha sha1 1.0.3 1.1.0 TS, B, EF (cryptkit)
+ sha1 -- 2.0.2 TS, B, EF (cryptkit)
+------ ------- ----------- ----------- -------------------------------
+smtpd smtpd 1.3.0 1.4.0 B
+------ ------- ----------- ----------- -------------------------------
+snit snit 0.97 1.1 D, P, B, TS, I
+------ ------- ----------- ----------- -------------------------------
+struct - tree 1.2.1 1.2.2 B
+ - tree 2.0 2.1 D, EF (ext. api, critcl)
+ - graph 2.0 2.0.1 B
+ - queue 1.3 1.4 B, EF
+ - prioqueue 1.3 1.3.1 B
+ - list 1.4 1.5 D, TS, EF, B
+ - matrix 2.0 2.0.1 B
+ - stack 1.3 1.3.1 B
+------ ------- ----------- ----------- -------------------------------
+textutil textutil 0.6.2 0.7 B, EF
+------ ------- ----------- ----------- -------------------------------
+tie tie 1.0 1.0.1 D, EX, TS
+ - std::file 1.0 1.0.1 B
+------ ------- ----------- ----------- -------------------------------
+treeql treeql 1.2 1.3 B, D, TS, EF
+------ ------- ----------- ----------- -------------------------------
+uri uri 1.1.4 1.1.5 B
+------ ------- ----------- ----------- -------------------------------
+uuid uuid 1.0.0 1.0.1 B
+------ ------- ----------- ----------- -------------------------------
+
+Unchanged Modules/Packages
+==========================
+
+base64 (yencode), bee, calendar, crc (sum), dns (spf, resolv),
+doctools (doctools::cvs, doctools::changelog), exif, ftp (ftp::geturl),
+ftpd, ident, irc, log, math (math::fuzzy), md5crypt, multiplexer,
+nntp, pop3d (pop3d::dbox, pop3d::udb), report, soundex, stooop
+(stooop, switched), tar, textutil (textutil::expander),
+tie (tie::std::array, tie::std::rarray, tie::std::dsource,
+tie::std::log), uri (uri::urn), struct (struct, struct::graph v1,
+struct::matrix v1, struct::pool, struct::record, struct::skiplist,
+struct::set)
diff --git a/tcllib/support/releases/history/README-1.9.txt b/tcllib/support/releases/history/README-1.9.txt
new file mode 100644
index 0000000..98a5ff2
--- /dev/null
+++ b/tcllib/support/releases/history/README-1.9.txt
@@ -0,0 +1,164 @@
+Overview
+========
+
+ 47 new packages in 9 new modules and 8 modules with new packages.
+ 58 changed packages.
+105 unchanged packages (or non-visible changes, like testsuites)
+
+New in Tcllib 1.9
+=================
+ Tcllib 1.9
+Module Package New Version Comments
+------ ------- ----------- -----------------------
+base32 base32 0.1 Base32 encoding,
+ base32::core 0.1 standard and extended
+ base32::hex 0.1 hex forms
+------ ------- ----------- -----------------------
+bench bench 0.1 Benchmarking support,
+ bench::in 0.1 generation, import and
+ bench::out::csv 0.1.1 export of performance
+ bench::out::text 0.1.1 information
+------ ------- ----------- -----------------------
+fileutil fileutil::traverse 0.1 find iterator
+grammar_me grammar::me::cpu::gasm 0.1 graph asm for ME vm
+------ ------- ----------- -----------------------
+interp interp 0.1 Interpreter utilities,
+ interp::delegate::method 0.2 runtime environments,
+ interp::delegate::proc 0.2 delegation commands
+------ ------- ----------- -----------------------
+json json 1.0 JavaScript Object Notation
+ldap ldapx 0.2.2 OO wrapper around ldap
+------ ------- ----------- -----------------------
+math math::bigfloat 2.0 Large FP numbers
+nmea nmea 0.1 NMEA gps messages
+otp otp 1.0.0 RFC 2289 One-Time Passwd
+------ ------- ----------- -----------------------
+page page::compiler::peg::mecpu 0.1 Generator for MEcpu code
+ page::gen::peg::mecpu 0.1 and graph-based compiler
+------ ------- ----------- -----------------------
+sasl SASL::XGoogleToken 1.0.0 X-GOOGLE-TOKEN auth
+------ ------- ----------- -----------------------
+term term 0.1 Low-level terminal
+ term::ansi::code 0.1 control, mainly control
+ term::ansi::code::attr 0.1 codes, some reception
+ term::ansi::code::ctrl 0.1 processing.
+ term::ansi::code::macros 0.1
+ term::ansi::ctrl::unix 0.1
+ term::ansi::send 0.1
+ term::interact::menu 0.1
+ term::interact::pager 0.1
+ term::receive 0.1
+ term::receive::bind 0.1
+ term::send 0.1
+------ ------- ----------- -----------------------
+textutil textutil::adjust 0.7 Textutil functionality
+ textutil::repeat 0.7 split into separate
+ textutil::split 0.7 packages
+ textutil::string 0.7
+ textutil::tabify 0.7
+ textutil::trim 0.7
+------ ------- ----------- -----------------------
+tie tie::std::growfile 1.0 tie backend, evergrowing
+tiff tiff 0.1 TIFF image manipulation
+------ ------- ----------- -----------------------
+transfer transfer::connect 0.1 Classes handling and
+ transfer::copy 0.1 organizing various
+ transfer::copy::queue 0.1 types of data transfers
+ transfer::data::destination 0.1 across sockets.
+ transfer::data::source 0.1
+ transfer::receiver 0.1
+ transfer::transmitter 0.1
+------ ------- ----------- -----------------------
+
+Changes from Tcllib 1.8 to 1.9
+==============================
+
+Legend
+ API: ** incompatible ** API changes. > Implies change of major version.
+ EF : Extended functionality, API. \ Implies change of minor verson.
+ I : Major rewrite, but no API change/
+ B : Bug fixes. \
+ D : Documentation updates. > Implies change of patchlevel.
+ EX : New examples. >
+ P : Performance enhancement. /
+
+ Tcllib 1.8 Tcllib 1.9
+Module Package Old version New Version Comments
+------ ------- ----------- ----------- ---------------
+asn asn 0.4 0.7 B, EF
+blowfish blowfish 1.0.0 1.0.2 B, D, EF
+cmdline cmdline 1.2.4 1.3 I
+comm comm 4.3 4.4 EF
+crc cksum 1.1.0 1.1.1 B
+csv csv 0.6 0.7 EF
+------ ------- ----------- ----------- ---------------
+dns dns 1.3.0 1.3.1 B, EF
+ ip 1.1.0 1.1.1 B
+------ ------- ----------- ----------- ---------------
+doctools doctools 1.2 1.2.1 B
+fileutil fileutil 1.8 1.9 B, D, EF
+ftp ftp 2.4.2 2.4.4 B
+------ ------- ----------- ----------- ---------------
+fumagic fileutil::magic::filetype 1.0 1.0.2 B
+ fileutil::magic::mimetype 1.0 1.0.2 B
+------ ------- ----------- ----------- ---------------
+grammar_fa grammar::fa 0.1.1 0.2 EF
+ grammar::fa::op 0.1.1 0.2 EF
+------ ------- ----------- ----------- ---------------
+grammar_me grammar::me::cpu 0.1 0.2 B, EF
+ grammar::me::cpu::core 0.1 0.2 B, EF
+------ ------- ----------- ----------- ---------------
+html html 1.3 1.4 B, EF
+htmlparse htmlparse 1.1.1 1.1.2 B
+http autoproxy 1.2.1 1.3 EF
+inifile inifile 0.1.1 0.2 B, EF
+irc irc 0.5 0.6 EF
+jpeg jpeg 0.2 0.3 B, EF
+ldap ldap 1.2.1 1.6.6 B, I, EF
+------ ------- ----------- ----------- ---------------
+log logger 0.6.1 0.7 B, EF
+ - appender 1.2 1.3 B
+ - utils 1.2 1.3 B
+------ ------- ----------- ----------- ---------------
+math math 1.2.3 1.2.4 B
+ - bigfloat 1.2 1.2.1 B
+ - bignum 3.1 3.1.1 B
+ - calculus 0.6.1 0.7 B
+ - complexnumbers 1.0.1 1.0.2 B
+ - fourier 1.0.1 1.0.2 B
+ - interpolate 1.0.1 1.0.2 B
+ - linearalgebra 1.0 1.0.1 D, B
+ - statistics 0.2 0.3 B
+------ ------- ----------- ----------- ---------------
+md4 md4 1.0.3 1.0.4 B
+md5 md5 2.0.4 2.0.5 P
+mime mime 1.4.1 1.5.1 B, EF
+ncgi ncgi 1.3 1.3.2 B, P
+ntp time 1.2 1.2.1 B
+profiler profiler 0.2.3 0.3 EF
+rc4 rc4 1.0.1 1.1.0 B, EF
+------ ------- ----------- ----------- ---------------
+sasl SASL 1.0.0 1.3.1 B, EF
+ SASL::NTLM 1.0.0 1.1.0 B, EF
+------ ------- ----------- ----------- ---------------
+snit snit 1.1 1.2 B, D
+ snit 2.0 2.1 B, D
+------ ------- ----------- ----------- ---------------
+stooop switched 2.2 2.2.1 B
+------ ------- ----------- ----------- ---------------
+struct struct::graph 2.0.1 2.1 B, EF
+ struct::list 1.5 1.6 EF
+ struct::set 2.1 2.1.1 B
+ struct::tree 2.1.1 2.1.1 B
+------ ------- ----------- ----------- ---------------
+tar tar 0.1 0.2 B, EF
+------ ------- ----------- ----------- ---------------
+textutil textutil 0.7 0.7.1 I
+ - expander 1.3 1.3.1 B
+------ ------- ----------- ----------- ---------------
+tie tie 1.0.1 1.1 EF (growfile)
+ tie::std::file 1.0.1 1.0.2 B
+------ ------- ----------- ----------- ---------------
+treeql treeql 1.3 1.3.1 B
+uri uri 1.1.5 1.2 EF
+------ ------- ----------- ----------- ---------------
diff --git a/tcllib/support/releases/package_rpm.txt b/tcllib/support/releases/package_rpm.txt
new file mode 100644
index 0000000..26e5bf9
--- /dev/null
+++ b/tcllib/support/releases/package_rpm.txt
@@ -0,0 +1,57 @@
+# $Id: package_rpm.txt,v 1.1 2006/07/01 03:16:57 andreas_kupries Exp $
+
+%define version @PACKAGE_VERSION@
+%define directory /usr
+
+Summary: The standard Tcl library
+Name: @PACKAGE_NAME@
+Version: %{version}
+Release: 2
+Copyright: BSD
+Group: Development/Languages
+Source: %{name}-%{version}.tar.bz2
+URL: http://core.tcl.tk/tcllib/
+Packager: Jean-Luc Fontaine <jfontain@free.fr>
+BuildArchitectures: noarch
+Prefix: /usr
+Requires: tcl >= 8.3.1
+BuildRequires: tcl >= 8.3.1
+Buildroot: /var/tmp/%{name}-%{version}
+
+%description
+Tcllib, the Tcl Standard Library is a collection of Tcl packages
+that provide utility functions useful to a large collection of Tcl
+programmers.
+The home web site for this code is http://core.tcl.tk/tcllib/.
+At this web site, you will find mailing lists, web forums, databases
+for bug reports and feature requests, the CVS repository (browsable
+on the web, or read-only accessible via CVS ), and more.
+Note: also grab source tarball for more documentation, examples, ...
+
+%prep
+
+%setup -q
+
+%install
+# compensate for missing manual files:
+echo 'not available' > modules/calendar/calendar.n
+/usr/bin/tclsh installer.tcl -no-gui -no-wait -no-html -no-examples\
+ -pkg-path $RPM_BUILD_ROOT/usr/lib/%{name}-%{version}\
+ -nroff-path $RPM_BUILD_ROOT/usr/share/man/mann/
+# install HTML documentation to specific modules sub-directories:
+cd modules
+mkdir ../ftp; mv ftp/docs/*.html ../ftp/
+for module in exif mime textutil stooop struct; do
+ mkdir ../$module && mv $module/*.html ../$module/;
+done
+# generate list of files in the package (man pages are compressed):
+find $RPM_BUILD_ROOT ! -type d |\
+ sed -e "s,^$RPM_BUILD_ROOT,,;" -e 's,\.n$,\.n\.gz,;' >\
+ %{_builddir}/%{name}-%{version}/files
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files -f %{_builddir}/%{name}-%{version}/files
+%defattr(-,root,root)
+%doc README ChangeLog license.terms exif/ ftp/ mime/ stooop/ struct/ textutil/
diff --git a/tcllib/support/releases/package_tip55.txt b/tcllib/support/releases/package_tip55.txt
new file mode 100644
index 0000000..e0838e6
--- /dev/null
+++ b/tcllib/support/releases/package_tip55.txt
@@ -0,0 +1,9 @@
+Identifier: @PACKAGE_NAME@
+Title: Tcl Standard Library
+Description: This package is intended to be a collection of
+ Tcl packages that provide utility functions useful to a
+ large collection of Tcl programmers.
+Rights: BSD
+Version: @PACKAGE_VERSION@
+URL: http://core.tcl.tk/tcllib
+Architecture: tcl
diff --git a/tcllib/support/releases/package_yml.txt b/tcllib/support/releases/package_yml.txt
new file mode 100644
index 0000000..9bcd7ed
--- /dev/null
+++ b/tcllib/support/releases/package_yml.txt
@@ -0,0 +1,20 @@
+dist_id: tcllib
+version: @PACKAGE_VERSION@
+language: tcl
+description: |
+ This package is intended to be a collection of Tcl packages that provide
+ utility functions useful to a large collection of Tcl programmers.
+
+ The home web site for this code is http://core.tcl.tk/tcllib/.
+ At this web site, you will find mailing lists, web forums, databases
+ for bug reports and feature requests, the CVS repository (browsable
+ on the web, or read-only accessible via CVS ), and more.
+
+categories:
+ - Library/Utility
+ - Library/Mail
+ - Library/Cryptography
+ - Library/Math
+license: BSD
+owner_id: AndreasKupries
+wrapped_content: @PACKAGE_NAME@-@PACKAGE_VERSION@/
diff --git a/tcllib/support/shed.tcl b/tcllib/support/shed.tcl
new file mode 100644
index 0000000..17d3f6c
--- /dev/null
+++ b/tcllib/support/shed.tcl
@@ -0,0 +1,40 @@
+###
+# Build basic description of this tool
+###
+
+###
+# List of mirrors
+###
+#tool mirror http://core.tcl.tk/tcllib
+#tool mirror http://fossil.etoyoc.com/fossil/tcllib
+###
+# Populate the branches
+###
+my shed set name: tcllib
+my shed set installer: sak
+my add {
+ name: trunk
+ linktype: release
+ checkout: trunk
+}
+foreach release {
+ 1.17 1.16 1.15 1.14 1.13 1.12 1.11.1 1.11 1.10
+ 1.9 1.8 1.7 1.6.1 1.4 1.3 1.2.0 1.2 1.1 1.0
+ 0.8 0.6.1 0.6 0.5 0.4
+} {
+ set checkout tcllib-[join [split $release .] -]
+ my add [list name: $checkout linktype: release version: $release checkout: $checkout]
+}
+
+foreach file [glob [file join $::TOOL_ROOT apps *]] {
+ if {[file extension $file] ne {}} continue
+ my scan $file {class: application}
+}
+
+###
+# Build the module section
+###
+foreach path [glob [file join $::TOOL_ROOT modules *]] {
+ puts "SCANNING $path"
+ my scan $path {class: source}
+}