texlive[62700] Master/tlpkg/tltcl: New Tcl/Tk
commits+siepo at tug.org
commits+siepo at tug.org
Mon Mar 14 11:03:12 CET 2022
Revision: 62700
http://tug.org/svn/texlive?view=revision&revision=62700
Author: siepo
Date: 2022-03-14 11:03:11 +0100 (Mon, 14 Mar 2022)
Log Message:
-----------
New Tcl/Tk
Modified Paths:
--------------
trunk/Master/tlpkg/tltcl/bin/tcl86.dll
trunk/Master/tlpkg/tltcl/bin/tclsh.exe
trunk/Master/tlpkg/tltcl/bin/tclsh86.exe
trunk/Master/tlpkg/tltcl/bin/tk86.dll
trunk/Master/tlpkg/tltcl/bin/wish.exe
trunk/Master/tlpkg/tltcl/bin/wish86.exe
trunk/Master/tlpkg/tltcl/bin/zlib1.dll
trunk/Master/tlpkg/tltcl/lib/dde1.4/pkgIndex.tcl
trunk/Master/tlpkg/tltcl/lib/dde1.4/tcldde14.dll
trunk/Master/tlpkg/tltcl/lib/reg1.3/tclreg13.dll
trunk/Master/tlpkg/tltcl/lib/tcl8/8.5/tcltest-2.5.3.tm
trunk/Master/tlpkg/tltcl/lib/tcl8.6/auto.tcl
trunk/Master/tlpkg/tltcl/lib/tcl8.6/clock.tcl
trunk/Master/tlpkg/tltcl/lib/tcl8.6/encoding/iso8859-7.enc
trunk/Master/tlpkg/tltcl/lib/tcl8.6/init.tcl
trunk/Master/tlpkg/tltcl/lib/tcl8.6/opt0.4/optparse.tcl
trunk/Master/tlpkg/tltcl/lib/tcl8.6/safe.tcl
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Africa/Accra
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Africa/Juba
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Anguilla
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Antigua
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Aruba
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Atikokan
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Barbados
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Blanc-Sablon
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Coral_Harbour
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Creston
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Curacao
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Dominica
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Grenada
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Guadeloupe
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Guyana
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Kralendijk
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Lower_Princes
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Marigot
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Montserrat
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Nassau
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Port_of_Spain
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/St_Barthelemy
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/St_Kitts
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/St_Lucia
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/St_Thomas
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/St_Vincent
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Tortola
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Virgin
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Antarctica/DumontDUrville
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Antarctica/Syowa
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Asia/Amman
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Asia/Gaza
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Asia/Hebron
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Atlantic/Azores
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Atlantic/Madeira
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Europe/Lisbon
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Apia
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Enderbury
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Fiji
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Niue
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Rarotonga
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Tongatapu
trunk/Master/tlpkg/tltcl/lib/tclConfig.sh
trunk/Master/tlpkg/tltcl/lib/tk8.6/demos/cscroll.tcl
trunk/Master/tlpkg/tltcl/lib/tk8.6/demos/menu.tcl
trunk/Master/tlpkg/tltcl/lib/tk8.6/demos/widget
trunk/Master/tlpkg/tltcl/lib/tk8.6/fontchooser.tcl
trunk/Master/tlpkg/tltcl/lib/tk8.6/icons.tcl
trunk/Master/tlpkg/tltcl/lib/tk8.6/listbox.tcl
trunk/Master/tlpkg/tltcl/lib/tk8.6/menu.tcl
trunk/Master/tlpkg/tltcl/lib/tk8.6/pkgIndex.tcl
trunk/Master/tlpkg/tltcl/lib/tk8.6/tearoff.tcl
trunk/Master/tlpkg/tltcl/lib/tk8.6/text.tcl
trunk/Master/tlpkg/tltcl/lib/tk8.6/tk.tcl
trunk/Master/tlpkg/tltcl/lib/tk8.6/tkAppInit.c
trunk/Master/tlpkg/tltcl/lib/tk8.6/ttk/aquaTheme.tcl
trunk/Master/tlpkg/tltcl/lib/tk8.6/ttk/menubutton.tcl
trunk/Master/tlpkg/tltcl/lib/tk8.6/ttk/notebook.tcl
trunk/Master/tlpkg/tltcl/lib/tk8.6/ttk/scrollbar.tcl
trunk/Master/tlpkg/tltcl/lib/tk8.6/ttk/utils.tcl
trunk/Master/tlpkg/tltcl/lib/tkConfig.sh
Added Paths:
-----------
trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/
trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itcl.tcl
trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itcl422.dll
trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itclConfig.sh
trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itclHullCmds.tcl
trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itclWidget.tcl
trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/pkgIndex.tcl
trunk/Master/tlpkg/tltcl/lib/sqlite3.36.0/
trunk/Master/tlpkg/tltcl/lib/sqlite3.36.0/pkgIndex.tcl
trunk/Master/tlpkg/tltcl/lib/sqlite3.36.0/sqlite3360.dll
trunk/Master/tlpkg/tltcl/lib/tcl8/8.4/platform-1.0.18.tm
trunk/Master/tlpkg/tltcl/lib/tcl8/8.6/tdbc/sqlite3-1.1.3.tm
trunk/Master/tlpkg/tltcl/lib/tcl8.6/encoding/cns11643.enc
trunk/Master/tlpkg/tltcl/lib/tcl8.6/encoding/iso8859-11.enc
trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Kanton
trunk/Master/tlpkg/tltcl/lib/tdbc1.1.3/
trunk/Master/tlpkg/tltcl/lib/tdbc1.1.3/pkgIndex.tcl
trunk/Master/tlpkg/tltcl/lib/tdbc1.1.3/tdbc.tcl
trunk/Master/tlpkg/tltcl/lib/tdbc1.1.3/tdbc113.dll
trunk/Master/tlpkg/tltcl/lib/tdbc1.1.3/tdbcConfig.sh
trunk/Master/tlpkg/tltcl/lib/tdbcmysql1.1.3/
trunk/Master/tlpkg/tltcl/lib/tdbcmysql1.1.3/pkgIndex.tcl
trunk/Master/tlpkg/tltcl/lib/tdbcmysql1.1.3/tdbcmysql.tcl
trunk/Master/tlpkg/tltcl/lib/tdbcmysql1.1.3/tdbcmysql113.dll
trunk/Master/tlpkg/tltcl/lib/tdbcodbc1.1.3/
trunk/Master/tlpkg/tltcl/lib/tdbcodbc1.1.3/pkgIndex.tcl
trunk/Master/tlpkg/tltcl/lib/tdbcodbc1.1.3/tdbcodbc.tcl
trunk/Master/tlpkg/tltcl/lib/tdbcodbc1.1.3/tdbcodbc113.dll
trunk/Master/tlpkg/tltcl/lib/tdbcpostgres1.1.3/
trunk/Master/tlpkg/tltcl/lib/tdbcpostgres1.1.3/pkgIndex.tcl
trunk/Master/tlpkg/tltcl/lib/tdbcpostgres1.1.3/tdbcpostgres.tcl
trunk/Master/tlpkg/tltcl/lib/tdbcpostgres1.1.3/tdbcpostgres113.dll
trunk/Master/tlpkg/tltcl/lib/thread2.8.7/
trunk/Master/tlpkg/tltcl/lib/thread2.8.7/pkgIndex.tcl
trunk/Master/tlpkg/tltcl/lib/thread2.8.7/thread287.dll
trunk/Master/tlpkg/tltcl/lib/thread2.8.7/ttrace.tcl
Removed Paths:
-------------
trunk/Master/tlpkg/tltcl/lib/dde1.4/libtcldde14.dll.a
trunk/Master/tlpkg/tltcl/lib/itcl4.2.1/
trunk/Master/tlpkg/tltcl/lib/libtcl86.dll.a
trunk/Master/tlpkg/tltcl/lib/libtclstub86.a
trunk/Master/tlpkg/tltcl/lib/libtk86.dll.a
trunk/Master/tlpkg/tltcl/lib/libtkstub86.a
trunk/Master/tlpkg/tltcl/lib/reg1.3/libtclreg13.dll.a
trunk/Master/tlpkg/tltcl/lib/sqlite3.34.0/
trunk/Master/tlpkg/tltcl/lib/tcl8/8.4/platform-1.0.15.tm
trunk/Master/tlpkg/tltcl/lib/tcl8/8.6/tdbc/sqlite3-1.1.2.tm
trunk/Master/tlpkg/tltcl/lib/tdbc1.1.2/
trunk/Master/tlpkg/tltcl/lib/tdbcmysql1.1.2/
trunk/Master/tlpkg/tltcl/lib/tdbcodbc1.1.2/
trunk/Master/tlpkg/tltcl/lib/tdbcpostgres1.1.2/
trunk/Master/tlpkg/tltcl/lib/thread2.8.6/
Modified: trunk/Master/tlpkg/tltcl/bin/tcl86.dll
===================================================================
(Binary files differ)
Modified: trunk/Master/tlpkg/tltcl/bin/tclsh.exe
===================================================================
(Binary files differ)
Modified: trunk/Master/tlpkg/tltcl/bin/tclsh86.exe
===================================================================
(Binary files differ)
Modified: trunk/Master/tlpkg/tltcl/bin/tk86.dll
===================================================================
(Binary files differ)
Modified: trunk/Master/tlpkg/tltcl/bin/wish.exe
===================================================================
(Binary files differ)
Modified: trunk/Master/tlpkg/tltcl/bin/wish86.exe
===================================================================
(Binary files differ)
Modified: trunk/Master/tlpkg/tltcl/bin/zlib1.dll
===================================================================
(Binary files differ)
Deleted: trunk/Master/tlpkg/tltcl/lib/dde1.4/libtcldde14.dll.a
===================================================================
(Binary files differ)
Modified: trunk/Master/tlpkg/tltcl/lib/dde1.4/pkgIndex.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/dde1.4/pkgIndex.tcl 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/dde1.4/pkgIndex.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,7 +1,12 @@
-if {![package vsatisfies [package provide Tcl] 8.5]} return
if {[info sharedlibextension] != ".dll"} return
-if {[::tcl::pkgconfig get debug]} {
- package ifneeded dde 1.4.3 [list load [file join $dir tcldde14g.dll] Dde]
+if {[package vsatisfies [package provide Tcl] 9.0-]} {
+ package ifneeded dde 1.4.4 \
+ [list load [file join $dir tcl9dde14.dll] Dde]
+} elseif {![package vsatisfies [package provide Tcl] 8.7]
+ && [::tcl::pkgconfig get debug]} {
+ package ifneeded dde 1.4.4 \
+ [list load [file join $dir tcldde14g.dll] Dde]
} else {
- package ifneeded dde 1.4.3 [list load [file join $dir tcldde14.dll] Dde]
+ package ifneeded dde 1.4.4 \
+ [list load [file join $dir tcldde14.dll] Dde]
}
Modified: trunk/Master/tlpkg/tltcl/lib/dde1.4/tcldde14.dll
===================================================================
(Binary files differ)
Added: trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itcl.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itcl.tcl (rev 0)
+++ trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itcl.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -0,0 +1,151 @@
+#
+# itcl.tcl
+# ----------------------------------------------------------------------
+# Invoked automatically upon startup to customize the interpreter
+# for [incr Tcl].
+# ----------------------------------------------------------------------
+# AUTHOR: Michael J. McLennan
+# Bell Labs Innovations for Lucent Technologies
+# mmclennan at lucent.com
+# http://www.tcltk.com/itcl
+# ----------------------------------------------------------------------
+# Copyright (c) 1993-1998 Lucent Technologies, Inc.
+# ======================================================================
+# See the file "license.terms" for information on usage and
+# redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+
+proc ::itcl::delete_helper { name args } {
+ ::itcl::delete object $name
+}
+
+# ----------------------------------------------------------------------
+# USAGE: local <className> <objName> ?<arg> <arg>...?
+#
+# Creates a new object called <objName> in class <className>, passing
+# the remaining <arg>'s to the constructor. Unlike the usual
+# [incr Tcl] objects, however, an object created by this procedure
+# will be automatically deleted when the local call frame is destroyed.
+# This command is useful for creating objects that should only remain
+# alive until a procedure exits.
+# ----------------------------------------------------------------------
+proc ::itcl::local {class name args} {
+ set ptr [uplevel [list $class $name] $args]
+ uplevel [list set itcl-local-$ptr $ptr]
+ set cmd [uplevel namespace which -command $ptr]
+ uplevel [list trace variable itcl-local-$ptr u \
+ "::itcl::delete_helper $cmd"]
+ return $ptr
+}
+
+# ----------------------------------------------------------------------
+# auto_mkindex
+# ----------------------------------------------------------------------
+# Define Itcl commands that will be recognized by the auto_mkindex
+# parser in Tcl...
+#
+
+#
+# USAGE: itcl::class name body
+# Adds an entry for the given class declaration.
+#
+foreach __cmd {itcl::class class itcl::type type ictl::widget widget itcl::widgetadaptor widgetadaptor itcl::extendedclass extendedclass} {
+ auto_mkindex_parser::command $__cmd {name body} {
+ variable index
+ variable scriptFile
+ append index "set [list auto_index([fullname $name])]"
+ append index " \[list source \[file join \$dir [list $scriptFile]\]\]\n"
+
+ variable parser
+ variable contextStack
+ set contextStack [linsert $contextStack 0 $name]
+ $parser eval $body
+ set contextStack [lrange $contextStack 1 end]
+ }
+}
+
+#
+# USAGE: itcl::body name arglist body
+# Adds an entry for the given method/proc body.
+#
+foreach __cmd {itcl::body body} {
+ auto_mkindex_parser::command $__cmd {name arglist body} {
+ variable index
+ variable scriptFile
+ append index "set [list auto_index([fullname $name])]"
+ append index " \[list source \[file join \$dir [list $scriptFile]\]\]\n"
+ }
+}
+
+#
+# USAGE: itcl::configbody name arglist body
+# Adds an entry for the given method/proc body.
+#
+foreach __cmd {itcl::configbody configbody} {
+ auto_mkindex_parser::command $__cmd {name body} {
+ variable index
+ variable scriptFile
+ append index "set [list auto_index([fullname $name])]"
+ append index " \[list source \[file join \$dir [list $scriptFile]\]\]\n"
+ }
+}
+
+#
+# USAGE: ensemble name ?body?
+# Adds an entry to the auto index list for the given ensemble name.
+#
+foreach __cmd {itcl::ensemble ensemble} {
+ auto_mkindex_parser::command $__cmd {name {body ""}} {
+ variable index
+ variable scriptFile
+ append index "set [list auto_index([fullname $name])]"
+ append index " \[list source \[file join \$dir [list $scriptFile]\]\]\n"
+ }
+}
+
+#
+# USAGE: public arg ?arg arg...?
+# protected arg ?arg arg...?
+# private arg ?arg arg...?
+#
+# Evaluates the arguments as commands, so we can recognize proc
+# declarations within classes.
+#
+foreach __cmd {public protected private} {
+ auto_mkindex_parser::command $__cmd {args} {
+ variable parser
+ $parser eval $args
+ }
+}
+
+# SF bug #246 unset variable __cmd to avoid problems in user programs!!
+unset __cmd
+
+# ----------------------------------------------------------------------
+# auto_import
+# ----------------------------------------------------------------------
+# This procedure overrides the usual "auto_import" function in the
+# Tcl library. It is invoked during "namespace import" to make see
+# if the imported commands reside in an autoloaded library. If so,
+# stubs are created to represent the commands. Executing a stub
+# later on causes the real implementation to be autoloaded.
+#
+# Arguments -
+# pattern The pattern of commands being imported (like "foo::*")
+# a canonical namespace as returned by [namespace current]
+
+proc auto_import {pattern} {
+ global auto_index
+
+ set ns [uplevel namespace current]
+ set patternList [auto_qualify $pattern $ns]
+
+ auto_load_index
+
+ foreach pattern $patternList {
+ foreach name [array names auto_index $pattern] {
+ if {"" == [info commands $name]} {
+ ::itcl::import::stub create $name
+ }
+ }
+ }
+}
Property changes on: trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itcl.tcl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itcl422.dll
===================================================================
(Binary files differ)
Index: trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itcl422.dll
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itcl422.dll 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itcl422.dll 2022-03-14 10:03:11 UTC (rev 62700)
Property changes on: trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itcl422.dll
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/x-dosexec
\ No newline at end of property
Added: trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itclConfig.sh
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itclConfig.sh (rev 0)
+++ trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itclConfig.sh 2022-03-14 10:03:11 UTC (rev 62700)
@@ -0,0 +1,67 @@
+# itclConfig.sh --
+#
+# This shell script (for sh) is generated automatically by Itcl's
+# configure script. It will create shell variables for most of
+# the configuration options discovered by the configure script.
+# This script is intended to be included by the configure scripts
+# for Itcl extensions so that they don't have to figure this all
+# out for themselves. This file does not duplicate information
+# already provided by tclConfig.sh, so you may need to use that
+# file in addition to this one.
+#
+# The information in this file is specific to a single platform.
+
+# Itcl's version number.
+itcl_VERSION='4.2.2'
+ITCL_VERSION='4.2.2'
+
+# The name of the Itcl library (may be either a .a file or a shared library):
+itcl_LIB_FILE=itcl422.dll
+ITCL_LIB_FILE=itcl422.dll
+
+# String to pass to linker to pick up the Itcl library from its
+# build directory.
+itcl_BUILD_LIB_SPEC='-L/home/siepo/xdrive/tltcl/tcl8.6.12/win/pkgs/itcl4.2.2 -litcl422'
+ITCL_BUILD_LIB_SPEC='-L/home/siepo/xdrive/tltcl/tcl8.6.12/win/pkgs/itcl4.2.2 -litcl422'
+
+# String to pass to linker to pick up the Itcl library from its
+# installed directory.
+itcl_LIB_SPEC='-L/tmp/tltcl/lib/itcl4.2.2 -litcl422'
+ITCL_LIB_SPEC='-L/tmp/tltcl/lib/itcl4.2.2 -litcl422'
+
+# The name of the Itcl stub library (a .a file):
+itcl_STUB_LIB_FILE=libitclstub422.a
+ITCL_STUB_LIB_FILE=libitclstub422.a
+
+# String to pass to linker to pick up the Itcl stub library from its
+# build directory.
+itcl_BUILD_STUB_LIB_SPEC='-L/home/siepo/xdrive/tltcl/tcl8.6.12/win/pkgs/itcl4.2.2 -litclstub422'
+ITCL_BUILD_STUB_LIB_SPEC='-L/home/siepo/xdrive/tltcl/tcl8.6.12/win/pkgs/itcl4.2.2 -litclstub422'
+
+# String to pass to linker to pick up the Itcl stub library from its
+# installed directory.
+itcl_STUB_LIB_SPEC='-L/tmp/tltcl/lib/itcl4.2.2 -litclstub422'
+ITCL_STUB_LIB_SPEC='-L/tmp/tltcl/lib/itcl4.2.2 -litclstub422'
+
+# String to pass to linker to pick up the Itcl stub library from its
+# build directory.
+itcl_BUILD_STUB_LIB_PATH='/home/siepo/xdrive/tltcl/tcl8.6.12/win/pkgs/itcl4.2.2/libitclstub422.a'
+ITCL_BUILD_STUB_LIB_PATH='/home/siepo/xdrive/tltcl/tcl8.6.12/win/pkgs/itcl4.2.2/libitclstub422.a'
+
+# String to pass to linker to pick up the Itcl stub library from its
+# installed directory.
+itcl_STUB_LIB_PATH='/tmp/tltcl/lib/itcl4.2.2/libitclstub422.a'
+ITCL_STUB_LIB_PATH='/tmp/tltcl/lib/itcl4.2.2/libitclstub422.a'
+
+# Location of the top-level source directories from which [incr Tcl]
+# was built. This is the directory that contains generic, unix, etc.
+# If [incr Tcl] was compiled in a different place than the directory
+# containing the source files, this points to the location of the sources,
+# not the location where [incr Tcl] was compiled.
+itcl_SRC_DIR='/home/siepo/xdrive/tltcl/tcl8.6.12/pkgs/itcl4.2.2'
+ITCL_SRC_DIR='/home/siepo/xdrive/tltcl/tcl8.6.12/pkgs/itcl4.2.2'
+
+# String to pass to the compiler so that an extension can
+# find installed Itcl headers.
+itcl_INCLUDE_SPEC='-I/home/siepo/xdrive/tltcl/tcl8.6.12/pkgs/itcl4.2.2/generic'
+ITCL_INCLUDE_SPEC='-I/home/siepo/xdrive/tltcl/tcl8.6.12/pkgs/itcl4.2.2/generic'
Property changes on: trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itclConfig.sh
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itclHullCmds.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itclHullCmds.tcl (rev 0)
+++ trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itclHullCmds.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -0,0 +1,562 @@
+#
+# itclHullCmds.tcl
+# ----------------------------------------------------------------------
+# Invoked automatically upon startup to customize the interpreter
+# for [incr Tcl] when one of setupcomponent or createhull is called.
+# ----------------------------------------------------------------------
+# AUTHOR: Arnulf P. Wiedemann
+#
+# ----------------------------------------------------------------------
+# Copyright (c) 2008 Arnulf P. Wiedemann
+# ======================================================================
+# See the file "license.terms" for information on usage and
+# redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+
+package require Tk 8.6
+
+namespace eval ::itcl::internal::commands {
+
+# ======================= widgetDeleted ===========================
+
+proc widgetDeleted {oldName newName op} {
+ # The widget is beeing deleted, so we have to delete the object
+ # which had the widget as itcl_hull too!
+ # We have to get the real name from for example
+ # ::itcl::internal::widgets::hull1.lw
+ # we need only .lw here
+
+#puts stderr "widgetDeleted!$oldName!$newName!$op!"
+ set cmdName [namespace tail $oldName]
+ set flds [split $cmdName {.}]
+ set cmdName .[join [lrange $flds 1 end] {.}]
+#puts stderr "DELWIDGET![namespace current]!$cmdName![::info command $cmdName]!"
+ rename $cmdName {}
+}
+
+}
+
+namespace eval ::itcl::builtin {
+
+# ======================= createhull ===========================
+# the hull widget is a tk widget which is the (mega) widget handled behind the itcl
+# extendedclass/itcl widget.
+# It is created be renaming the itcl class object to a temporary name <itcl object name>_
+# creating the widget with the
+# appropriate options and the installing that as the "hull" widget (the container)
+# All the options in args and the options delegated to component itcl_hull are used
+# Then a unique name (hull_widget_name) in the itcl namespace is created for widget:
+# ::itcl::internal::widgets::hull<unique number><namespace tail path>
+# and widget is renamed to that name
+# Finally the <itcl object name>_ is renamed to the original <itcl object name> again
+# Component itcl_hull is created if not existent
+# itcl_hull is set to the hull_widget_name and the <itcl object name>
+# is returned to the caller
+# ==============================================================
+
+proc createhull {widget_type path args} {
+ variable hullCount
+ upvar this this
+ upvar win win
+
+
+#puts stderr "il-1![::info level -1]!$this!"
+#puts stderr "createhull!$widget_type!$path!$args!$this![::info command $this]!"
+#puts stderr "ns1![uplevel 1 namespace current]!"
+#puts stderr "ns2![uplevel 2 namespace current]!"
+#puts stderr "ns3![uplevel 3 namespace current]!"
+#puts stderr "level-1![::info level -1]!"
+#puts stderr "level-2![::info level -2]!"
+# set my_this [namespace tail $this]
+ set my_this $this
+ set tmp $my_this
+#puts stderr "II![::info command $this]![::info command $tmp]!"
+#puts stderr "rename1!rename $my_this ${tmp}_!"
+ rename ::$my_this ${tmp}_
+ set options [list]
+ foreach {option_name value} $args {
+ switch -glob -- $option_name {
+ -class {
+ lappend options $option_name [namespace tail $value]
+ }
+ -* {
+ lappend options $option_name $value
+ }
+ default {
+ return -code error "bad option name\"$option_name\" options must start with a \"-\""
+ }
+ }
+ }
+ set my_win [namespace tail $path]
+ set cmd [list $widget_type $my_win]
+#puts stderr "my_win!$my_win!cmd!$cmd!$path!"
+ if {[llength $options] > 0} {
+ lappend cmd {*}$options
+ }
+ set widget [uplevel 1 $cmd]
+#puts stderr "widget!$widget!"
+ trace add command $widget delete ::itcl::internal::commands::widgetDeleted
+ set opts [uplevel 1 info delegated options]
+ foreach entry $opts {
+ foreach {optName compName} $entry break
+ if {$compName eq "itcl_hull"} {
+ set optInfos [uplevel 1 info delegated option $optName]
+ set realOptName [lindex $optInfos 4]
+ # strip off the "-" at the beginning
+ set myOptName [string range $realOptName 1 end]
+ set my_opt_val [option get $my_win $myOptName *]
+ if {$my_opt_val ne ""} {
+ $my_win configure -$myOptName $my_opt_val
+ }
+ }
+ }
+ set idx 1
+ while {1} {
+ set widgetName ::itcl::internal::widgets::hull${idx}$my_win
+#puts stderr "widgetName!$widgetName!"
+ if {[string length [::info command $widgetName]] == 0} {
+ break
+ }
+ incr idx
+ }
+#puts stderr "rename2!rename $widget $widgetName!"
+ set dorename 0
+ rename $widget $widgetName
+#puts stderr "rename3!rename ${tmp}_ $tmp![::info command ${tmp}_]!my_this!$my_this!"
+ rename ${tmp}_ ::$tmp
+ set exists [uplevel 1 ::info exists itcl_hull]
+ if {!$exists} {
+ # that does not yet work, beacause of problems with resolving
+ ::itcl::addcomponent $my_this itcl_hull
+ }
+ upvar itcl_hull itcl_hull
+ ::itcl::setcomponent $my_this itcl_hull $widgetName
+#puts stderr "IC![::info command $my_win]!"
+ set exists [uplevel 1 ::info exists itcl_interior]
+ if {!$exists} {
+ # that does not yet work, beacause of problems with resolving
+ ::itcl::addcomponent $this itcl_interior
+ }
+ upvar itcl_interior itcl_interior
+ set itcl_interior $my_win
+#puts stderr "hull end!win!$win!itcl_hull!$itcl_hull!itcl_interior!$itcl_interior!"
+ return $my_win
+}
+
+# ======================= addToItclOptions ===========================
+
+proc addToItclOptions {my_class my_win myOptions argsDict} {
+ upvar win win
+ upvar itcl_hull itcl_hull
+
+ set opt_lst [list configure]
+ foreach opt [lsort $myOptions] {
+#puts stderr "IOPT!$opt!$my_class!$my_win![::itcl::is class $my_class]!"
+ set isClass [::itcl::is class $my_class]
+ set found 0
+ if {$isClass} {
+ if {[catch {
+ set resource [namespace eval $my_class info option $opt -resource]
+ set class [namespace eval $my_class info option $opt -class]
+ set default_val [uplevel 2 info option $opt -default]
+ set found 1
+ } msg]} {
+# puts stderr "MSG!$opt!$my_class!$msg!"
+ }
+ } else {
+ set tmp_win [uplevel #0 $my_class .___xx]
+
+ set my_info [$tmp_win configure $opt]
+ set resource [lindex $my_info 1]
+ set class [lindex $my_info 2]
+ set default_val [lindex $my_info 3]
+ uplevel #0 destroy $tmp_win
+ set found 1
+ }
+ if {$found} {
+ if {[catch {
+ set val [uplevel #0 ::option get $win $resource $class]
+ } msg]} {
+ set val ""
+ }
+ if {[::dict exists $argsDict $opt]} {
+ # we have an explicitly set option
+ set val [::dict get $argsDict $opt]
+ } else {
+ if {[string length $val] == 0} {
+ set val $default_val
+ }
+ }
+ set ::itcl::internal::variables::${my_win}::itcl_options($opt) $val
+ set ::itcl::internal::variables::${my_win}::__itcl_option_infos($opt) [list $resource $class $default_val]
+#puts stderr "OPT1!$opt!$val!"
+# uplevel 1 [list set itcl_options($opt) [list $val]]
+ if {[catch {uplevel 1 $win configure $opt [list $val]} msg]} {
+#puts stderr "addToItclOptions ERR!$msg!$my_class!$win!configure!$opt!$val!"
+ }
+ }
+ }
+}
+
+# ======================= setupcomponent ===========================
+
+proc setupcomponent {comp using widget_type path args} {
+ upvar this this
+ upvar win win
+ upvar itcl_hull itcl_hull
+
+#puts stderr "setupcomponent!$comp!$widget_type!$path!$args!$this!$win!$itcl_hull!"
+#puts stderr "CONT![uplevel 1 info context]!"
+#puts stderr "ns1![uplevel 1 namespace current]!"
+#puts stderr "ns2![uplevel 2 namespace current]!"
+#puts stderr "ns3![uplevel 3 namespace current]!"
+ set my_comp_object [lindex [uplevel 1 info context] 1]
+ if {[::info exists ::itcl::internal::component_objects($my_comp_object)]} {
+ set my_comp_object [set ::itcl::internal::component_objects($my_comp_object)]
+ } else {
+ set ::itcl::internal::component_objects($path) $my_comp_object
+ }
+ set options [list]
+ foreach {option_name value} $args {
+ switch -glob -- $option_name {
+ -* {
+ lappend options $option_name $value
+ }
+ default {
+ return -code error "bad option name\"$option_name\" options must start with a \"-\""
+ }
+ }
+ }
+ if {[llength $args]} {
+ set argsDict [dict create {*}$args]
+ } else {
+ set argsDict [dict create]
+ }
+ set cmd [list $widget_type $path]
+ if {[llength $options] > 0} {
+ lappend cmd {*}$options
+ }
+#puts stderr "cmd0![::info command $widget_type]!$path![::info command $path]!"
+#puts stderr "cmd1!$cmd!"
+# set my_comp [uplevel 3 $cmd]
+ set my_comp [uplevel #0 $cmd]
+#puts stderr 111![::info command $path]!
+ ::itcl::setcomponent $this $comp $my_comp
+ set opts [uplevel 1 info delegated options]
+ foreach entry $opts {
+ foreach {optName compName} $entry break
+ if {$compName eq $my_comp} {
+ set optInfos [uplevel 1 info delegated option $optName]
+ set realOptName [lindex $optInfos 4]
+ # strip off the "-" at the beginning
+ set myOptName [string range $realOptName 1 end]
+ set my_opt_val [option get $my_win $myOptName *]
+ if {$my_opt_val ne ""} {
+ $my_comp configure -$myOptName $my_opt_val
+ }
+ }
+ }
+ set my_class $widget_type
+ set my_parent_class [uplevel 1 namespace current]
+ if {[catch {
+ set myOptions [namespace eval $my_class {info classoptions}]
+ } msg]} {
+ set myOptions [list]
+ }
+ foreach entry [$path configure] {
+ foreach {opt dummy1 dummy2 dummy3} $entry break
+ lappend myOptions $opt
+ }
+#puts stderr "OPTS!$myOptions!"
+ addToItclOptions $widget_type $my_comp_object $myOptions $argsDict
+#puts stderr END!$path![::info command $path]!
+}
+
+proc itcl_initoptions {args} {
+puts stderr "ITCL_INITOPT!$args!"
+}
+
+# ======================= initoptions ===========================
+
+proc initoptions {args} {
+ upvar win win
+ upvar itcl_hull itcl_hull
+ upvar itcl_option_components itcl_option_components
+
+#puts stderr "INITOPT!!$win!"
+ if {[llength $args]} {
+ set argsDict [dict create {*}$args]
+ } else {
+ set argsDict [dict create]
+ }
+ set my_class [uplevel 1 namespace current]
+ set myOptions [namespace eval $my_class {info classoptions}]
+ if {[dict exists $::itcl::internal::dicts::classComponents $my_class]} {
+ set class_info_dict [dict get $::itcl::internal::dicts::classComponents $my_class]
+# set myOptions [lsort -unique [namespace eval $my_class {info options}]]
+ foreach comp [uplevel 1 info components] {
+ if {[dict exists $class_info_dict $comp -keptoptions]} {
+ foreach my_opt [dict get $class_info_dict $comp -keptoptions] {
+ if {[lsearch $myOptions $my_opt] < 0} {
+#puts stderr "KEOPT!$my_opt!"
+ lappend myOptions $my_opt
+ }
+ }
+ }
+ }
+ } else {
+ set class_info_dict [list]
+ }
+#puts stderr "OPTS!$win!$my_class![join [lsort $myOptions]] \n]!"
+ set opt_lst [list configure]
+ set my_win $win
+ foreach opt [lsort $myOptions] {
+ set found 0
+ if {[catch {
+ set resource [uplevel 1 info option $opt -resource]
+ set class [uplevel 1 info option $opt -class]
+ set default_val [uplevel 1 info option $opt -default]
+ set found 1
+ } msg]} {
+# puts stderr "MSG!$opt!$msg!"
+ }
+#puts stderr "OPT!$opt!$found!"
+ if {$found} {
+ if {[catch {
+ set val [uplevel #0 ::option get $my_win $resource $class]
+ } msg]} {
+ set val ""
+ }
+ if {[::dict exists $argsDict $opt]} {
+ # we have an explicitly set option
+ set val [::dict get $argsDict $opt]
+ } else {
+ if {[string length $val] == 0} {
+ set val $default_val
+ }
+ }
+ set ::itcl::internal::variables::${win}::itcl_options($opt) $val
+ set ::itcl::internal::variables::${win}::__itcl_option_infos($opt) [list $resource $class $default_val]
+#puts stderr "OPT1!$opt!$val!"
+# uplevel 1 [list set itcl_options($opt) [list $val]]
+ if {[catch {uplevel 1 $my_win configure $opt [list $val]} msg]} {
+puts stderr "initoptions ERR!$msg!$my_class!$my_win!configure!$opt!$val!"
+ }
+ }
+ foreach comp [dict keys $class_info_dict] {
+#puts stderr "OPT1!$opt!$comp![dict get $class_info_dict $comp]!"
+ if {[dict exists $class_info_dict $comp -keptoptions]} {
+ if {[lsearch [dict get $class_info_dict $comp -keptoptions] $opt] >= 0} {
+ if {$found == 0} {
+ # we use the option value of the first component for setting
+ # the option, as the components are traversed in the dict
+ # depending on the ordering of the component creation!!
+ set my_info [uplevel 1 \[set $comp\] configure $opt]
+ set resource [lindex $my_info 1]
+ set class [lindex $my_info 2]
+ set default_val [lindex $my_info 3]
+ set found 2
+ set val [uplevel #0 ::option get $my_win $resource $class]
+ if {[::dict exists $argsDict $opt]} {
+ # we have an explicitly set option
+ set val [::dict get $argsDict $opt]
+ } else {
+ if {[string length $val] == 0} {
+ set val $default_val
+ }
+ }
+#puts stderr "OPT2!$opt!$val!"
+ set ::itcl::internal::variables::${win}::itcl_options($opt) $val
+ set ::itcl::internal::variables::${win}::__itcl_option_infos($opt) [list $resource $class $default_val]
+# uplevel 1 [list set itcl_options($opt) [list $val]]
+ }
+ if {[catch {uplevel 1 \[set $comp\] configure $opt [list $val]} msg]} {
+puts stderr "initoptions ERR2!$msg!$my_class!$comp!configure!$opt!$val!"
+ }
+ if {![uplevel 1 info exists itcl_option_components($opt)]} {
+ set itcl_option_components($opt) [list]
+ }
+ if {[lsearch [set itcl_option_components($opt)] $comp] < 0} {
+ if {![catch {
+ set optval [uplevel 1 [list set itcl_options($opt)]]
+ } msg3]} {
+ uplevel 1 \[set $comp\] configure $opt $optval
+ }
+ lappend itcl_option_components($opt) $comp
+ }
+ }
+ }
+ }
+ }
+# uplevel 1 $opt_lst
+}
+
+# ======================= setoptions ===========================
+
+proc setoptions {args} {
+
+#puts stderr "setOPT!!$args!"
+ if {[llength $args]} {
+ set argsDict [dict create {*}$args]
+ } else {
+ set argsDict [dict create]
+ }
+ set my_class [uplevel 1 namespace current]
+ set myOptions [namespace eval $my_class {info options}]
+#puts stderr "OPTS!$win!$my_class![join [lsort $myOptions]] \n]!"
+ set opt_lst [list configure]
+ foreach opt [lsort $myOptions] {
+ set found 0
+ if {[catch {
+ set resource [uplevel 1 info option $opt -resource]
+ set class [uplevel 1 info option $opt -class]
+ set default_val [uplevel 1 info option $opt -default]
+ set found 1
+ } msg]} {
+# puts stderr "MSG!$opt!$msg!"
+ }
+#puts stderr "OPT!$opt!$found!"
+ if {$found} {
+ set val ""
+ if {[::dict exists $argsDict $opt]} {
+ # we have an explicitly set option
+ set val [::dict get $argsDict $opt]
+ } else {
+ if {[string length $val] == 0} {
+ set val $default_val
+ }
+ }
+ set myObj [uplevel 1 set this]
+#puts stderr "myObj!$myObj!"
+ set ::itcl::internal::variables::${myObj}::itcl_options($opt) $val
+ set ::itcl::internal::variables::${myObj}::__itcl_option_infos($opt) [list $resource $class $default_val]
+#puts stderr "OPT1!$opt!$val!"
+ uplevel 1 [list set itcl_options($opt) [list $val]]
+# if {[catch {uplevel 1 $myObj configure $opt [list $val]} msg]} {
+#puts stderr "initoptions ERR!$msg!$my_class!$my_win!configure!$opt!$val!"
+# }
+ }
+ }
+# uplevel 1 $opt_lst
+}
+
+# ========================= keepcomponentoption ======================
+# Invoked by Tcl during evaluating constructor whenever
+# the "keepcomponentoption" command is invoked to list the options
+# to be kept when an ::itcl::extendedclass component has been setup
+# for an object.
+#
+# It checks, for all arguments, if the opt is an option of that class
+# and of that component. If that is the case it adds the component name
+# to the list of components for that option.
+# The variable is the object variable: itcl_option_components($opt)
+#
+# Handles the following syntax:
+#
+# keepcomponentoption <componentName> <optionName> ?<optionName> ...?
+#
+# ======================================================================
+
+
+proc keepcomponentoption {args} {
+ upvar win win
+ upvar itcl_hull itcl_hull
+
+ set usage "wrong # args, should be: keepcomponentoption componentName optionName ?optionName ...?"
+
+#puts stderr "KEEP!$args![uplevel 1 namespace current]!"
+ if {[llength $args] < 2} {
+ puts stderr $usage
+ return -code error
+ }
+ set my_hull [uplevel 1 set itcl_hull]
+ set my_class [uplevel 1 namespace current]
+ set comp [lindex $args 0]
+ set args [lrange $args 1 end]
+ set class_info_dict [dict get $::itcl::internal::dicts::classComponents $my_class]
+ if {![dict exists $class_info_dict $comp]} {
+ puts stderr "keepcomponentoption cannot find component \"$comp\""
+ return -code error
+ }
+ set class_comp_dict [dict get $class_info_dict $comp]
+ if {![dict exists $class_comp_dict -keptoptions]} {
+ dict set class_comp_dict -keptoptions [list]
+ }
+ foreach opt $args {
+#puts stderr "KEEP!$opt!"
+ if {[string range $opt 0 0] ne "-"} {
+ puts stderr "keepcomponentoption: option must begin with a \"-\"!"
+ return -code error
+ }
+ if {[lsearch [dict get $class_comp_dict -keptoptions] $opt] < 0} {
+ dict lappend class_comp_dict -keptoptions $opt
+ }
+ }
+ if {![info exists ::itcl::internal::component_objects([lindex [uplevel 1 info context] 1])]} {
+ set comp_object $::itcl::internal::component_objects([lindex [uplevel 1 info context] 1])
+ } else {
+ set comp_object "unknown_comp_obj_$comp!"
+ }
+ dict set class_info_dict $comp $class_comp_dict
+ dict set ::itcl::internal::dicts::classComponents $my_class $class_info_dict
+puts stderr "CLDI!$class_comp_dict!"
+ addToItclOptions $my_class $comp_object $args [list]
+}
+
+proc ignorecomponentoption {args} {
+puts stderr "IGNORE_COMPONENT_OPTION!$args!"
+}
+
+proc renamecomponentoption {args} {
+puts stderr "rename_COMPONENT_OPTION!$args!"
+}
+
+proc addoptioncomponent {args} {
+puts stderr "ADD_OPTION_COMPONENT!$args!"
+}
+
+proc ignoreoptioncomponent {args} {
+puts stderr "IGNORE_OPTION_COMPONENT!$args!"
+}
+
+proc renameoptioncomponent {args} {
+puts stderr "RENAME_OPTION_COMPONENT!$args!"
+}
+
+proc getEclassOptions {args} {
+ upvar win win
+
+#puts stderr "getEclassOptions!$args!$win![uplevel 1 namespace current]!"
+#parray ::itcl::internal::variables::${win}::itcl_options
+ set result [list]
+ foreach opt [array names ::itcl::internal::variables::${win}::itcl_options] {
+ if {[catch {
+ foreach {res cls def} [set ::itcl::internal::variables::${win}::__itcl_option_infos($opt)] break
+ lappend result [list $opt $res $cls $def [set ::itcl::internal::variables::${win}::itcl_options($opt)]]
+ } msg]} {
+ }
+ }
+ return $result
+}
+
+proc eclassConfigure {args} {
+ upvar win win
+
+#puts stderr "+++ eclassConfigure!$args!"
+ if {[llength $args] > 1} {
+ foreach {opt val} $args break
+ if {[::info exists ::itcl::internal::variables::${win}::itcl_options($opt)]} {
+ set ::itcl::internal::variables::${win}::itcl_options($opt) $val
+ return
+ }
+ } else {
+ foreach {opt} $args break
+ if {[::info exists ::itcl::internal::variables::${win}::itcl_options($opt)]} {
+#puts stderr "OP![set ::itcl::internal::variables::${win}::itcl_options($opt)]!"
+ foreach {res cls def} [set ::itcl::internal::variables::${win}::__itcl_option_infos($opt)] break
+ return [list $opt $res $cls $def [set ::itcl::internal::variables::${win}::itcl_options($opt)]]
+ }
+ }
+ return -code error
+}
+
+}
Property changes on: trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itclHullCmds.tcl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itclWidget.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itclWidget.tcl (rev 0)
+++ trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itclWidget.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -0,0 +1,447 @@
+#
+# itclWidget.tcl
+# ----------------------------------------------------------------------
+# Invoked automatically upon startup to customize the interpreter
+# for [incr Tcl] when one of ::itcl::widget or ::itcl::widgetadaptor is called.
+# ----------------------------------------------------------------------
+# AUTHOR: Arnulf P. Wiedemann
+#
+# ----------------------------------------------------------------------
+# Copyright (c) 2008 Arnulf P. Wiedemann
+# ======================================================================
+# See the file "license.terms" for information on usage and
+# redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+
+package require Tk 8.6
+# package require itclwidget [set ::itcl::version]
+
+namespace eval ::itcl {
+
+proc widget {name args} {
+ set result [uplevel 1 ::itcl::internal::commands::genericclass widget $name $args]
+ # we handle create by owerselfs !! allow classunknown to handle that
+ oo::objdefine $result unexport create
+ return $result
+}
+
+proc widgetadaptor {name args} {
+ set result [uplevel 1 ::itcl::internal::commands::genericclass widgetadaptor $name $args]
+ # we handle create by owerselfs !! allow classunknown to handle that
+ oo::objdefine $result unexport create
+ return $result
+}
+
+} ; # end ::itcl
+
+
+namespace eval ::itcl::internal::commands {
+
+proc initWidgetOptions {varNsName widgetName className} {
+ set myDict [set ::itcl::internal::dicts::classOptions]
+ if {$myDict eq ""} {
+ return
+ }
+ if {![dict exists $myDict $className]} {
+ return
+ }
+ set myDict [dict get $myDict $className]
+ foreach option [dict keys $myDict] {
+ set infos [dict get $myDict $option]
+ set resource [dict get $infos -resource]
+ set class [dict get $infos -class]
+ set value [::option get $widgetName $resource $class]
+ if {$value eq ""} {
+ if {[dict exists $infos -default]} {
+ set defaultValue [dict get $infos -default]
+ uplevel 1 set ${varNsName}::itcl_options($option) $defaultValue
+ }
+ } else {
+ uplevel 1 set ${varNsName}::itcl_options($option) $value
+ }
+ }
+}
+
+proc initWidgetDelegatedOptions {varNsName widgetName className args} {
+ set myDict [set ::itcl::internal::dicts::classDelegatedOptions]
+ if {$myDict eq ""} {
+ return
+ }
+ if {![dict exists $myDict $className]} {
+ return
+ }
+ set myDict [dict get $myDict $className]
+ foreach option [dict keys $myDict] {
+ set infos [dict get $myDict $option]
+ if {![dict exists $infos -resource]} {
+ # this is the case when delegating "*"
+ continue
+ }
+ if {![dict exists $infos -component]} {
+ # nothing to do
+ continue
+ }
+ # check if not in the command line options
+ # these have higher priority
+ set myOption $option
+ if {[dict exists $infos -as]} {
+ set myOption [dict get $infos -as]
+ }
+ set noOptionSet 0
+ foreach {optName optVal} $args {
+ if {$optName eq $myOption} {
+ set noOptionSet 1
+ break
+ }
+ }
+ if {$noOptionSet} {
+ continue
+ }
+ set resource [dict get $infos -resource]
+ set class [dict get $infos -class]
+ set component [dict get $infos -component]
+ set value [::option get $widgetName $resource $class]
+ if {$component ne ""} {
+ if {$value ne ""} {
+ set compVar [namespace eval ${varNsName}${className} "set $component"]
+ if {$compVar ne ""} {
+ uplevel 1 $compVar configure $myOption $value
+ }
+ }
+ }
+ }
+}
+
+proc widgetinitobjectoptions {varNsName widgetName className} {
+#puts stderr "initWidgetObjectOptions!$varNsName!$widgetName!$className!"
+}
+
+proc deletehull {newName oldName what} {
+ if {$what eq "delete"} {
+ set name [namespace tail $newName]
+ regsub {hull[0-9]+} $name {} name
+ rename $name {}
+ }
+ if {$what eq "rename"} {
+ set name [namespace tail $newName]
+ regsub {hull[0-9]+} $name {} name
+ rename $name {}
+ }
+}
+
+proc hullandoptionsinstall {objectName className widgetClass hulltype args} {
+ if {$hulltype eq ""} {
+ set hulltype frame
+ }
+ set idx 0
+ set found 0
+ foreach {optName optValue} $args {
+ if {$optName eq "-class"} {
+ set found 1
+ set widgetClass $optValue
+ break
+ }
+ incr idx
+ }
+ if {$found} {
+ set args [lreplace $args $idx [expr {$idx + 1}]]
+ }
+ if {$widgetClass eq ""} {
+ set widgetClass $className
+ set widgetClass [string totitle $widgetClass]
+ }
+ set cmd "set win $objectName; ::itcl::builtin::installhull using $hulltype -class $widgetClass $args"
+ uplevel 2 $cmd
+}
+
+} ; # end ::itcl::internal::commands
+
+namespace eval ::itcl::builtin {
+
+proc installhull {args} {
+ set cmdPath ::itcl::internal::commands
+ set className [uplevel 1 info class]
+
+ set replace 0
+ switch -- [llength $args] {
+ 0 {
+ return -code error\
+ "wrong # args: should be \"[lindex [info level 0] 0]\
+ name|using <widgetType> ?arg ...?\""
+ }
+ 1 {
+ set widgetName [lindex $args 0]
+ set varNsName $::itcl::internal::varNsName($widgetName)
+ }
+ default {
+ upvar win win
+ set widgetName $win
+
+ set varNsName $::itcl::internal::varNsName($widgetName)
+ set widgetType [lindex $args 1]
+ incr replace
+ if {[llength $args] > 3 && [lindex $args 2] eq "-class"} {
+ set classNam [lindex $args 3]
+ incr replace 2
+ } else {
+ set classNam [string totitle $widgetType]
+ }
+ uplevel 1 [lreplace $args 0 $replace $widgetType $widgetName -class $classNam]
+ uplevel 1 [list ${cmdPath}::initWidgetOptions $varNsName $widgetName $className]
+ }
+ }
+
+ # initialize the itcl_hull variable
+ set i 0
+ set nam ::itcl::internal::widgets::hull
+ while {1} {
+ incr i
+ set hullNam ${nam}${i}$widgetName
+ if {[::info command $hullNam] eq ""} {
+ break
+ }
+ }
+ uplevel 1 [list ${cmdPath}::sethullwindowname $widgetName]
+ uplevel 1 [list ::rename $widgetName $hullNam]
+ uplevel 1 [list ::trace add command $hullNam {delete rename} ::itcl::internal::commands::deletehull]
+ catch {${cmdPath}::checksetitclhull [list] 0}
+ namespace eval ${varNsName}${className} "set itcl_hull $hullNam"
+ catch {${cmdPath}::checksetitclhull [list] 2}
+ uplevel 1 [lreplace $args 0 $replace ${cmdPath}::initWidgetDelegatedOptions $varNsName $widgetName $className]
+}
+
+proc installcomponent {args} {
+ upvar win win
+
+ set className [uplevel 1 info class]
+ set myType [${className}::info types [namespace tail $className]]
+ set isType 0
+ if {$myType ne ""} {
+ set isType 1
+ }
+ set numArgs [llength $args]
+ set usage "usage: installcomponent <componentName> using <widgetType> <widgetPath> ?-option value ...?"
+ if {$numArgs < 4} {
+ error $usage
+ }
+ foreach {componentName using widgetType widgetPath} $args break
+ set opts [lrange $args 4 end]
+ if {$using ne "using"} {
+ error $usage
+ }
+ if {!$isType} {
+ set hullExists [uplevel 1 ::info exists itcl_hull]
+ if {!$hullExists} {
+ error "cannot install \"$componentName\" before \"itcl_hull\" exists"
+ }
+ set hullVal [uplevel 1 set itcl_hull]
+ if {$hullVal eq ""} {
+ error "cannot install \"$componentName\" before \"itcl_hull\" exists"
+ }
+ }
+ # check for delegated option and ask the option database for the values
+ # first check for number of delegated options
+ set numOpts 0
+ set starOption 0
+ set myDict [set ::itcl::internal::dicts::classDelegatedOptions]
+ if {[dict exists $myDict $className]} {
+ set myDict [dict get $myDict $className]
+ foreach option [dict keys $myDict] {
+ if {$option eq "*"} {
+ set starOption 1
+ }
+ incr numOpts
+ }
+ }
+ set myOptionDict [set ::itcl::internal::dicts::classOptions]
+ if {[dict exists $myOptionDict $className]} {
+ set myOptionDict [dict get $myOptionDict $className]
+ }
+ set cmd [list $widgetPath configure]
+ set cmd1 "set $componentName \[$widgetType $widgetPath\]"
+ uplevel 1 $cmd1
+ if {$starOption} {
+ upvar $componentName compName
+ set cmd1 [list $compName configure]
+ set configInfos [uplevel 1 $cmd1]
+ foreach entry $configInfos {
+ if {[llength $entry] > 2} {
+ foreach {optName resource class defaultValue} $entry break
+ set val ""
+ catch {
+ set val [::option get $win $resource $class]
+ }
+ if {$val ne ""} {
+ set addOpt 1
+ if {[dict exists $myDict $$optName]} {
+ set addOpt 0
+ } else {
+ set starDict [dict get $myDict "*"]
+ if {[dict exists $starDict -except]} {
+ set exceptions [dict get $starDict -except]
+ if {[lsearch $exceptions $optName] >= 0} {
+ set addOpt 0
+ }
+
+ }
+ if {[dict exists $myOptionDict $optName]} {
+ set addOpt 0
+ }
+ }
+ if {$addOpt} {
+ lappend cmd $optName $val
+ }
+
+ }
+
+ }
+ }
+ } else {
+ foreach optName [dict keys $myDict] {
+ set optInfos [dict get $myDict $optName]
+ set resource [dict get $optInfos -resource]
+ set class [namespace tail $className]
+ set class [string totitle $class]
+ set val ""
+ catch {
+ set val [::option get $win $resource $class]
+ }
+ if {$val ne ""} {
+ if {[dict exists $optInfos -as] } {
+ set optName [dict get $optInfos -as]
+ }
+ lappend cmd $optName $val
+ }
+ }
+ }
+ lappend cmd {*}$opts
+ uplevel 1 $cmd
+}
+
+} ; # end ::itcl::builtin
+
+set ::itcl::internal::dicts::hullTypes [list \
+ frame \
+ toplevel \
+ labelframe \
+ ttk:frame \
+ ttk:toplevel \
+ ttk:labelframe \
+ ]
+
+namespace eval ::itcl::builtin::Info {
+
+proc hulltypes {args} {
+ namespace upvar ::itcl::internal::dicts hullTypes hullTypes
+
+ set numArgs [llength $args]
+ if {$numArgs > 1} {
+ error "wrong # args should be: info hulltypes ?<pattern>?"
+ }
+ set pattern ""
+ if {$numArgs > 0} {
+ set pattern [lindex $args 0]
+ }
+ if {$pattern ne ""} {
+ return [lsearch -all -inline -glob $hullTypes $pattern]
+ }
+ return $hullTypes
+
+}
+
+proc widgetclasses {args} {
+ set numArgs [llength $args]
+ if {$numArgs > 1} {
+ error "wrong # args should be: info widgetclasses ?<pattern>?"
+ }
+ set pattern ""
+ if {$numArgs > 0} {
+ set pattern [lindex $args 0]
+ }
+ set myDict [set ::itcl::internal::dicts::classes]
+ if {![dict exists $myDict widget]} {
+ return [list]
+ }
+ set myDict [dict get $myDict widget]
+ set result [list]
+ if {$pattern ne ""} {
+ foreach key [dict keys $myDict] {
+ set myInfo [dict get $myDict $key]
+ set value [dict get $myInfo -widget]
+ if {[string match $pattern $value]} {
+ lappend result $value
+ }
+ }
+ } else {
+ foreach key [dict keys $myDict] {
+ set myInfo [dict get $myDict $key]
+ lappend result [dict get $myInfo -widget]
+ }
+ }
+ return $result
+}
+
+proc widgets {args} {
+ set numArgs [llength $args]
+ if {$numArgs > 1} {
+ error "wrong # args should be: info widgets ?<pattern>?"
+ }
+ set pattern ""
+ if {$numArgs > 0} {
+ set pattern [lindex $args 0]
+ }
+ set myDict [set ::itcl::internal::dicts::classes]
+ if {![dict exists $myDict widget]} {
+ return [list]
+ }
+ set myDict [dict get $myDict widget]
+ set result [list]
+ if {$pattern ne ""} {
+ foreach key [dict keys $myDict] {
+ set myInfo [dict get $myDict $key]
+ set value [dict get $myInfo -name]
+ if {[string match $pattern $value]} {
+ lappend result $value
+ }
+ }
+ } else {
+ foreach key [dict keys $myDict] {
+ set myInfo [dict get $myDict $key]
+ lappend result [dict get $myInfo -name]
+ }
+ }
+ return $result
+}
+
+proc widgetadaptors {args} {
+ set numArgs [llength $args]
+ if {$numArgs > 1} {
+ error "wrong # args should be: info widgetadaptors ?<pattern>?"
+ }
+ set pattern ""
+ if {$numArgs > 0} {
+ set pattern [lindex $args 0]
+ }
+ set myDict [set ::itcl::internal::dicts::classes]
+ if {![dict exists $myDict widgetadaptor]} {
+ return [list]
+ }
+ set myDict [dict get $myDict widgetadaptor]
+ set result [list]
+ if {$pattern ne ""} {
+ foreach key [dict keys $myDict] {
+ set myInfo [dict get $myDict $key]
+ set value [dict get $myInfo -name]
+ if {[string match $pattern $value]} {
+ lappend result $value
+ }
+ }
+ } else {
+ foreach key [dict keys $myDict] {
+ set myInfo [dict get $myDict $key]
+ lappend result [dict get $myInfo -name]
+ }
+ }
+ return $result
+}
+
+} ; # end ::itcl::builtin::Info
Property changes on: trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/itclWidget.tcl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/pkgIndex.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/pkgIndex.tcl (rev 0)
+++ trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/pkgIndex.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -0,0 +1,14 @@
+# -*- tcl -*-
+# Tcl package index file, version 1.1
+#
+
+if {![package vsatisfies [package provide Tcl] 8.6-]} {return}
+
+if {[package vsatisfies [package provide Tcl] 9.0-]} {
+ package ifneeded itcl 4.2.2 \
+ [list load [file join $dir tcl9itcl422.dll] Itcl]
+} else {
+ package ifneeded itcl 4.2.2 \
+ [list load [file join $dir itcl422.dll] Itcl]
+}
+package ifneeded Itcl 4.2.2 [list package require -exact itcl 4.2.2]
Property changes on: trunk/Master/tlpkg/tltcl/lib/itcl4.2.2/pkgIndex.tcl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Deleted: trunk/Master/tlpkg/tltcl/lib/libtcl86.dll.a
===================================================================
(Binary files differ)
Deleted: trunk/Master/tlpkg/tltcl/lib/libtclstub86.a
===================================================================
(Binary files differ)
Deleted: trunk/Master/tlpkg/tltcl/lib/libtk86.dll.a
===================================================================
(Binary files differ)
Deleted: trunk/Master/tlpkg/tltcl/lib/libtkstub86.a
===================================================================
(Binary files differ)
Deleted: trunk/Master/tlpkg/tltcl/lib/reg1.3/libtclreg13.dll.a
===================================================================
(Binary files differ)
Modified: trunk/Master/tlpkg/tltcl/lib/reg1.3/tclreg13.dll
===================================================================
(Binary files differ)
Added: trunk/Master/tlpkg/tltcl/lib/sqlite3.36.0/pkgIndex.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/sqlite3.36.0/pkgIndex.tcl (rev 0)
+++ trunk/Master/tlpkg/tltcl/lib/sqlite3.36.0/pkgIndex.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -0,0 +1,12 @@
+#
+# Tcl package index file
+#
+# Note sqlite*3* init specifically
+#
+if {[package vsatisfies [package provide Tcl] 9.0-]} {
+ package ifneeded sqlite3 3.36.0 \
+ [list load [file join $dir tcl9sqlite3360.dll] Sqlite3]
+} else {
+ package ifneeded sqlite3 3.36.0 \
+ [list load [file join $dir sqlite3360.dll] Sqlite3]
+}
Property changes on: trunk/Master/tlpkg/tltcl/lib/sqlite3.36.0/pkgIndex.tcl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/tlpkg/tltcl/lib/sqlite3.36.0/sqlite3360.dll
===================================================================
(Binary files differ)
Index: trunk/Master/tlpkg/tltcl/lib/sqlite3.36.0/sqlite3360.dll
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/sqlite3.36.0/sqlite3360.dll 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/sqlite3.36.0/sqlite3360.dll 2022-03-14 10:03:11 UTC (rev 62700)
Property changes on: trunk/Master/tlpkg/tltcl/lib/sqlite3.36.0/sqlite3360.dll
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/x-dosexec
\ No newline at end of property
Deleted: trunk/Master/tlpkg/tltcl/lib/tcl8/8.4/platform-1.0.15.tm
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8/8.4/platform-1.0.15.tm 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8/8.4/platform-1.0.15.tm 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,423 +0,0 @@
-# -*- tcl -*-
-# ### ### ### ######### ######### #########
-## Overview
-
-# Heuristics to assemble a platform identifier from publicly available
-# information. The identifier describes the platform of the currently
-# running tcl shell. This is a mixture of the runtime environment and
-# of build-time properties of the executable itself.
-#
-# Examples:
-# <1> A tcl shell executing on a x86_64 processor, but having a
-# wordsize of 4 was compiled for the x86 environment, i.e. 32
-# bit, and loaded packages have to match that, and not the
-# actual cpu.
-#
-# <2> The hp/solaris 32/64 bit builds of the core cannot be
-# distinguished by looking at tcl_platform. As packages have to
-# match the 32/64 information we have to look in more places. In
-# this case we inspect the executable itself (magic numbers,
-# i.e. fileutil::magic::filetype).
-#
-# The basic information used comes out of the 'os' and 'machine'
-# entries of the 'tcl_platform' array. A number of general and
-# os/machine specific transformation are applied to get a canonical
-# result.
-#
-# General
-# Only the first element of 'os' is used - we don't care whether we
-# are on "Windows NT" or "Windows XP" or whatever.
-#
-# Machine specific
-# % arm* -> arm
-# % sun4* -> sparc
-# % intel -> ix86
-# % i*86* -> ix86
-# % Power* -> powerpc
-# % x86_64 + wordSize 4 => x86 code
-#
-# OS specific
-# % AIX are always powerpc machines
-# % HP-UX 9000/800 etc means parisc
-# % linux has to take glibc version into account
-# % sunos -> solaris, and keep version number
-#
-# NOTE: A platform like linux glibc 2.3, which can use glibc 2.2 stuff
-# has to provide all possible allowed platform identifiers when
-# searching search. Ditto a solaris 2.8 platform can use solaris 2.6
-# packages. Etc. This is handled by the other procedure, see below.
-
-# ### ### ### ######### ######### #########
-## Requirements
-
-namespace eval ::platform {}
-
-# ### ### ### ######### ######### #########
-## Implementation
-
-# -- platform::generic
-#
-# Assembles an identifier for the generic platform. It leaves out
-# details like kernel version, libc version, etc.
-
-proc ::platform::generic {} {
- global tcl_platform
-
- set plat [string tolower [lindex $tcl_platform(os) 0]]
- set cpu $tcl_platform(machine)
-
- switch -glob -- $cpu {
- sun4* {
- set cpu sparc
- }
- intel -
- i*86* {
- set cpu ix86
- }
- x86_64 {
- if {$tcl_platform(wordSize) == 4} {
- # See Example <1> at the top of this file.
- set cpu ix86
- }
- }
- "Power*" {
- set cpu powerpc
- }
- "arm*" {
- set cpu arm
- }
- ia64 {
- if {$tcl_platform(wordSize) == 4} {
- append cpu _32
- }
- }
- }
-
- switch -glob -- $plat {
- windows {
- if {$tcl_platform(platform) == "unix"} {
- set plat cygwin
- } else {
- set plat win32
- }
- if {$cpu eq "amd64"} {
- # Do not check wordSize, win32-x64 is an IL32P64 platform.
- set cpu x86_64
- }
- }
- sunos {
- set plat solaris
- if {[string match "ix86" $cpu]} {
- if {$tcl_platform(wordSize) == 8} {
- set cpu x86_64
- }
- } elseif {![string match "ia64*" $cpu]} {
- # sparc
- if {$tcl_platform(wordSize) == 8} {
- append cpu 64
- }
- }
- }
- darwin {
- set plat macosx
- # Correctly identify the cpu when running as a 64bit
- # process on a machine with a 32bit kernel
- if {$cpu eq "ix86"} {
- if {$tcl_platform(wordSize) == 8} {
- set cpu x86_64
- }
- }
- }
- aix {
- set cpu powerpc
- if {$tcl_platform(wordSize) == 8} {
- append cpu 64
- }
- }
- hp-ux {
- set plat hpux
- if {![string match "ia64*" $cpu]} {
- set cpu parisc
- if {$tcl_platform(wordSize) == 8} {
- append cpu 64
- }
- }
- }
- osf1 {
- set plat tru64
- }
- default {
- set plat [lindex [split $plat _-] 0]
- }
- }
-
- return "${plat}-${cpu}"
-}
-
-# -- platform::identify
-#
-# Assembles an identifier for the exact platform, by extending the
-# generic identifier. I.e. it adds in details like kernel version,
-# libc version, etc., if they are relevant for the loading of
-# packages on the platform.
-
-proc ::platform::identify {} {
- global tcl_platform
-
- set id [generic]
- regexp {^([^-]+)-([^-]+)$} $id -> plat cpu
-
- switch -- $plat {
- solaris {
- regsub {^5} $tcl_platform(osVersion) 2 text
- append plat $text
- return "${plat}-${cpu}"
- }
- macosx {
- set major [lindex [split $tcl_platform(osVersion) .] 0]
- if {$major > 19} {
- incr major -20
- append plat 11.$major
- } else {
- incr major -4
- append plat 10.$major
- return "${plat}-${cpu}"
- }
- return "${plat}-${cpu}"
- }
- linux {
- # Look for the libc*.so and determine its version
- # (libc5/6, libc6 further glibc 2.X)
-
- set v unknown
-
- # Determine in which directory to look. /lib, or /lib64.
- # For that we use the tcl_platform(wordSize).
- #
- # We could use the 'cpu' info, per the equivalence below,
- # that however would be restricted to intel. And this may
- # be a arm, mips, etc. system. The wordsize is more
- # fundamental.
- #
- # ix86 <=> (wordSize == 4) <=> 32 bit ==> /lib
- # x86_64 <=> (wordSize == 8) <=> 64 bit ==> /lib64
- #
- # Do not look into /lib64 even if present, if the cpu
- # doesn't fit.
-
- # TODO: Determine the prefixes (i386, x86_64, ...) for
- # other cpus. The path after the generic one is utterly
- # specific to intel right now. Ok, on Ubuntu, possibly
- # other Debian systems we may apparently be able to query
- # the necessary CPU code. If we can't we simply use the
- # hardwired fallback.
-
- switch -exact -- $tcl_platform(wordSize) {
- 4 {
- lappend bases /lib
- if {[catch {
- exec dpkg-architecture -qDEB_HOST_MULTIARCH
- } res]} {
- lappend bases /lib/i386-linux-gnu
- } else {
- # dpkg-arch returns the full tripled, not just cpu.
- lappend bases /lib/$res
- }
- }
- 8 {
- lappend bases /lib64
- if {[catch {
- exec dpkg-architecture -qDEB_HOST_MULTIARCH
- } res]} {
- lappend bases /lib/x86_64-linux-gnu
- } else {
- # dpkg-arch returns the full tripled, not just cpu.
- lappend bases /lib/$res
- }
- }
- default {
- return -code error "Bad wordSize $tcl_platform(wordSize), expected 4 or 8"
- }
- }
-
- foreach base $bases {
- if {[LibcVersion $base -> v]} break
- }
-
- append plat -$v
- return "${plat}-${cpu}"
- }
- }
-
- return $id
-}
-
-proc ::platform::LibcVersion {base _->_ vv} {
- upvar 1 $vv v
- set libclist [lsort [glob -nocomplain -directory $base libc*]]
-
- if {![llength $libclist]} { return 0 }
-
- set libc [lindex $libclist 0]
-
- # Try executing the library first. This should suceed
- # for a glibc library, and return the version
- # information.
-
- if {![catch {
- set vdata [lindex [split [exec $libc] \n] 0]
- }]} {
- regexp {version ([0-9]+(\.[0-9]+)*)} $vdata -> v
- foreach {major minor} [split $v .] break
- set v glibc${major}.${minor}
- return 1
- } else {
- # We had trouble executing the library. We are now
- # inspecting its name to determine the version
- # number. This code by Larry McVoy.
-
- if {[regexp -- {libc-([0-9]+)\.([0-9]+)} $libc -> major minor]} {
- set v glibc${major}.${minor}
- return 1
- }
- }
- return 0
-}
-
-# -- platform::patterns
-#
-# Given an exact platform identifier, i.e. _not_ the generic
-# identifier it assembles a list of exact platform identifier
-# describing platform which should be compatible with the
-# input.
-#
-# I.e. packages for all platforms in the result list should be
-# loadable on the specified platform.
-
-# << Should we add the generic identifier to the list as well ? In
-# general it is not compatible I believe. So better not. In many
-# cases the exact identifier is identical to the generic one
-# anyway.
-# >>
-
-proc ::platform::patterns {id} {
- set res [list $id]
- if {$id eq "tcl"} {return $res}
-
- switch -glob -- $id {
- solaris*-* {
- if {[regexp {solaris([^-]*)-(.*)} $id -> v cpu]} {
- if {$v eq ""} {return $id}
- foreach {major minor} [split $v .] break
- incr minor -1
- for {set j $minor} {$j >= 6} {incr j -1} {
- lappend res solaris${major}.${j}-${cpu}
- }
- }
- }
- linux*-* {
- if {[regexp {linux-glibc([^-]*)-(.*)} $id -> v cpu]} {
- foreach {major minor} [split $v .] break
- incr minor -1
- for {set j $minor} {$j >= 0} {incr j -1} {
- lappend res linux-glibc${major}.${j}-${cpu}
- }
- }
- }
- macosx-powerpc {
- lappend res macosx-universal
- }
- macosx-x86_64 {
- lappend res macosx-i386-x86_64
- }
- macosx-ix86 {
- lappend res macosx-universal macosx-i386-x86_64
- }
- macosx*-* {
- # 10.5+,11.0+
- if {[regexp {macosx([^-]*)-(.*)} $id -> v cpu]} {
-
- switch -exact -- $cpu {
- ix86 {
- lappend alt i386-x86_64
- lappend alt universal
- }
- x86_64 {
- if {[lindex [split $::tcl_platform(osVersion) .] 0] < 19} {
- set alt i386-x86_64
- } else {
- set alt {}
- }
- }
- arm {
- lappend alt x86_64
- }
- default { set alt {} }
- }
-
- if {$v ne ""} {
- foreach {major minor} [split $v .] break
-
- set res {}
- if {$major eq 11} {
- # Add 11.0 to 11.minor to patterns.
- for {set j $minor} {$j >= 0} {incr j -1} {
- lappend res macosx${major}.${j}-${cpu}
- foreach a $alt {
- lappend res macosx${major}.${j}-$a
- }
- }
- set major 10
- set minor 15
- }
- # Add 10.5 to 10.minor to patterns.
- for {set j $minor} {$j >= 5} {incr j -1} {
- if {$cpu ne "arm"} {
- lappend res macosx${major}.${j}-${cpu}
- }
- foreach a $alt {
- lappend res macosx${major}.${j}-$a
- }
- }
-
- # Add unversioned patterns for 10.3/10.4 builds.
- lappend res macosx-${cpu}
- foreach a $alt {
- lappend res macosx-$a
- }
- } else {
- # No version, just do unversioned patterns.
- foreach a $alt {
- lappend res macosx-$a
- }
- }
- } else {
- # no v, no cpu ... nothing
- }
- }
- }
- lappend res tcl ; # Pure tcl packages are always compatible.
- return $res
-}
-
-
-# ### ### ### ######### ######### #########
-## Ready
-
-package provide platform 1.0.15
-
-# ### ### ### ######### ######### #########
-## Demo application
-
-if {[info exists argv0] && ($argv0 eq [info script])} {
- puts ====================================
- parray tcl_platform
- puts ====================================
- puts Generic\ identification:\ [::platform::generic]
- puts Exact\ identification:\ \ \ [::platform::identify]
- puts ====================================
- puts Search\ patterns:
- puts *\ [join [::platform::patterns [::platform::identify]] \n*\ ]
- puts ====================================
- exit 0
-}
Added: trunk/Master/tlpkg/tltcl/lib/tcl8/8.4/platform-1.0.18.tm
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8/8.4/platform-1.0.18.tm (rev 0)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8/8.4/platform-1.0.18.tm 2022-03-14 10:03:11 UTC (rev 62700)
@@ -0,0 +1,439 @@
+# -*- tcl -*-
+# ### ### ### ######### ######### #########
+## Overview
+
+# Heuristics to assemble a platform identifier from publicly available
+# information. The identifier describes the platform of the currently
+# running tcl shell. This is a mixture of the runtime environment and
+# of build-time properties of the executable itself.
+#
+# Examples:
+# <1> A tcl shell executing on a x86_64 processor, but having a
+# wordsize of 4 was compiled for the x86 environment, i.e. 32
+# bit, and loaded packages have to match that, and not the
+# actual cpu.
+#
+# <2> The hp/solaris 32/64 bit builds of the core cannot be
+# distinguished by looking at tcl_platform. As packages have to
+# match the 32/64 information we have to look in more places. In
+# this case we inspect the executable itself (magic numbers,
+# i.e. fileutil::magic::filetype).
+#
+# The basic information used comes out of the 'os' and 'machine'
+# entries of the 'tcl_platform' array. A number of general and
+# os/machine specific transformation are applied to get a canonical
+# result.
+#
+# General
+# Only the first element of 'os' is used - we don't care whether we
+# are on "Windows NT" or "Windows XP" or whatever.
+#
+# Machine specific
+# % amd64 -> x86_64
+# % arm* -> arm
+# % sun4* -> sparc
+# % ia32* -> ix86
+# % intel -> ix86
+# % i*86* -> ix86
+# % Power* -> powerpc
+# % x86_64 + wordSize 4 => x86 code
+#
+# OS specific
+# % AIX are always powerpc machines
+# % HP-UX 9000/800 etc means parisc
+# % linux has to take glibc version into account
+# % sunos -> solaris, and keep version number
+#
+# NOTE: A platform like linux glibc 2.3, which can use glibc 2.2 stuff
+# has to provide all possible allowed platform identifiers when
+# searching search. Ditto a solaris 2.8 platform can use solaris 2.6
+# packages. Etc. This is handled by the other procedure, see below.
+
+# ### ### ### ######### ######### #########
+## Requirements
+
+namespace eval ::platform {}
+
+# ### ### ### ######### ######### #########
+## Implementation
+
+# -- platform::generic
+#
+# Assembles an identifier for the generic platform. It leaves out
+# details like kernel version, libc version, etc.
+
+proc ::platform::generic {} {
+ global tcl_platform
+
+ set plat [string tolower [lindex $tcl_platform(os) 0]]
+ set cpu $tcl_platform(machine)
+
+ switch -glob -- $cpu {
+ sun4* {
+ set cpu sparc
+ }
+ intel -
+ ia32* -
+ i*86* {
+ set cpu ix86
+ }
+ x86_64 {
+ if {$tcl_platform(wordSize) == 4} {
+ # See Example <1> at the top of this file.
+ set cpu ix86
+ }
+ }
+ ppc -
+ "Power*" {
+ set cpu powerpc
+ }
+ "arm*" {
+ set cpu arm
+ }
+ ia64 {
+ if {$tcl_platform(wordSize) == 4} {
+ append cpu _32
+ }
+ }
+ }
+
+ switch -glob -- $plat {
+ windows {
+ if {$tcl_platform(platform) == "unix"} {
+ set plat cygwin
+ } else {
+ set plat win32
+ }
+ if {$cpu eq "amd64"} {
+ # Do not check wordSize, win32-x64 is an IL32P64 platform.
+ set cpu x86_64
+ }
+ }
+ sunos {
+ set plat solaris
+ if {[string match "ix86" $cpu]} {
+ if {$tcl_platform(wordSize) == 8} {
+ set cpu x86_64
+ }
+ } elseif {![string match "ia64*" $cpu]} {
+ # sparc
+ if {$tcl_platform(wordSize) == 8} {
+ append cpu 64
+ }
+ }
+ }
+ darwin {
+ set plat macosx
+ # Correctly identify the cpu when running as a 64bit
+ # process on a machine with a 32bit kernel
+ if {$cpu eq "ix86"} {
+ if {$tcl_platform(wordSize) == 8} {
+ set cpu x86_64
+ }
+ }
+ }
+ aix {
+ set cpu powerpc
+ if {$tcl_platform(wordSize) == 8} {
+ append cpu 64
+ }
+ }
+ hp-ux {
+ set plat hpux
+ if {![string match "ia64*" $cpu]} {
+ set cpu parisc
+ if {$tcl_platform(wordSize) == 8} {
+ append cpu 64
+ }
+ }
+ }
+ osf1 {
+ set plat tru64
+ }
+ default {
+ set plat [lindex [split $plat _-] 0]
+ }
+ }
+
+ return "${plat}-${cpu}"
+}
+
+# -- platform::identify
+#
+# Assembles an identifier for the exact platform, by extending the
+# generic identifier. I.e. it adds in details like kernel version,
+# libc version, etc., if they are relevant for the loading of
+# packages on the platform.
+
+proc ::platform::identify {} {
+ global tcl_platform
+
+ set id [generic]
+ regexp {^([^-]+)-([^-]+)$} $id -> plat cpu
+
+ switch -- $plat {
+ solaris {
+ regsub {^5} $tcl_platform(osVersion) 2 text
+ append plat $text
+ return "${plat}-${cpu}"
+ }
+ macosx {
+ set major [lindex [split $tcl_platform(osVersion) .] 0]
+ if {$major > 19} {
+ set minor [lindex [split $tcl_platform(osVersion) .] 1]
+ incr major -9
+ append plat $major.[expr {$minor - 1}]
+ } else {
+ incr major -4
+ append plat 10.$major
+ return "${plat}-${cpu}"
+ }
+ return "${plat}-${cpu}"
+ }
+ linux {
+ # Look for the libc*.so and determine its version
+ # (libc5/6, libc6 further glibc 2.X)
+
+ set v unknown
+
+ # Determine in which directory to look. /lib, or /lib64.
+ # For that we use the tcl_platform(wordSize).
+ #
+ # We could use the 'cpu' info, per the equivalence below,
+ # that however would be restricted to intel. And this may
+ # be a arm, mips, etc. system. The wordsize is more
+ # fundamental.
+ #
+ # ix86 <=> (wordSize == 4) <=> 32 bit ==> /lib
+ # x86_64 <=> (wordSize == 8) <=> 64 bit ==> /lib64
+ #
+ # Do not look into /lib64 even if present, if the cpu
+ # doesn't fit.
+
+ # TODO: Determine the prefixes (i386, x86_64, ...) for
+ # other cpus. The path after the generic one is utterly
+ # specific to intel right now. Ok, on Ubuntu, possibly
+ # other Debian systems we may apparently be able to query
+ # the necessary CPU code. If we can't we simply use the
+ # hardwired fallback.
+
+ switch -exact -- $tcl_platform(wordSize) {
+ 4 {
+ lappend bases /lib
+ if {[catch {
+ exec dpkg-architecture -qDEB_HOST_MULTIARCH
+ } res]} {
+ lappend bases /lib/i386-linux-gnu
+ } else {
+ # dpkg-arch returns the full tripled, not just cpu.
+ lappend bases /lib/$res
+ }
+ }
+ 8 {
+ lappend bases /lib64
+ if {[catch {
+ exec dpkg-architecture -qDEB_HOST_MULTIARCH
+ } res]} {
+ lappend bases /lib/x86_64-linux-gnu
+ } else {
+ # dpkg-arch returns the full tripled, not just cpu.
+ lappend bases /lib/$res
+ }
+ }
+ default {
+ return -code error "Bad wordSize $tcl_platform(wordSize), expected 4 or 8"
+ }
+ }
+
+ foreach base $bases {
+ if {[LibcVersion $base -> v]} break
+ }
+
+ append plat -$v
+ return "${plat}-${cpu}"
+ }
+ }
+
+ return $id
+}
+
+proc ::platform::LibcVersion {base _->_ vv} {
+ upvar 1 $vv v
+ set libclist [lsort [glob -nocomplain -directory $base libc*]]
+
+ if {![llength $libclist]} { return 0 }
+
+ set libc [lindex $libclist 0]
+
+ # Try executing the library first. This should suceed
+ # for a glibc library, and return the version
+ # information.
+
+ if {![catch {
+ set vdata [lindex [split [exec $libc] \n] 0]
+ }]} {
+ regexp {version ([0-9]+(\.[0-9]+)*)} $vdata -> v
+ foreach {major minor} [split $v .] break
+ set v glibc${major}.${minor}
+ return 1
+ } else {
+ # We had trouble executing the library. We are now
+ # inspecting its name to determine the version
+ # number. This code by Larry McVoy.
+
+ if {[regexp -- {libc-([0-9]+)\.([0-9]+)} $libc -> major minor]} {
+ set v glibc${major}.${minor}
+ return 1
+ }
+ }
+ return 0
+}
+
+# -- platform::patterns
+#
+# Given an exact platform identifier, i.e. _not_ the generic
+# identifier it assembles a list of exact platform identifier
+# describing platform which should be compatible with the
+# input.
+#
+# I.e. packages for all platforms in the result list should be
+# loadable on the specified platform.
+
+# << Should we add the generic identifier to the list as well ? In
+# general it is not compatible I believe. So better not. In many
+# cases the exact identifier is identical to the generic one
+# anyway.
+# >>
+
+proc ::platform::patterns {id} {
+ set res [list $id]
+ if {$id eq "tcl"} {return $res}
+
+ switch -glob -- $id {
+ solaris*-* {
+ if {[regexp {solaris([^-]*)-(.*)} $id -> v cpu]} {
+ if {$v eq ""} {return $id}
+ foreach {major minor} [split $v .] break
+ incr minor -1
+ for {set j $minor} {$j >= 6} {incr j -1} {
+ lappend res solaris${major}.${j}-${cpu}
+ }
+ }
+ }
+ linux*-* {
+ if {[regexp {linux-glibc([^-]*)-(.*)} $id -> v cpu]} {
+ foreach {major minor} [split $v .] break
+ incr minor -1
+ for {set j $minor} {$j >= 0} {incr j -1} {
+ lappend res linux-glibc${major}.${j}-${cpu}
+ }
+ }
+ }
+ macosx-powerpc {
+ lappend res macosx-universal
+ }
+ macosx-x86_64 {
+ lappend res macosx-i386-x86_64
+ }
+ macosx-ix86 {
+ lappend res macosx-universal macosx-i386-x86_64
+ }
+ macosx*-* {
+ # 10.5+,11.0+
+ if {[regexp {macosx([^-]*)-(.*)} $id -> v cpu]} {
+
+ switch -exact -- $cpu {
+ ix86 {
+ lappend alt i386-x86_64
+ lappend alt universal
+ }
+ x86_64 {
+ if {[lindex [split $::tcl_platform(osVersion) .] 0] < 19} {
+ set alt i386-x86_64
+ } else {
+ set alt {}
+ }
+ }
+ arm {
+ lappend alt x86_64
+ }
+ default { set alt {} }
+ }
+
+ if {$v ne ""} {
+ foreach {major minor} [split $v .] break
+
+ set res {}
+ if {$major eq 12} {
+ # Add 12.0 to 12.minor to patterns.
+ for {set j $minor} {$j >= 0} {incr j -1} {
+ lappend res macosx${major}.${j}-${cpu}
+ foreach a $alt {
+ lappend res macosx${major}.${j}-$a
+ }
+ }
+ set major 11
+ set minor 5
+ }
+ if {$major eq 11} {
+ # Add 11.0 to 11.minor to patterns.
+ for {set j $minor} {$j >= 0} {incr j -1} {
+ lappend res macosx${major}.${j}-${cpu}
+ foreach a $alt {
+ lappend res macosx${major}.${j}-$a
+ }
+ }
+ set major 10
+ set minor 15
+ }
+ # Add 10.5 to 10.minor to patterns.
+ for {set j $minor} {$j >= 5} {incr j -1} {
+ if {$cpu ne "arm"} {
+ lappend res macosx${major}.${j}-${cpu}
+ }
+ foreach a $alt {
+ lappend res macosx${major}.${j}-$a
+ }
+ }
+
+ # Add unversioned patterns for 10.3/10.4 builds.
+ lappend res macosx-${cpu}
+ foreach a $alt {
+ lappend res macosx-$a
+ }
+ } else {
+ # No version, just do unversioned patterns.
+ foreach a $alt {
+ lappend res macosx-$a
+ }
+ }
+ } else {
+ # no v, no cpu ... nothing
+ }
+ }
+ }
+ lappend res tcl ; # Pure tcl packages are always compatible.
+ return $res
+}
+
+
+# ### ### ### ######### ######### #########
+## Ready
+
+package provide platform 1.0.18
+
+# ### ### ### ######### ######### #########
+## Demo application
+
+if {[info exists argv0] && ($argv0 eq [info script])} {
+ puts ====================================
+ parray tcl_platform
+ puts ====================================
+ puts Generic\ identification:\ [::platform::generic]
+ puts Exact\ identification:\ \ \ [::platform::identify]
+ puts ====================================
+ puts Search\ patterns:
+ puts *\ [join [::platform::patterns [::platform::identify]] \n*\ ]
+ puts ====================================
+ exit 0
+}
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8/8.5/tcltest-2.5.3.tm
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8/8.5/tcltest-2.5.3.tm 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8/8.5/tcltest-2.5.3.tm 2022-03-14 10:03:11 UTC (rev 62700)
@@ -642,7 +642,7 @@
proc IsVerbose {level} {
variable Option
- return [expr {[lsearch -exact $Option(-verbose) $level] >= 0}]
+ return [expr {$level in $Option(-verbose)}]
}
# Default verbosity is to show bodies of failed tests
Deleted: trunk/Master/tlpkg/tltcl/lib/tcl8/8.6/tdbc/sqlite3-1.1.2.tm
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8/8.6/tdbc/sqlite3-1.1.2.tm 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8/8.6/tdbc/sqlite3-1.1.2.tm 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,715 +0,0 @@
-# tdbcsqlite3.tcl --
-#
-# SQLite3 database driver for TDBC
-#
-# Copyright (c) 2008 by Kevin B. Kenny.
-# See the file "license.terms" for information on usage and redistribution
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
-#
-# RCS: @(#) $Id: tdbcodbc.tcl,v 1.47 2008/02/27 02:08:27 kennykb Exp $
-#
-#------------------------------------------------------------------------------
-
-package require tdbc
-package require sqlite3
-
-package provide tdbc::sqlite3 1.1.2
-
-namespace eval tdbc::sqlite3 {
- namespace export connection
-}
-
-#------------------------------------------------------------------------------
-#
-# tdbc::sqlite3::connection --
-#
-# Class representing a SQLite3 database connection
-#
-#------------------------------------------------------------------------------
-
-::oo::class create ::tdbc::sqlite3::connection {
-
- superclass ::tdbc::connection
-
- variable timeout
-
- # The constructor accepts a database name and opens the database.
-
- constructor {databaseName args} {
- set timeout 0
- if {[llength $args] % 2 != 0} {
- set cmd [lrange [info level 0] 0 end-[llength $args]]
- return -code error \
- -errorcode {TDBC GENERAL_ERROR HY000 SQLITE3 WRONGNUMARGS} \
- "wrong # args, should be \"$cmd ?-option value?...\""
- }
- next
- sqlite3 [namespace current]::db $databaseName
- if {[llength $args] > 0} {
- my configure {*}$args
- }
- db nullvalue \ufffd
- }
-
- # The 'statementCreate' method forwards to the constructor of the
- # statement class
-
- forward statementCreate ::tdbc::sqlite3::statement create
-
- # The 'configure' method queries and sets options to the database
-
- method configure args {
- if {[llength $args] == 0} {
-
- # Query all configuration options
-
- set result {-encoding utf-8}
- lappend result -isolation
- if {[db onecolumn {PRAGMA read_uncommitted}]} {
- lappend result readuncommitted
- } else {
- lappend result serializable
- }
- lappend result -readonly 0
- lappend result -timeout $timeout
- return $result
-
- } elseif {[llength $args] == 1} {
-
- # Query a single option
-
- set option [lindex $args 0]
- switch -exact -- $option {
- -e - -en - -enc - -enco - -encod - -encodi - -encodin -
- -encoding {
- return utf-8
- }
- -i - -is - -iso - -isol - -isola - -isolat - -isolati -
- -isolatio - -isolation {
- if {[db onecolumn {PRAGMA read_uncommitted}]} {
- return readuncommitted
- } else {
- return serializable
- }
- }
- -r - -re - -rea - -read - -reado - -readon - -readonl -
- -readonly {
- return 0
- }
- -t - -ti - -tim - -time - -timeo - -timeou - -timeout {
- return $timeout
- }
- default {
- return -code error \
- -errorcode [list TDBC GENERAL_ERROR HY000 SQLITE3 \
- BADOPTION $option] \
- "bad option \"$option\": must be\
- -encoding, -isolation, -readonly or -timeout"
-
- }
- }
-
- } elseif {[llength $args] % 2 != 0} {
-
- # Syntax error
-
- set cmd [lrange [info level 0] 0 end-[llength $args]]
- return -code error \
- -errorcode [list TDBC GENERAL_ERROR HY000 \
- SQLITE3 WRONGNUMARGS] \
- "wrong # args, should be \" $cmd ?-option value?...\""
- }
-
- # Set one or more options
-
- foreach {option value} $args {
- switch -exact -- $option {
- -e - -en - -enc - -enco - -encod - -encodi - -encodin -
- -encoding {
- if {$value ne {utf-8}} {
- return -code error \
- -errorcode [list TDBC FEATURE_NOT_SUPPORTED 0A000 \
- SQLITE3 ENCODING] \
- "-encoding not supported. SQLite3 is always \
- Unicode."
- }
- }
- -i - -is - -iso - -isol - -isola - -isolat - -isolati -
- -isolatio - -isolation {
- switch -exact -- $value {
- readu - readun - readunc - readunco - readuncom -
- readuncomm - readuncommi - readuncommit -
- readuncommitt - readuncommitte - readuncommitted {
- db eval {PRAGMA read_uncommitted = 1}
- }
- readc - readco - readcom - readcomm - readcommi -
- readcommit - readcommitt - readcommitte -
- readcommitted -
- rep - repe - repea - repeat - repeata - repeatab -
- repeatabl - repeatable - repeatabler - repeatablere -
- repeatablerea - repeatablread -
- s - se - ser - seri - seria - serial - seriali -
- serializ - serializa - serializab - serializabl -
- serializable -
- reado - readon - readonl - readonly {
- db eval {PRAGMA read_uncommitted = 0}
- }
- default {
- return -code error \
- -errorcode [list TDBC GENERAL_ERROR HY000 \
- SQLITE3 BADISOLATION $value] \
- "bad isolation level \"$value\":\
- should be readuncommitted, readcommitted,\
- repeatableread, serializable, or readonly"
- }
- }
- }
- -r - -re - -rea - -read - -reado - -readon - -readonl -
- -readonly {
- if {$value} {
- return -code error \
- -errorcode [list TDBC FEATURE_NOT_SUPPORTED 0A000 \
- SQLITE3 READONLY] \
- "SQLite3's Tcl API does not support read-only\
- access"
- }
- }
- -t - -ti - -tim - -time - -timeo - -timeou - -timeout {
- if {![string is integer $value]} {
- return -code error \
- -errorcode [list TDBC DATA_EXCEPTION 22018 \
- SQLITE3 $value] \
- "expected integer but got \"$value\""
- }
- db timeout $value
- set timeout $value
- }
- default {
- return -code error \
- -errorcode [list TDBC GENERAL_ERROR HY000 \
- SQLITE3 BADOPTION $value] \
- "bad option \"$option\": must be\
- -encoding, -isolation, -readonly or -timeout"
-
- }
- }
- }
- return
- }
-
- # The 'tables' method introspects on the tables in the database.
-
- method tables {{pattern %}} {
- set retval {}
- my foreach row {
- SELECT * from sqlite_master
- WHERE type IN ('table', 'view')
- AND name LIKE :pattern
- } {
- dict set row name [string tolower [dict get $row name]]
- dict set retval [dict get $row name] $row
- }
- return $retval
- }
-
- # The 'columns' method introspects on columns of a table.
-
- method columns {table {pattern %}} {
- regsub -all ' $table '' table
- set retval {}
- set pattern [string map [list \
- * {[*]} \
- ? {[?]} \
- \[ \\\[ \
- \] \\\[ \
- _ ? \
- % *] [string tolower $pattern]]
- my foreach origrow "PRAGMA table_info('$table')" {
- set row {}
- dict for {key value} $origrow {
- dict set row [string tolower $key] $value
- }
- dict set row name [string tolower [dict get $row name]]
- if {![string match $pattern [dict get $row name]]} {
- continue
- }
- switch -regexp -matchvar info [dict get $row type] {
- {^(.+)\(\s*([[:digit:]]+)\s*,\s*([[:digit:]]+)\s*\)\s*$} {
- dict set row type [string tolower [lindex $info 1]]
- dict set row precision [lindex $info 2]
- dict set row scale [lindex $info 3]
- }
- {^(.+)\(\s*([[:digit:]]+)\s*\)\s*$} {
- dict set row type [string tolower [lindex $info 1]]
- dict set row precision [lindex $info 2]
- dict set row scale 0
- }
- default {
- dict set row type [string tolower [dict get $row type]]
- dict set row precision 0
- dict set row scale 0
- }
- }
- dict set row nullable [expr {![dict get $row notnull]}]
- dict set retval [dict get $row name] $row
- }
- return $retval
- }
-
- # The 'primarykeys' method enumerates the primary keys on a table.
-
- method primarykeys {table} {
- set result {}
- my foreach row "PRAGMA table_info($table)" {
- if {[dict get $row pk]} {
- lappend result [dict create ordinalPosition \
- [expr {[dict get $row cid]+1}] \
- columnName \
- [dict get $row name]]
- }
- }
- return $result
- }
-
- # The 'foreignkeys' method enumerates the foreign keys that are
- # declared in a table or that refer to a given table.
-
- method foreignkeys {args} {
-
- variable ::tdbc::generalError
-
- # Check arguments
-
- set argdict {}
- if {[llength $args] % 2 != 0} {
- set errorcode $generalError
- lappend errorcode wrongNumArgs
- return -code error -errorcode $errorcode \
- "wrong # args: should be [lrange [info level 0] 0 1]\
- ?-option value?..."
- }
- foreach {key value} $args {
- if {$key ni {-primary -foreign}} {
- set errorcode $generalError
- lappend errorcode badOption
- return -code error -errorcode $errorcode \
- "bad option \"$key\", must be -primary or -foreign"
- }
- set key [string range $key 1 end]
- if {[dict exists $argdict $key]} {
- set errorcode $generalError
- lappend errorcode dupOption
- return -code error -errorcode $errorcode \
- "duplicate option \"$key\" supplied"
- }
- dict set argdict $key $value
- }
-
- # If we know the table with the foreign key, search just its
- # foreign keys. Otherwise, iterate over all the tables in the
- # database.
-
- if {[dict exists $argdict foreign]} {
- return [my ForeignKeysForTable [dict get $argdict foreign] \
- $argdict]
- } else {
- set result {}
- foreach foreignTable [dict keys [my tables]] {
- lappend result {*}[my ForeignKeysForTable \
- $foreignTable $argdict]
- }
- return $result
- }
-
- }
-
- # The private ForeignKeysForTable method enumerates the foreign keys
- # in a specific table.
- #
- # Parameters:
- #
- # foreignTable - Name of the table containing foreign keys.
- # argdict - Dictionary that may or may not contain a key,
- # 'primary', whose value is the name of a table that
- # must hold the primary key corresponding to the foreign
- # key. If the 'primary' key is absent, all tables are
- # candidates.
- # Results:
- #
- # Returns the list of foreign keys that meed the specified
- # conditions, as a list of dictionaries, each containing the
- # keys, foreignConstraintName, foreignTable, foreignColumn,
- # primaryTable, primaryColumn, and ordinalPosition. Note that the
- # foreign constraint name is constructed arbitrarily, since SQLite3
- # does not report this information.
-
- method ForeignKeysForTable {foreignTable argdict} {
-
- set result {}
- set n 0
-
- # Go through the foreign keys in the given table, looking for
- # ones that refer to the primary table (if one is given), or
- # for any primary keys if none is given.
- my foreach row "PRAGMA foreign_key_list($foreignTable)" {
- if {(![dict exists $argdict primary])
- || ([string tolower [dict get $row table]]
- eq [dict get $argdict primary])} {
-
- # Construct a dictionary for each key, translating
- # SQLite names to TDBC ones and converting sequence
- # numbers to 1-based indexing.
-
- set rrow [dict create foreignTable $foreignTable \
- foreignConstraintName \
- ?$foreignTable?[dict get $row id]]
- if {[dict exists $row seq]} {
- dict set rrow ordinalPosition \
- [expr {1 + [dict get $row seq]}]
- }
- foreach {to from} {
- foreignColumn from
- primaryTable table
- primaryColumn to
- deleteAction on_delete
- updateAction on_update
- } {
- if {[dict exists $row $from]} {
- dict set rrow $to [dict get $row $from]
- }
- }
-
- # Add the newly-constucted dictionary to the result list
-
- lappend result $rrow
- }
- }
-
- return $result
- }
-
- # The 'preparecall' method prepares a call to a stored procedure.
- # SQLite3 does not have stored procedures, since it's an in-process
- # server.
-
- method preparecall {call} {
- return -code error \
- -errorcode [list TDBC FEATURE_NOT_SUPPORTED 0A000 \
- SQLITE3 PREPARECALL] \
- {SQLite3 does not support stored procedures}
- }
-
- # The 'begintransaction' method launches a database transaction
-
- method begintransaction {} {
- db eval {BEGIN TRANSACTION}
- }
-
- # The 'commit' method commits a database transaction
-
- method commit {} {
- db eval {COMMIT}
- }
-
- # The 'rollback' method abandons a database transaction
-
- method rollback {} {
- db eval {ROLLBACK}
- }
-
- # The 'transaction' method executes a script as a single transaction.
- # We override the 'transaction' method of the base class, since SQLite3
- # has a faster implementation of the same thing. (The base class's generic
- # method should also work.)
- # (Don't overload the base class method, because 'break', 'continue'
- # and 'return' in the transaction body don't work!)
-
- #method transaction {script} {
- # uplevel 1 [list {*}[namespace code db] transaction $script]
- #}
-
- method prepare {sqlCode} {
- set result [next $sqlCode]
- return $result
- }
-
- method getDBhandle {} {
- return [namespace which db]
- }
-}
-
-#------------------------------------------------------------------------------
-#
-# tdbc::sqlite3::statement --
-#
-# Class representing a statement to execute against a SQLite3 database
-#
-#------------------------------------------------------------------------------
-
-::oo::class create ::tdbc::sqlite3::statement {
-
- superclass ::tdbc::statement
-
- variable Params db sql
-
- # The constructor accepts the handle to the connection and the SQL
- # code for the statement to prepare. All that it does is to parse the
- # statement and store it. The parse is used to support the
- # 'params' and 'paramtype' methods.
-
- constructor {connection sqlcode} {
- next
- set Params {}
- set db [$connection getDBhandle]
- set sql $sqlcode
- foreach token [::tdbc::tokenize $sqlcode] {
- if {[string index $token 0] in {$ : @}} {
- dict set Params [string range $token 1 end] \
- {type Tcl_Obj precision 0 scale 0 nullable 1 direction in}
- }
- }
- }
-
- # The 'resultSetCreate' method relays to the result set constructor
-
- forward resultSetCreate ::tdbc::sqlite3::resultset create
-
- # The 'params' method returns descriptions of the parameters accepted
- # by the statement
-
- method params {} {
- return $Params
- }
-
- # The 'paramtype' method need do nothing; Sqlite3 uses manifest typing.
-
- method paramtype args {;}
-
- method getDBhandle {} {
- return $db
- }
-
- method getSql {} {
- return $sql
- }
-
-}
-
-#-------------------------------------------------------------------------------
-#
-# tdbc::sqlite3::resultset --
-#
-# Class that represents a SQLlite result set in Tcl
-#
-#-------------------------------------------------------------------------------
-
-::oo::class create ::tdbc::sqlite3::resultset {
-
- superclass ::tdbc::resultset
-
- # The variables of this class all have peculiar names. The reason is
- # that the RunQuery method needs to execute with an activation record
- # that has no local variables whose names could conflict with names
- # in the SQL query. We start the variable names with hyphens because
- # they can't be bind variables.
-
- variable -set {*}{
- -columns -db -needcolumns -resultArray
- -results -sql -Cursor -RowCount -END
- }
-
- constructor {statement args} {
- next
- set -db [$statement getDBhandle]
- set -sql [$statement getSql]
- set -columns {}
- set -results {}
- ${-db} trace [namespace code {my RecordStatement}]
- if {[llength $args] == 0} {
-
- # Variable substitutions are evaluated in caller's context
-
- uplevel 1 [list ${-db} eval ${-sql} \
- [namespace which -variable -resultArray] \
- [namespace code {my RecordResult}]]
-
- } elseif {[llength $args] == 1} {
-
- # Variable substitutions are in the dictionary at [lindex $args 0].
-
- set -paramDict [lindex $args 0]
-
- # At this point, the activation record must contain no variables
- # that might be bound within the query. All variables at this point
- # begin with hyphens so that they are syntactically incorrect
- # as bound variables in SQL.
-
- unset args
- unset statement
-
- dict with -paramDict {
- ${-db} eval ${-sql} -resultArray {
- my RecordResult
- }
- }
-
- } else {
-
- ${-db} trace {}
-
- # Too many args
-
- return -code error \
- -errorcode [list TDBC GENERAL_ERROR HY000 \
- SQLITE3 WRONGNUMARGS] \
- "wrong # args: should be\
- [lrange [info level 0] 0 1] statement ?dictionary?"
-
- }
- ${-db} trace {}
- set -Cursor 0
- if {${-Cursor} < [llength ${-results}]
- && [lindex ${-results} ${-Cursor}] eq {statement}} {
- incr -Cursor 2
- }
- if {${-Cursor} < [llength ${-results}]
- && [lindex ${-results} ${-Cursor}] eq {columns}} {
- incr -Cursor
- set -columns [lindex ${-results} ${-Cursor}]
- incr -Cursor
- }
- set -RowCount [${-db} changes]
- }
-
- # Record the start of a SQL statement
-
- method RecordStatement {stmt} {
- set -needcolumns 1
- lappend -results statement {}
- }
-
- # Record one row of results from a query by appending it as a dictionary
- # to the 'results' list. As a side effect, set 'columns' to a list
- # comprising the names of the columns of the result.
-
- method RecordResult {} {
- set columns ${-resultArray(*)}
- if {[info exists -needcolumns]} {
- lappend -results columns $columns
- unset -needcolumns
- }
- set dict {}
- foreach key $columns {
- if {[set -resultArray($key)] ne "\ufffd"} {
- dict set dict $key [set -resultArray($key)]
- }
- }
- lappend -results row $dict
- }
-
- # Advance to the next result set
-
- method nextresults {} {
- set have 0
- while {${-Cursor} < [llength ${-results}]} {
- if {[lindex ${-results} ${-Cursor}] eq {statement}} {
- set have 1
- incr -Cursor 2
- break
- }
- incr -Cursor 2
- }
- if {!$have} {
- set -END {}
- }
- if {${-Cursor} >= [llength ${-results}]} {
- set -columns {}
- } elseif {[lindex ${-results} ${-Cursor}] eq {columns}} {
- incr -Cursor
- set -columns [lindex ${-results} ${-Cursor}]
- incr -Cursor
- } else {
- set -columns {}
- }
- return $have
- }
-
- method getDBhandle {} {
- return ${-db}
- }
-
- # Return a list of the columns
-
- method columns {} {
- if {[info exists -END]} {
- return -code error \
- -errorcode {TDBC GENERAL_ERROR HY010 SQLITE3 FUNCTIONSEQ} \
- "Function sequence error: result set is exhausted."
- }
- return ${-columns}
- }
-
- # Return the next row of the result set as a list
-
- method nextlist var {
-
- upvar 1 $var row
-
- if {[info exists -END]} {
- return -code error \
- -errorcode {TDBC GENERAL_ERROR HY010 SQLITE3 FUNCTIONSEQ} \
- "Function sequence error: result set is exhausted."
- }
- if {${-Cursor} >= [llength ${-results}]
- || [lindex ${-results} ${-Cursor}] ne {row}} {
- return 0
- } else {
- set row {}
- incr -Cursor
- set d [lindex ${-results} ${-Cursor}]
- incr -Cursor
- foreach key ${-columns} {
- if {[dict exists $d $key]} {
- lappend row [dict get $d $key]
- } else {
- lappend row {}
- }
- }
- }
- return 1
- }
-
- # Return the next row of the result set as a dict
-
- method nextdict var {
-
- upvar 1 $var row
-
- if {[info exists -END]} {
- return -code error \
- -errorcode {TDBC GENERAL_ERROR HY010 SQLITE3 FUNCTIONSEQ} \
- "Function sequence error: result set is exhausted."
- }
- if {${-Cursor} >= [llength ${-results}]
- || [lindex ${-results} ${-Cursor}] ne {row}} {
- return 0
- } else {
- incr -Cursor
- set row [lindex ${-results} ${-Cursor}]
- incr -Cursor
- }
- return 1
- }
-
- # Return the number of rows affected by a statement
-
- method rowcount {} {
- if {[info exists -END]} {
- return -code error \
- -errorcode {TDBC GENERAL_ERROR HY010 SQLITE3 FUNCTIONSEQ} \
- "Function sequence error: result set is exhausted."
- }
- return ${-RowCount}
- }
-
-}
Added: trunk/Master/tlpkg/tltcl/lib/tcl8/8.6/tdbc/sqlite3-1.1.3.tm
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8/8.6/tdbc/sqlite3-1.1.3.tm (rev 0)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8/8.6/tdbc/sqlite3-1.1.3.tm 2022-03-14 10:03:11 UTC (rev 62700)
@@ -0,0 +1,715 @@
+# tdbcsqlite3.tcl --
+#
+# SQLite3 database driver for TDBC
+#
+# Copyright (c) 2008 by Kevin B. Kenny.
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# RCS: @(#) $Id: tdbcodbc.tcl,v 1.47 2008/02/27 02:08:27 kennykb Exp $
+#
+#------------------------------------------------------------------------------
+
+package require tdbc
+package require sqlite3
+
+package provide tdbc::sqlite3 1.1.3
+
+namespace eval tdbc::sqlite3 {
+ namespace export connection
+}
+
+#------------------------------------------------------------------------------
+#
+# tdbc::sqlite3::connection --
+#
+# Class representing a SQLite3 database connection
+#
+#------------------------------------------------------------------------------
+
+::oo::class create ::tdbc::sqlite3::connection {
+
+ superclass ::tdbc::connection
+
+ variable timeout
+
+ # The constructor accepts a database name and opens the database.
+
+ constructor {databaseName args} {
+ set timeout 0
+ if {[llength $args] % 2 != 0} {
+ set cmd [lrange [info level 0] 0 end-[llength $args]]
+ return -code error \
+ -errorcode {TDBC GENERAL_ERROR HY000 SQLITE3 WRONGNUMARGS} \
+ "wrong # args, should be \"$cmd ?-option value?...\""
+ }
+ next
+ sqlite3 [namespace current]::db $databaseName
+ if {[llength $args] > 0} {
+ my configure {*}$args
+ }
+ db nullvalue \ufffd
+ }
+
+ # The 'statementCreate' method forwards to the constructor of the
+ # statement class
+
+ forward statementCreate ::tdbc::sqlite3::statement create
+
+ # The 'configure' method queries and sets options to the database
+
+ method configure args {
+ if {[llength $args] == 0} {
+
+ # Query all configuration options
+
+ set result {-encoding utf-8}
+ lappend result -isolation
+ if {[db onecolumn {PRAGMA read_uncommitted}]} {
+ lappend result readuncommitted
+ } else {
+ lappend result serializable
+ }
+ lappend result -readonly 0
+ lappend result -timeout $timeout
+ return $result
+
+ } elseif {[llength $args] == 1} {
+
+ # Query a single option
+
+ set option [lindex $args 0]
+ switch -exact -- $option {
+ -e - -en - -enc - -enco - -encod - -encodi - -encodin -
+ -encoding {
+ return utf-8
+ }
+ -i - -is - -iso - -isol - -isola - -isolat - -isolati -
+ -isolatio - -isolation {
+ if {[db onecolumn {PRAGMA read_uncommitted}]} {
+ return readuncommitted
+ } else {
+ return serializable
+ }
+ }
+ -r - -re - -rea - -read - -reado - -readon - -readonl -
+ -readonly {
+ return 0
+ }
+ -t - -ti - -tim - -time - -timeo - -timeou - -timeout {
+ return $timeout
+ }
+ default {
+ return -code error \
+ -errorcode [list TDBC GENERAL_ERROR HY000 SQLITE3 \
+ BADOPTION $option] \
+ "bad option \"$option\": must be\
+ -encoding, -isolation, -readonly or -timeout"
+
+ }
+ }
+
+ } elseif {[llength $args] % 2 != 0} {
+
+ # Syntax error
+
+ set cmd [lrange [info level 0] 0 end-[llength $args]]
+ return -code error \
+ -errorcode [list TDBC GENERAL_ERROR HY000 \
+ SQLITE3 WRONGNUMARGS] \
+ "wrong # args, should be \" $cmd ?-option value?...\""
+ }
+
+ # Set one or more options
+
+ foreach {option value} $args {
+ switch -exact -- $option {
+ -e - -en - -enc - -enco - -encod - -encodi - -encodin -
+ -encoding {
+ if {$value ne {utf-8}} {
+ return -code error \
+ -errorcode [list TDBC FEATURE_NOT_SUPPORTED 0A000 \
+ SQLITE3 ENCODING] \
+ "-encoding not supported. SQLite3 is always \
+ Unicode."
+ }
+ }
+ -i - -is - -iso - -isol - -isola - -isolat - -isolati -
+ -isolatio - -isolation {
+ switch -exact -- $value {
+ readu - readun - readunc - readunco - readuncom -
+ readuncomm - readuncommi - readuncommit -
+ readuncommitt - readuncommitte - readuncommitted {
+ db eval {PRAGMA read_uncommitted = 1}
+ }
+ readc - readco - readcom - readcomm - readcommi -
+ readcommit - readcommitt - readcommitte -
+ readcommitted -
+ rep - repe - repea - repeat - repeata - repeatab -
+ repeatabl - repeatable - repeatabler - repeatablere -
+ repeatablerea - repeatablread -
+ s - se - ser - seri - seria - serial - seriali -
+ serializ - serializa - serializab - serializabl -
+ serializable -
+ reado - readon - readonl - readonly {
+ db eval {PRAGMA read_uncommitted = 0}
+ }
+ default {
+ return -code error \
+ -errorcode [list TDBC GENERAL_ERROR HY000 \
+ SQLITE3 BADISOLATION $value] \
+ "bad isolation level \"$value\":\
+ should be readuncommitted, readcommitted,\
+ repeatableread, serializable, or readonly"
+ }
+ }
+ }
+ -r - -re - -rea - -read - -reado - -readon - -readonl -
+ -readonly {
+ if {$value} {
+ return -code error \
+ -errorcode [list TDBC FEATURE_NOT_SUPPORTED 0A000 \
+ SQLITE3 READONLY] \
+ "SQLite3's Tcl API does not support read-only\
+ access"
+ }
+ }
+ -t - -ti - -tim - -time - -timeo - -timeou - -timeout {
+ if {![string is integer $value]} {
+ return -code error \
+ -errorcode [list TDBC DATA_EXCEPTION 22018 \
+ SQLITE3 $value] \
+ "expected integer but got \"$value\""
+ }
+ db timeout $value
+ set timeout $value
+ }
+ default {
+ return -code error \
+ -errorcode [list TDBC GENERAL_ERROR HY000 \
+ SQLITE3 BADOPTION $value] \
+ "bad option \"$option\": must be\
+ -encoding, -isolation, -readonly or -timeout"
+
+ }
+ }
+ }
+ return
+ }
+
+ # The 'tables' method introspects on the tables in the database.
+
+ method tables {{pattern %}} {
+ set retval {}
+ my foreach row {
+ SELECT * from sqlite_master
+ WHERE type IN ('table', 'view')
+ AND name LIKE :pattern
+ } {
+ dict set row name [string tolower [dict get $row name]]
+ dict set retval [dict get $row name] $row
+ }
+ return $retval
+ }
+
+ # The 'columns' method introspects on columns of a table.
+
+ method columns {table {pattern %}} {
+ regsub -all ' $table '' table
+ set retval {}
+ set pattern [string map [list \
+ * {[*]} \
+ ? {[?]} \
+ \[ \\\[ \
+ \] \\\[ \
+ _ ? \
+ % *] [string tolower $pattern]]
+ my foreach origrow "PRAGMA table_info('$table')" {
+ set row {}
+ dict for {key value} $origrow {
+ dict set row [string tolower $key] $value
+ }
+ dict set row name [string tolower [dict get $row name]]
+ if {![string match $pattern [dict get $row name]]} {
+ continue
+ }
+ switch -regexp -matchvar info [dict get $row type] {
+ {^(.+)\(\s*([[:digit:]]+)\s*,\s*([[:digit:]]+)\s*\)\s*$} {
+ dict set row type [string tolower [lindex $info 1]]
+ dict set row precision [lindex $info 2]
+ dict set row scale [lindex $info 3]
+ }
+ {^(.+)\(\s*([[:digit:]]+)\s*\)\s*$} {
+ dict set row type [string tolower [lindex $info 1]]
+ dict set row precision [lindex $info 2]
+ dict set row scale 0
+ }
+ default {
+ dict set row type [string tolower [dict get $row type]]
+ dict set row precision 0
+ dict set row scale 0
+ }
+ }
+ dict set row nullable [expr {![dict get $row notnull]}]
+ dict set retval [dict get $row name] $row
+ }
+ return $retval
+ }
+
+ # The 'primarykeys' method enumerates the primary keys on a table.
+
+ method primarykeys {table} {
+ set result {}
+ my foreach row "PRAGMA table_info($table)" {
+ if {[dict get $row pk]} {
+ lappend result [dict create ordinalPosition \
+ [expr {[dict get $row cid]+1}] \
+ columnName \
+ [dict get $row name]]
+ }
+ }
+ return $result
+ }
+
+ # The 'foreignkeys' method enumerates the foreign keys that are
+ # declared in a table or that refer to a given table.
+
+ method foreignkeys {args} {
+
+ variable ::tdbc::generalError
+
+ # Check arguments
+
+ set argdict {}
+ if {[llength $args] % 2 != 0} {
+ set errorcode $generalError
+ lappend errorcode wrongNumArgs
+ return -code error -errorcode $errorcode \
+ "wrong # args: should be [lrange [info level 0] 0 1]\
+ ?-option value?..."
+ }
+ foreach {key value} $args {
+ if {$key ni {-primary -foreign}} {
+ set errorcode $generalError
+ lappend errorcode badOption
+ return -code error -errorcode $errorcode \
+ "bad option \"$key\", must be -primary or -foreign"
+ }
+ set key [string range $key 1 end]
+ if {[dict exists $argdict $key]} {
+ set errorcode $generalError
+ lappend errorcode dupOption
+ return -code error -errorcode $errorcode \
+ "duplicate option \"$key\" supplied"
+ }
+ dict set argdict $key $value
+ }
+
+ # If we know the table with the foreign key, search just its
+ # foreign keys. Otherwise, iterate over all the tables in the
+ # database.
+
+ if {[dict exists $argdict foreign]} {
+ return [my ForeignKeysForTable [dict get $argdict foreign] \
+ $argdict]
+ } else {
+ set result {}
+ foreach foreignTable [dict keys [my tables]] {
+ lappend result {*}[my ForeignKeysForTable \
+ $foreignTable $argdict]
+ }
+ return $result
+ }
+
+ }
+
+ # The private ForeignKeysForTable method enumerates the foreign keys
+ # in a specific table.
+ #
+ # Parameters:
+ #
+ # foreignTable - Name of the table containing foreign keys.
+ # argdict - Dictionary that may or may not contain a key,
+ # 'primary', whose value is the name of a table that
+ # must hold the primary key corresponding to the foreign
+ # key. If the 'primary' key is absent, all tables are
+ # candidates.
+ # Results:
+ #
+ # Returns the list of foreign keys that meed the specified
+ # conditions, as a list of dictionaries, each containing the
+ # keys, foreignConstraintName, foreignTable, foreignColumn,
+ # primaryTable, primaryColumn, and ordinalPosition. Note that the
+ # foreign constraint name is constructed arbitrarily, since SQLite3
+ # does not report this information.
+
+ method ForeignKeysForTable {foreignTable argdict} {
+
+ set result {}
+ set n 0
+
+ # Go through the foreign keys in the given table, looking for
+ # ones that refer to the primary table (if one is given), or
+ # for any primary keys if none is given.
+ my foreach row "PRAGMA foreign_key_list($foreignTable)" {
+ if {(![dict exists $argdict primary])
+ || ([string tolower [dict get $row table]]
+ eq [dict get $argdict primary])} {
+
+ # Construct a dictionary for each key, translating
+ # SQLite names to TDBC ones and converting sequence
+ # numbers to 1-based indexing.
+
+ set rrow [dict create foreignTable $foreignTable \
+ foreignConstraintName \
+ ?$foreignTable?[dict get $row id]]
+ if {[dict exists $row seq]} {
+ dict set rrow ordinalPosition \
+ [expr {1 + [dict get $row seq]}]
+ }
+ foreach {to from} {
+ foreignColumn from
+ primaryTable table
+ primaryColumn to
+ deleteAction on_delete
+ updateAction on_update
+ } {
+ if {[dict exists $row $from]} {
+ dict set rrow $to [dict get $row $from]
+ }
+ }
+
+ # Add the newly-constucted dictionary to the result list
+
+ lappend result $rrow
+ }
+ }
+
+ return $result
+ }
+
+ # The 'preparecall' method prepares a call to a stored procedure.
+ # SQLite3 does not have stored procedures, since it's an in-process
+ # server.
+
+ method preparecall {call} {
+ return -code error \
+ -errorcode [list TDBC FEATURE_NOT_SUPPORTED 0A000 \
+ SQLITE3 PREPARECALL] \
+ {SQLite3 does not support stored procedures}
+ }
+
+ # The 'begintransaction' method launches a database transaction
+
+ method begintransaction {} {
+ db eval {BEGIN TRANSACTION}
+ }
+
+ # The 'commit' method commits a database transaction
+
+ method commit {} {
+ db eval {COMMIT}
+ }
+
+ # The 'rollback' method abandons a database transaction
+
+ method rollback {} {
+ db eval {ROLLBACK}
+ }
+
+ # The 'transaction' method executes a script as a single transaction.
+ # We override the 'transaction' method of the base class, since SQLite3
+ # has a faster implementation of the same thing. (The base class's generic
+ # method should also work.)
+ # (Don't overload the base class method, because 'break', 'continue'
+ # and 'return' in the transaction body don't work!)
+
+ #method transaction {script} {
+ # uplevel 1 [list {*}[namespace code db] transaction $script]
+ #}
+
+ method prepare {sqlCode} {
+ set result [next $sqlCode]
+ return $result
+ }
+
+ method getDBhandle {} {
+ return [namespace which db]
+ }
+}
+
+#------------------------------------------------------------------------------
+#
+# tdbc::sqlite3::statement --
+#
+# Class representing a statement to execute against a SQLite3 database
+#
+#------------------------------------------------------------------------------
+
+::oo::class create ::tdbc::sqlite3::statement {
+
+ superclass ::tdbc::statement
+
+ variable Params db sql
+
+ # The constructor accepts the handle to the connection and the SQL
+ # code for the statement to prepare. All that it does is to parse the
+ # statement and store it. The parse is used to support the
+ # 'params' and 'paramtype' methods.
+
+ constructor {connection sqlcode} {
+ next
+ set Params {}
+ set db [$connection getDBhandle]
+ set sql $sqlcode
+ foreach token [::tdbc::tokenize $sqlcode] {
+ if {[string index $token 0] in {$ : @}} {
+ dict set Params [string range $token 1 end] \
+ {type Tcl_Obj precision 0 scale 0 nullable 1 direction in}
+ }
+ }
+ }
+
+ # The 'resultSetCreate' method relays to the result set constructor
+
+ forward resultSetCreate ::tdbc::sqlite3::resultset create
+
+ # The 'params' method returns descriptions of the parameters accepted
+ # by the statement
+
+ method params {} {
+ return $Params
+ }
+
+ # The 'paramtype' method need do nothing; Sqlite3 uses manifest typing.
+
+ method paramtype args {;}
+
+ method getDBhandle {} {
+ return $db
+ }
+
+ method getSql {} {
+ return $sql
+ }
+
+}
+
+#-------------------------------------------------------------------------------
+#
+# tdbc::sqlite3::resultset --
+#
+# Class that represents a SQLlite result set in Tcl
+#
+#-------------------------------------------------------------------------------
+
+::oo::class create ::tdbc::sqlite3::resultset {
+
+ superclass ::tdbc::resultset
+
+ # The variables of this class all have peculiar names. The reason is
+ # that the RunQuery method needs to execute with an activation record
+ # that has no local variables whose names could conflict with names
+ # in the SQL query. We start the variable names with hyphens because
+ # they can't be bind variables.
+
+ variable -set {*}{
+ -columns -db -needcolumns -resultArray
+ -results -sql -Cursor -RowCount -END
+ }
+
+ constructor {statement args} {
+ next
+ set -db [$statement getDBhandle]
+ set -sql [$statement getSql]
+ set -columns {}
+ set -results {}
+ ${-db} trace [namespace code {my RecordStatement}]
+ if {[llength $args] == 0} {
+
+ # Variable substitutions are evaluated in caller's context
+
+ uplevel 1 [list ${-db} eval ${-sql} \
+ [namespace which -variable -resultArray] \
+ [namespace code {my RecordResult}]]
+
+ } elseif {[llength $args] == 1} {
+
+ # Variable substitutions are in the dictionary at [lindex $args 0].
+
+ set -paramDict [lindex $args 0]
+
+ # At this point, the activation record must contain no variables
+ # that might be bound within the query. All variables at this point
+ # begin with hyphens so that they are syntactically incorrect
+ # as bound variables in SQL.
+
+ unset args
+ unset statement
+
+ dict with -paramDict {
+ ${-db} eval ${-sql} -resultArray {
+ my RecordResult
+ }
+ }
+
+ } else {
+
+ ${-db} trace {}
+
+ # Too many args
+
+ return -code error \
+ -errorcode [list TDBC GENERAL_ERROR HY000 \
+ SQLITE3 WRONGNUMARGS] \
+ "wrong # args: should be\
+ [lrange [info level 0] 0 1] statement ?dictionary?"
+
+ }
+ ${-db} trace {}
+ set -Cursor 0
+ if {${-Cursor} < [llength ${-results}]
+ && [lindex ${-results} ${-Cursor}] eq {statement}} {
+ incr -Cursor 2
+ }
+ if {${-Cursor} < [llength ${-results}]
+ && [lindex ${-results} ${-Cursor}] eq {columns}} {
+ incr -Cursor
+ set -columns [lindex ${-results} ${-Cursor}]
+ incr -Cursor
+ }
+ set -RowCount [${-db} changes]
+ }
+
+ # Record the start of a SQL statement
+
+ method RecordStatement {stmt} {
+ set -needcolumns 1
+ lappend -results statement {}
+ }
+
+ # Record one row of results from a query by appending it as a dictionary
+ # to the 'results' list. As a side effect, set 'columns' to a list
+ # comprising the names of the columns of the result.
+
+ method RecordResult {} {
+ set columns ${-resultArray(*)}
+ if {[info exists -needcolumns]} {
+ lappend -results columns $columns
+ unset -needcolumns
+ }
+ set dict {}
+ foreach key $columns {
+ if {[set -resultArray($key)] ne "\ufffd"} {
+ dict set dict $key [set -resultArray($key)]
+ }
+ }
+ lappend -results row $dict
+ }
+
+ # Advance to the next result set
+
+ method nextresults {} {
+ set have 0
+ while {${-Cursor} < [llength ${-results}]} {
+ if {[lindex ${-results} ${-Cursor}] eq {statement}} {
+ set have 1
+ incr -Cursor 2
+ break
+ }
+ incr -Cursor 2
+ }
+ if {!$have} {
+ set -END {}
+ }
+ if {${-Cursor} >= [llength ${-results}]} {
+ set -columns {}
+ } elseif {[lindex ${-results} ${-Cursor}] eq {columns}} {
+ incr -Cursor
+ set -columns [lindex ${-results} ${-Cursor}]
+ incr -Cursor
+ } else {
+ set -columns {}
+ }
+ return $have
+ }
+
+ method getDBhandle {} {
+ return ${-db}
+ }
+
+ # Return a list of the columns
+
+ method columns {} {
+ if {[info exists -END]} {
+ return -code error \
+ -errorcode {TDBC GENERAL_ERROR HY010 SQLITE3 FUNCTIONSEQ} \
+ "Function sequence error: result set is exhausted."
+ }
+ return ${-columns}
+ }
+
+ # Return the next row of the result set as a list
+
+ method nextlist var {
+
+ upvar 1 $var row
+
+ if {[info exists -END]} {
+ return -code error \
+ -errorcode {TDBC GENERAL_ERROR HY010 SQLITE3 FUNCTIONSEQ} \
+ "Function sequence error: result set is exhausted."
+ }
+ if {${-Cursor} >= [llength ${-results}]
+ || [lindex ${-results} ${-Cursor}] ne {row}} {
+ return 0
+ } else {
+ set row {}
+ incr -Cursor
+ set d [lindex ${-results} ${-Cursor}]
+ incr -Cursor
+ foreach key ${-columns} {
+ if {[dict exists $d $key]} {
+ lappend row [dict get $d $key]
+ } else {
+ lappend row {}
+ }
+ }
+ }
+ return 1
+ }
+
+ # Return the next row of the result set as a dict
+
+ method nextdict var {
+
+ upvar 1 $var row
+
+ if {[info exists -END]} {
+ return -code error \
+ -errorcode {TDBC GENERAL_ERROR HY010 SQLITE3 FUNCTIONSEQ} \
+ "Function sequence error: result set is exhausted."
+ }
+ if {${-Cursor} >= [llength ${-results}]
+ || [lindex ${-results} ${-Cursor}] ne {row}} {
+ return 0
+ } else {
+ incr -Cursor
+ set row [lindex ${-results} ${-Cursor}]
+ incr -Cursor
+ }
+ return 1
+ }
+
+ # Return the number of rows affected by a statement
+
+ method rowcount {} {
+ if {[info exists -END]} {
+ return -code error \
+ -errorcode {TDBC GENERAL_ERROR HY010 SQLITE3 FUNCTIONSEQ} \
+ "Function sequence error: result set is exhausted."
+ }
+ return ${-RowCount}
+ }
+
+}
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/auto.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/auto.tcl 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/auto.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -70,9 +70,9 @@
# gives the end-user ultimate control to work-around any bugs, or
# to customize.
- if {[info exists env($enVarName)]} {
- lappend dirs $env($enVarName)
- }
+ if {[info exists env($enVarName)]} {
+ lappend dirs $env($enVarName)
+ }
# 2. In the package script directory registered within the
# configuration of the package itself.
@@ -107,11 +107,11 @@
# ../../../foo1.0.1/library
# (From unix/arch directory in parallel build hierarchy)
- set parentDir [file dirname [file dirname [info nameofexecutable]]]
- set grandParentDir [file dirname $parentDir]
- lappend dirs [file join $parentDir lib $basename$version]
- lappend dirs [file join $grandParentDir lib $basename$version]
- lappend dirs [file join $parentDir library]
+ set parentDir [file dirname [file dirname [info nameofexecutable]]]
+ set grandParentDir [file dirname $parentDir]
+ lappend dirs [file join $parentDir lib $basename$version]
+ lappend dirs [file join $grandParentDir lib $basename$version]
+ lappend dirs [file join $parentDir library]
if {0} {
lappend dirs [file join $grandParentDir library]
lappend dirs [file join $grandParentDir $basename$patch library]
@@ -134,8 +134,8 @@
}
set seen($norm) {}
- set the_library $i
- set file [file join $i $initScript]
+ set the_library $i
+ set file [file join $i $initScript]
# source everything when in a safe interpreter because we have a
# source command, but no file exists command
@@ -185,7 +185,7 @@
proc auto_mkindex {dir args} {
if {[interp issafe]} {
- error "can't generate index within safe interpreter"
+ error "can't generate index within safe interpreter"
}
set oldDir [pwd]
@@ -240,7 +240,7 @@
set f ""
set error [catch {
set f [open $file]
- fconfigure $f -eofchar \032
+ fconfigure $f -eofchar "\032 {}"
while {[gets $f line] >= 0} {
if {[regexp {^proc[ ]+([^ ]*)} $line match procName]} {
set procName [lindex [auto_qualify $procName "::"] 0]
@@ -351,7 +351,7 @@
set scriptFile $file
set fid [open $file]
- fconfigure $fid -eofchar \032
+ fconfigure $fid -eofchar "\032 {}"
set contents [read $fid]
close $fid
@@ -371,7 +371,7 @@
$parser eval $contents
foreach name $imports {
- catch {$parser eval [list _%@namespace forget $name]}
+ catch {$parser eval [list _%@namespace forget $name]}
}
return $index
}
@@ -441,9 +441,9 @@
set ns [namespace qualifiers $name]
set tail [namespace tail $name]
if {$ns eq ""} {
- set fakeName [namespace current]::_%@fake_$tail
+ set fakeName [namespace current]::_%@fake_$tail
} else {
- set fakeName [namespace current]::[string map {:: _} _%@fake_$name]
+ set fakeName [namespace current]::[string map {:: _} _%@fake_$name]
}
proc $fakeName $arglist $body
@@ -452,8 +452,8 @@
# the fully qualified names, and have the procs point to the aliases.
if {[string match *::* $name]} {
- set exportCmd [list _%@namespace export [namespace tail $name]]
- $parser eval [list _%@namespace eval $ns $exportCmd]
+ set exportCmd [list _%@namespace export [namespace tail $name]]
+ $parser eval [list _%@namespace eval $ns $exportCmd]
# The following proc definition does not work if you want to tolerate
# space or something else diabolical in the procedure name, (i.e.,
@@ -465,11 +465,11 @@
# A gold star to someone that can make test autoMkindex-3.3 work
# properly
- set alias [namespace tail $fakeName]
- $parser invokehidden proc $name {args} "_%@eval {$alias} \$args"
- $parser alias $alias $fakeName
+ set alias [namespace tail $fakeName]
+ $parser invokehidden proc $name {args} "_%@eval {$alias} \$args"
+ $parser alias $alias $fakeName
} else {
- $parser alias $name $fakeName
+ $parser alias $name $fakeName
}
return
}
@@ -491,18 +491,18 @@
variable contextStack
if {![string match ::* $name]} {
- foreach ns $contextStack {
- set name "${ns}::$name"
- if {[string match ::* $name]} {
- break
- }
- }
+ foreach ns $contextStack {
+ set name "${ns}::$name"
+ if {[string match ::* $name]} {
+ break
+ }
+ }
}
if {[namespace qualifiers $name] eq ""} {
- set name [namespace tail $name]
+ set name [namespace tail $name]
} elseif {![string match ::* $name]} {
- set name "::$name"
+ set name "::$name"
}
# Earlier, mkindex replaced all $'s with \0. Now, we have to reverse that
@@ -592,27 +592,27 @@
auto_mkindex_parser::command namespace {op args} {
switch -- $op {
- eval {
- variable parser
- variable contextStack
+ eval {
+ variable parser
+ variable contextStack
- set name [lindex $args 0]
- set args [lrange $args 1 end]
+ set name [lindex $args 0]
+ set args [lrange $args 1 end]
- set contextStack [linsert $contextStack 0 $name]
+ set contextStack [linsert $contextStack 0 $name]
$parser eval [list _%@namespace eval $name] $args
- set contextStack [lrange $contextStack 1 end]
- }
- import {
- variable parser
- variable imports
- foreach pattern $args {
- if {$pattern ne "-force"} {
- lappend imports $pattern
- }
- }
- catch {$parser eval "_%@namespace import $args"}
- }
+ set contextStack [lrange $contextStack 1 end]
+ }
+ import {
+ variable parser
+ variable imports
+ foreach pattern $args {
+ if {$pattern ne "-force"} {
+ lappend imports $pattern
+ }
+ }
+ catch {$parser eval "_%@namespace import $args"}
+ }
ensemble {
variable parser
variable contextStack
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/clock.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/clock.tcl 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/clock.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -2988,8 +2988,7 @@
set timezone $result
} elseif {[set result [getenv TZ]] ne {}} {
set timezone $result
- }
- if {![info exists timezone]} {
+ } else {
# Cache the time zone only if it was detected by one of the
# expensive methods.
if { [info exists CachedSystemTimeZone] } {
Added: trunk/Master/tlpkg/tltcl/lib/tcl8.6/encoding/cns11643.enc
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/encoding/cns11643.enc (rev 0)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/encoding/cns11643.enc 2022-03-14 10:03:11 UTC (rev 62700)
@@ -0,0 +1,1584 @@
+# Encoding file: cns11643, double-byte
+D
+2134 0 93
+21
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00004E284E364E3F4E854E054E04518251965338536953B64E2A4E874E4951E2
+4E464E8F4EBC4EBE516651E35204529C53B95902590A5B805DDB5E7A5E7F5EF4
+5F505F515F61961D4E3C4E634E624EA351854EC54ECF4ECE4ECC518451865722
+572351E45205529E529D52FD5300533A5C735346535D538653B7620953CC6C15
+53CE57216C3F5E005F0C623762386534653565E04F0E738D4E974EE04F144EF1
+4EE74EF74EE64F1D4F024F054F2256D8518B518C519951E55213520B52A60000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+22
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000053225304530353075407531E535F536D538953BA53D0598053F653F753F9
+597E53F4597F5B565724590459185932593059345DDF59755E845B825BF95C14
+5FD55FD45FCF625C625E626462615E815E835F0D5F52625A5FCA5FC7623965EE
+624F65E7672F6B7A6C39673F673C6C376C446C45738C75927676909390926C4B
+6C4C4E214E204E224E684E894E984EF94EEF7F5182784EF84F064F034EFC4EEE
+4F1690994F284F1C4F074F1A4EFA4F17514A962351724F3B51B451B351B20000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+23
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00004F6451E84F675214520F5215521852A84F33534B534F518F5350521C538B
+522153BE52AE53D2541653FF538E540054305405541354155445541956E35735
+57365731573258EE59054E545447593656E756E55741597A574C5986574B5752
+5B865F535C1859985C3D5C78598E59A25990598F5C8059A15E085B925C285C2A
+5C8D5EF55F0E5C8B5C895C925FD35FDA5C935FDB5DE0620F625D625F62676257
+9F505E8D65EB65EA5F7867375FD2673267366B226BCE5FEE6C586C516C770000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+24
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006C3C5FFA6C5A5FF76C53706F7072706E6283628C707372B172B26287738F
+627B627A6270793C6288808D808E6272827B65F08D718FB99096909A67454E24
+4E7167554E9C4F454F4A4F394F37674B4F324F426C1A4F444F4B6C6B4F404F35
+4F3151516C6F5150514E6C6D6C87519D6C9C51B551B851EC522352275226521F
+522B522052B452B372C65325533B537473957397739373947392544D75397594
+543A7681793D5444544C5423541A5432544B5421828F54345449545054220000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+25
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000543F5451545A542F8FC956E956F256F356EF56ED56EC56E6574896285744
+573F573C575357564F85575F5743575857574F744F894F8457464F4C573D4F6A
+57425754575558F158F258F0590B9EA656F1593D4F955994598C519E599C51BE
+5235599F5233599B52315989599A530B658853925B8D54875BFE5BFF5BFD5C2B
+54885C845C8E5C9C5465546C5C855DF55E09546F54615E0B54985E925E905F03
+56F75F1E5F6357725FE75FFE5FE65FDC5FCE57805FFC5FDF5FEC5FF657620000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+26
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005FF25FF05FF95945621359BA59CF623B623C628259C159B659BC6278628B
+59B1629E62A5629B629C6299628D6285629D62755C445C475CAE65F65CA05CB5
+5CAF66F5675B5C9F675467525CA267586744674A67615CB66C7F6C916C9E5E14
+6C6E6C7C6C9F6C755F246C566CA26C795F7D6CA15FE56CAA6CA0601970797077
+707E600A7075707B7264601E72BB72BC72C772B972BE72B66011600C7398601C
+6214623D62AD7593768062BE768376C076C162AE62B377F477F562A97ACC0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+27
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007ACD7CFA809F80918097809466048286828C65FB8295660B866C66058FB5
+8FBE8FC766F68FC190A990A4678E6792677690A896279626962B963396349629
+4E3D679F4E9D4F934F8A677D67814F6D4F8E4FA04FA24FA14F9F4FA36C1D4F72
+6CEC4F8C51566CD96CB651906CAD6CE76CB751ED51FE522F6CC3523C52345239
+52B952B552BF53556C9D5376537A53936D3053C153C253D554856CCF545F5493
+548954799EFE548F5469546D70915494546A548A708356FD56FB56F872D80000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+28
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000056FC56F6576557815763576772D1576E5778577F73A673A258F3594B594C
+74DD74E8753F59AD753E59C4759859C259B076F176F076F577F859BF77F959C9
+59B859AC7942793F79C559B759D77AFB5B607CFD5B965B9E5B945B9F5B9D80B5
+5C005C1982A082C05C495C4A82985CBB5CC182A782AE82BC5CB95C9E5CB45CBA
+5DF65E135E125E7782C35E9882A25E995E9D5EF8866E5EF98FD25F065F218FCD
+5F255F558FD790B290B45F845F8360306007963D6036963A96434FCD5FE90000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+29
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000603D60084FC94FCB62BA62B24FDC62B762E462A74FDB4FC74FD662D562E1
+62DD62A662C162C562C062DF62E062DE53976589539965A665BA54A165FF54A5
+66176618660165FE54AE670C54B6676B67966782678A54BC67A354BE67A2678F
+54B067F967806B266B276B686B69579D6B816BB46BD1578F57996C1C579A5795
+58F4590D59536C976C6C6CDF5A006CEA59DD6CE46CD86CB26CCE6CC859F2708B
+70887090708F59F570877089708D70815BA8708C5CD05CD872405CD75CCB0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+2A
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007265726672685CC95CC772CD72D372DB5CD472CF73A773A3739E5CDF73AF
+5DF95E2173AA739C5E2075427544753B75415E9B759B759E5F0779C479C379C6
+6037603979C7607279CA604560537ACF7C767C747CFF7CFC6042605F7F5980A8
+6058606680B0624280B362CF80A480B680A780AC630380A65367820E82C4833E
+829C63006313631462FA631582AA62F082C9654365AA82A682B2662166326635
+8FCC8FD98FCA8FD88FCF90B7661D90AD90B99637670F9641963E96B697510000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+2B
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000097634E574E794EB24EB04EAF4EB14FD24FD567E44FBE4FB84FB04FB14FC8
+67F667EE4FC64FCC4FE54FE34FB4516A67B2519F67C651C167CC51C251C35245
+524867C967CA524F67EA67CB52C552CA52C453275358537D6BE053DD53DC53DA
+53D954B96D1F54D054B454CA6D0A54A354DA54A46D1954B2549E549F54B56D1D
+6D4254CD6D1854CC6D03570057AC5791578E578D579257A1579057A657A8709F
+579C579657A770A170B470B570A958F572495909590872705952726E72CA0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+2C
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000059DF72E859EB59EF59F059D55A0D5A0459F95A0259F859E259D959E75B6A
+73B473EB5BAB73C75C1B5C2F73C6663C73CB74EC74EE5CD15CDC5CE65CE15CCD
+76795CE25CDD5CE55DFB5DFA5E1E76F75EA176FA77E75EFC5EFB5F2F78127805
+5F66780F780E7809605C7813604E6051794B794560236031607C605279D66060
+604A60617AD162187B017C7A7C787C797C7F7C807C81631F631762EA63216304
+63057FBE6531654465408014654265BE80C76629661B80C86623662C661A0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+2D
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006630663B661E6637663880C9670E80D780E667E867D6822167C767BC6852
+67BF67D567FE836367FB833A67B168016805680067D782F26B2A6B6B82FB82F6
+82F082EA6BE182E082FA6D236CFF6D146D056D136D066D21884E6D156CAF6CF4
+6D026D458A076D268FE36D448FEE6D2470A590BD70A390D570A270BB70A070AA
+90C891D470A870B670B270A79653964A70B9722E5005723C5013726D5030501B
+72E772ED503372EC72E572E24FF773C473BD73CF73C973C173D0503173CE0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+2E
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000074ED74EB519374EF754975507546754A5261754D75A6525E525F525575A8
+52CD530E76C776FF54E276FD77E6780A54F37804780B78075504781578085511
+79D379D479D079D77A7C54F854E07A7D7A837A8257017AD47AD57AD37AD07AD2
+7AFE7AFC7C777C7C7C7B57B657BF57C757D057B957C1590E594A7F8F80D35A2D
+80CB80D25A0F810980E280DF80C65B6C822482F782D882DD5C565C5482F882FC
+5CEE5CF182E95D0082EE5E2982D0830E82E2830B82FD517986765F6786780000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+2F
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000605A60678675867D6088884288666081898C8A0560958A0660978C9F609C
+8FF18FE78FE98FEF90C290BC632C90C690C06336634390CD90C9634B90C4633C
+958163419CEC50324FF9501D4FFF50044FF05003635150024FFC4FF250245008
+5036502E65C35010503850394FFD50564FFB51A351A651A1681A684951C751C9
+5260526452595265526752575263682B5253682F52CF684452CE52D052D152CC
+68266828682E550D54F46825551354EF54F554F9550255006B6D808255180000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+30
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000054F054F66BE86BE355196BE7570557C96D6357B757CD6D0D6D616D9257BE
+57BB6D6D57DB57C857C457C557D157CA57C06D676D605A215A2A6D7C5A1D6D82
+5A0B6D2F6D686D8B6D7E5A226D846D165A246D7B5A145A316D905A2F5A1A5A12
+70DD70CB5A2670E270D75BBC5BBB5BB75C055C065C525C5370C770DA5CFA5CEB
+72425CF35CF55CE95CEF72FA5E2A5E305E2E5E2C5E2F5EAF5EA973D95EFD5F32
+5F8E5F935F8F604F609973D2607E73D46074604B6073607573E874DE60560000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+31
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000060A9608B60A6755B609360AE609E60A7624575C075BF632E75BA63526330
+635B771B6319631B77126331635D6337633563537722635C633F654B78227835
+658B7828659A66506646664E6640782A664B6648795B66606644664D79526837
+682479EC79E0681B683679EA682C681968566847683E681E7A8B681568226827
+685968586855683068236B2E6B2B6B306B6C7B096B8B7C846BE96BEA6BE56D6B
+7C8D7C856D736D577D117D0E6D5D6D566D8F6D5B6D1C6D9A6D9B6D997F610000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+32
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006D816D717F5D7F5B6D726D5C6D9670C470DB70CC70D070E370DF80F270D6
+70EE70D580FB81008201822F727A833372F573028319835173E273EC73D573F9
+73DF73E683228342834E831B73E473E174F3834D831683248320755675557558
+7557755E75C38353831E75B4834B75B18348865376CB76CC772A86967716770F
+869E8687773F772B770E772486857721771877DD86A7869578247836869D7958
+79598843796279DA79D9887679E179E579E879DB886F79E279F08874887C0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+33
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00008A128C477ADA7ADD8CA47ADB7ADC8D788DB57B0D7B0B7B147C8E7C868FF5
+7C877C837C8B90048FFC8FF690D67D2490D990DA90E37D257F627F937F997F97
+90DC90E47FC47FC6800A91D591E28040803C803B80F680FF80EE810481038107
+506A506180F750605053822D505D82278229831F8357505B504A506250158321
+505F506983188358506450465040506E50738684869F869B868986A68692868F
+86A0884F8878887A886E887B88848873555055348A0D8A0B8A19553655350000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+34
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000553055525545550C8FF990099008553990DE9151553B554091DB91DF91DE
+91D691E095859660965957F4965657ED57FD96BD57F8580B5042505958075044
+50665052505450715050507B507C505857E758015079506C507851A851D151CF
+5268527652D45A5553A053C45A385558554C55685A5F55495A6C5A53555D5529
+5A43555455535A44555A5A48553A553F552B57EA5A4C57EF5A695A4757DD57FE
+5A4257DE57E65B6E57E857FF580358F768A6591F5D1A595B595D595E5D0D0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+35
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005D265A2B5D0F5A3B5D125D235A615A3A5A6E5A4B5A6B5EB45EB95A455A4E
+5A685A3D5A715A3F5A6F5A7560905A735A2C5A595A545A4F5A6360CF60E45BC8
+60DD5BC360B15C5B5C6160CA5D215D0A5D0960C05D2C5D08638A63825D2A5D15
+639E5D105D1363975D2F5D18636F5DE35E395E355E3A5E32639C636D63AE637C
+5EBB5EBA5F345F39638563816391638D6098655360D066656661665B60D760AA
+666260A160A4688760EE689C60E7686E68AE60DE6956686F637E638B68A90000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+36
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000687563796386639368776373636A686B636C68AA637F687163B263BA6896
+688B6366637468A4655A687B654E654D658D658E65AD6B3365C765CA6B9165C9
+6B8D65E366576C2A66636667671A671967166DAC6DE9689E68B6689868736E00
+689A688E68B768DB68A5686C68C168846DDB6DF46895687A68996DF068B868B9
+68706DCF6B356DD06B906BBB6BED6DD76DCD6DE36DC16DC36DCE70F771176DAD
+6E0470F06DB970F36DE770FC6E086E0671136E0A6DB070F66DF86E0C710E0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+37
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006DB1727B6E026E076E096E016E176DFF6E12730A730871037107710170F5
+70F1710870F2710F740170FE7407740073FA731A7310730E740273F374087564
+73FB75CE75D275CF751B752375617568768F756775D37739772F769077317732
+76D576D776D67730773B7726784877407849771E784A784C782678477850784B
+7851784F78427846796B796E796C79F279F879F179F579F379F97A907B357B3B
+7A9A7A937A917AE17B247B337B217B1C7B167B177B367B1F7B2F7C937C990000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+38
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007C9A7C9C7C947D497C967D347D377D3D7D2D7D367D4C7D457D2C7D487D41
+7D477F3B7D3F7D4A7D3B7D288008801A7F9C801D7F9B8049804580447C9B7FD1
+7FC7812A812E801F801E81318047811A8134811781258119811B831D83718384
+8380837283A18127837983918211839F83AD823A8234832382748385839C83B7
+8658865A8373865786B2838F86AE8395839983758845889C889488A3888F88A5
+88A988A6888A88A0889089928991899483B08A268A328A2883AE83768A1C0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+39
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000086568A2B8A2086C28A2986C586BA86B08A218C3A86B38C5B8C588C7C86BB
+8CA68CAE8CAD8D6588528D7E88958D7C8D7F8D7A8DBD889188A18DC08DBB8EAD
+8EAF8ED6889788A488AC888C88938ED9898289D69012900E90258A27901390EE
+8C3990AB90F78C5D9159915491F291F091E591F68DC28DB995878DC1965A8EDE
+8EDD966E8ED78EE08EE19679900B98E198E6900C9EC49ED24E8090F04E81508F
+50975088508990EC90E950815160915A91535E4251D391F491F151D251D60000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+3A
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000527391F9527091EB91F791E853A853A653C5559755DE966D966B559655B4
+96BF55859804559B55A0509B555950945586508B50A355AF557A508E509D5068
+559E509255A9570F570E581A5312581F53A4583C5818583E582655AD583A5645
+5822559358FB5963596455815AA85AA35A825A885AA15A855A9855955A99558E
+5A895A815A965A80581E58275A91582857F5584858255ACF581B5833583F5836
+582E58395A875AA0582C5A7959615A865AAB5AAA5AA45A8D5A7E5A785BD50000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+3B
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005A7C5AA55AAC5C1E5C5F5C5E5D445D3E5A975D485D1C5AA95D5B5D4D5A8C
+5A9C5D575A935D535D4F5BCD5D3B5D465BD15BCA5E465E475C305E485EC05EBD
+5EBF5D4B5F115D355F3E5F3B5D555F3A5D3A5D525D3D5FA75D5960EA5D396107
+6122610C5D325D3660B360D660D25E4160E360E560E95FAB60C9611160FD60E2
+60CE611E61206121621E611663E263DE63E660F860FC60FE60C163F8611863FE
+63C163BF63F763D1655F6560656163B063CE65D163E863EF667D666B667F0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+3C
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000063CA63E066736681666D6669646163DF671E68ED63DC63C463D863D36903
+63C768FE68E5691E690263D763D9690968CA690065646901691868E268CF659D
+692E68C568FF65D2691C68C3667B6B6F66716B6E666A6BBE67016BF46C2D6904
+6DB66E756E1E68EA6E18690F6E4868F76E4F68E46E426E6A6E706DFE68E16907
+6E6D69086E7B6E7E6E5968EF6E5769146E806E5068FD6E296E766E2A6E4C712A
+68CE7135712C7137711D68F468D1713868D47134712B7133712771246B3B0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+3D
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000712D7232728372827287730673247338732A732C732B6DFC732F73287417
+6E496E88741974386E45741F7414743C73F7741C74157418743974F975246E51
+6E3B6E03756E756D7571758E6E6175E56E286E606E716E6B769476B36E3076D9
+6E657748774977436E776E55774277DF6E66786378766E5A785F786679667971
+712E713179767984797579FF7A0771287A0E7A09724B725A7288728972867285
+7AE77AE27B55733073227B437B577B6C7B427B5373267B417335730C7CA70000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+3E
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007CA07CA67CA47D74741A7D59742D7D607D577D6C7D7E7D6474207D5A7D5D
+752F756F756C7D767D4D7D7575E67FD37FD675E475D78060804E8145813B7747
+814881428149814081148141774C81EF81F68203786483ED785C83DA841883D2
+8408787084007868785E786284178346841483D38405841F8402841683CD83E6
+7AE6865D86D586E17B447B487B4C7B4E86EE884788467CA27C9E88BB7CA188BF
+88B47D6388B57D56899A8A437D4F7D6D8A5A7D6B7D527D548A358A388A420000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+3F
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00008A498A5D8A4B8A3D7F667FA27FA07FA18C608C5E8C7F8C7E8C8380D48CB1
+8D878152814F8D888D83814D813A8D868D8B8D828DCA8DD28204823C8DD48DC9
+8EB0833B83CF83F98EF28EE48EF38EEA83E78EFD83FC8F9D902B902A83C89028
+9029902C840183DD903A90309037903B83CB910A83D683F583C991FE922083DE
+920B84069218922283D5921B920883D1920E9213839A83C3959583EE83C483FB
+968C967B967F968183FE968286E286E686D386E386DA96EE96ED86EB96EC0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+40
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000975F976F86D7976D86D188488856885588BA88D798F088B888C088BE9AA9
+88BC88B79AE04EB7890188C950CC50BC899750AA50B989DB50AB50C350CD517E
+527E52798A588A4452E152E052E7538053AB53AA53A953E055EA8C8055D78CBE
+8CB055C157158D84586C8D89585C58505861586A5869585658605866585F5923
+596659688EEF8EF75ACE8EF95AC55AC38EE58EF55AD08EE88EF68EEB8EF18EEC
+8EF45B745B765BDC5BD75BDA5BDB91045C205D6D5D6690F95D645D6E91000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+41
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005D605F425F5A5F6E9164915F6130613A612A614361196131921A613D920F
+920C92006408643264389206643192276419921C6411921992176429641D957B
+958D958C643C96876446644796899683643A640796C8656B96F16570656D9770
+65E4669398A998EB9CE69EF9668F4E844EB6669250BF668E50AE694650CA50B4
+50C850C250B050C150BA693150CB50C9693E50B8697C694352786973527C6955
+55DB55CC6985694D69506947696769366964696155BF697D6B446B406B710000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+42
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006B736B9C55C855F255CD6BC155C26BFA6C316C325864584F6EB86EA8586F
+6E916EBB585D6E9A5865585B6EA9586358716EB56E6C6EE85ACB6EDD6EDA6EE6
+6EAC5AB05ABF5AC86ED96EE36EE96EDB5ACA716F5AB65ACD71485A90714A716B
+5BD9714F715771745D635D4A5D6571457151716D5D6872517250724E5E4F7341
+5E4A732E73465EC574275EC674487453743D5FAF745D74566149741E74477443
+74587449612E744C7445743E61297501751E91686223757A75EE760276970000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+43
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007698641064126409775D77647753775878827890788A6439787A787D6423
+788B787864306428788D788878927881797E798364256427640B7980641B642E
+64217A0F656F65927A1D66867AA17AA466907AE97AEA66997B627B6B67207B5E
+695F7B79694E69627B6F7B686945696A7CAE6942695769597CB069487D906935
+7D8A69337D8B7D997D9569787D877D787D977D897D986976695869417FA3694C
+693B694B7FDD8057694F8163816A816C692F697B693C815D81756B43815F0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+44
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006B48817D816D6BFB6BFC8241844F84846E9B847F6EC88448842A847B8472
+8464842E845C84536EC6844184C86EC184628480843E848384716EA6844A8455
+84586EC36EDC6ED886FC86FD87156E8D871686FF6EBF6EB36ED0885888CF88E0
+6EA371477154715289E78A6A8A80715D8A6F8A6571788A788A7D8A8871587143
+8A648A7E715F8A678C638C88714D8CCD724F8CC9728C8DED7290728E733C7342
+733B733A73408EB1734974448F048F9E8FA090439046904890459040904C0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+45
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000074427446910C9113911574FF916B9167925D9255923569839259922F923C
+928F925C926A9262925F926B926E923B92449241959A7699959976DD7755775F
+968F77529696775A7769776796F496FC776D9755788797797894788F788497EE
+97F57886980B788398F37899788098F798FF98F5798298EC98F17A117A18999A
+7A129AE29B3D9B5D9CE87A1B9CEB9CEF9CEE9E819F1450D050D950DC50D87B69
+50E150EB7B737B7150F450E250DE7B767B637CB251F47CAF7D887D8652ED0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+46
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000052EA7D7F53327D7A53AE53B07D8355FB5603560B7D8456077D9255F87F6B
+5628561E7F6C5618561156515605571758928164588C817758785884587358AD
+58975895587758725896588D59108161596C82495AE782405AE4824584F15AEF
+5626847684795AF05D7B84655D83844084865D8B5D8C844D5D785E5284598474
+5ED05ECF85075FB35FB4843A8434847A617B8478616F6181613C614261386133
+844261606169617D6186622C62288452644C84C56457647C8447843664550000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+47
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000064626471646A6456643B6481846E644F647E646486F7870C86FA86D686F5
+657186F8870E66A5669A669C870D66A688D666A4698F69C569C8699269B288CC
+88D0898569E369C069D669D1699F69A269D289DC89E68A7669E169D5699D8A3F
+8A7769988A846B746BA18A816EF06EF38C3C8C4B6F1B6F0C6F1D6F346F286F17
+8C856F446F426F046F116EFA6F4A7191718E8D93718B718D717F718C717E717C
+71838DEE71888DE98DE372948DE773557353734F7354746C7465746674610000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+48
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000746B746874768F0B7460903F74747506760E91107607910F911176B99114
+76B776E2916E7774777777767775923A777877719265777A715B777B78A678AE
+78B8926C924F926078B178AF923679897987923192547A2992507A2A924E7A2D
+7A2C92567A32959F7AEC7AF07B817B9E7B8396917B9296CE7BA37B9F7B9396F5
+7B867CB87CB79772980F980D980E98AC7DC87DB699AF7DD199B07DA87DAB9AAB
+7DB37DCD9CED7DCF7DA49EFD50E67F417F6F7F7150F350DB50EA50DD50E40000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+49
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000050D38023805B50EF8061805F818152805281818482135330824A824C5615
+560C561284BD8495561C849284C35602849684A584B584B384A384E484D884D5
+589884B784AD84DA84938736587A58875891873D872B87478739587B8745871D
+58FE88FF88EA5AEE88F55AD5890088ED890388E95AF35AE289EA5ADB8A9B8A8E
+8AA25AD98A9C8A948A908AA98AAC5C638A9F5D805D7D8A9D5D7A8C675D775D8A
+8CD08CD68CD48D988D9A8D975D7F5E585E598E0B8E088E018EB48EB35EDC0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+4A
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00008FA18FA25ED2905A5F449061905F5FB6612C9125917B9176917C61739289
+92F692B192AD929292819284617A92AE9290929E616A6161615695A295A7622B
+642B644D645B645D96A0969D969F96D0647D96D1646664A6975964829764645C
+644B64539819645098149815981A646B645964656477990665A098F89901669F
+99BE99BC99B799B699C069C999B869CE699669B099C469BC99BF69999ADA9AE4
+9AE99AE89AEA9AE569BF9B2669BD69A49B4069B969CA699A69CF69B369930000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+4B
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000069AA9EBD699E69D969976990510E69B550F769C650FC510D510151DA51D9
+51DB5286528E52EE533353B16EF15647562D56546F37564B5652563156445656
+5650562B6F18564D5637564F58A258B76F7358B26EEE58AA58B558B06F3C58B4
+58A458A76F0E59265AFE6EFD5B046F395AFC6EFC5B065B0A5AFA5B0D5B005B0E
+7187719071895D9171855D8F5D905D985DA45D9B5DA35D965DE45E5A72957293
+5E5E734D5FB86157615C61A661956188747261A3618F75006164750361590000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+4C
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006178761661856187619E7611760A6198619C7781777C622F6480649B648E
+648D649464C678B264A8648378AD64B9648664B464AF649178A064AA64A164A7
+66B666B3798B66BC66AC799466AD6A0E79886A1C6A1A7A2B7A4A6A0B7A2F69EF
+6A0C69F06A227AAC69D87B886A1269FA7B916A2A7B966A107B8C7B9B6A2969F9
+69EA6A2C6A247BA469E96B526B4F6B537CBA7DA76F106F656F757DAA7DC17DC0
+7DC56FD07DCE6F5C6F3D6F717DCC6F916F0B6F796F816F8F7DA66F596F740000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+4D
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007DA171AE7F7371A371AD7FE57FDE71AB71A671A2818952F2725772557299
+734B747A8215849784A4748C748484BA84CE74827493747B84AB750984B484C1
+84CD84AA849A84B1778A849D779084BB78C678D378C078D278C778C284AF799F
+799D799E84B67A4184A07A387A3A7A4284DB84B07A3E7AB07BAE7BB38728876B
+7BBF872E871E7BCD87197BB28743872C8741873E8746872087327CC47CCD7CC2
+7CC67CC37CC97CC787427DF887277DED7DE2871A873087117DDC7E027E010000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+4E
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000088F27DD688FE7DE47DFE88F67E007DFC7DFD88EB7DF57DFF899F7DEB7DE5
+7F787FAE7FE78A998065806A80668068806B819481A18192819681938D968E09
+85018DFF84F88DFD84F58E0385048E068E058DFE8E00851B85038533853484ED
+9123911C853591228505911D911A91249121877D917A91729179877192A5885C
+88E6890F891B92A089A989A589EE8AB1929A8ACC8ACE92978AB792A38AB58AE9
+8AB492958AB38AC18AAF8ACA8AD09286928C92998C8E927E92878CE98CDB0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+4F
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000928B8CEB8DA496A18DA28D9D977D977A977E97838E2A8E28977B97848EB8
+8EB68EB98EB78F228F2B8F278F198FA499078FB3999C9071906A99BB99BA9188
+918C92BF92B892BE92DC92E59B3F9B6092D492D69CF192DA92ED92F392DB5103
+92B992E292EB95AF50F695B295B3510C50FD510A96A396A552F152EF56485642
+970A563597879789978C97EF982A98225640981F563D9919563E99CA99DA563A
+571A58AB99DE99C899E058A39AB69AB558A59AF458FF9B6B9B699B729B630000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+50
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005AF69D0D5AF89D019D0C5B019CF85B055B0F9CFE9D029E845D9F9EAB9EAA
+511D51165DA0512B511E511B5290529453145E605E5C56675EDB567B5EE1565F
+5661618B6183617961B161B061A2618958C358CA58BB58C058C459015B1F5B18
+5B115B1561B35B125B1C64705B225B795DA664975DB35DAB5EEA648A5F5B64A3
+649F61B761CE61B961BD61CF61C06199619765B361BB61D061C4623166B764D3
+64C06A006A066A1769E564DC64D164C869E464D566C369EC69E266BF66C50000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+51
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000069FE66CD66C167066A1467246A636A426A5269E66A436A3369FC6A6C6A57
+6A046A4C6A6E6A0F69F66A266A0769F46A376B516A716A4A6A366BA66A536C00
+6A456A706F416F266A5C6B586B576F926F8D6F896F8C6F626F4F6FBB6F5A6F96
+6FBE6F6C6F826F556FB56FD36F9F6F576FB76FF571B76F0071BB6F6B71D16F67
+71BA6F5371B671CC6F7F6F9571D3749B6F6A6F7B749674A2749D750A750E719A
+7581762C76377636763B71A476A171AA719C779871B37796729A735873520000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+52
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000078D678EB736078DC735B79A579A998347A537A4574897A4F74867ABD7ABB
+7AF17488747C7BEC7BED7507757E7CD3761E7CE1761D7E197623761A76287E27
+7E26769D769E806E81AF778F778981AD78CD81AA821878CC78D178CE78D4856F
+854C78C48542799A855C8570855F79A2855A854B853F878A7AB4878B87A1878E
+7BBE7BAC8799885E885F892489A78AEA8AFD8AF98AE38AE57DDB7DEA8AEC7DD7
+7DE17E037DFA8CF27DF68CEF7DF08DA67DDF7F767FAC8E3B8E437FED8E320000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+53
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00008F318F307FE68F2D8F3C8FA78FA5819F819E819591379195918E82169196
+82539345930A824E825192FD9317931C930793319332932C9330930393058527
+95C284FB95B884FA95C1850C84F4852A96AB96B784F784EB97159714851284EA
+970C971784FE9793851D97D2850284FD983698319833983C982E983A84F0983D
+84F998B5992299239920991C991D866299A0876399EF99E899EB877387588754
+99E199E68761875A9AF89AF5876D876A9B839B949B84875D9B8B9B8F877A0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+54
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00009B8C875C9B89874F9B8E8775876287679D249D0F89059D139D0A890B8917
+891889199D2A9D1A89119D279D169D2189A49E859EAC9EC69EC59ED79F538AB8
+5128512751DF8AD5533553B38ABE568A567D56898AC358CD58D08AD95B2B5B33
+5B295B355B315B375C365DBE8CDD5DB98DA05DBB8DA161E261DB61DD61DC61DA
+8E2E61D98E1B8E1664DF8E198E2664E18E1464EE8E1865B566D466D58E1A66D0
+66D166CE66D78F208F236A7D6A8A90736AA7906F6A996A826A88912B91290000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+55
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006A8691326A986A9D918591866A8F91816AAA91846B5D92D06C0A92C46FD7
+6FD66FE592CF92F192DF6FD96FDA6FEA92DD6FF692EF92C271E392CA71E992CE
+71EB71EF71F371EA92E092DE92E792D192D3737192E174AE92C674B3957C74AC
+95AB95AE75837645764E764476A376A577A677A4978A77A977AF97D097CF981E
+78F078F878F198287A49981B982798B27AC27AF27AF37BFA99167BF67BFC7C18
+7C087C1299D399D47CDB7CDA99D699D899CB7E2C7E4D9AB39AEC7F467FF60000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+56
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000802B807481B881C89B679B749B71859285939B75857F85AB85979B6C9CFC
+85AC9CFD9CFF9CF787CE9D0087CD9CFB9D0887C187B187C79ED389409F10893F
+893951178943511151DE533489AB56708B1F8B098B0C566656638C4056728C96
+56778CF68CF758C88E468E4F58BF58BA58C28F3D8F4193669378935D93699374
+937D936E93729373936293489353935F93685DB1937F936B5DB595C45DAE96AF
+96AD96B25DAD5DAF971A971B5E685E665E6F5EE9979B979F5EE85EE55F4B0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+57
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005FBC5FBB619D61A86196984061B4984761C198B761BA61BF61B8618C64D7
+99A264D064CF9A0099F3648964C399F564F364D99ABD9B009B0265A29B349B49
+9B9F66CA9BA39BCD9B999B9D66BA66CC9D396A349D446A496A679D356A686A3E
+9EAF6A6D512F6A5B6A519F8E6A5A569F569B569E5696569456A06A4F5B3B6A6F
+6A695B3A5DC15F4D5F5D61F36A4D6A4E6A466B5564F664E564EA64E765056BC8
+64F96C046C036C066AAB6AED6AB26AB06AB56ABE6AC16AC86FC46AC06ABC0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+58
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006AB16AC46ABF6FA56FAE700870036FFD7010700270136FA271FA720074B9
+74BC6FB2765B7651764F76EB77B871D677B977C177C077BE790B71C77907790A
+790871BC790D7906791579AF729E736973667AF5736C73657C2E736A7C1B749A
+7C1A7C24749274957CE67CE37580762F7E5D7E4F7E667E5B7F477FB476327630
+76BB7FFA802E779D77A181CE779B77A282197795779985CC85B278E985BB85C1
+78DE78E378DB87E987EE87F087D6880E87DA8948894A894E894D89B189B00000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+59
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000089B37AB78B388B327BE78B2D7BD58B347BDA8B298C747BD47BEA8D037BDC
+7BEB8DA98E587CD27CD48EBF8EC18F4A8FAC7E219089913D913C91A993A07E0E
+93907E159393938B93AD93BB93B87E0D7E14939C95D895D77F7B7F7C7F7A975D
+97A997DA8029806C81B181A6985481B99855984B81B0983F98B981B281B781A7
+81F29938993699408556993B993999A4855385619A089A0C85469A1085419B07
+85449BD285479BC29BBB9BCC9BCB854E856E9D4D9D639D4E85609D509D550000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+5A
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000855D9D5E85659E909EB29EB186649ECA9F029F279F26879356AF58E058DC
+87965B39877987875B7C5BF3879087915C6B5DC4650B6508650A8789891E65DC
+8930892D66E166DF6ACE6AD46AE36AD76AE2892C891F89F18AE06AD86AD56AD2
+8AF58ADD701E702C70256FF37204720872158AE874C474C974C774C876A977C6
+77C57918791A79208CF37A667A647A6A8DA78E338E3E8E388E408E457C357C34
+8E3D8E417E6C8E3F7E6E7E718F2E81D481D6821A82628265827685DB85D60000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+5B
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000908685E79133913585F4919387FD87D58807918F880F87F89308931F8987
+930F89B589F5933C8B3F8B438B4C93018D0B8E6B8E688E708E758E7792FA8EC3
+92F993E993EA93CB93C593C6932993ED93D3932A93E5930C930B93DB93EB93E0
+93C1931695BC95DD95BE95B995BA95B695BF95B595BD96A996D497B297B497B1
+97B597F2979497F097F89856982F98329924994499279A269A1F9A189A219A17
+99E49B0999E399EA9BC59BDF9AB99BE39AB49BE99BEE9AFA9AF99D669D7A0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+5C
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00009B809D6E9D919D839D769D7E9D6D9B939E959EE39B7A9B959F039F049D25
+9F179D2051369D1453369D1D5B429D229D105B445B465B7E5DCA5DC85DCC5EF0
+9ED5658566E566E79F3D512651256AF451246AE9512952F45693568C568D703D
+56847036567E7216567F7212720F72177211720B5B2D5B2574CD74D074CC74CE
+74D15B2F75895B7B7A6F7C4B7C445E6C5E6A5FBE61C361B57E7F8B7161E0802F
+807A807B807C64EF64E964E385FC861086026581658085EE860366D2860D0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+5D
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000086138608860F881888126A9B6AA18967896589BB8B698B626A838B6E6AA4
+8B616A7F8B648B4D8C516A8C6A928E838EC66C09941F6FA99404941794089405
+6FED93F3941E9402941A941B9427941C71E196B571E871F2973371F097349731
+97B897BA749797FC74AB749098C374AD994D74A59A2F7510751175129AC97584
+9AC89AC49B2A9B389B5076E99C0A9BFB9C049BFC9BFE77B477B177A89C029BF6
+9C1B9BF99C159C109BFF9C009C0C78F978FE9D959DA579A87A5C7A5B7A560000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+5E
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00009E989EC17A5A9F5A516456BB7C0558E65B495BF77BFF7BFB5DD07BF45FC2
+7BF365117C096AFF6AFE6AFD7BFD6B017BF07BF1704B704D704774D376687667
+7E33984877D179307932792E7E479F9D7AC97AC87E3B7C567C517E3A7F457F7F
+7E857E897E8E7E84802C826A862B862F862881C586168615861D881A825A825C
+858389BC8B758B7C85958D118D128F5C91BB85A493F4859E8577942D858985A1
+96E497379736976797BE97BD97E29868986698C898CA98C798DC8585994F0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+5F
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000099A99A3C85909A3B9ACE87BE9B149B5387C59C2E87AC9C1F87B587BC87AE
+87C99DB09DBD87CC87B79DAE9DC49E7B87B487B69E9E87B89F0587DE9F699FA1
+56C7571D5B4A5DD389525F72620289AD62356527651E651F8B1E8B186B076B06
+8B058B0B7054721C72207AF88B077C5D7C588B067E927F4E8B1A8C4F8C708827
+8C718B818B838C948C448D6F8E4E8E4D8E539442944D9454944E8F409443907E
+9138973C974097C09199919F91A1919D995A9A5193839ADD936493569C380000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+60
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000937C9C459C3A93769C359350935193609EF1938F9F93529A937993578641
+5DD7934F65289377937B936170537059936772219359766F793779B57C627C5E
+7CF596AE96B0863D9720882D89898B8D8B878B908D1A8E99979E979D97D5945F
+97F1984194569461945B945A945C9465992B9741992A9933986E986C986D9931
+99AA9A5C9A589ADE9A029C4F9C5199F79C5399F899F699FB9DFC9F3999FC513E
+9ABE56D29AFD5B4F6B149B487A727A739B9E9B9B9BA68B919BA59BA491BF0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+61
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00009BA2946C9BAF9D3396E697459D3697C897E4995D9D389B219D459B2C9B57
+9D3E9D379C5D9C619C659E089E8A9E899E8D9EB09EC89F459EFB9EFF620566EF
+6B1B6B1D722572247C6D512E8642864956978978898A8B9759708C9B8D1C5C6A
+8EA25E6D5E6E61D861DF61ED61EE61F161EA9C6C61EB9C6F61E99E0E65049F08
+9F1D9FA3650364FC5F606B1C66DA66DB66D87CF36AB98B9B8EA791C46ABA947A
+6AB76AC79A619A639AD79C766C0B9FA5700C7067700172AB864A897D8B9D0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+62
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00008C538F65947B6FFC98CD98DD72019B309E16720371FD737674B874C096E7
+9E189EA274B69F7C74C27E9E9484765C9E1C76597C7197CA7657765A76A69EA3
+76EC9C7B9F97790C7913975079097910791257275C1379AC7A5F7C1C7C297C19
+7C205FC87C2D7C1D7C267C287C2267657C307E5C52BD7E565B667E5865F96788
+6CE66CCB7E574FBD5F8D7FB36018604880756B2970A681D07706825E85B485C6
+5A105CFC5CFE85B385B585BD85C785C485BF70C985CE85C885C585B185B60000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+63
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000085D28624957985B796BA866987E787E687E287DB87EB87EA7B29812887F3
+8A2E87D487DC87D39AD987D8582B584587D963FA87F487E887DD6E86894B894F
+894C89468950586789495BDD656E8B238B338B308C878B4750D250DF8B3E8B31
+8B258B3769BA8B366B9D8B2480598B3D8B3A8C428C758C998C988C978CFE8D04
+8D028D008E5C6F8A8E608E577BC37BC28E658E678E5B8E5A90F68E5D98238E54
+8F468F478F488F4B71CD7499913B913E91A891A591A7984291AA93B5938C0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+64
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000093927F84939B939D938993A7938E8D0E939E9861939593888B73939F9C27
+938D945877D69B2D93A493A893B493A395D295D395D196B396D796DA5DC296DF
+96D896DD97239722972597AC97AE97A84F664F684FE7503F97A550A6510F523E
+53245365539B517F54CB55735571556B55F456225620569256BA569156B05759
+578A580F581258135847589B5900594D5AD15AD35B675C575C775CD55D755D8E
+5DA55DB65DBF5E655ECD5EED5F945F9A5FBA6125615062A36360636463B60000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+65
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000640364B6651A7A255C2166E2670267A467AC68106806685E685A692C6929
+6A2D6A776A7A6ACA6AE66AF56B0D6B0E6BDC6BDD6BF66C1E6C636DA56E0F6E8A
+6E846E8B6E7C6F4C6F486F496F9D6F996FF8702E702D705C79CC70BF70EA70E5
+71117112713F7139713B713D71777175717671717196719371B471DD71DE720E
+591172187347734873EF7412743B74A4748D74B47673767776BC7819781B783D
+78537854785878B778D878EE7922794D7986799979A379BC7AA77B377B590000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+66
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007BD07C2F7C327C427C4E7C687CA97CED7DD07E077DD37E647F40791E8041
+806380BB6711672582488310836283128421841E84E284DE84E1857385D485F5
+863786458672874A87A987A587F5883488508887895489848B038C528CD88D0C
+8D188DB08EBC8ED58FAA909C85E8915C922B9221927392F492F5933F93429386
+93BE93BC93BD93F193F293EF94229423942494679466959795CE95E7973B974D
+98E499429B1D9B9889629D4964495E715E8561D3990E8002781E898889B70000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+67
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00005528557255BA55F055EE56B856B956C4805392B08B558B518B428B528B57
+8C438C778C768C9A8D068D078D098DAC8DAA8DAD8DAB8E6D8E788E738E6A8E6F
+8E7B8EC28F528F518F4F8F508F538FB49140913F91B091AD93DE93C793CF93C2
+93DA93D093F993EC93CC93D993A993E693CA93D493EE93E393D593C493CE93C0
+93D293A593E7957D95DA95DB96E19729972B972C9728972697B397B797B697DD
+97DE97DF985C9859985D985798BF98BD98BB98BE99489947994399A699A70000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+68
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00009A1A9A159A259A1D9A249A1B9A229A209A279A239A1E9A1C9A149AC29B0B
+9B0A9B0E9B0C9B379BEA9BEB9BE09BDE9BE49BE69BE29BF09BD49BD79BEC9BDC
+9BD99BE59BD59BE19BDA9D779D819D8A9D849D889D719D809D789D869D8B9D8C
+9D7D9D6B9D749D759D709D699D859D739D7B9D829D6F9D799D7F9D879D689E94
+9E919EC09EFC9F2D9F409F419F4D9F569F579F58533756B256B556B358E35B45
+5DC65DC75EEE5EEF5FC05FC161F9651765166515651365DF66E866E366E40000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+69
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006AF36AF06AEA6AE86AF96AF16AEE6AEF703C7035702F7037703470317042
+7038703F703A7039702A7040703B703370417213721472A8737D737C74BA76AB
+76AA76BE76ED77CC77CE77CF77CD77F279257923792779287924792979B27A6E
+7A6C7A6D7AF77C497C487C4A7C477C457CEE7E7B7E7E7E817E807FBA7FFF8079
+81DB81D982688269862285FF860185FE861B860085F6860486098605860C85FD
+8819881088118817881388168963896689B989F78B608B6A8B5D8B688B630000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+6A
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00008B658B678B6D8DAE8E868E888E848F598F568F578F558F588F5A908D9143
+914191B791B591B291B3940B941393FB9420940F941493FE9415941094289419
+940D93F5940093F79407940E9416941293FA940993F8943C940A93FF93FC940C
+93F69411940695DE95E095DF972E972F97B997BB97FD97FE986098629863985F
+98C198C29950994E9959994C994B99539A329A349A319A2C9A2A9A369A299A2E
+9A389A2D9AC79ACA9AC69B109B129B119C0B9C089BF79C059C129BF89C400000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+6B
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00009C079C0E9C069C179C149C099D9F9D999DA49D9D9D929D989D909D9B9DA0
+9D949D9C9DAA9D979DA19D9A9DA29DA89D9E9DA39DBF9DA99D969DA69DA79E99
+9E9B9E9A9EE59EE49EE79EE69F309F2E9F5B9F609F5E9F5D9F599F91513A5139
+5298529756C356BD56BE5B485B475DCB5DCF5EF161FD651B6B026AFC6B036AF8
+6B0070437044704A7048704970457046721D721A7219737E7517766A77D0792D
+7931792F7C547C537CF27E8A7E877E887E8B7E867E8D7F4D7FBB803081DD0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+6C
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00008618862A8626861F8623861C86198627862E862186208629861E86258829
+881D881B88208824881C882B884A896D8969896E896B89FA8B798B788B458B7A
+8B7B8D108D148DAF8E8E8E8C8F5E8F5B8F5D91469144914591B9943F943B9436
+9429943D94309439942A9437942C9440943195E595E495E39735973A97BF97E1
+986498C998C698C0995899569A399A3D9A469A449A429A419A3A9A3F9ACD9B15
+9B179B189B169B3A9B529C2B9C1D9C1C9C2C9C239C289C299C249C219DB70000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+6D
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00009DB69DBC9DC19DC79DCA9DCF9DBE9DC59DC39DBB9DB59DCE9DB99DBA9DAC
+9DC89DB19DAD9DCC9DB39DCD9DB29E7A9E9C9EEB9EEE9EED9F1B9F189F1A9F31
+9F4E9F659F649F924EB956C656C556CB59715B4B5B4C5DD55DD15EF265216520
+652665226B0B6B086B096C0D7055705670577052721E721F72A9737F74D874D5
+74D974D7766D76AD793579B47A707A717C577C5C7C597C5B7C5A7CF47CF17E91
+7F4F7F8781DE826B863486358633862C86328636882C88288826882A88250000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+6E
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000897189BF89BE89FB8B7E8B848B828B868B858B7F8D158E958E948E9A8E92
+8E908E968E978F608F629147944C9450944A944B944F94479445944894499446
+973F97E3986A986998CB9954995B9A4E9A539A549A4C9A4F9A489A4A9A499A52
+9A509AD09B199B2B9B3B9B569B559C469C489C3F9C449C399C339C419C3C9C37
+9C349C329C3D9C369DDB9DD29DDE9DDA9DCB9DD09DDC9DD19DDF9DE99DD99DD8
+9DD69DF59DD59DDD9EB69EF09F359F339F329F429F6B9F959FA2513D52990000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+6F
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000058E858E759725B4D5DD8882F5F4F62016203620465296525659666EB6B11
+6B126B0F6BCA705B705A7222738273817383767077D47C677C667E95826C863A
+86408639863C8631863B863E88308832882E883389768974897389FE8B8C8B8E
+8B8B8B888C458D198E988F648F6391BC94629455945D9457945E97C497C59800
+9A569A599B1E9B1F9B209C529C589C509C4A9C4D9C4B9C559C599C4C9C4E9DFB
+9DF79DEF9DE39DEB9DF89DE49DF69DE19DEE9DE69DF29DF09DE29DEC9DF40000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+70
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00009DF39DE89DED9EC29ED09EF29EF39F069F1C9F389F379F369F439F4F9F71
+9F709F6E9F6F56D356CD5B4E5C6D652D66ED66EE6B13705F7061705D70607223
+74DB74E577D5793879B779B67C6A7E977F89826D8643883888378835884B8B94
+8B958E9E8E9F8EA08E9D91BE91BD91C2946B9468946996E597469743974797C7
+97E59A5E9AD59B599C639C679C669C629C5E9C609E029DFE9E079E039E069E05
+9E009E019E099DFF9DFD9E049EA09F1E9F469F749F759F7656D4652E65B80000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+71
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006B186B196B176B1A7062722672AA77D877D979397C697C6B7CF67E9A7E98
+7E9B7E9981E081E18646864786488979897A897C897B89FF8B988B998EA58EA4
+8EA3946E946D946F9471947397499872995F9C689C6E9C6D9E0B9E0D9E109E0F
+9E129E119EA19EF59F099F479F789F7B9F7A9F79571E70667C6F883C8DB28EA6
+91C394749478947694759A609B2E9C749C739C719C759E149E139EF69F0A9FA4
+706870657CF7866A883E883D883F8B9E8C9C8EA98EC9974B9873987498CC0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+72
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000996199AB9A649A669A679B249E159E179F4862076B1E7227864C8EA89482
+948094819A699A689E19864B8B9F94839C799EB776759A6B9C7A9E1D7069706A
+72299EA49F7E9F499F988AF68AFC8C6B8C6D8C938CF48E448E318E348E428E39
+8E358F3B8F2F8F388F338FA88FA69075907490789072907C907A913491929320
+933692F89333932F932292FC932B9304931A9310932693219315932E931995BB
+96A796A896AA96D5970E97119716970D9713970F975B975C9766979898300000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+73
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00009838983B9837982D9839982499109928991E991B9921991A99ED99E299F1
+9AB89ABC9AFB9AED9B289B919D159D239D269D289D129D1B9ED89ED49F8D9F9C
+512A511F5121513252F5568E5680569056855687568F58D558D358D158CE5B30
+5B2A5B245B7A5C375C685DBC5DBA5DBD5DB85E6B5F4C5FBD61C961C261C761E6
+61CB6232623464CE64CA64D864E064F064E664EC64F164E264ED6582658366D9
+66D66A806A946A846AA26A9C6ADB6AA36A7E6A976A906AA06B5C6BAE6BDA0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+74
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00006C086FD86FF16FDF6FE06FDB6FE46FEB6FEF6F806FEC6FE16FE96FD56FEE
+6FF071E771DF71EE71E671E571ED71EC71F471E0723572467370737274A974B0
+74A674A876467642764C76EA77B377AA77B077AC77A777AD77EF78F778FA78F4
+78EF790179A779AA7A577ABF7C077C0D7BFE7BF77C0C7BE07CE07CDC7CDE7CE2
+7CDF7CD97CDD7E2E7E3E7E467E377E327E437E2B7E3D7E317E457E417E347E39
+7E487E357E3F7E2F7F447FF37FFC807180728070806F807381C681C381BA0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+75
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000081C281C081BF81BD81C981BE81E88209827185AA8584857E859C85918594
+85AF859B858785A8858A85A6866787C087D187B387D287C687AB87BB87BA87C8
+87CB893B893689448938893D89AC8B0E8B178B198B1B8B0A8B208B1D8B048B10
+8C418C3F8C738CFA8CFD8CFC8CF88CFB8DA88E498E4B8E488E4A8F448F3E8F42
+8F458F3F907F907D9084908190829080913991A3919E919C934D938293289375
+934A9365934B9318937E936C935B9370935A935495CA95CB95CC95C895C60000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+76
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000096B196B896D6971C971E97A097D3984698B699359A0199FF9BAE9BAB9BAA
+9BAD9D3B9D3F9E8B9ECF9EDE9EDC9EDD9EDB9F3E9F4B53E2569556AE58D958D8
+5B385F5E61E3623364F464F264FE650664FA64FB64F765B766DC67266AB36AAC
+6AC36ABB6AB86AC26AAE6AAF6B5F6B786BAF7009700B6FFE70066FFA7011700F
+71FB71FC71FE71F87377737574A774BF751576567658765277BD77BF77BB77BC
+790E79AE7A617A627A607AC47AC57C2B7C277C2A7C1E7C237C217CE77E540000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+77
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007E557E5E7E5A7E617E527E597F487FF97FFB8077807681CD81CF820A85CF
+85A985CD85D085C985B085BA85B987EF87EC87F287E0898689B289F48B288B39
+8B2C8B2B8C508D058E598E638E668E648E5F8E558EC08F498F4D908790839088
+91AB91AC91D09394938A939693A293B393AE93AC93B09398939A939795D495D6
+95D095D596E296DC96D996DB96DE972497A397A697AD97F9984D984F984C984E
+985398BA993E993F993D992E99A59A0E9AC19B039B069B4F9B4E9B4D9BCA0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+78
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00009BC99BFD9BC89BC09D519D5D9D609EE09F159F2C513356A556A858DE58DF
+58E25BF59F905EEC61F261F761F661F56500650F66E066DD6AE56ADD6ADA6AD3
+701B701F7028701A701D701570187206720D725872A27378737A74BD74CA74E3
+75877586765F766177C7791979B17A6B7A697C3E7C3F7C387C3D7C377C407E6B
+7E6D7E797E697E6A7E737F857FB67FB97FB881D885E985DD85EA85D585E485E5
+85F787FB8805880D87F987FE8960895F8956895E8B418B5C8B588B498B5A0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+79
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00008B4E8B4F8B468B598D088D0A8E7C8E728E878E768E6C8E7A8E748F548F4E
+8FAD908A908B91B191AE93E193D193DF93C393C893DC93DD93D693E293CD93D8
+93E493D793E895DC96B496E3972A9727976197DC97FB985E9858985B98BC9945
+99499A169A199B0D9BE89BE79BD69BDB9D899D619D729D6A9D6C9E929E979E93
+9EB452F856B756B656B456BC58E45B405B435B7D5BF65DC961F861FA65186514
+651966E667276AEC703E703070327210737B74CF766276657926792A792C0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+7A
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000792B7AC77AF67C4C7C437C4D7CEF7CF08FAE7E7D7E7C7E827F4C800081DA
+826685FB85F9861185FA8606860B8607860A88148815896489BA89F88B708B6C
+8B668B6F8B5F8B6B8D0F8D0D8E898E818E858E8291B491CB9418940393FD95E1
+973098C49952995199A89A2B9A309A379A359C139C0D9E799EB59EE89F2F9F5F
+9F639F615137513856C156C056C259145C6C5DCD61FC61FE651D651C659566E9
+6AFB6B046AFA6BB2704C721B72A774D674D4766977D37C507E8F7E8C7FBC0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+7B
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00008617862D861A882388228821881F896A896C89BD8B748B778B7D8D138E8A
+8E8D8E8B8F5F8FAF91BA942E94339435943A94389432942B95E2973897399732
+97FF9867986599579A459A439A409A3E9ACF9B549B519C2D9C259DAF9DB49DC2
+9DB89E9D9EEF9F199F5C9F669F67513C513B56C856CA56C95B7F5DD45DD25F4E
+61FF65246B0A6B6170517058738074E4758A766E766C79B37C607C5F807E807D
+81DF8972896F89FC8B808D168D178E918E938F619148944494519452973D0000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+7C
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000973E97C397C1986B99559A559A4D9AD29B1A9C499C319C3E9C3B9DD39DD7
+9F349F6C9F6A9F9456CC5DD662006523652B652A66EC6B1074DA7ACA7C647C63
+7C657E937E967E9481E28638863F88318B8A9090908F9463946094649768986F
+995C9A5A9A5B9A579AD39AD49AD19C549C579C569DE59E9F9EF456D158E9652C
+705E7671767277D77F507F888836883988628B938B928B9682778D1B91C0946A
+97429748974497C698709A5F9B229B589C5F9DF99DFA9E7C9E7D9F079F770000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+7D
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00009F725EF36B1670637C6C7C6E883B89C08EA191C1947294709871995E9AD6
+9B239ECC706477DA8B9A947797C99A629A657E9C8B9C8EAA91C5947D947E947C
+9C779C789EF78C54947F9E1A72289A6A9B319E1B9E1E7C720000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
Property changes on: trunk/Master/tlpkg/tltcl/lib/tcl8.6/encoding/cns11643.enc
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/tlpkg/tltcl/lib/tcl8.6/encoding/iso8859-11.enc
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/encoding/iso8859-11.enc (rev 0)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/encoding/iso8859-11.enc 2022-03-14 10:03:11 UTC (rev 62700)
@@ -0,0 +1,20 @@
+# Encoding file: iso8859-11, single-byte
+S
+003F 0 1
+00
+0000000100020003000400050006000700080009000A000B000C000D000E000F
+0010001100120013001400150016001700180019001A001B001C001D001E001F
+0020002100220023002400250026002700280029002A002B002C002D002E002F
+0030003100320033003400350036003700380039003A003B003C003D003E003F
+0040004100420043004400450046004700480049004A004B004C004D004E004F
+0050005100520053005400550056005700580059005A005B005C005D005E005F
+0060006100620063006400650066006700680069006A006B006C006D006E006F
+0070007100720073007400750076007700780079007A007B007C007D007E007F
+0080008100820083008400850086008700880089008A008B008C008D008E008F
+0090009100920093009400950096009700980099009A009B009C009D009E009F
+00A00E010E020E030E040E050E060E070E080E090E0A0E0B0E0C0E0D0E0E0E0F
+0E100E110E120E130E140E150E160E170E180E190E1A0E1B0E1C0E1D0E1E0E1F
+0E200E210E220E230E240E250E260E270E280E290E2A0E2B0E2C0E2D0E2E0E2F
+0E300E310E320E330E340E350E360E370E380E390E3A00000000000000000E3F
+0E400E410E420E430E440E450E460E470E480E490E4A0E4B0E4C0E4D0E4E0E4F
+0E500E510E520E530E540E550E560E570E580E590E5A0E5B0000000000000000
Property changes on: trunk/Master/tlpkg/tltcl/lib/tcl8.6/encoding/iso8859-11.enc
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/encoding/iso8859-7.enc
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/encoding/iso8859-7.enc 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/encoding/iso8859-7.enc 2022-03-14 10:03:11 UTC (rev 62700)
@@ -12,7 +12,7 @@
0070007100720073007400750076007700780079007A007B007C007D007E007F
0080008100820083008400850086008700880089008A008B008C008D008E008F
0090009100920093009400950096009700980099009A009B009C009D009E009F
-00A02018201900A30000000000A600A700A800A9000000AB00AC00AD00002015
+00A02018201900A320AC20AF00A600A700A800A9037A00AB00AC00AD00002015
00B000B100B200B303840385038600B703880389038A00BB038C00BD038E038F
0390039103920393039403950396039703980399039A039B039C039D039E039F
03A003A1000003A303A403A503A603A703A803A903AA03AB03AC03AD03AE03AF
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/init.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/init.tcl 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/init.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -16,7 +16,7 @@
if {[info commands package] == ""} {
error "version mismatch: library\nscripts expect Tcl version 7.5b1 or later but the loaded version is\nonly [info patchlevel]"
}
-package require -exact Tcl 8.6.11
+package require -exact Tcl 8.6.12
# Compute the auto path to use in this interpreter.
# The values on the path come from several locations:
@@ -494,7 +494,7 @@
continue
} else {
set error [catch {
- fconfigure $f -eofchar \032
+ fconfigure $f -eofchar "\032 {}"
set id [gets $f]
if {$id eq "# Tcl autoload index file, version 2.0"} {
eval [read $f]
@@ -643,7 +643,7 @@
}
set auto_execs($name) ""
- set shellBuiltins [list assoc cls copy date del dir echo erase ftype \
+ set shellBuiltins [list assoc cls copy date del dir echo erase exit ftype \
md mkdir mklink move rd ren rename rmdir start time type ver vol]
if {[info exists env(PATHEXT)]} {
# Add an initial ; to have the {} extension check first.
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/opt0.4/optparse.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/opt0.4/optparse.tcl 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/opt0.4/optparse.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -601,7 +601,7 @@
return [expr {$arg ? 1 : 0}]
}
choice {
- if {[lsearch -exact $typeArgs $arg] < 0} {
+ if {$arg ni $typeArgs} {
error "invalid choice"
}
return $arg
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/safe.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/safe.tcl 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/safe.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -131,7 +131,7 @@
[list -accessPath $state(access_path)] \
[list -statics $state(staticsok)] \
[list -nested $state(nestedok)] \
- [list -deleteHook $state(cleanupHook)]]]
+ [list -deleteHook $state(cleanupHook)]]]
}
2 {
# If we have exactly 2 arguments the semantic is a "configure
@@ -982,7 +982,7 @@
set replacementMsg "script error"
set code [catch {
set f [open $realfile]
- fconfigure $f -eofchar \032
+ fconfigure $f -eofchar "\032 {}"
if {$encoding ne ""} {
fconfigure $f -encoding $encoding
}
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Africa/Accra
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Africa/Accra 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Africa/Accra 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,66 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:Africa/Accra) {
- {-9223372036854775808 -52 0 LMT}
- {-1709337548 0 0 GMT}
- {-1581206400 1200 1 +0020}
- {-1577917200 0 0 GMT}
- {-1556834400 1200 1 +0020}
- {-1546294800 0 0 GMT}
- {-1525298400 1200 1 +0020}
- {-1514758800 0 0 GMT}
- {-1493762400 1200 1 +0020}
- {-1483222800 0 0 GMT}
- {-1462226400 1200 1 +0020}
- {-1451686800 0 0 GMT}
- {-1430604000 1200 1 +0020}
- {-1420064400 0 0 GMT}
- {-1399068000 1200 1 +0020}
- {-1388528400 0 0 GMT}
- {-1367532000 1200 1 +0020}
- {-1356992400 0 0 GMT}
- {-1335996000 1200 1 +0020}
- {-1325456400 0 0 GMT}
- {-1304373600 1200 1 +0020}
- {-1293834000 0 0 GMT}
- {-1272837600 1200 1 +0020}
- {-1262298000 0 0 GMT}
- {-1241301600 1200 1 +0020}
- {-1230762000 0 0 GMT}
- {-1209765600 1200 1 +0020}
- {-1199226000 0 0 GMT}
- {-1178143200 1200 1 +0020}
- {-1167603600 0 0 GMT}
- {-1146607200 1200 1 +0020}
- {-1136067600 0 0 GMT}
- {-1115071200 1200 1 +0020}
- {-1104531600 0 0 GMT}
- {-1083535200 1200 1 +0020}
- {-1072995600 0 0 GMT}
- {-1051912800 1200 1 +0020}
- {-1041373200 0 0 GMT}
- {-1020376800 1200 1 +0020}
- {-1009837200 0 0 GMT}
- {-988840800 1200 1 +0020}
- {-978301200 0 0 GMT}
- {-957304800 1200 1 +0020}
- {-946765200 0 0 GMT}
- {-936309600 1200 1 +0020}
- {-915142800 0 0 GMT}
- {-904773600 1200 1 +0020}
- {-883606800 0 0 GMT}
- {-880329600 1800 0 +0030}
- {-756952200 0 0 GMT}
- {-610149600 1800 1 +0030}
- {-599610600 0 0 GMT}
- {-578613600 1800 1 +0030}
- {-568074600 0 0 GMT}
- {-546991200 1800 1 +0030}
- {-536452200 0 0 GMT}
- {-515455200 1800 1 +0030}
- {-504916200 0 0 GMT}
- {-483919200 1800 1 +0030}
- {-473380200 0 0 GMT}
- {-452383200 1800 1 +0030}
- {-441844200 0 0 GMT}
+if {![info exists TZData(Africa/Abidjan)]} {
+ LoadTimeZoneFile Africa/Abidjan
}
+set TZData(:Africa/Accra) $TZData(:Africa/Abidjan)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Africa/Juba
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Africa/Juba 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Africa/Juba 2022-03-14 10:03:11 UTC (rev 62700)
@@ -36,4 +36,5 @@
{483487200 10800 1 CAST}
{498171600 7200 0 CAT}
{947930400 10800 0 EAT}
+ {1612126800 7200 0 CAT}
}
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Anguilla
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Anguilla 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Anguilla 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Port_of_Spain)]} {
- LoadTimeZoneFile America/Port_of_Spain
+if {![info exists TZData(America/Puerto_Rico)]} {
+ LoadTimeZoneFile America/Puerto_Rico
}
-set TZData(:America/Anguilla) $TZData(:America/Port_of_Spain)
+set TZData(:America/Anguilla) $TZData(:America/Puerto_Rico)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Antigua
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Antigua 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Antigua 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Port_of_Spain)]} {
- LoadTimeZoneFile America/Port_of_Spain
+if {![info exists TZData(America/Puerto_Rico)]} {
+ LoadTimeZoneFile America/Puerto_Rico
}
-set TZData(:America/Antigua) $TZData(:America/Port_of_Spain)
+set TZData(:America/Antigua) $TZData(:America/Puerto_Rico)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Aruba
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Aruba 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Aruba 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Curacao)]} {
- LoadTimeZoneFile America/Curacao
+if {![info exists TZData(America/Puerto_Rico)]} {
+ LoadTimeZoneFile America/Puerto_Rico
}
-set TZData(:America/Aruba) $TZData(:America/Curacao)
+set TZData(:America/Aruba) $TZData(:America/Puerto_Rico)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Atikokan
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Atikokan 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Atikokan 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,12 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:America/Atikokan) {
- {-9223372036854775808 -21988 0 LMT}
- {-2366733212 -21600 0 CST}
- {-1632067200 -18000 1 CDT}
- {-1615136400 -21600 0 CST}
- {-923248800 -18000 1 CDT}
- {-880214400 -18000 0 CWT}
- {-769395600 -18000 1 CPT}
- {-765388800 -18000 0 EST}
+if {![info exists TZData(America/Panama)]} {
+ LoadTimeZoneFile America/Panama
}
+set TZData(:America/Atikokan) $TZData(:America/Panama)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Barbados
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Barbados 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Barbados 2022-03-14 10:03:11 UTC (rev 62700)
@@ -2,8 +2,15 @@
set TZData(:America/Barbados) {
{-9223372036854775808 -14309 0 LMT}
- {-1451678491 -14309 0 BMT}
- {-1199217691 -14400 0 AST}
+ {-1841256091 -14400 0 AST}
+ {-874263600 -10800 1 ADT}
+ {-862682400 -14400 0 AST}
+ {-841604400 -10800 1 ADT}
+ {-830714400 -14400 0 AST}
+ {-820526400 -14400 0 -0330}
+ {-811882800 -12600 1 AST}
+ {-798660000 -14400 0 -0330}
+ {-788904000 -14400 0 AST}
{234943200 -10800 1 ADT}
{244616400 -14400 0 AST}
{261554400 -10800 1 ADT}
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Blanc-Sablon
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Blanc-Sablon 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Blanc-Sablon 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,12 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:America/Blanc-Sablon) {
- {-9223372036854775808 -13708 0 LMT}
- {-2713896692 -14400 0 AST}
- {-1632074400 -10800 1 ADT}
- {-1615143600 -14400 0 AST}
- {-880221600 -10800 1 AWT}
- {-769395600 -10800 1 APT}
- {-765399600 -14400 0 AST}
- {14400 -14400 0 AST}
+if {![info exists TZData(America/Puerto_Rico)]} {
+ LoadTimeZoneFile America/Puerto_Rico
}
+set TZData(:America/Blanc-Sablon) $TZData(:America/Puerto_Rico)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Coral_Harbour
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Coral_Harbour 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Coral_Harbour 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Atikokan)]} {
- LoadTimeZoneFile America/Atikokan
+if {![info exists TZData(America/Panama)]} {
+ LoadTimeZoneFile America/Panama
}
-set TZData(:America/Coral_Harbour) $TZData(:America/Atikokan)
+set TZData(:America/Coral_Harbour) $TZData(:America/Panama)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Creston
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Creston 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Creston 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,8 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:America/Creston) {
- {-9223372036854775808 -27964 0 LMT}
- {-2713882436 -25200 0 MST}
- {-1680454800 -28800 0 PST}
- {-1627833600 -25200 0 MST}
+if {![info exists TZData(America/Phoenix)]} {
+ LoadTimeZoneFile America/Phoenix
}
+set TZData(:America/Creston) $TZData(:America/Phoenix)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Curacao
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Curacao 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Curacao 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,7 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:America/Curacao) {
- {-9223372036854775808 -16547 0 LMT}
- {-1826738653 -16200 0 -0430}
- {-157750200 -14400 0 AST}
+if {![info exists TZData(America/Puerto_Rico)]} {
+ LoadTimeZoneFile America/Puerto_Rico
}
+set TZData(:America/Curacao) $TZData(:America/Puerto_Rico)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Dominica
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Dominica 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Dominica 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Port_of_Spain)]} {
- LoadTimeZoneFile America/Port_of_Spain
+if {![info exists TZData(America/Puerto_Rico)]} {
+ LoadTimeZoneFile America/Puerto_Rico
}
-set TZData(:America/Dominica) $TZData(:America/Port_of_Spain)
+set TZData(:America/Dominica) $TZData(:America/Puerto_Rico)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Grenada
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Grenada 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Grenada 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Port_of_Spain)]} {
- LoadTimeZoneFile America/Port_of_Spain
+if {![info exists TZData(America/Puerto_Rico)]} {
+ LoadTimeZoneFile America/Puerto_Rico
}
-set TZData(:America/Grenada) $TZData(:America/Port_of_Spain)
+set TZData(:America/Grenada) $TZData(:America/Puerto_Rico)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Guadeloupe
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Guadeloupe 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Guadeloupe 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Port_of_Spain)]} {
- LoadTimeZoneFile America/Port_of_Spain
+if {![info exists TZData(America/Puerto_Rico)]} {
+ LoadTimeZoneFile America/Puerto_Rico
}
-set TZData(:America/Guadeloupe) $TZData(:America/Port_of_Spain)
+set TZData(:America/Guadeloupe) $TZData(:America/Puerto_Rico)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Guyana
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Guyana 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Guyana 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,8 +1,9 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:America/Guyana) {
- {-9223372036854775808 -13960 0 LMT}
- {-1730578040 -13500 0 -0345}
- {176010300 -10800 0 -03}
- {662698800 -14400 0 -04}
+ {-9223372036854775808 -13959 0 LMT}
+ {-1843589241 -14400 0 -04}
+ {-1730577600 -13500 0 -0345}
+ {176096700 -10800 0 -03}
+ {701841600 -14400 0 -04}
}
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Kralendijk
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Kralendijk 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Kralendijk 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Curacao)]} {
- LoadTimeZoneFile America/Curacao
+if {![info exists TZData(America/Puerto_Rico)]} {
+ LoadTimeZoneFile America/Puerto_Rico
}
-set TZData(:America/Kralendijk) $TZData(:America/Curacao)
+set TZData(:America/Kralendijk) $TZData(:America/Puerto_Rico)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Lower_Princes
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Lower_Princes 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Lower_Princes 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Curacao)]} {
- LoadTimeZoneFile America/Curacao
+if {![info exists TZData(America/Puerto_Rico)]} {
+ LoadTimeZoneFile America/Puerto_Rico
}
-set TZData(:America/Lower_Princes) $TZData(:America/Curacao)
+set TZData(:America/Lower_Princes) $TZData(:America/Puerto_Rico)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Marigot
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Marigot 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Marigot 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Port_of_Spain)]} {
- LoadTimeZoneFile America/Port_of_Spain
+if {![info exists TZData(America/Puerto_Rico)]} {
+ LoadTimeZoneFile America/Puerto_Rico
}
-set TZData(:America/Marigot) $TZData(:America/Port_of_Spain)
+set TZData(:America/Marigot) $TZData(:America/Puerto_Rico)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Montserrat
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Montserrat 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Montserrat 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Port_of_Spain)]} {
- LoadTimeZoneFile America/Port_of_Spain
+if {![info exists TZData(America/Puerto_Rico)]} {
+ LoadTimeZoneFile America/Puerto_Rico
}
-set TZData(:America/Montserrat) $TZData(:America/Port_of_Spain)
+set TZData(:America/Montserrat) $TZData(:America/Puerto_Rico)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Nassau
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Nassau 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Nassau 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,284 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:America/Nassau) {
- {-9223372036854775808 -18570 0 LMT}
- {-1825095030 -18000 0 EST}
- {-873140400 -14400 1 EWT}
- {-788904000 -18000 0 EST}
- {-786222000 -14400 1 EWT}
- {-769395600 -14400 1 EPT}
- {-763848000 -18000 0 EST}
- {-179341200 -14400 1 EDT}
- {-163620000 -18000 0 EST}
- {-147891600 -14400 1 EDT}
- {-131565600 -18000 0 EST}
- {-116442000 -14400 1 EDT}
- {-100116000 -18000 0 EST}
- {-84387600 -14400 1 EDT}
- {-68666400 -18000 0 EST}
- {-52938000 -14400 1 EDT}
- {-37216800 -18000 0 EST}
- {-21488400 -14400 1 EDT}
- {-5767200 -18000 0 EST}
- {9961200 -14400 1 EDT}
- {25682400 -18000 0 EST}
- {41410800 -14400 1 EDT}
- {57736800 -18000 0 EST}
- {73465200 -14400 1 EDT}
- {89186400 -18000 0 EST}
- {104914800 -14400 1 EDT}
- {120636000 -18000 0 EST}
- {136364400 -14400 1 EDT}
- {152085600 -18000 0 EST}
- {167814000 -14400 1 EDT}
- {183535200 -18000 0 EST}
- {189320400 -18000 0 EST}
- {199263600 -14400 1 EDT}
- {215589600 -18000 0 EST}
- {230713200 -14400 1 EDT}
- {247039200 -18000 0 EST}
- {262767600 -14400 1 EDT}
- {278488800 -18000 0 EST}
- {294217200 -14400 1 EDT}
- {309938400 -18000 0 EST}
- {325666800 -14400 1 EDT}
- {341388000 -18000 0 EST}
- {357116400 -14400 1 EDT}
- {372837600 -18000 0 EST}
- {388566000 -14400 1 EDT}
- {404892000 -18000 0 EST}
- {420015600 -14400 1 EDT}
- {436341600 -18000 0 EST}
- {452070000 -14400 1 EDT}
- {467791200 -18000 0 EST}
- {483519600 -14400 1 EDT}
- {499240800 -18000 0 EST}
- {514969200 -14400 1 EDT}
- {530690400 -18000 0 EST}
- {544604400 -14400 1 EDT}
- {562140000 -18000 0 EST}
- {576054000 -14400 1 EDT}
- {594194400 -18000 0 EST}
- {607503600 -14400 1 EDT}
- {625644000 -18000 0 EST}
- {638953200 -14400 1 EDT}
- {657093600 -18000 0 EST}
- {671007600 -14400 1 EDT}
- {688543200 -18000 0 EST}
- {702457200 -14400 1 EDT}
- {719992800 -18000 0 EST}
- {733906800 -14400 1 EDT}
- {752047200 -18000 0 EST}
- {765356400 -14400 1 EDT}
- {783496800 -18000 0 EST}
- {796806000 -14400 1 EDT}
- {814946400 -18000 0 EST}
- {828860400 -14400 1 EDT}
- {846396000 -18000 0 EST}
- {860310000 -14400 1 EDT}
- {877845600 -18000 0 EST}
- {891759600 -14400 1 EDT}
- {909295200 -18000 0 EST}
- {923209200 -14400 1 EDT}
- {941349600 -18000 0 EST}
- {954658800 -14400 1 EDT}
- {972799200 -18000 0 EST}
- {986108400 -14400 1 EDT}
- {1004248800 -18000 0 EST}
- {1018162800 -14400 1 EDT}
- {1035698400 -18000 0 EST}
- {1049612400 -14400 1 EDT}
- {1067148000 -18000 0 EST}
- {1081062000 -14400 1 EDT}
- {1099202400 -18000 0 EST}
- {1112511600 -14400 1 EDT}
- {1130652000 -18000 0 EST}
- {1143961200 -14400 1 EDT}
- {1162101600 -18000 0 EST}
- {1173596400 -14400 1 EDT}
- {1194156000 -18000 0 EST}
- {1205046000 -14400 1 EDT}
- {1225605600 -18000 0 EST}
- {1236495600 -14400 1 EDT}
- {1257055200 -18000 0 EST}
- {1268550000 -14400 1 EDT}
- {1289109600 -18000 0 EST}
- {1299999600 -14400 1 EDT}
- {1320559200 -18000 0 EST}
- {1331449200 -14400 1 EDT}
- {1352008800 -18000 0 EST}
- {1362898800 -14400 1 EDT}
- {1383458400 -18000 0 EST}
- {1394348400 -14400 1 EDT}
- {1414908000 -18000 0 EST}
- {1425798000 -14400 1 EDT}
- {1446357600 -18000 0 EST}
- {1457852400 -14400 1 EDT}
- {1478412000 -18000 0 EST}
- {1489302000 -14400 1 EDT}
- {1509861600 -18000 0 EST}
- {1520751600 -14400 1 EDT}
- {1541311200 -18000 0 EST}
- {1552201200 -14400 1 EDT}
- {1572760800 -18000 0 EST}
- {1583650800 -14400 1 EDT}
- {1604210400 -18000 0 EST}
- {1615705200 -14400 1 EDT}
- {1636264800 -18000 0 EST}
- {1647154800 -14400 1 EDT}
- {1667714400 -18000 0 EST}
- {1678604400 -14400 1 EDT}
- {1699164000 -18000 0 EST}
- {1710054000 -14400 1 EDT}
- {1730613600 -18000 0 EST}
- {1741503600 -14400 1 EDT}
- {1762063200 -18000 0 EST}
- {1772953200 -14400 1 EDT}
- {1793512800 -18000 0 EST}
- {1805007600 -14400 1 EDT}
- {1825567200 -18000 0 EST}
- {1836457200 -14400 1 EDT}
- {1857016800 -18000 0 EST}
- {1867906800 -14400 1 EDT}
- {1888466400 -18000 0 EST}
- {1899356400 -14400 1 EDT}
- {1919916000 -18000 0 EST}
- {1930806000 -14400 1 EDT}
- {1951365600 -18000 0 EST}
- {1962860400 -14400 1 EDT}
- {1983420000 -18000 0 EST}
- {1994310000 -14400 1 EDT}
- {2014869600 -18000 0 EST}
- {2025759600 -14400 1 EDT}
- {2046319200 -18000 0 EST}
- {2057209200 -14400 1 EDT}
- {2077768800 -18000 0 EST}
- {2088658800 -14400 1 EDT}
- {2109218400 -18000 0 EST}
- {2120108400 -14400 1 EDT}
- {2140668000 -18000 0 EST}
- {2152162800 -14400 1 EDT}
- {2172722400 -18000 0 EST}
- {2183612400 -14400 1 EDT}
- {2204172000 -18000 0 EST}
- {2215062000 -14400 1 EDT}
- {2235621600 -18000 0 EST}
- {2246511600 -14400 1 EDT}
- {2267071200 -18000 0 EST}
- {2277961200 -14400 1 EDT}
- {2298520800 -18000 0 EST}
- {2309410800 -14400 1 EDT}
- {2329970400 -18000 0 EST}
- {2341465200 -14400 1 EDT}
- {2362024800 -18000 0 EST}
- {2372914800 -14400 1 EDT}
- {2393474400 -18000 0 EST}
- {2404364400 -14400 1 EDT}
- {2424924000 -18000 0 EST}
- {2435814000 -14400 1 EDT}
- {2456373600 -18000 0 EST}
- {2467263600 -14400 1 EDT}
- {2487823200 -18000 0 EST}
- {2499318000 -14400 1 EDT}
- {2519877600 -18000 0 EST}
- {2530767600 -14400 1 EDT}
- {2551327200 -18000 0 EST}
- {2562217200 -14400 1 EDT}
- {2582776800 -18000 0 EST}
- {2593666800 -14400 1 EDT}
- {2614226400 -18000 0 EST}
- {2625116400 -14400 1 EDT}
- {2645676000 -18000 0 EST}
- {2656566000 -14400 1 EDT}
- {2677125600 -18000 0 EST}
- {2688620400 -14400 1 EDT}
- {2709180000 -18000 0 EST}
- {2720070000 -14400 1 EDT}
- {2740629600 -18000 0 EST}
- {2751519600 -14400 1 EDT}
- {2772079200 -18000 0 EST}
- {2782969200 -14400 1 EDT}
- {2803528800 -18000 0 EST}
- {2814418800 -14400 1 EDT}
- {2834978400 -18000 0 EST}
- {2846473200 -14400 1 EDT}
- {2867032800 -18000 0 EST}
- {2877922800 -14400 1 EDT}
- {2898482400 -18000 0 EST}
- {2909372400 -14400 1 EDT}
- {2929932000 -18000 0 EST}
- {2940822000 -14400 1 EDT}
- {2961381600 -18000 0 EST}
- {2972271600 -14400 1 EDT}
- {2992831200 -18000 0 EST}
- {3003721200 -14400 1 EDT}
- {3024280800 -18000 0 EST}
- {3035775600 -14400 1 EDT}
- {3056335200 -18000 0 EST}
- {3067225200 -14400 1 EDT}
- {3087784800 -18000 0 EST}
- {3098674800 -14400 1 EDT}
- {3119234400 -18000 0 EST}
- {3130124400 -14400 1 EDT}
- {3150684000 -18000 0 EST}
- {3161574000 -14400 1 EDT}
- {3182133600 -18000 0 EST}
- {3193023600 -14400 1 EDT}
- {3213583200 -18000 0 EST}
- {3225078000 -14400 1 EDT}
- {3245637600 -18000 0 EST}
- {3256527600 -14400 1 EDT}
- {3277087200 -18000 0 EST}
- {3287977200 -14400 1 EDT}
- {3308536800 -18000 0 EST}
- {3319426800 -14400 1 EDT}
- {3339986400 -18000 0 EST}
- {3350876400 -14400 1 EDT}
- {3371436000 -18000 0 EST}
- {3382930800 -14400 1 EDT}
- {3403490400 -18000 0 EST}
- {3414380400 -14400 1 EDT}
- {3434940000 -18000 0 EST}
- {3445830000 -14400 1 EDT}
- {3466389600 -18000 0 EST}
- {3477279600 -14400 1 EDT}
- {3497839200 -18000 0 EST}
- {3508729200 -14400 1 EDT}
- {3529288800 -18000 0 EST}
- {3540178800 -14400 1 EDT}
- {3560738400 -18000 0 EST}
- {3572233200 -14400 1 EDT}
- {3592792800 -18000 0 EST}
- {3603682800 -14400 1 EDT}
- {3624242400 -18000 0 EST}
- {3635132400 -14400 1 EDT}
- {3655692000 -18000 0 EST}
- {3666582000 -14400 1 EDT}
- {3687141600 -18000 0 EST}
- {3698031600 -14400 1 EDT}
- {3718591200 -18000 0 EST}
- {3730086000 -14400 1 EDT}
- {3750645600 -18000 0 EST}
- {3761535600 -14400 1 EDT}
- {3782095200 -18000 0 EST}
- {3792985200 -14400 1 EDT}
- {3813544800 -18000 0 EST}
- {3824434800 -14400 1 EDT}
- {3844994400 -18000 0 EST}
- {3855884400 -14400 1 EDT}
- {3876444000 -18000 0 EST}
- {3887334000 -14400 1 EDT}
- {3907893600 -18000 0 EST}
- {3919388400 -14400 1 EDT}
- {3939948000 -18000 0 EST}
- {3950838000 -14400 1 EDT}
- {3971397600 -18000 0 EST}
- {3982287600 -14400 1 EDT}
- {4002847200 -18000 0 EST}
- {4013737200 -14400 1 EDT}
- {4034296800 -18000 0 EST}
- {4045186800 -14400 1 EDT}
- {4065746400 -18000 0 EST}
- {4076636400 -14400 1 EDT}
- {4097196000 -18000 0 EST}
+if {![info exists TZData(America/Toronto)]} {
+ LoadTimeZoneFile America/Toronto
}
+set TZData(:America/Nassau) $TZData(:America/Toronto)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Port_of_Spain
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Port_of_Spain 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Port_of_Spain 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,6 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:America/Port_of_Spain) {
- {-9223372036854775808 -14764 0 LMT}
- {-1825098836 -14400 0 AST}
+if {![info exists TZData(America/Puerto_Rico)]} {
+ LoadTimeZoneFile America/Puerto_Rico
}
+set TZData(:America/Port_of_Spain) $TZData(:America/Puerto_Rico)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/St_Barthelemy
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/St_Barthelemy 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/St_Barthelemy 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Port_of_Spain)]} {
- LoadTimeZoneFile America/Port_of_Spain
+if {![info exists TZData(America/Puerto_Rico)]} {
+ LoadTimeZoneFile America/Puerto_Rico
}
-set TZData(:America/St_Barthelemy) $TZData(:America/Port_of_Spain)
+set TZData(:America/St_Barthelemy) $TZData(:America/Puerto_Rico)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/St_Kitts
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/St_Kitts 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/St_Kitts 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Port_of_Spain)]} {
- LoadTimeZoneFile America/Port_of_Spain
+if {![info exists TZData(America/Puerto_Rico)]} {
+ LoadTimeZoneFile America/Puerto_Rico
}
-set TZData(:America/St_Kitts) $TZData(:America/Port_of_Spain)
+set TZData(:America/St_Kitts) $TZData(:America/Puerto_Rico)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/St_Lucia
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/St_Lucia 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/St_Lucia 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Port_of_Spain)]} {
- LoadTimeZoneFile America/Port_of_Spain
+if {![info exists TZData(America/Puerto_Rico)]} {
+ LoadTimeZoneFile America/Puerto_Rico
}
-set TZData(:America/St_Lucia) $TZData(:America/Port_of_Spain)
+set TZData(:America/St_Lucia) $TZData(:America/Puerto_Rico)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/St_Thomas
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/St_Thomas 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/St_Thomas 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Port_of_Spain)]} {
- LoadTimeZoneFile America/Port_of_Spain
+if {![info exists TZData(America/Puerto_Rico)]} {
+ LoadTimeZoneFile America/Puerto_Rico
}
-set TZData(:America/St_Thomas) $TZData(:America/Port_of_Spain)
+set TZData(:America/St_Thomas) $TZData(:America/Puerto_Rico)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/St_Vincent
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/St_Vincent 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/St_Vincent 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Port_of_Spain)]} {
- LoadTimeZoneFile America/Port_of_Spain
+if {![info exists TZData(America/Puerto_Rico)]} {
+ LoadTimeZoneFile America/Puerto_Rico
}
-set TZData(:America/St_Vincent) $TZData(:America/Port_of_Spain)
+set TZData(:America/St_Vincent) $TZData(:America/Puerto_Rico)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Tortola
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Tortola 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Tortola 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Port_of_Spain)]} {
- LoadTimeZoneFile America/Port_of_Spain
+if {![info exists TZData(America/Puerto_Rico)]} {
+ LoadTimeZoneFile America/Puerto_Rico
}
-set TZData(:America/Tortola) $TZData(:America/Port_of_Spain)
+set TZData(:America/Tortola) $TZData(:America/Puerto_Rico)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Virgin
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Virgin 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/America/Virgin 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Port_of_Spain)]} {
- LoadTimeZoneFile America/Port_of_Spain
+if {![info exists TZData(America/Puerto_Rico)]} {
+ LoadTimeZoneFile America/Puerto_Rico
}
-set TZData(:America/Virgin) $TZData(:America/Port_of_Spain)
+set TZData(:America/Virgin) $TZData(:America/Puerto_Rico)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Antarctica/DumontDUrville
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Antarctica/DumontDUrville 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Antarctica/DumontDUrville 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,8 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:Antarctica/DumontDUrville) {
- {-9223372036854775808 0 0 -00}
- {-725846400 36000 0 +10}
- {-566992800 0 0 -00}
- {-415497600 36000 0 +10}
+if {![info exists TZData(Pacific/Port_Moresby)]} {
+ LoadTimeZoneFile Pacific/Port_Moresby
}
+set TZData(:Antarctica/DumontDUrville) $TZData(:Pacific/Port_Moresby)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Antarctica/Syowa
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Antarctica/Syowa 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Antarctica/Syowa 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,6 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:Antarctica/Syowa) {
- {-9223372036854775808 0 0 -00}
- {-407808000 10800 0 +03}
+if {![info exists TZData(Asia/Riyadh)]} {
+ LoadTimeZoneFile Asia/Riyadh
}
+set TZData(:Antarctica/Syowa) $TZData(:Asia/Riyadh)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Asia/Amman
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Asia/Amman 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Asia/Amman 2022-03-14 10:03:11 UTC (rev 62700)
@@ -87,160 +87,160 @@
{1604008800 7200 0 EET}
{1616709600 10800 1 EEST}
{1635458400 7200 0 EET}
- {1648764000 10800 1 EEST}
+ {1645740000 10800 1 EEST}
{1666908000 7200 0 EET}
- {1680213600 10800 1 EEST}
+ {1677189600 10800 1 EEST}
{1698357600 7200 0 EET}
- {1711663200 10800 1 EEST}
+ {1709244000 10800 1 EEST}
{1729807200 7200 0 EET}
- {1743112800 10800 1 EEST}
+ {1740693600 10800 1 EEST}
{1761861600 7200 0 EET}
- {1774562400 10800 1 EEST}
+ {1772143200 10800 1 EEST}
{1793311200 7200 0 EET}
- {1806012000 10800 1 EEST}
+ {1803592800 10800 1 EEST}
{1824760800 7200 0 EET}
- {1838066400 10800 1 EEST}
+ {1835042400 10800 1 EEST}
{1856210400 7200 0 EET}
- {1869516000 10800 1 EEST}
+ {1866492000 10800 1 EEST}
{1887660000 7200 0 EET}
- {1900965600 10800 1 EEST}
+ {1898546400 10800 1 EEST}
{1919109600 7200 0 EET}
- {1932415200 10800 1 EEST}
+ {1929996000 10800 1 EEST}
{1951164000 7200 0 EET}
- {1963864800 10800 1 EEST}
+ {1961445600 10800 1 EEST}
{1982613600 7200 0 EET}
- {1995919200 10800 1 EEST}
+ {1992895200 10800 1 EEST}
{2014063200 7200 0 EET}
- {2027368800 10800 1 EEST}
+ {2024344800 10800 1 EEST}
{2045512800 7200 0 EET}
- {2058818400 10800 1 EEST}
+ {2055794400 10800 1 EEST}
{2076962400 7200 0 EET}
- {2090268000 10800 1 EEST}
+ {2087848800 10800 1 EEST}
{2109016800 7200 0 EET}
- {2121717600 10800 1 EEST}
+ {2119298400 10800 1 EEST}
{2140466400 7200 0 EET}
- {2153167200 10800 1 EEST}
+ {2150748000 10800 1 EEST}
{2171916000 7200 0 EET}
- {2185221600 10800 1 EEST}
+ {2182197600 10800 1 EEST}
{2203365600 7200 0 EET}
- {2216671200 10800 1 EEST}
+ {2213647200 10800 1 EEST}
{2234815200 7200 0 EET}
- {2248120800 10800 1 EEST}
+ {2245701600 10800 1 EEST}
{2266264800 7200 0 EET}
- {2279570400 10800 1 EEST}
+ {2277151200 10800 1 EEST}
{2298319200 7200 0 EET}
- {2311020000 10800 1 EEST}
+ {2308600800 10800 1 EEST}
{2329768800 7200 0 EET}
- {2343074400 10800 1 EEST}
+ {2340050400 10800 1 EEST}
{2361218400 7200 0 EET}
- {2374524000 10800 1 EEST}
+ {2371500000 10800 1 EEST}
{2392668000 7200 0 EET}
- {2405973600 10800 1 EEST}
+ {2402949600 10800 1 EEST}
{2424117600 7200 0 EET}
- {2437423200 10800 1 EEST}
+ {2435004000 10800 1 EEST}
{2455567200 7200 0 EET}
- {2468872800 10800 1 EEST}
+ {2466453600 10800 1 EEST}
{2487621600 7200 0 EET}
- {2500322400 10800 1 EEST}
+ {2497903200 10800 1 EEST}
{2519071200 7200 0 EET}
- {2532376800 10800 1 EEST}
+ {2529352800 10800 1 EEST}
{2550520800 7200 0 EET}
- {2563826400 10800 1 EEST}
+ {2560802400 10800 1 EEST}
{2581970400 7200 0 EET}
- {2595276000 10800 1 EEST}
+ {2592856800 10800 1 EEST}
{2613420000 7200 0 EET}
- {2626725600 10800 1 EEST}
+ {2624306400 10800 1 EEST}
{2645474400 7200 0 EET}
- {2658175200 10800 1 EEST}
+ {2655756000 10800 1 EEST}
{2676924000 7200 0 EET}
- {2689624800 10800 1 EEST}
+ {2687205600 10800 1 EEST}
{2708373600 7200 0 EET}
- {2721679200 10800 1 EEST}
+ {2718655200 10800 1 EEST}
{2739823200 7200 0 EET}
- {2753128800 10800 1 EEST}
+ {2750104800 10800 1 EEST}
{2771272800 7200 0 EET}
- {2784578400 10800 1 EEST}
+ {2782159200 10800 1 EEST}
{2802722400 7200 0 EET}
- {2816028000 10800 1 EEST}
+ {2813608800 10800 1 EEST}
{2834776800 7200 0 EET}
- {2847477600 10800 1 EEST}
+ {2845058400 10800 1 EEST}
{2866226400 7200 0 EET}
- {2879532000 10800 1 EEST}
+ {2876508000 10800 1 EEST}
{2897676000 7200 0 EET}
- {2910981600 10800 1 EEST}
+ {2907957600 10800 1 EEST}
{2929125600 7200 0 EET}
- {2942431200 10800 1 EEST}
+ {2939407200 10800 1 EEST}
{2960575200 7200 0 EET}
- {2973880800 10800 1 EEST}
+ {2971461600 10800 1 EEST}
{2992629600 7200 0 EET}
- {3005330400 10800 1 EEST}
+ {3002911200 10800 1 EEST}
{3024079200 7200 0 EET}
- {3036780000 10800 1 EEST}
+ {3034360800 10800 1 EEST}
{3055528800 7200 0 EET}
- {3068834400 10800 1 EEST}
+ {3065810400 10800 1 EEST}
{3086978400 7200 0 EET}
- {3100284000 10800 1 EEST}
+ {3097260000 10800 1 EEST}
{3118428000 7200 0 EET}
- {3131733600 10800 1 EEST}
+ {3129314400 10800 1 EEST}
{3149877600 7200 0 EET}
- {3163183200 10800 1 EEST}
+ {3160764000 10800 1 EEST}
{3181932000 7200 0 EET}
- {3194632800 10800 1 EEST}
+ {3192213600 10800 1 EEST}
{3213381600 7200 0 EET}
- {3226687200 10800 1 EEST}
+ {3223663200 10800 1 EEST}
{3244831200 7200 0 EET}
- {3258136800 10800 1 EEST}
+ {3255112800 10800 1 EEST}
{3276280800 7200 0 EET}
- {3289586400 10800 1 EEST}
+ {3286562400 10800 1 EEST}
{3307730400 7200 0 EET}
- {3321036000 10800 1 EEST}
+ {3318616800 10800 1 EEST}
{3339180000 7200 0 EET}
- {3352485600 10800 1 EEST}
+ {3350066400 10800 1 EEST}
{3371234400 7200 0 EET}
- {3383935200 10800 1 EEST}
+ {3381516000 10800 1 EEST}
{3402684000 7200 0 EET}
- {3415989600 10800 1 EEST}
+ {3412965600 10800 1 EEST}
{3434133600 7200 0 EET}
- {3447439200 10800 1 EEST}
+ {3444415200 10800 1 EEST}
{3465583200 7200 0 EET}
- {3478888800 10800 1 EEST}
+ {3476469600 10800 1 EEST}
{3497032800 7200 0 EET}
- {3510338400 10800 1 EEST}
+ {3507919200 10800 1 EEST}
{3529087200 7200 0 EET}
- {3541788000 10800 1 EEST}
+ {3539368800 10800 1 EEST}
{3560536800 7200 0 EET}
- {3573237600 10800 1 EEST}
+ {3570818400 10800 1 EEST}
{3591986400 7200 0 EET}
- {3605292000 10800 1 EEST}
+ {3602268000 10800 1 EEST}
{3623436000 7200 0 EET}
- {3636741600 10800 1 EEST}
+ {3633717600 10800 1 EEST}
{3654885600 7200 0 EET}
- {3668191200 10800 1 EEST}
+ {3665772000 10800 1 EEST}
{3686335200 7200 0 EET}
- {3699640800 10800 1 EEST}
+ {3697221600 10800 1 EEST}
{3718389600 7200 0 EET}
- {3731090400 10800 1 EEST}
+ {3728671200 10800 1 EEST}
{3749839200 7200 0 EET}
- {3763144800 10800 1 EEST}
+ {3760120800 10800 1 EEST}
{3781288800 7200 0 EET}
- {3794594400 10800 1 EEST}
+ {3791570400 10800 1 EEST}
{3812738400 7200 0 EET}
- {3826044000 10800 1 EEST}
+ {3823020000 10800 1 EEST}
{3844188000 7200 0 EET}
- {3857493600 10800 1 EEST}
+ {3855074400 10800 1 EEST}
{3876242400 7200 0 EET}
- {3888943200 10800 1 EEST}
+ {3886524000 10800 1 EEST}
{3907692000 7200 0 EET}
- {3920392800 10800 1 EEST}
+ {3917973600 10800 1 EEST}
{3939141600 7200 0 EET}
- {3952447200 10800 1 EEST}
+ {3949423200 10800 1 EEST}
{3970591200 7200 0 EET}
- {3983896800 10800 1 EEST}
+ {3980872800 10800 1 EEST}
{4002040800 7200 0 EET}
- {4015346400 10800 1 EEST}
+ {4012927200 10800 1 EEST}
{4033490400 7200 0 EET}
- {4046796000 10800 1 EEST}
+ {4044376800 10800 1 EEST}
{4065544800 7200 0 EET}
- {4078245600 10800 1 EEST}
+ {4075826400 10800 1 EEST}
{4096994400 7200 0 EET}
}
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Asia/Gaza
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Asia/Gaza 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Asia/Gaza 2022-03-14 10:03:11 UTC (rev 62700)
@@ -124,161 +124,161 @@
{1585346400 10800 1 EEST}
{1603490400 7200 0 EET}
{1616796000 10800 1 EEST}
- {1635544800 7200 0 EET}
+ {1635458400 7200 0 EET}
{1648245600 10800 1 EEST}
- {1666994400 7200 0 EET}
+ {1666908000 7200 0 EET}
{1679695200 10800 1 EEST}
- {1698444000 7200 0 EET}
+ {1698357600 7200 0 EET}
{1711749600 10800 1 EEST}
- {1729893600 7200 0 EET}
+ {1729807200 7200 0 EET}
{1743199200 10800 1 EEST}
- {1761343200 7200 0 EET}
+ {1761861600 7200 0 EET}
{1774648800 10800 1 EEST}
- {1792792800 7200 0 EET}
+ {1793311200 7200 0 EET}
{1806098400 10800 1 EEST}
- {1824847200 7200 0 EET}
+ {1824760800 7200 0 EET}
{1837548000 10800 1 EEST}
- {1856296800 7200 0 EET}
+ {1856210400 7200 0 EET}
{1868997600 10800 1 EEST}
- {1887746400 7200 0 EET}
+ {1887660000 7200 0 EET}
{1901052000 10800 1 EEST}
- {1919196000 7200 0 EET}
+ {1919109600 7200 0 EET}
{1932501600 10800 1 EEST}
- {1950645600 7200 0 EET}
+ {1951164000 7200 0 EET}
{1963951200 10800 1 EEST}
- {1982700000 7200 0 EET}
+ {1982613600 7200 0 EET}
{1995400800 10800 1 EEST}
- {2014149600 7200 0 EET}
+ {2014063200 7200 0 EET}
{2026850400 10800 1 EEST}
- {2045599200 7200 0 EET}
+ {2045512800 7200 0 EET}
{2058300000 10800 1 EEST}
- {2077048800 7200 0 EET}
+ {2076962400 7200 0 EET}
{2090354400 10800 1 EEST}
- {2108498400 7200 0 EET}
+ {2109016800 7200 0 EET}
{2121804000 10800 1 EEST}
- {2139948000 7200 0 EET}
+ {2140466400 7200 0 EET}
{2153253600 10800 1 EEST}
- {2172002400 7200 0 EET}
+ {2171916000 7200 0 EET}
{2184703200 10800 1 EEST}
- {2203452000 7200 0 EET}
+ {2203365600 7200 0 EET}
{2216152800 10800 1 EEST}
- {2234901600 7200 0 EET}
+ {2234815200 7200 0 EET}
{2248207200 10800 1 EEST}
- {2266351200 7200 0 EET}
+ {2266264800 7200 0 EET}
{2279656800 10800 1 EEST}
- {2297800800 7200 0 EET}
+ {2298319200 7200 0 EET}
{2311106400 10800 1 EEST}
- {2329250400 7200 0 EET}
+ {2329768800 7200 0 EET}
{2342556000 10800 1 EEST}
- {2361304800 7200 0 EET}
+ {2361218400 7200 0 EET}
{2374005600 10800 1 EEST}
- {2392754400 7200 0 EET}
+ {2392668000 7200 0 EET}
{2405455200 10800 1 EEST}
- {2424204000 7200 0 EET}
+ {2424117600 7200 0 EET}
{2437509600 10800 1 EEST}
- {2455653600 7200 0 EET}
+ {2455567200 7200 0 EET}
{2468959200 10800 1 EEST}
- {2487103200 7200 0 EET}
+ {2487621600 7200 0 EET}
{2500408800 10800 1 EEST}
- {2519157600 7200 0 EET}
+ {2519071200 7200 0 EET}
{2531858400 10800 1 EEST}
- {2550607200 7200 0 EET}
+ {2550520800 7200 0 EET}
{2563308000 10800 1 EEST}
- {2582056800 7200 0 EET}
+ {2581970400 7200 0 EET}
{2595362400 10800 1 EEST}
- {2613506400 7200 0 EET}
+ {2613420000 7200 0 EET}
{2626812000 10800 1 EEST}
- {2644956000 7200 0 EET}
+ {2645474400 7200 0 EET}
{2658261600 10800 1 EEST}
- {2676405600 7200 0 EET}
+ {2676924000 7200 0 EET}
{2689711200 10800 1 EEST}
- {2708460000 7200 0 EET}
+ {2708373600 7200 0 EET}
{2721160800 10800 1 EEST}
- {2739909600 7200 0 EET}
+ {2739823200 7200 0 EET}
{2752610400 10800 1 EEST}
- {2771359200 7200 0 EET}
+ {2771272800 7200 0 EET}
{2784664800 10800 1 EEST}
- {2802808800 7200 0 EET}
+ {2802722400 7200 0 EET}
{2816114400 10800 1 EEST}
- {2834258400 7200 0 EET}
+ {2834776800 7200 0 EET}
{2847564000 10800 1 EEST}
- {2866312800 7200 0 EET}
+ {2866226400 7200 0 EET}
{2879013600 10800 1 EEST}
- {2897762400 7200 0 EET}
+ {2897676000 7200 0 EET}
{2910463200 10800 1 EEST}
- {2929212000 7200 0 EET}
+ {2929125600 7200 0 EET}
{2941912800 10800 1 EEST}
- {2960661600 7200 0 EET}
+ {2960575200 7200 0 EET}
{2973967200 10800 1 EEST}
- {2992111200 7200 0 EET}
+ {2992629600 7200 0 EET}
{3005416800 10800 1 EEST}
- {3023560800 7200 0 EET}
+ {3024079200 7200 0 EET}
{3036866400 10800 1 EEST}
- {3055615200 7200 0 EET}
+ {3055528800 7200 0 EET}
{3068316000 10800 1 EEST}
- {3087064800 7200 0 EET}
+ {3086978400 7200 0 EET}
{3099765600 10800 1 EEST}
- {3118514400 7200 0 EET}
+ {3118428000 7200 0 EET}
{3131820000 10800 1 EEST}
- {3149964000 7200 0 EET}
+ {3149877600 7200 0 EET}
{3163269600 10800 1 EEST}
- {3181413600 7200 0 EET}
+ {3181932000 7200 0 EET}
{3194719200 10800 1 EEST}
- {3212863200 7200 0 EET}
+ {3213381600 7200 0 EET}
{3226168800 10800 1 EEST}
- {3244917600 7200 0 EET}
+ {3244831200 7200 0 EET}
{3257618400 10800 1 EEST}
- {3276367200 7200 0 EET}
+ {3276280800 7200 0 EET}
{3289068000 10800 1 EEST}
- {3307816800 7200 0 EET}
+ {3307730400 7200 0 EET}
{3321122400 10800 1 EEST}
- {3339266400 7200 0 EET}
+ {3339180000 7200 0 EET}
{3352572000 10800 1 EEST}
- {3370716000 7200 0 EET}
+ {3371234400 7200 0 EET}
{3384021600 10800 1 EEST}
- {3402770400 7200 0 EET}
+ {3402684000 7200 0 EET}
{3415471200 10800 1 EEST}
- {3434220000 7200 0 EET}
+ {3434133600 7200 0 EET}
{3446920800 10800 1 EEST}
- {3465669600 7200 0 EET}
+ {3465583200 7200 0 EET}
{3478975200 10800 1 EEST}
- {3497119200 7200 0 EET}
+ {3497032800 7200 0 EET}
{3510424800 10800 1 EEST}
- {3528568800 7200 0 EET}
+ {3529087200 7200 0 EET}
{3541874400 10800 1 EEST}
- {3560018400 7200 0 EET}
+ {3560536800 7200 0 EET}
{3573324000 10800 1 EEST}
- {3592072800 7200 0 EET}
+ {3591986400 7200 0 EET}
{3604773600 10800 1 EEST}
- {3623522400 7200 0 EET}
+ {3623436000 7200 0 EET}
{3636223200 10800 1 EEST}
- {3654972000 7200 0 EET}
+ {3654885600 7200 0 EET}
{3668277600 10800 1 EEST}
- {3686421600 7200 0 EET}
+ {3686335200 7200 0 EET}
{3699727200 10800 1 EEST}
- {3717871200 7200 0 EET}
+ {3718389600 7200 0 EET}
{3731176800 10800 1 EEST}
- {3749925600 7200 0 EET}
+ {3749839200 7200 0 EET}
{3762626400 10800 1 EEST}
- {3781375200 7200 0 EET}
+ {3781288800 7200 0 EET}
{3794076000 10800 1 EEST}
- {3812824800 7200 0 EET}
+ {3812738400 7200 0 EET}
{3825525600 10800 1 EEST}
- {3844274400 7200 0 EET}
+ {3844188000 7200 0 EET}
{3857580000 10800 1 EEST}
- {3875724000 7200 0 EET}
+ {3876242400 7200 0 EET}
{3889029600 10800 1 EEST}
- {3907173600 7200 0 EET}
+ {3907692000 7200 0 EET}
{3920479200 10800 1 EEST}
- {3939228000 7200 0 EET}
+ {3939141600 7200 0 EET}
{3951928800 10800 1 EEST}
- {3970677600 7200 0 EET}
+ {3970591200 7200 0 EET}
{3983378400 10800 1 EEST}
- {4002127200 7200 0 EET}
+ {4002040800 7200 0 EET}
{4015432800 10800 1 EEST}
- {4033576800 7200 0 EET}
+ {4033490400 7200 0 EET}
{4046882400 10800 1 EEST}
- {4065026400 7200 0 EET}
+ {4065544800 7200 0 EET}
{4078332000 10800 1 EEST}
- {4096476000 7200 0 EET}
+ {4096994400 7200 0 EET}
}
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Asia/Hebron
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Asia/Hebron 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Asia/Hebron 2022-03-14 10:03:11 UTC (rev 62700)
@@ -123,161 +123,161 @@
{1585346400 10800 1 EEST}
{1603490400 7200 0 EET}
{1616796000 10800 1 EEST}
- {1635544800 7200 0 EET}
+ {1635458400 7200 0 EET}
{1648245600 10800 1 EEST}
- {1666994400 7200 0 EET}
+ {1666908000 7200 0 EET}
{1679695200 10800 1 EEST}
- {1698444000 7200 0 EET}
+ {1698357600 7200 0 EET}
{1711749600 10800 1 EEST}
- {1729893600 7200 0 EET}
+ {1729807200 7200 0 EET}
{1743199200 10800 1 EEST}
- {1761343200 7200 0 EET}
+ {1761861600 7200 0 EET}
{1774648800 10800 1 EEST}
- {1792792800 7200 0 EET}
+ {1793311200 7200 0 EET}
{1806098400 10800 1 EEST}
- {1824847200 7200 0 EET}
+ {1824760800 7200 0 EET}
{1837548000 10800 1 EEST}
- {1856296800 7200 0 EET}
+ {1856210400 7200 0 EET}
{1868997600 10800 1 EEST}
- {1887746400 7200 0 EET}
+ {1887660000 7200 0 EET}
{1901052000 10800 1 EEST}
- {1919196000 7200 0 EET}
+ {1919109600 7200 0 EET}
{1932501600 10800 1 EEST}
- {1950645600 7200 0 EET}
+ {1951164000 7200 0 EET}
{1963951200 10800 1 EEST}
- {1982700000 7200 0 EET}
+ {1982613600 7200 0 EET}
{1995400800 10800 1 EEST}
- {2014149600 7200 0 EET}
+ {2014063200 7200 0 EET}
{2026850400 10800 1 EEST}
- {2045599200 7200 0 EET}
+ {2045512800 7200 0 EET}
{2058300000 10800 1 EEST}
- {2077048800 7200 0 EET}
+ {2076962400 7200 0 EET}
{2090354400 10800 1 EEST}
- {2108498400 7200 0 EET}
+ {2109016800 7200 0 EET}
{2121804000 10800 1 EEST}
- {2139948000 7200 0 EET}
+ {2140466400 7200 0 EET}
{2153253600 10800 1 EEST}
- {2172002400 7200 0 EET}
+ {2171916000 7200 0 EET}
{2184703200 10800 1 EEST}
- {2203452000 7200 0 EET}
+ {2203365600 7200 0 EET}
{2216152800 10800 1 EEST}
- {2234901600 7200 0 EET}
+ {2234815200 7200 0 EET}
{2248207200 10800 1 EEST}
- {2266351200 7200 0 EET}
+ {2266264800 7200 0 EET}
{2279656800 10800 1 EEST}
- {2297800800 7200 0 EET}
+ {2298319200 7200 0 EET}
{2311106400 10800 1 EEST}
- {2329250400 7200 0 EET}
+ {2329768800 7200 0 EET}
{2342556000 10800 1 EEST}
- {2361304800 7200 0 EET}
+ {2361218400 7200 0 EET}
{2374005600 10800 1 EEST}
- {2392754400 7200 0 EET}
+ {2392668000 7200 0 EET}
{2405455200 10800 1 EEST}
- {2424204000 7200 0 EET}
+ {2424117600 7200 0 EET}
{2437509600 10800 1 EEST}
- {2455653600 7200 0 EET}
+ {2455567200 7200 0 EET}
{2468959200 10800 1 EEST}
- {2487103200 7200 0 EET}
+ {2487621600 7200 0 EET}
{2500408800 10800 1 EEST}
- {2519157600 7200 0 EET}
+ {2519071200 7200 0 EET}
{2531858400 10800 1 EEST}
- {2550607200 7200 0 EET}
+ {2550520800 7200 0 EET}
{2563308000 10800 1 EEST}
- {2582056800 7200 0 EET}
+ {2581970400 7200 0 EET}
{2595362400 10800 1 EEST}
- {2613506400 7200 0 EET}
+ {2613420000 7200 0 EET}
{2626812000 10800 1 EEST}
- {2644956000 7200 0 EET}
+ {2645474400 7200 0 EET}
{2658261600 10800 1 EEST}
- {2676405600 7200 0 EET}
+ {2676924000 7200 0 EET}
{2689711200 10800 1 EEST}
- {2708460000 7200 0 EET}
+ {2708373600 7200 0 EET}
{2721160800 10800 1 EEST}
- {2739909600 7200 0 EET}
+ {2739823200 7200 0 EET}
{2752610400 10800 1 EEST}
- {2771359200 7200 0 EET}
+ {2771272800 7200 0 EET}
{2784664800 10800 1 EEST}
- {2802808800 7200 0 EET}
+ {2802722400 7200 0 EET}
{2816114400 10800 1 EEST}
- {2834258400 7200 0 EET}
+ {2834776800 7200 0 EET}
{2847564000 10800 1 EEST}
- {2866312800 7200 0 EET}
+ {2866226400 7200 0 EET}
{2879013600 10800 1 EEST}
- {2897762400 7200 0 EET}
+ {2897676000 7200 0 EET}
{2910463200 10800 1 EEST}
- {2929212000 7200 0 EET}
+ {2929125600 7200 0 EET}
{2941912800 10800 1 EEST}
- {2960661600 7200 0 EET}
+ {2960575200 7200 0 EET}
{2973967200 10800 1 EEST}
- {2992111200 7200 0 EET}
+ {2992629600 7200 0 EET}
{3005416800 10800 1 EEST}
- {3023560800 7200 0 EET}
+ {3024079200 7200 0 EET}
{3036866400 10800 1 EEST}
- {3055615200 7200 0 EET}
+ {3055528800 7200 0 EET}
{3068316000 10800 1 EEST}
- {3087064800 7200 0 EET}
+ {3086978400 7200 0 EET}
{3099765600 10800 1 EEST}
- {3118514400 7200 0 EET}
+ {3118428000 7200 0 EET}
{3131820000 10800 1 EEST}
- {3149964000 7200 0 EET}
+ {3149877600 7200 0 EET}
{3163269600 10800 1 EEST}
- {3181413600 7200 0 EET}
+ {3181932000 7200 0 EET}
{3194719200 10800 1 EEST}
- {3212863200 7200 0 EET}
+ {3213381600 7200 0 EET}
{3226168800 10800 1 EEST}
- {3244917600 7200 0 EET}
+ {3244831200 7200 0 EET}
{3257618400 10800 1 EEST}
- {3276367200 7200 0 EET}
+ {3276280800 7200 0 EET}
{3289068000 10800 1 EEST}
- {3307816800 7200 0 EET}
+ {3307730400 7200 0 EET}
{3321122400 10800 1 EEST}
- {3339266400 7200 0 EET}
+ {3339180000 7200 0 EET}
{3352572000 10800 1 EEST}
- {3370716000 7200 0 EET}
+ {3371234400 7200 0 EET}
{3384021600 10800 1 EEST}
- {3402770400 7200 0 EET}
+ {3402684000 7200 0 EET}
{3415471200 10800 1 EEST}
- {3434220000 7200 0 EET}
+ {3434133600 7200 0 EET}
{3446920800 10800 1 EEST}
- {3465669600 7200 0 EET}
+ {3465583200 7200 0 EET}
{3478975200 10800 1 EEST}
- {3497119200 7200 0 EET}
+ {3497032800 7200 0 EET}
{3510424800 10800 1 EEST}
- {3528568800 7200 0 EET}
+ {3529087200 7200 0 EET}
{3541874400 10800 1 EEST}
- {3560018400 7200 0 EET}
+ {3560536800 7200 0 EET}
{3573324000 10800 1 EEST}
- {3592072800 7200 0 EET}
+ {3591986400 7200 0 EET}
{3604773600 10800 1 EEST}
- {3623522400 7200 0 EET}
+ {3623436000 7200 0 EET}
{3636223200 10800 1 EEST}
- {3654972000 7200 0 EET}
+ {3654885600 7200 0 EET}
{3668277600 10800 1 EEST}
- {3686421600 7200 0 EET}
+ {3686335200 7200 0 EET}
{3699727200 10800 1 EEST}
- {3717871200 7200 0 EET}
+ {3718389600 7200 0 EET}
{3731176800 10800 1 EEST}
- {3749925600 7200 0 EET}
+ {3749839200 7200 0 EET}
{3762626400 10800 1 EEST}
- {3781375200 7200 0 EET}
+ {3781288800 7200 0 EET}
{3794076000 10800 1 EEST}
- {3812824800 7200 0 EET}
+ {3812738400 7200 0 EET}
{3825525600 10800 1 EEST}
- {3844274400 7200 0 EET}
+ {3844188000 7200 0 EET}
{3857580000 10800 1 EEST}
- {3875724000 7200 0 EET}
+ {3876242400 7200 0 EET}
{3889029600 10800 1 EEST}
- {3907173600 7200 0 EET}
+ {3907692000 7200 0 EET}
{3920479200 10800 1 EEST}
- {3939228000 7200 0 EET}
+ {3939141600 7200 0 EET}
{3951928800 10800 1 EEST}
- {3970677600 7200 0 EET}
+ {3970591200 7200 0 EET}
{3983378400 10800 1 EEST}
- {4002127200 7200 0 EET}
+ {4002040800 7200 0 EET}
{4015432800 10800 1 EEST}
- {4033576800 7200 0 EET}
+ {4033490400 7200 0 EET}
{4046882400 10800 1 EEST}
- {4065026400 7200 0 EET}
+ {4065544800 7200 0 EET}
{4078332000 10800 1 EEST}
- {4096476000 7200 0 EET}
+ {4096994400 7200 0 EET}
}
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Atlantic/Azores
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Atlantic/Azores 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Atlantic/Azores 2022-03-14 10:03:11 UTC (rev 62700)
@@ -66,6 +66,8 @@
{-670449600 -7200 0 -02}
{-654724800 -3600 1 -01}
{-639000000 -7200 0 -02}
+ {-623275200 -3600 1 -01}
+ {-607550400 -7200 0 -02}
{-591825600 -3600 1 -01}
{-575496000 -7200 0 -02}
{-559771200 -3600 1 -01}
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Atlantic/Madeira
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Atlantic/Madeira 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Atlantic/Madeira 2022-03-14 10:03:11 UTC (rev 62700)
@@ -66,6 +66,8 @@
{-670453200 -3600 0 -01}
{-654728400 0 1 +00}
{-639003600 -3600 0 -01}
+ {-623278800 0 1 +00}
+ {-607554000 -3600 0 -01}
{-591829200 0 1 +00}
{-575499600 -3600 0 -01}
{-559774800 0 1 +00}
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Europe/Lisbon
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Europe/Lisbon 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Europe/Lisbon 2022-03-14 10:03:11 UTC (rev 62700)
@@ -70,6 +70,8 @@
{-670456800 0 0 WET}
{-654732000 3600 1 WEST}
{-639007200 0 0 WET}
+ {-623282400 3600 1 WEST}
+ {-607557600 0 0 WET}
{-591832800 3600 1 WEST}
{-575503200 0 0 WET}
{-559778400 3600 1 WEST}
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Apia
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Apia 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Apia 2022-03-14 10:03:11 UTC (rev 62700)
@@ -28,161 +28,4 @@
{1586008800 46800 0 +13}
{1601128800 50400 1 +13}
{1617458400 46800 0 +13}
- {1632578400 50400 1 +13}
- {1648908000 46800 0 +13}
- {1664028000 50400 1 +13}
- {1680357600 46800 0 +13}
- {1695477600 50400 1 +13}
- {1712412000 46800 0 +13}
- {1727532000 50400 1 +13}
- {1743861600 46800 0 +13}
- {1758981600 50400 1 +13}
- {1775311200 46800 0 +13}
- {1790431200 50400 1 +13}
- {1806760800 46800 0 +13}
- {1821880800 50400 1 +13}
- {1838210400 46800 0 +13}
- {1853330400 50400 1 +13}
- {1869660000 46800 0 +13}
- {1885384800 50400 1 +13}
- {1901714400 46800 0 +13}
- {1916834400 50400 1 +13}
- {1933164000 46800 0 +13}
- {1948284000 50400 1 +13}
- {1964613600 46800 0 +13}
- {1979733600 50400 1 +13}
- {1996063200 46800 0 +13}
- {2011183200 50400 1 +13}
- {2027512800 46800 0 +13}
- {2042632800 50400 1 +13}
- {2058962400 46800 0 +13}
- {2074687200 50400 1 +13}
- {2091016800 46800 0 +13}
- {2106136800 50400 1 +13}
- {2122466400 46800 0 +13}
- {2137586400 50400 1 +13}
- {2153916000 46800 0 +13}
- {2169036000 50400 1 +13}
- {2185365600 46800 0 +13}
- {2200485600 50400 1 +13}
- {2216815200 46800 0 +13}
- {2232540000 50400 1 +13}
- {2248869600 46800 0 +13}
- {2263989600 50400 1 +13}
- {2280319200 46800 0 +13}
- {2295439200 50400 1 +13}
- {2311768800 46800 0 +13}
- {2326888800 50400 1 +13}
- {2343218400 46800 0 +13}
- {2358338400 50400 1 +13}
- {2374668000 46800 0 +13}
- {2389788000 50400 1 +13}
- {2406117600 46800 0 +13}
- {2421842400 50400 1 +13}
- {2438172000 46800 0 +13}
- {2453292000 50400 1 +13}
- {2469621600 46800 0 +13}
- {2484741600 50400 1 +13}
- {2501071200 46800 0 +13}
- {2516191200 50400 1 +13}
- {2532520800 46800 0 +13}
- {2547640800 50400 1 +13}
- {2563970400 46800 0 +13}
- {2579090400 50400 1 +13}
- {2596024800 46800 0 +13}
- {2611144800 50400 1 +13}
- {2627474400 46800 0 +13}
- {2642594400 50400 1 +13}
- {2658924000 46800 0 +13}
- {2674044000 50400 1 +13}
- {2690373600 46800 0 +13}
- {2705493600 50400 1 +13}
- {2721823200 46800 0 +13}
- {2736943200 50400 1 +13}
- {2753272800 46800 0 +13}
- {2768997600 50400 1 +13}
- {2785327200 46800 0 +13}
- {2800447200 50400 1 +13}
- {2816776800 46800 0 +13}
- {2831896800 50400 1 +13}
- {2848226400 46800 0 +13}
- {2863346400 50400 1 +13}
- {2879676000 46800 0 +13}
- {2894796000 50400 1 +13}
- {2911125600 46800 0 +13}
- {2926245600 50400 1 +13}
- {2942575200 46800 0 +13}
- {2958300000 50400 1 +13}
- {2974629600 46800 0 +13}
- {2989749600 50400 1 +13}
- {3006079200 46800 0 +13}
- {3021199200 50400 1 +13}
- {3037528800 46800 0 +13}
- {3052648800 50400 1 +13}
- {3068978400 46800 0 +13}
- {3084098400 50400 1 +13}
- {3100428000 46800 0 +13}
- {3116152800 50400 1 +13}
- {3132482400 46800 0 +13}
- {3147602400 50400 1 +13}
- {3163932000 46800 0 +13}
- {3179052000 50400 1 +13}
- {3195381600 46800 0 +13}
- {3210501600 50400 1 +13}
- {3226831200 46800 0 +13}
- {3241951200 50400 1 +13}
- {3258280800 46800 0 +13}
- {3273400800 50400 1 +13}
- {3289730400 46800 0 +13}
- {3305455200 50400 1 +13}
- {3321784800 46800 0 +13}
- {3336904800 50400 1 +13}
- {3353234400 46800 0 +13}
- {3368354400 50400 1 +13}
- {3384684000 46800 0 +13}
- {3399804000 50400 1 +13}
- {3416133600 46800 0 +13}
- {3431253600 50400 1 +13}
- {3447583200 46800 0 +13}
- {3462703200 50400 1 +13}
- {3479637600 46800 0 +13}
- {3494757600 50400 1 +13}
- {3511087200 46800 0 +13}
- {3526207200 50400 1 +13}
- {3542536800 46800 0 +13}
- {3557656800 50400 1 +13}
- {3573986400 46800 0 +13}
- {3589106400 50400 1 +13}
- {3605436000 46800 0 +13}
- {3620556000 50400 1 +13}
- {3636885600 46800 0 +13}
- {3652610400 50400 1 +13}
- {3668940000 46800 0 +13}
- {3684060000 50400 1 +13}
- {3700389600 46800 0 +13}
- {3715509600 50400 1 +13}
- {3731839200 46800 0 +13}
- {3746959200 50400 1 +13}
- {3763288800 46800 0 +13}
- {3778408800 50400 1 +13}
- {3794738400 46800 0 +13}
- {3809858400 50400 1 +13}
- {3826188000 46800 0 +13}
- {3841912800 50400 1 +13}
- {3858242400 46800 0 +13}
- {3873362400 50400 1 +13}
- {3889692000 46800 0 +13}
- {3904812000 50400 1 +13}
- {3921141600 46800 0 +13}
- {3936261600 50400 1 +13}
- {3952591200 46800 0 +13}
- {3967711200 50400 1 +13}
- {3984040800 46800 0 +13}
- {3999765600 50400 1 +13}
- {4016095200 46800 0 +13}
- {4031215200 50400 1 +13}
- {4047544800 46800 0 +13}
- {4062664800 50400 1 +13}
- {4078994400 46800 0 +13}
- {4094114400 50400 1 +13}
}
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Enderbury
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Enderbury 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Enderbury 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,8 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:Pacific/Enderbury) {
- {-9223372036854775808 -41060 0 LMT}
- {-2177411740 -43200 0 -12}
- {307627200 -39600 0 -11}
- {788871600 46800 0 +13}
+if {![info exists TZData(Pacific/Kanton)]} {
+ LoadTimeZoneFile Pacific/Kanton
}
+set TZData(:Pacific/Enderbury) $TZData(:Pacific/Kanton)
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Fiji
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Fiji 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Fiji 2022-03-14 10:03:11 UTC (rev 62700)
@@ -31,8 +31,6 @@
{1578751200 43200 0 +12}
{1608386400 46800 1 +12}
{1610805600 43200 0 +12}
- {1636812000 46800 1 +12}
- {1642255200 43200 0 +12}
{1668261600 46800 1 +12}
{1673704800 43200 0 +12}
{1699711200 46800 1 +12}
Added: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Kanton
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Kanton (rev 0)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Kanton 2022-03-14 10:03:11 UTC (rev 62700)
@@ -0,0 +1,8 @@
+# created by tools/tclZIC.tcl - do not edit
+
+set TZData(:Pacific/Kanton) {
+ {-9223372036854775808 0 0 -00}
+ {-1020470400 -43200 0 -12}
+ {307627200 -39600 0 -11}
+ {788871600 46800 0 +13}
+}
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Niue
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Niue 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Niue 2022-03-14 10:03:11 UTC (rev 62700)
@@ -2,7 +2,6 @@
set TZData(:Pacific/Niue) {
{-9223372036854775808 -40780 0 LMT}
- {-2177412020 -40800 0 -1120}
- {-599575200 -41400 0 -1130}
- {276089400 -39600 0 -11}
+ {-543069620 -40800 0 -1120}
+ {-173623200 -39600 0 -11}
}
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Rarotonga
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Rarotonga 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Rarotonga 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,8 +1,9 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Pacific/Rarotonga) {
- {-9223372036854775808 -38344 0 LMT}
- {-2177414456 -37800 0 -1030}
+ {-9223372036854775808 48056 0 LMT}
+ {-2209555256 -38344 0 LMT}
+ {-543072056 -37800 0 -1030}
{279714600 -34200 0 -10}
{289387800 -36000 0 -10}
{309952800 -34200 1 -10}
Modified: trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Tongatapu
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Tongatapu 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tcl8.6/tzdata/Pacific/Tongatapu 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,9 +1,9 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Pacific/Tongatapu) {
- {-9223372036854775808 44360 0 LMT}
- {-2177497160 44400 0 +1220}
- {-915193200 46800 0 +13}
+ {-9223372036854775808 44352 0 LMT}
+ {-767189952 44400 0 +1220}
+ {-284041200 46800 0 +13}
{915102000 46800 0 +13}
{939214800 50400 1 +13}
{953384400 46800 0 +13}
Modified: trunk/Master/tlpkg/tltcl/lib/tclConfig.sh
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tclConfig.sh 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tclConfig.sh 2022-03-14 10:03:11 UTC (rev 62700)
@@ -15,13 +15,13 @@
TCL_VERSION='8.6'
TCL_MAJOR_VERSION='8'
TCL_MINOR_VERSION='6'
-TCL_PATCH_LEVEL='.11'
+TCL_PATCH_LEVEL='.12'
# C compiler to use for compilation.
TCL_CC='i686-w64-mingw32-gcc'
# -D flags for use with the C compiler.
-TCL_DEFS='-DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1 -DTCL_THREADS=1 -DUSE_THREAD_ALLOC=1 -DTCL_CFGVAL_ENCODING=\"cp1252\" -DMODULE_SCOPE=extern -DHAVE_NO_SEH=1 -DHAVE_CAST_TO_UNION=1 -DHAVE_ZLIB=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_INTPTR_T=1 -DHAVE_UINTPTR_T=1 -DHAVE_INTRIN_H=1 -DHAVE_WSPIAPI_H=1 -DNDEBUG=1 -DTCL_CFG_OPTIMIZED=1 '
+TCL_DEFS='-DPACKAGE_NAME=\"tcl\" -DPACKAGE_TARNAME=\"tcl\" -DPACKAGE_VERSION=\"8.6\" -DPACKAGE_STRING=\"tcl\ 8.6\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1 -DTCL_THREADS=1 -DUSE_THREAD_ALLOC=1 -DTCL_CFGVAL_ENCODING=\"cp1252\" -DMODULE_SCOPE=extern -DHAVE_NO_SEH=1 -DHAVE_CAST_TO_UNION=1 -DHAVE_ZLIB=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_INTPTR_T=1 -DHAVE_UINTPTR_T=1 -DHAVE_INTRIN_H=1 -DHAVE_WSPIAPI_H=1 -DNDEBUG=1 -DTCL_CFG_OPTIMIZED=1 '
# If TCL was built with debugging symbols, generated libraries contain
# this string at the end of the library name (before the extension).
@@ -55,11 +55,11 @@
# Top-level directory in which Tcl's platform-independent files are
# installed.
-TCL_PREFIX='/home/siepo/tltcl'
+TCL_PREFIX='/tmp/tltcl'
# Top-level directory in which Tcl's platform-specific files (e.g.
# executables) are installed.
-TCL_EXEC_PREFIX='/home/siepo/tltcl'
+TCL_EXEC_PREFIX='/tmp/tltcl'
# Flags to pass to cc when compiling the components of a shared library:
TCL_SHLIB_CFLAGS=''
@@ -111,15 +111,15 @@
# String to pass to linker to pick up the Tcl library from its
# build directory.
-TCL_BUILD_LIB_SPEC='-L/home/siepo/xdrive/tltcl/tcl8.6.11/win -ltcl86'
+TCL_BUILD_LIB_SPEC='-L/home/siepo/xdrive/tltcl/tcl8.6.12/win -ltcl86'
# String to pass to linker to pick up the Tcl library from its
# installed directory.
-TCL_LIB_SPEC='-L/home/siepo/tltcl/lib -ltcl86'
+TCL_LIB_SPEC='-L/tmp/tltcl/lib -ltcl86'
# String to pass to the compiler so that an extension can
# find installed Tcl headers.
-TCL_INCLUDE_SPEC='-I/home/siepo/tltcl/include'
+TCL_INCLUDE_SPEC='-I/tmp/tltcl/include'
# Indicates whether a version numbers should be used in -l switches
# ("ok" means it's safe to use switches like -ltcl7.5; "nodots" means
@@ -146,12 +146,12 @@
# different place than the directory containing the source files, this
# points to the location of the sources, not the location where Tcl was
# compiled.
-TCL_SRC_DIR='/home/siepo/xdrive/tltcl/tcl8.6.11'
+TCL_SRC_DIR='/home/siepo/xdrive/tltcl/tcl8.6.12'
# List of standard directories in which to look for packages during
# "package require" commands. Contains the "prefix" directory plus also
# the "exec_prefix" directory, if it is different.
-TCL_PACKAGE_PATH='{/home/siepo/tltcl/lib}'
+TCL_PACKAGE_PATH='{/tmp/tltcl/lib}'
# Tcl supports stub.
TCL_SUPPORTS_STUBS=1
@@ -164,17 +164,17 @@
# String to pass to linker to pick up the Tcl stub library from its
# build directory.
-TCL_BUILD_STUB_LIB_SPEC='-L/home/siepo/xdrive/tltcl/tcl8.6.11/win -ltclstub86'
+TCL_BUILD_STUB_LIB_SPEC='-L/home/siepo/xdrive/tltcl/tcl8.6.12/win -ltclstub86'
# String to pass to linker to pick up the Tcl stub library from its
# installed directory.
-TCL_STUB_LIB_SPEC='-L/home/siepo/tltcl/lib -ltclstub86'
+TCL_STUB_LIB_SPEC='-L/tmp/tltcl/lib -ltclstub86'
# Path to the Tcl stub library in the build directory.
-TCL_BUILD_STUB_LIB_PATH='/home/siepo/xdrive/tltcl/tcl8.6.11/win/libtclstub86.a'
+TCL_BUILD_STUB_LIB_PATH='/home/siepo/xdrive/tltcl/tcl8.6.12/win/libtclstub86.a'
# Path to the Tcl stub library in the install directory.
-TCL_STUB_LIB_PATH='/home/siepo/tltcl/lib/libtclstub86.a'
+TCL_STUB_LIB_PATH='/tmp/tltcl/lib/libtclstub86.a'
# Flag, 1: we built Tcl with threads enabled, 0 we didn't
TCL_THREADS=1
Added: trunk/Master/tlpkg/tltcl/lib/tdbc1.1.3/pkgIndex.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tdbc1.1.3/pkgIndex.tcl (rev 0)
+++ trunk/Master/tlpkg/tltcl/lib/tdbc1.1.3/pkgIndex.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -0,0 +1,26 @@
+# -*- tcl -*-
+# Tcl package index file, version 1.1
+#
+# Make sure that TDBC is running in a compatible version of Tcl, and
+# that TclOO is available.
+
+if {![package vsatisfies [package provide Tcl] 8.6-]} {
+ return
+}
+apply {{dir} {
+ set libraryfile [file join $dir tdbc.tcl]
+ if {![file exists $libraryfile] && [info exists ::env(TDBC_LIBRARY)]} {
+ set libraryfile [file join $::env(TDBC_LIBRARY) tdbc.tcl]
+ }
+ if {[package vsatisfies [package provide Tcl] 9.0-]} {
+ package ifneeded tdbc 1.1.3 \
+ "package require TclOO;\
+ [list load [file join $dir tcl9tdbc113.dll] [string totitle tdbc]]\;\
+ [list source $libraryfile]"
+ } else {
+ package ifneeded tdbc 1.1.3 \
+ "package require TclOO;\
+ [list load [file join $dir tdbc113.dll] [string totitle tdbc]]\;\
+ [list source $libraryfile]"
+ }
+}} $dir
Property changes on: trunk/Master/tlpkg/tltcl/lib/tdbc1.1.3/pkgIndex.tcl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/tlpkg/tltcl/lib/tdbc1.1.3/tdbc.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tdbc1.1.3/tdbc.tcl (rev 0)
+++ trunk/Master/tlpkg/tltcl/lib/tdbc1.1.3/tdbc.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -0,0 +1,922 @@
+# tdbc.tcl --
+#
+# Definitions of base classes from which TDBC drivers' connections,
+# statements and result sets may inherit.
+#
+# Copyright (c) 2008 by Kevin B. Kenny
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# RCS: @(#) $Id$
+#
+#------------------------------------------------------------------------------
+
+package require TclOO
+
+namespace eval ::tdbc {
+ namespace export connection statement resultset
+ variable generalError [list TDBC GENERAL_ERROR HY000 {}]
+}
+
+#------------------------------------------------------------------------------
+#
+# tdbc::ParseConvenienceArgs --
+#
+# Parse the convenience arguments to a TDBC 'execute',
+# 'executewithdictionary', or 'foreach' call.
+#
+# Parameters:
+# argv - Arguments to the call
+# optsVar -- Name of a variable in caller's scope that will receive
+# a dictionary of the supplied options
+#
+# Results:
+# Returns any args remaining after parsing the options.
+#
+# Side effects:
+# Sets the 'opts' dictionary to the options.
+#
+#------------------------------------------------------------------------------
+
+proc tdbc::ParseConvenienceArgs {argv optsVar} {
+
+ variable generalError
+ upvar 1 $optsVar opts
+
+ set opts [dict create -as dicts]
+ set i 0
+
+ # Munch keyword options off the front of the command arguments
+
+ foreach {key value} $argv {
+ if {[string index $key 0] eq {-}} {
+ switch -regexp -- $key {
+ -as? {
+ if {$value ne {dicts} && $value ne {lists}} {
+ set errorcode $generalError
+ lappend errorcode badVarType $value
+ return -code error \
+ -errorcode $errorcode \
+ "bad variable type \"$value\":\
+ must be lists or dicts"
+ }
+ dict set opts -as $value
+ }
+ -c(?:o(?:l(?:u(?:m(?:n(?:s(?:v(?:a(?:r(?:i(?:a(?:b(?:le?)?)?)?)?)?)?)?)?)?)?)?)?) {
+ dict set opts -columnsvariable $value
+ }
+ -- {
+ incr i
+ break
+ }
+ default {
+ set errorcode $generalError
+ lappend errorcode badOption $key
+ return -code error \
+ -errorcode $errorcode \
+ "bad option \"$key\":\
+ must be -as or -columnsvariable"
+ }
+ }
+ } else {
+ break
+ }
+ incr i 2
+ }
+
+ return [lrange $argv[set argv {}] $i end]
+
+}
+
+
+
+#------------------------------------------------------------------------------
+#
+# tdbc::connection --
+#
+# Class that represents a generic connection to a database.
+#
+#-----------------------------------------------------------------------------
+
+oo::class create ::tdbc::connection {
+
+ # statementSeq is the sequence number of the last statement created.
+ # statementClass is the name of the class that implements the
+ # 'statement' API.
+ # primaryKeysStatement is the statement that queries primary keys
+ # foreignKeysStatement is the statement that queries foreign keys
+
+ variable statementSeq primaryKeysStatement foreignKeysStatement
+
+ # The base class constructor accepts no arguments. It sets up the
+ # machinery to do the bookkeeping to keep track of what statements
+ # are associated with the connection. The derived class constructor
+ # is expected to set the variable, 'statementClass' to the name
+ # of the class that represents statements, so that the 'prepare'
+ # method can invoke it.
+
+ constructor {} {
+ set statementSeq 0
+ namespace eval Stmt {}
+ }
+
+ # The 'close' method is simply an alternative syntax for destroying
+ # the connection.
+
+ method close {} {
+ my destroy
+ }
+
+ # The 'prepare' method creates a new statement against the connection,
+ # giving its constructor the current statement and the SQL code to
+ # prepare. It uses the 'statementClass' variable set by the constructor
+ # to get the class to instantiate.
+
+ method prepare {sqlcode} {
+ return [my statementCreate Stmt::[incr statementSeq] [self] $sqlcode]
+ }
+
+ # The 'statementCreate' method delegates to the constructor
+ # of the class specified by the 'statementClass' variable. It's
+ # intended for drivers designed before tdbc 1.0b10. Current ones
+ # should forward this method to the constructor directly.
+
+ method statementCreate {name instance sqlcode} {
+ my variable statementClass
+ return [$statementClass create $name $instance $sqlcode]
+ }
+
+ # Derived classes are expected to implement the 'prepareCall' method,
+ # and have it call 'prepare' as needed (or do something else and
+ # install the resulting statement)
+
+ # The 'statements' method lists the statements active against this
+ # connection.
+
+ method statements {} {
+ info commands Stmt::*
+ }
+
+ # The 'resultsets' method lists the result sets active against this
+ # connection.
+
+ method resultsets {} {
+ set retval {}
+ foreach statement [my statements] {
+ foreach resultset [$statement resultsets] {
+ lappend retval $resultset
+ }
+ }
+ return $retval
+ }
+
+ # The 'transaction' method executes a block of Tcl code as an
+ # ACID transaction against the database.
+
+ method transaction {script} {
+ my begintransaction
+ set status [catch {uplevel 1 $script} result options]
+ if {$status in {0 2 3 4}} {
+ set status2 [catch {my commit} result2 options2]
+ if {$status2 == 1} {
+ set status 1
+ set result $result2
+ set options $options2
+ }
+ }
+ switch -exact -- $status {
+ 0 {
+ # do nothing
+ }
+ 2 - 3 - 4 {
+ set options [dict merge {-level 1} $options[set options {}]]
+ dict incr options -level
+ }
+ default {
+ my rollback
+ }
+ }
+ return -options $options $result
+ }
+
+ # The 'allrows' method prepares a statement, then executes it with
+ # a given set of substituents, returning a list of all the rows
+ # that the statement returns. Optionally, it stores the names of
+ # the columns in '-columnsvariable'.
+ # Usage:
+ # $db allrows ?-as lists|dicts? ?-columnsvariable varName? ?--?
+ # sql ?dictionary?
+
+ method allrows args {
+
+ variable ::tdbc::generalError
+
+ # Grab keyword-value parameters
+
+ set args [::tdbc::ParseConvenienceArgs $args[set args {}] opts]
+
+ # Check postitional parameters
+
+ set cmd [list [self] prepare]
+ if {[llength $args] == 1} {
+ set sqlcode [lindex $args 0]
+ } elseif {[llength $args] == 2} {
+ lassign $args sqlcode dict
+ } else {
+ set errorcode $generalError
+ lappend errorcode wrongNumArgs
+ return -code error -errorcode $errorcode \
+ "wrong # args: should be [lrange [info level 0] 0 1]\
+ ?-option value?... ?--? sqlcode ?dictionary?"
+ }
+ lappend cmd $sqlcode
+
+ # Prepare the statement
+
+ set stmt [uplevel 1 $cmd]
+
+ # Delegate to the statement to accumulate the results
+
+ set cmd [list $stmt allrows {*}$opts --]
+ if {[info exists dict]} {
+ lappend cmd $dict
+ }
+ set status [catch {
+ uplevel 1 $cmd
+ } result options]
+
+ # Destroy the statement
+
+ catch {
+ $stmt close
+ }
+
+ return -options $options $result
+ }
+
+ # The 'foreach' method prepares a statement, then executes it with
+ # a supplied set of substituents. For each row of the result,
+ # it sets a variable to the row and invokes a script in the caller's
+ # scope.
+ #
+ # Usage:
+ # $db foreach ?-as lists|dicts? ?-columnsVariable varName? ?--?
+ # varName sql ?dictionary? script
+
+ method foreach args {
+
+ variable ::tdbc::generalError
+
+ # Grab keyword-value parameters
+
+ set args [::tdbc::ParseConvenienceArgs $args[set args {}] opts]
+
+ # Check postitional parameters
+
+ set cmd [list [self] prepare]
+ if {[llength $args] == 3} {
+ lassign $args varname sqlcode script
+ } elseif {[llength $args] == 4} {
+ lassign $args varname sqlcode dict script
+ } else {
+ set errorcode $generalError
+ lappend errorcode wrongNumArgs
+ return -code error -errorcode $errorcode \
+ "wrong # args: should be [lrange [info level 0] 0 1]\
+ ?-option value?... ?--? varname sqlcode ?dictionary? script"
+ }
+ lappend cmd $sqlcode
+
+ # Prepare the statement
+
+ set stmt [uplevel 1 $cmd]
+
+ # Delegate to the statement to iterate over the results
+
+ set cmd [list $stmt foreach {*}$opts -- $varname]
+ if {[info exists dict]} {
+ lappend cmd $dict
+ }
+ lappend cmd $script
+ set status [catch {
+ uplevel 1 $cmd
+ } result options]
+
+ # Destroy the statement
+
+ catch {
+ $stmt close
+ }
+
+ # Adjust return level in the case that the script [return]s
+
+ if {$status == 2} {
+ set options [dict merge {-level 1} $options[set options {}]]
+ dict incr options -level
+ }
+ return -options $options $result
+ }
+
+ # The 'BuildPrimaryKeysStatement' method builds a SQL statement to
+ # retrieve the primary keys from a database. (It executes once the
+ # first time the 'primaryKeys' method is executed, and retains the
+ # prepared statement for reuse.)
+
+ method BuildPrimaryKeysStatement {} {
+
+ # On some databases, CONSTRAINT_CATALOG is always NULL and
+ # JOINing to it fails. Check for this case and include that
+ # JOIN only if catalog names are supplied.
+
+ set catalogClause {}
+ if {[lindex [set count [my allrows -as lists {
+ SELECT COUNT(*)
+ FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
+ WHERE CONSTRAINT_CATALOG IS NOT NULL}]] 0 0] != 0} {
+ set catalogClause \
+ {AND xtable.CONSTRAINT_CATALOG = xcolumn.CONSTRAINT_CATALOG}
+ }
+ set primaryKeysStatement [my prepare "
+ SELECT xtable.TABLE_SCHEMA AS \"tableSchema\",
+ xtable.TABLE_NAME AS \"tableName\",
+ xtable.CONSTRAINT_CATALOG AS \"constraintCatalog\",
+ xtable.CONSTRAINT_SCHEMA AS \"constraintSchema\",
+ xtable.CONSTRAINT_NAME AS \"constraintName\",
+ xcolumn.COLUMN_NAME AS \"columnName\",
+ xcolumn.ORDINAL_POSITION AS \"ordinalPosition\"
+ FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS xtable
+ INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE xcolumn
+ ON xtable.CONSTRAINT_SCHEMA = xcolumn.CONSTRAINT_SCHEMA
+ AND xtable.TABLE_NAME = xcolumn.TABLE_NAME
+ AND xtable.CONSTRAINT_NAME = xcolumn.CONSTRAINT_NAME
+ $catalogClause
+ WHERE xtable.TABLE_NAME = :tableName
+ AND xtable.CONSTRAINT_TYPE = 'PRIMARY KEY'
+ "]
+ }
+
+ # The default implementation of the 'primarykeys' method uses the
+ # SQL INFORMATION_SCHEMA to retrieve primary key information. Databases
+ # that might not have INFORMATION_SCHEMA must overload this method.
+
+ method primarykeys {tableName} {
+ if {![info exists primaryKeysStatement]} {
+ my BuildPrimaryKeysStatement
+ }
+ tailcall $primaryKeysStatement allrows [list tableName $tableName]
+ }
+
+ # The 'BuildForeignKeysStatements' method builds a SQL statement to
+ # retrieve the foreign keys from a database. (It executes once the
+ # first time the 'foreignKeys' method is executed, and retains the
+ # prepared statements for reuse.)
+
+ method BuildForeignKeysStatement {} {
+
+ # On some databases, CONSTRAINT_CATALOG is always NULL and
+ # JOINing to it fails. Check for this case and include that
+ # JOIN only if catalog names are supplied.
+
+ set catalogClause1 {}
+ set catalogClause2 {}
+ if {[lindex [set count [my allrows -as lists {
+ SELECT COUNT(*)
+ FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
+ WHERE CONSTRAINT_CATALOG IS NOT NULL}]] 0 0] != 0} {
+ set catalogClause1 \
+ {AND fkc.CONSTRAINT_CATALOG = rc.CONSTRAINT_CATALOG}
+ set catalogClause2 \
+ {AND pkc.CONSTRAINT_CATALOG = rc.CONSTRAINT_CATALOG}
+ }
+
+ foreach {exists1 clause1} {
+ 0 {}
+ 1 { AND pkc.TABLE_NAME = :primary}
+ } {
+ foreach {exists2 clause2} {
+ 0 {}
+ 1 { AND fkc.TABLE_NAME = :foreign}
+ } {
+ set stmt [my prepare "
+ SELECT rc.CONSTRAINT_CATALOG AS \"foreignConstraintCatalog\",
+ rc.CONSTRAINT_SCHEMA AS \"foreignConstraintSchema\",
+ rc.CONSTRAINT_NAME AS \"foreignConstraintName\",
+ rc.UNIQUE_CONSTRAINT_CATALOG
+ AS \"primaryConstraintCatalog\",
+ rc.UNIQUE_CONSTRAINT_SCHEMA AS \"primaryConstraintSchema\",
+ rc.UNIQUE_CONSTRAINT_NAME AS \"primaryConstraintName\",
+ rc.UPDATE_RULE AS \"updateAction\",
+ rc.DELETE_RULE AS \"deleteAction\",
+ pkc.TABLE_CATALOG AS \"primaryCatalog\",
+ pkc.TABLE_SCHEMA AS \"primarySchema\",
+ pkc.TABLE_NAME AS \"primaryTable\",
+ pkc.COLUMN_NAME AS \"primaryColumn\",
+ fkc.TABLE_CATALOG AS \"foreignCatalog\",
+ fkc.TABLE_SCHEMA AS \"foreignSchema\",
+ fkc.TABLE_NAME AS \"foreignTable\",
+ fkc.COLUMN_NAME AS \"foreignColumn\",
+ pkc.ORDINAL_POSITION AS \"ordinalPosition\"
+ FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc
+ INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE fkc
+ ON fkc.CONSTRAINT_NAME = rc.CONSTRAINT_NAME
+ AND fkc.CONSTRAINT_SCHEMA = rc.CONSTRAINT_SCHEMA
+ $catalogClause1
+ INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE pkc
+ ON pkc.CONSTRAINT_NAME = rc.UNIQUE_CONSTRAINT_NAME
+ AND pkc.CONSTRAINT_SCHEMA = rc.UNIQUE_CONSTRAINT_SCHEMA
+ $catalogClause2
+ AND pkc.ORDINAL_POSITION = fkc.ORDINAL_POSITION
+ WHERE 1=1
+ $clause1
+ $clause2
+ ORDER BY \"foreignConstraintCatalog\", \"foreignConstraintSchema\", \"foreignConstraintName\", \"ordinalPosition\"
+"]
+ dict set foreignKeysStatement $exists1 $exists2 $stmt
+ }
+ }
+ }
+
+ # The default implementation of the 'foreignkeys' method uses the
+ # SQL INFORMATION_SCHEMA to retrieve primary key information. Databases
+ # that might not have INFORMATION_SCHEMA must overload this method.
+
+ method foreignkeys {args} {
+
+ variable ::tdbc::generalError
+
+ # Check arguments
+
+ set argdict {}
+ if {[llength $args] % 2 != 0} {
+ set errorcode $generalError
+ lappend errorcode wrongNumArgs
+ return -code error -errorcode $errorcode \
+ "wrong # args: should be [lrange [info level 0] 0 1]\
+ ?-option value?..."
+ }
+ foreach {key value} $args {
+ if {$key ni {-primary -foreign}} {
+ set errorcode $generalError
+ lappend errorcode badOption
+ return -code error -errorcode $errorcode \
+ "bad option \"$key\", must be -primary or -foreign"
+ }
+ set key [string range $key 1 end]
+ if {[dict exists $argdict $key]} {
+ set errorcode $generalError
+ lappend errorcode dupOption
+ return -code error -errorcode $errorcode \
+ "duplicate option \"$key\" supplied"
+ }
+ dict set argdict $key $value
+ }
+
+ # Build the statements that query foreign keys. There are four
+ # of them, one for each combination of whether -primary
+ # and -foreign is specified.
+
+ if {![info exists foreignKeysStatement]} {
+ my BuildForeignKeysStatement
+ }
+ set stmt [dict get $foreignKeysStatement \
+ [dict exists $argdict primary] \
+ [dict exists $argdict foreign]]
+ tailcall $stmt allrows $argdict
+ }
+
+ # Derived classes are expected to implement the 'begintransaction',
+ # 'commit', and 'rollback' methods.
+
+ # Derived classes are expected to implement 'tables' and 'columns' method.
+
+}
+
+#------------------------------------------------------------------------------
+#
+# Class: tdbc::statement
+#
+# Class that represents a SQL statement in a generic database
+#
+#------------------------------------------------------------------------------
+
+oo::class create tdbc::statement {
+
+ # resultSetSeq is the sequence number of the last result set created.
+ # resultSetClass is the name of the class that implements the 'resultset'
+ # API.
+
+ variable resultSetClass resultSetSeq
+
+ # The base class constructor accepts no arguments. It initializes
+ # the machinery for tracking the ownership of result sets. The derived
+ # constructor is expected to invoke the base constructor, and to
+ # set a variable 'resultSetClass' to the fully-qualified name of the
+ # class that represents result sets.
+
+ constructor {} {
+ set resultSetSeq 0
+ namespace eval ResultSet {}
+ }
+
+ # The 'execute' method on a statement runs the statement with
+ # a particular set of substituted variables. It actually works
+ # by creating the result set object and letting that objects
+ # constructor do the work of running the statement. The creation
+ # is wrapped in an [uplevel] call because the substitution proces
+ # may need to access variables in the caller's scope.
+
+ # WORKAROUND: Take out the '0 &&' from the next line when
+ # Bug 2649975 is fixed
+ if {0 && [package vsatisfies [package provide Tcl] 8.6]} {
+ method execute args {
+ tailcall my resultSetCreate \
+ [namespace current]::ResultSet::[incr resultSetSeq] \
+ [self] {*}$args
+ }
+ } else {
+ method execute args {
+ return \
+ [uplevel 1 \
+ [list \
+ [self] resultSetCreate \
+ [namespace current]::ResultSet::[incr resultSetSeq] \
+ [self] {*}$args]]
+ }
+ }
+
+ # The 'ResultSetCreate' method is expected to be a forward to the
+ # appropriate result set constructor. If it's missing, the driver must
+ # have been designed for tdbc 1.0b9 and earlier, and the 'resultSetClass'
+ # variable holds the class name.
+
+ method resultSetCreate {name instance args} {
+ return [uplevel 1 [list $resultSetClass create \
+ $name $instance {*}$args]]
+ }
+
+ # The 'resultsets' method returns a list of result sets produced by
+ # the current statement
+
+ method resultsets {} {
+ info commands ResultSet::*
+ }
+
+ # The 'allrows' method executes a statement with a given set of
+ # substituents, and returns a list of all the rows that the statement
+ # returns. Optionally, it stores the names of columns in
+ # '-columnsvariable'.
+ #
+ # Usage:
+ # $statement allrows ?-as lists|dicts? ?-columnsvariable varName? ?--?
+ # ?dictionary?
+
+
+ method allrows args {
+
+ variable ::tdbc::generalError
+
+ # Grab keyword-value parameters
+
+ set args [::tdbc::ParseConvenienceArgs $args[set args {}] opts]
+
+ # Check postitional parameters
+
+ set cmd [list [self] execute]
+ if {[llength $args] == 0} {
+ # do nothing
+ } elseif {[llength $args] == 1} {
+ lappend cmd [lindex $args 0]
+ } else {
+ set errorcode $generalError
+ lappend errorcode wrongNumArgs
+ return -code error -errorcode $errorcode \
+ "wrong # args: should be [lrange [info level 0] 0 1]\
+ ?-option value?... ?--? ?dictionary?"
+ }
+
+ # Get the result set
+
+ set resultSet [uplevel 1 $cmd]
+
+ # Delegate to the result set's [allrows] method to accumulate
+ # the rows of the result.
+
+ set cmd [list $resultSet allrows {*}$opts]
+ set status [catch {
+ uplevel 1 $cmd
+ } result options]
+
+ # Destroy the result set
+
+ catch {
+ rename $resultSet {}
+ }
+
+ # Adjust return level in the case that the script [return]s
+
+ if {$status == 2} {
+ set options [dict merge {-level 1} $options[set options {}]]
+ dict incr options -level
+ }
+ return -options $options $result
+ }
+
+ # The 'foreach' method executes a statement with a given set of
+ # substituents. It runs the supplied script, substituting the supplied
+ # named variable. Optionally, it stores the names of columns in
+ # '-columnsvariable'.
+ #
+ # Usage:
+ # $statement foreach ?-as lists|dicts? ?-columnsvariable varName? ?--?
+ # variableName ?dictionary? script
+
+ method foreach args {
+
+ variable ::tdbc::generalError
+
+ # Grab keyword-value parameters
+
+ set args [::tdbc::ParseConvenienceArgs $args[set args {}] opts]
+
+ # Check positional parameters
+
+ set cmd [list [self] execute]
+ if {[llength $args] == 2} {
+ lassign $args varname script
+ } elseif {[llength $args] == 3} {
+ lassign $args varname dict script
+ lappend cmd $dict
+ } else {
+ set errorcode $generalError
+ lappend errorcode wrongNumArgs
+ return -code error -errorcode $errorcode \
+ "wrong # args: should be [lrange [info level 0] 0 1]\
+ ?-option value?... ?--? varName ?dictionary? script"
+ }
+
+ # Get the result set
+
+ set resultSet [uplevel 1 $cmd]
+
+ # Delegate to the result set's [foreach] method to evaluate
+ # the script for each row of the result.
+
+ set cmd [list $resultSet foreach {*}$opts -- $varname $script]
+ set status [catch {
+ uplevel 1 $cmd
+ } result options]
+
+ # Destroy the result set
+
+ catch {
+ rename $resultSet {}
+ }
+
+ # Adjust return level in the case that the script [return]s
+
+ if {$status == 2} {
+ set options [dict merge {-level 1} $options[set options {}]]
+ dict incr options -level
+ }
+ return -options $options $result
+ }
+
+ # The 'close' method is syntactic sugar for invoking the destructor
+
+ method close {} {
+ my destroy
+ }
+
+ # Derived classes are expected to implement their own constructors,
+ # plus the following methods:
+
+ # paramtype paramName ?direction? type ?scale ?precision??
+ # Declares the type of a parameter in the statement
+
+}
+
+#------------------------------------------------------------------------------
+#
+# Class: tdbc::resultset
+#
+# Class that represents a result set in a generic database.
+#
+#------------------------------------------------------------------------------
+
+oo::class create tdbc::resultset {
+
+ constructor {} { }
+
+ # The 'allrows' method returns a list of all rows that a given
+ # result set returns.
+
+ method allrows args {
+
+ variable ::tdbc::generalError
+
+ # Parse args
+
+ set args [::tdbc::ParseConvenienceArgs $args[set args {}] opts]
+ if {[llength $args] != 0} {
+ set errorcode $generalError
+ lappend errorcode wrongNumArgs
+ return -code error -errorcode $errorcode \
+ "wrong # args: should be [lrange [info level 0] 0 1]\
+ ?-option value?... ?--? varName script"
+ }
+
+ # Do -columnsvariable if requested
+
+ if {[dict exists $opts -columnsvariable]} {
+ upvar 1 [dict get $opts -columnsvariable] columns
+ }
+
+ # Assemble the results
+
+ if {[dict get $opts -as] eq {lists}} {
+ set delegate nextlist
+ } else {
+ set delegate nextdict
+ }
+ set results [list]
+ while {1} {
+ set columns [my columns]
+ while {[my $delegate row]} {
+ lappend results $row
+ }
+ if {![my nextresults]} break
+ }
+ return $results
+
+ }
+
+ # The 'foreach' method runs a script on each row from a result set.
+
+ method foreach args {
+
+ variable ::tdbc::generalError
+
+ # Grab keyword-value parameters
+
+ set args [::tdbc::ParseConvenienceArgs $args[set args {}] opts]
+
+ # Check positional parameters
+
+ if {[llength $args] != 2} {
+ set errorcode $generalError
+ lappend errorcode wrongNumArgs
+ return -code error -errorcode $errorcode \
+ "wrong # args: should be [lrange [info level 0] 0 1]\
+ ?-option value?... ?--? varName script"
+ }
+
+ # Do -columnsvariable if requested
+
+ if {[dict exists $opts -columnsvariable]} {
+ upvar 1 [dict get $opts -columnsvariable] columns
+ }
+
+ # Iterate over the groups of results
+ while {1} {
+
+ # Export column names to caller
+
+ set columns [my columns]
+
+ # Iterate over the rows of one group of results
+
+ upvar 1 [lindex $args 0] row
+ if {[dict get $opts -as] eq {lists}} {
+ set delegate nextlist
+ } else {
+ set delegate nextdict
+ }
+ while {[my $delegate row]} {
+ set status [catch {
+ uplevel 1 [lindex $args 1]
+ } result options]
+ switch -exact -- $status {
+ 0 - 4 { # OK or CONTINUE
+ }
+ 2 { # RETURN
+ set options \
+ [dict merge {-level 1} $options[set options {}]]
+ dict incr options -level
+ return -options $options $result
+ }
+ 3 { # BREAK
+ set broken 1
+ break
+ }
+ default { # ERROR or unknown status
+ return -options $options $result
+ }
+ }
+ }
+
+ # Advance to the next group of results if there is one
+
+ if {[info exists broken] || ![my nextresults]} {
+ break
+ }
+ }
+
+ return
+ }
+
+
+ # The 'nextrow' method retrieves a row in the form of either
+ # a list or a dictionary.
+
+ method nextrow {args} {
+
+ variable ::tdbc::generalError
+
+ set opts [dict create -as dicts]
+ set i 0
+
+ # Munch keyword options off the front of the command arguments
+
+ foreach {key value} $args {
+ if {[string index $key 0] eq {-}} {
+ switch -regexp -- $key {
+ -as? {
+ dict set opts -as $value
+ }
+ -- {
+ incr i
+ break
+ }
+ default {
+ set errorcode $generalError
+ lappend errorcode badOption $key
+ return -code error -errorcode $errorcode \
+ "bad option \"$key\":\
+ must be -as or -columnsvariable"
+ }
+ }
+ } else {
+ break
+ }
+ incr i 2
+ }
+
+ set args [lrange $args $i end]
+ if {[llength $args] != 1} {
+ set errorcode $generalError
+ lappend errorcode wrongNumArgs
+ return -code error -errorcode $errorcode \
+ "wrong # args: should be [lrange [info level 0] 0 1]\
+ ?-option value?... ?--? varName"
+ }
+ upvar 1 [lindex $args 0] row
+ if {[dict get $opts -as] eq {lists}} {
+ set delegate nextlist
+ } else {
+ set delegate nextdict
+ }
+ return [my $delegate row]
+ }
+
+ # Derived classes must override 'nextresults' if a single
+ # statement execution can yield multiple sets of results
+
+ method nextresults {} {
+ return 0
+ }
+
+ # Derived classes must override 'outputparams' if statements can
+ # have output parameters.
+
+ method outputparams {} {
+ return {}
+ }
+
+ # The 'close' method is syntactic sugar for destroying the result set.
+
+ method close {} {
+ my destroy
+ }
+
+ # Derived classes are expected to implement the following methods:
+
+ # constructor and destructor.
+ # Constructor accepts a statement and an optional
+ # a dictionary of substituted parameters and
+ # executes the statement against the database. If
+ # the dictionary is not supplied, then the default
+ # is to get params from variables in the caller's scope).
+ # columns
+ # -- Returns a list of the names of the columns in the result.
+ # nextdict variableName
+ # -- Stores the next row of the result set in the given variable
+ # in caller's scope, in the form of a dictionary that maps
+ # column names to values.
+ # nextlist variableName
+ # -- Stores the next row of the result set in the given variable
+ # in caller's scope, in the form of a list of cells.
+ # rowcount
+ # -- Returns a count of rows affected by the statement, or -1
+ # if the count of rows has not been determined.
+
+}
\ No newline at end of file
Property changes on: trunk/Master/tlpkg/tltcl/lib/tdbc1.1.3/tdbc.tcl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/tlpkg/tltcl/lib/tdbc1.1.3/tdbc113.dll
===================================================================
(Binary files differ)
Index: trunk/Master/tlpkg/tltcl/lib/tdbc1.1.3/tdbc113.dll
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tdbc1.1.3/tdbc113.dll 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tdbc1.1.3/tdbc113.dll 2022-03-14 10:03:11 UTC (rev 62700)
Property changes on: trunk/Master/tlpkg/tltcl/lib/tdbc1.1.3/tdbc113.dll
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/x-dosexec
\ No newline at end of property
Added: trunk/Master/tlpkg/tltcl/lib/tdbc1.1.3/tdbcConfig.sh
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tdbc1.1.3/tdbcConfig.sh (rev 0)
+++ trunk/Master/tlpkg/tltcl/lib/tdbc1.1.3/tdbcConfig.sh 2022-03-14 10:03:11 UTC (rev 62700)
@@ -0,0 +1,81 @@
+# tdbcConfig.sh --
+#
+# This shell script (for sh) is generated automatically by TDBC's configure
+# script. It will create shell variables for most of the configuration options
+# discovered by the configure script. This script is intended to be included
+# by the configure scripts for TDBC extensions so that they don't have to
+# figure this all out for themselves.
+#
+# The information in this file is specific to a single platform.
+#
+# RCS: @(#) $Id$
+
+# TDBC's version number
+tdbc_VERSION=1.1.3
+TDBC_VERSION=1.1.3
+
+# Name of the TDBC library - may be either a static or shared library
+tdbc_LIB_FILE=tdbc113.dll
+TDBC_LIB_FILE=tdbc113.dll
+
+# String to pass to the linker to pick up the TDBC library from its build dir
+tdbc_BUILD_LIB_SPEC="-L/home/siepo/xdrive/tltcl/tcl8.6.12/win/pkgs/tdbc1.1.3 -ltdbc113"
+TDBC_BUILD_LIB_SPEC="-L/home/siepo/xdrive/tltcl/tcl8.6.12/win/pkgs/tdbc1.1.3 -ltdbc113"
+
+# String to pass to the linker to pick up the TDBC library from its installed
+# dir.
+tdbc_LIB_SPEC="-L/tmp/tltcl/lib/tdbc1.1.3 -ltdbc113"
+TDBC_LIB_SPEC="-L/tmp/tltcl/lib/tdbc1.1.3 -ltdbc113"
+
+# Name of the TBDC stub library
+tdbc_STUB_LIB_FILE="libtdbcstub113.a"
+TDBC_STUB_LIB_FILE="libtdbcstub113.a"
+
+# String to pass to the linker to pick up the TDBC stub library from its
+# build directory
+tdbc_BUILD_STUB_LIB_SPEC="-L/home/siepo/xdrive/tltcl/tcl8.6.12/win/pkgs/tdbc1.1.3 -ltdbcstub113"
+TDBC_BUILD_STUB_LIB_SPEC="-L/home/siepo/xdrive/tltcl/tcl8.6.12/win/pkgs/tdbc1.1.3 -ltdbcstub113"
+
+# String to pass to the linker to pick up the TDBC stub library from its
+# installed directory
+tdbc_STUB_LIB_SPEC="-L/tmp/tltcl/lib/tdbc1.1.3 -ltdbcstub113"
+TDBC_STUB_LIB_SPEC="-L/tmp/tltcl/lib/tdbc1.1.3 -ltdbcstub113"
+
+# Path name of the TDBC stub library in its build directory
+tdbc_BUILD_STUB_LIB_PATH="/home/siepo/xdrive/tltcl/tcl8.6.12/win/pkgs/tdbc1.1.3/libtdbcstub113.a"
+TDBC_BUILD_STUB_LIB_PATH="/home/siepo/xdrive/tltcl/tcl8.6.12/win/pkgs/tdbc1.1.3/libtdbcstub113.a"
+
+# Path name of the TDBC stub library in its installed directory
+tdbc_STUB_LIB_PATH="/tmp/tltcl/lib/tdbc1.1.3/libtdbcstub113.a"
+TDBC_STUB_LIB_PATH="/tmp/tltcl/lib/tdbc1.1.3/libtdbcstub113.a"
+
+# Location of the top-level source directories from which TDBC was built.
+# This is the directory that contains doc/, generic/ and so on. If TDBC
+# was compiled in a directory other than the source directory, this still
+# points to the location of the sources, not the location where TDBC was
+# compiled.
+tdbc_SRC_DIR="/home/siepo/xdrive/tltcl/tcl8.6.12/pkgs/tdbc1.1.3"
+TDBC_SRC_DIR="/home/siepo/xdrive/tltcl/tcl8.6.12/pkgs/tdbc1.1.3"
+
+# String to pass to the compiler so that an extension can find installed TDBC
+# headers
+tdbc_INCLUDE_SPEC="-I/tmp/tltcl/include"
+TDBC_INCLUDE_SPEC="-I/tmp/tltcl/include"
+
+# String to pass to the compiler so that an extension can find TDBC headers
+# in the source directory
+tdbc_BUILD_INCLUDE_SPEC="-I/home/siepo/xdrive/tltcl/tcl8.6.12/pkgs/tdbc1.1.3/generic"
+TDBC_BUILD_INCLUDE_SPEC="-I/home/siepo/xdrive/tltcl/tcl8.6.12/pkgs/tdbc1.1.3/generic"
+
+# Path name where .tcl files in the tdbc package appear at run time.
+tdbc_LIBRARY_PATH="/tmp/tltcl/lib/tdbc1.1.3"
+TDBC_LIBRARY_PATH="/tmp/tltcl/lib/tdbc1.1.3"
+
+# Path name where .tcl files in the tdbc package appear at build time.
+tdbc_BUILD_LIBRARY_PATH="/home/siepo/xdrive/tltcl/tcl8.6.12/pkgs/tdbc1.1.3/library"
+TDBC_BUILD_LIBRARY_PATH="/home/siepo/xdrive/tltcl/tcl8.6.12/pkgs/tdbc1.1.3/library"
+
+# Additional flags that must be passed to the C compiler to use tdbc
+tdbc_CFLAGS=
+TDBC_CFLAGS=
+
Property changes on: trunk/Master/tlpkg/tltcl/lib/tdbc1.1.3/tdbcConfig.sh
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/tlpkg/tltcl/lib/tdbcmysql1.1.3/pkgIndex.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tdbcmysql1.1.3/pkgIndex.tcl (rev 0)
+++ trunk/Master/tlpkg/tltcl/lib/tdbcmysql1.1.3/pkgIndex.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -0,0 +1,14 @@
+# Index file to load the TDBC MySQL package.
+
+if {![package vsatisfies [package provide Tcl] 8.6-]} {
+ return
+}
+if {[package vsatisfies [package provide Tcl] 9.0-]} {
+ package ifneeded tdbc::mysql 1.1.3 \
+ "[list source [file join $dir tdbcmysql.tcl]]\;\
+ [list load [file join $dir tcl9tdbcmysql113.dll] [string totitle tdbcmysql]]"
+} else {
+ package ifneeded tdbc::mysql 1.1.3 \
+ "[list source [file join $dir tdbcmysql.tcl]]\;\
+ [list load [file join $dir tdbcmysql113.dll] [string totitle tdbcmysql]]"
+}
Property changes on: trunk/Master/tlpkg/tltcl/lib/tdbcmysql1.1.3/pkgIndex.tcl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/tlpkg/tltcl/lib/tdbcmysql1.1.3/tdbcmysql.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tdbcmysql1.1.3/tdbcmysql.tcl (rev 0)
+++ trunk/Master/tlpkg/tltcl/lib/tdbcmysql1.1.3/tdbcmysql.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -0,0 +1,193 @@
+# tdbcmysql.tcl --
+#
+# Class definitions and Tcl-level methods for the tdbc::mysql bridge.
+#
+# Copyright (c) 2008 by Kevin B. Kenny
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# RCS: @(#) $Id: tdbcmysql.tcl,v 1.47 2008/02/27 02:08:27 kennykb Exp $
+#
+#------------------------------------------------------------------------------
+
+package require tdbc
+
+::namespace eval ::tdbc::mysql {
+
+ namespace export connection datasources drivers
+
+}
+
+#------------------------------------------------------------------------------
+#
+# tdbc::mysql::connection --
+#
+# Class representing a connection to a database through MYSQL.
+#
+#-------------------------------------------------------------------------------
+
+::oo::class create ::tdbc::mysql::connection {
+
+ superclass ::tdbc::connection
+
+ # The constructor is written in C. It takes alternating keywords
+ # and values pairs as its argumenta. (See the manual page for the
+ # available options.)
+
+ variable foreignKeysStatement
+
+ # The 'statementCreate' method delegates to the constructor of the
+ # statement class
+
+ forward statementCreate ::tdbc::mysql::statement create
+
+ # The 'columns' method returns a dictionary describing the tables
+ # in the database
+
+ method columns {table {pattern %}} {
+
+ # To return correct lengths of CHARACTER and BINARY columns,
+ # we need to know the maximum lengths of characters in each
+ # collation. We cache this information only once, on the first
+ # call to 'columns'.
+
+ if {[my NeedCollationInfo]} {
+ my SetCollationInfo {*}[my allrows -as lists {
+ SELECT coll.id, cs.maxlen
+ FROM INFORMATION_SCHEMA.COLLATIONS coll,
+ INFORMATION_SCHEMA.CHARACTER_SETS cs
+ WHERE cs.CHARACTER_SET_NAME = coll.CHARACTER_SET_NAME
+ ORDER BY coll.id DESC
+ }]
+ }
+
+ return [my Columns $table $pattern]
+ }
+
+ # The 'preparecall' method gives a portable interface to prepare
+ # calls to stored procedures. It delegates to 'prepare' to do the
+ # actual work.
+
+ method preparecall {call} {
+ regexp {^[[:space:]]*(?:([A-Za-z_][A-Za-z_0-9]*)[[:space:]]*=)?(.*)} \
+ $call -> varName rest
+ if {$varName eq {}} {
+ my prepare "CALL $rest"
+ } else {
+ my prepare \\{:$varName=$rest\\}
+ }
+ }
+
+ # The 'init', 'begintransaction', 'commit, 'rollback', 'tables'
+ # 'NeedCollationInfo', 'SetCollationInfo', and 'Columns' methods
+ # are implemented in C.
+
+ # The 'BuildForeignKeysStatements' method builds a SQL statement to
+ # retrieve the foreign keys from a database. (It executes once the
+ # first time the 'foreignKeys' method is executed, and retains the
+ # prepared statements for reuse.) It is slightly nonstandard because
+ # MYSQL doesn't name the PRIMARY constraints uniquely.
+
+ method BuildForeignKeysStatement {} {
+
+ foreach {exists1 clause1} {
+ 0 {}
+ 1 { AND fkc.REFERENCED_TABLE_NAME = :primary}
+ } {
+ foreach {exists2 clause2} {
+ 0 {}
+ 1 { AND fkc.TABLE_NAME = :foreign}
+ } {
+ set stmt [my prepare "
+ SELECT rc.CONSTRAINT_SCHEMA AS \"foreignConstraintSchema\",
+ rc.CONSTRAINT_NAME AS \"foreignConstraintName\",
+ rc.UPDATE_RULE AS \"updateAction\",
+ rc.DELETE_RULE AS \"deleteAction\",
+ fkc.REFERENCED_TABLE_SCHEMA AS \"primarySchema\",
+ fkc.REFERENCED_TABLE_NAME AS \"primaryTable\",
+ fkc.REFERENCED_COLUMN_NAME AS \"primaryColumn\",
+ fkc.TABLE_SCHEMA AS \"foreignSchema\",
+ fkc.TABLE_NAME AS \"foreignTable\",
+ fkc.COLUMN_NAME AS \"foreignColumn\",
+ fkc.ORDINAL_POSITION AS \"ordinalPosition\"
+ FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc
+ INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE fkc
+ ON fkc.CONSTRAINT_NAME = rc.CONSTRAINT_NAME
+ AND fkc.CONSTRAINT_SCHEMA = rc.CONSTRAINT_SCHEMA
+ WHERE 1=1
+ $clause1
+ $clause2
+"]
+ dict set foreignKeysStatement $exists1 $exists2 $stmt
+ }
+ }
+ }
+}
+
+#------------------------------------------------------------------------------
+#
+# tdbc::mysql::statement --
+#
+# The class 'tdbc::mysql::statement' models one statement against a
+# database accessed through an MYSQL connection
+#
+#------------------------------------------------------------------------------
+
+::oo::class create ::tdbc::mysql::statement {
+
+ superclass ::tdbc::statement
+
+ # The 'resultSetCreate' method forwards to the constructor of the
+ # result set.
+
+ forward resultSetCreate ::tdbc::mysql::resultset create
+
+ # Methods implemented in C:
+ #
+ # constructor connection SQLCode
+ # The constructor accepts the handle to the connection and the SQL code
+ # for the statement to prepare. It creates a subordinate namespace to
+ # hold the statement's active result sets, and then delegates to the
+ # 'init' method, written in C, to do the actual work of preparing the
+ # statement.
+ # params
+ # Returns descriptions of the parameters of a statement.
+ # paramtype paramname ?direction? type ?precision ?scale??
+ # Declares the type of a parameter in the statement
+
+}
+
+#------------------------------------------------------------------------------
+#
+# tdbc::mysql::resultset --
+#
+# The class 'tdbc::mysql::resultset' models the result set that is
+# produced by executing a statement against an MYSQL database.
+#
+#------------------------------------------------------------------------------
+
+::oo::class create ::tdbc::mysql::resultset {
+
+ superclass ::tdbc::resultset
+
+ # Methods implemented in C include:
+
+ # constructor statement ?dictionary?
+ # -- Executes the statement against the database, optionally providing
+ # a dictionary of substituted parameters (default is to get params
+ # from variables in the caller's scope).
+ # columns
+ # -- Returns a list of the names of the columns in the result.
+ # nextdict
+ # -- Stores the next row of the result set in the given variable in
+ # the caller's scope as a dictionary whose keys are
+ # column names and whose values are column values, or else
+ # as a list of cells.
+ # nextlist
+ # -- Stores the next row of the result set in the given variable in
+ # the caller's scope as a list of cells.
+ # rowcount
+ # -- Returns a count of rows affected by the statement, or -1
+ # if the count of rows has not been determined.
+
+}
Property changes on: trunk/Master/tlpkg/tltcl/lib/tdbcmysql1.1.3/tdbcmysql.tcl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/tlpkg/tltcl/lib/tdbcmysql1.1.3/tdbcmysql113.dll
===================================================================
(Binary files differ)
Index: trunk/Master/tlpkg/tltcl/lib/tdbcmysql1.1.3/tdbcmysql113.dll
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tdbcmysql1.1.3/tdbcmysql113.dll 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tdbcmysql1.1.3/tdbcmysql113.dll 2022-03-14 10:03:11 UTC (rev 62700)
Property changes on: trunk/Master/tlpkg/tltcl/lib/tdbcmysql1.1.3/tdbcmysql113.dll
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/x-dosexec
\ No newline at end of property
Added: trunk/Master/tlpkg/tltcl/lib/tdbcodbc1.1.3/pkgIndex.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tdbcodbc1.1.3/pkgIndex.tcl (rev 0)
+++ trunk/Master/tlpkg/tltcl/lib/tdbcodbc1.1.3/pkgIndex.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -0,0 +1,14 @@
+# Index file to load the TDBC ODBC package.
+
+if {![package vsatisfies [package provide Tcl] 8.6-]} {
+ return
+}
+if {[package vsatisfies [package provide Tcl] 9.0-]} {
+ package ifneeded tdbc::odbc 1.1.3 \
+ "[list source [file join $dir tdbcodbc.tcl]]\;\
+ [list load [file join $dir tcl9tdbcodbc113.dll] [string totitle tdbcodbc]]"
+} else {
+ package ifneeded tdbc::odbc 1.1.3 \
+ "[list source [file join $dir tdbcodbc.tcl]]\;\
+ [list load [file join $dir tdbcodbc113.dll] [string totitle tdbcodbc]]"
+}
Property changes on: trunk/Master/tlpkg/tltcl/lib/tdbcodbc1.1.3/pkgIndex.tcl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/tlpkg/tltcl/lib/tdbcodbc1.1.3/tdbcodbc.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tdbcodbc1.1.3/tdbcodbc.tcl (rev 0)
+++ trunk/Master/tlpkg/tltcl/lib/tdbcodbc1.1.3/tdbcodbc.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -0,0 +1,515 @@
+# tdbcodbc.tcl --
+#
+# Class definitions and Tcl-level methods for the tdbc::odbc bridge.
+#
+# Copyright (c) 2008 by Kevin B. Kenny
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# RCS: @(#) $Id: tdbcodbc.tcl,v 1.47 2008/02/27 02:08:27 kennykb Exp $
+#
+#------------------------------------------------------------------------------
+
+package require tdbc
+
+::namespace eval ::tdbc::odbc {
+
+ namespace export connection datasources drivers
+
+ # Data types that are predefined in ODBC
+
+ variable sqltypes [dict create \
+ 1 char \
+ 2 numeric \
+ 3 decimal \
+ 4 integer \
+ 5 smallint \
+ 6 float \
+ 7 real \
+ 8 double \
+ 9 datetime \
+ 12 varchar \
+ 91 date \
+ 92 time \
+ 93 timestamp \
+ -1 longvarchar \
+ -2 binary \
+ -3 varbinary \
+ -4 longvarbinary \
+ -5 bigint \
+ -6 tinyint \
+ -7 bit \
+ -8 wchar \
+ -9 wvarchar \
+ -10 wlongvarchar \
+ -11 guid]
+}
+
+#------------------------------------------------------------------------------
+#
+# tdbc::odbc::connection --
+#
+# Class representing a connection to a database through ODBC.
+#
+#-------------------------------------------------------------------------------
+
+::oo::class create ::tdbc::odbc::connection {
+
+ superclass ::tdbc::connection
+
+ variable statementSeq typemap
+
+ # The constructor is written in C. It takes the connection string
+ # as its argument It sets up a namespace to hold the statements
+ # associated with the connection, and then delegates to the 'init'
+ # method (written in C) to do the actual work of attaching to the
+ # database. When that comes back, it sets up a statement to query
+ # the support types, makes a dictionary to enumerate them, and
+ # calls back to set a flag if WVARCHAR is seen (If WVARCHAR is
+ # seen, the database supports Unicode.)
+
+ # The 'statementCreate' method forwards to the constructor of the
+ # statement class
+
+ forward statementCreate ::tdbc::odbc::statement create
+
+ # The 'tables' method returns a dictionary describing the tables
+ # in the database
+
+ method tables {{pattern %}} {
+ set stmt [::tdbc::odbc::tablesStatement create \
+ Stmt::[incr statementSeq] [self] $pattern]
+ set status [catch {
+ set retval {}
+ $stmt foreach -as dicts row {
+ if {[dict exists $row TABLE_NAME]} {
+ dict set retval [dict get $row TABLE_NAME] $row
+ }
+ }
+ set retval
+ } result options]
+ catch {rename $stmt {}}
+ return -level 0 -options $options $result
+ }
+
+ # The 'columns' method returns a dictionary describing the tables
+ # in the database
+
+ method columns {table {pattern %}} {
+ # Make sure that the type map is initialized
+ my typemap
+
+ # Query the columns from the database
+
+ set stmt [::tdbc::odbc::columnsStatement create \
+ Stmt::[incr statementSeq] [self] $table $pattern]
+ set status [catch {
+ set retval {}
+ $stmt foreach -as dicts origrow {
+
+ # Map the type, precision, scale and nullable indicators
+ # to tdbc's notation
+
+ set row {}
+ dict for {key value} $origrow {
+ dict set row [string tolower $key] $value
+ }
+ if {[dict exists $row column_name]} {
+ if {[dict exists $typemap \
+ [dict get $row data_type]]} {
+ dict set row type \
+ [dict get $typemap \
+ [dict get $row data_type]]
+ } else {
+ dict set row type [dict get $row type_name]
+ }
+ if {[dict exists $row column_size]} {
+ dict set row precision \
+ [dict get $row column_size]
+ }
+ if {[dict exists $row decimal_digits]} {
+ dict set row scale \
+ [dict get $row decimal_digits]
+ }
+ if {![dict exists $row nullable]} {
+ dict set row nullable \
+ [expr {!![string trim [dict get $row is_nullable]]}]
+ }
+ dict set retval [dict get $row column_name] $row
+ }
+ }
+ set retval
+ } result options]
+ catch {rename $stmt {}}
+ return -level 0 -options $options $result
+ }
+
+ # The 'primarykeys' method returns a dictionary describing the primary
+ # keys of a table
+
+ method primarykeys {tableName} {
+ set stmt [::tdbc::odbc::primarykeysStatement create \
+ Stmt::[incr statementSeq] [self] $tableName]
+ set status [catch {
+ set retval {}
+ $stmt foreach -as dicts row {
+ foreach {odbcKey tdbcKey} {
+ TABLE_CAT tableCatalog
+ TABLE_SCHEM tableSchema
+ TABLE_NAME tableName
+ COLUMN_NAME columnName
+ KEY_SEQ ordinalPosition
+ PK_NAME constraintName
+ } {
+ if {[dict exists $row $odbcKey]} {
+ dict set row $tdbcKey [dict get $row $odbcKey]
+ dict unset row $odbcKey
+ }
+ }
+ lappend retval $row
+ }
+ set retval
+ } result options]
+ catch {rename $stmt {}}
+ return -level 0 -options $options $result
+ }
+
+ # The 'foreignkeys' method returns a dictionary describing the foreign
+ # keys of a table
+
+ method foreignkeys {args} {
+ set stmt [::tdbc::odbc::foreignkeysStatement create \
+ Stmt::[incr statementSeq] [self] {*}$args]
+ set status [catch {
+ set fkseq 0
+ set retval {}
+ $stmt foreach -as dicts row {
+ foreach {odbcKey tdbcKey} {
+ PKTABLE_CAT primaryCatalog
+ PKTABLE_SCHEM primarySchema
+ PKTABLE_NAME primaryTable
+ PKCOLUMN_NAME primaryColumn
+ FKTABLE_CAT foreignCatalog
+ FKTABLE_SCHEM foreignSchema
+ FKTABLE_NAME foreignTable
+ FKCOLUMN_NAME foreignColumn
+ UPDATE_RULE updateRule
+ DELETE_RULE deleteRule
+ DEFERRABILITY deferrable
+ KEY_SEQ ordinalPosition
+ FK_NAME foreignConstraintName
+ } {
+ if {[dict exists $row $odbcKey]} {
+ dict set row $tdbcKey [dict get $row $odbcKey]
+ dict unset row $odbcKey
+ }
+ }
+ # Horrible kludge: If the driver doesn't report FK_NAME,
+ # make one up.
+ if {![dict exists $row foreignConstraintName]} {
+ if {![dict exists $row ordinalPosition]
+ || [dict get $row ordinalPosition] == 1} {
+ set fkname ?[dict get $row foreignTable]?[incr fkseq]
+ }
+ dict set row foreignConstraintName $fkname
+ }
+ lappend retval $row
+ }
+ set retval
+ } result options]
+ catch {rename $stmt {}}
+ return -level 0 -options $options $result
+ }
+
+ # The 'prepareCall' method gives a portable interface to prepare
+ # calls to stored procedures. It delegates to 'prepare' to do the
+ # actual work.
+
+ method preparecall {call} {
+
+ regexp {^[[:space:]]*(?:([A-Za-z_][A-Za-z_0-9]*)[[:space:]]*=)?(.*)} \
+ $call -> varName rest
+ if {$varName eq {}} {
+ my prepare \\{CALL $rest\\}
+ } else {
+ my prepare \\{:$varName=CALL $rest\\}
+ }
+
+ if 0 {
+ # Kevin thinks this is going to be
+
+ if {![regexp -expanded {
+ ^\s* # leading whitespace
+ (?::([[:alpha:]_][[:alnum:]_]*)\s*=\s*) # possible variable name
+ (?:(?:([[:alpha:]_][[:alnum:]_]*)\s*[.]\s*)? # catalog
+ ([[:alpha:]_][[:alnum:]_]*)\s*[.]\s*)? # schema
+ ([[:alpha:]_][[:alnum:]_]*)\s* # procedure
+ (.*)$ # argument list
+ } $call -> varName catalog schema procedure arglist]} {
+ return -code error \
+ -errorCode [list TDBC \
+ SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION \
+ 42000 ODBC -1] \
+ "Syntax error in stored procedure call"
+ } else {
+ my PrepareCall $varName $catalog $schema $procedure $arglist
+ }
+
+ # at least if making all parameters 'inout' doesn't work.
+
+ }
+
+ }
+
+ # The 'typemap' method returns the type map
+
+ method typemap {} {
+ if {![info exists typemap]} {
+ set typemap $::tdbc::odbc::sqltypes
+ set typesStmt [tdbc::odbc::typesStatement new [self]]
+ $typesStmt foreach row {
+ set typeNum [dict get $row DATA_TYPE]
+ if {![dict exists $typemap $typeNum]} {
+ dict set typemap $typeNum [string tolower \
+ [dict get $row TYPE_NAME]]
+ }
+ switch -exact -- $typeNum {
+ -9 {
+ [self] HasWvarchar 1
+ }
+ -5 {
+ [self] HasBigint 1
+ }
+ }
+ }
+ rename $typesStmt {}
+ }
+ return $typemap
+ }
+
+ # The 'begintransaction', 'commit' and 'rollback' methods are
+ # implemented in C.
+
+}
+
+#-------------------------------------------------------------------------------
+#
+# tdbc::odbc::statement --
+#
+# The class 'tdbc::odbc::statement' models one statement against a
+# database accessed through an ODBC connection
+#
+#-------------------------------------------------------------------------------
+
+::oo::class create ::tdbc::odbc::statement {
+
+ superclass ::tdbc::statement
+
+ # The constructor is implemented in C. It accepts the handle to
+ # the connection and the SQL code for the statement to prepare.
+ # It creates a subordinate namespace to hold the statement's
+ # active result sets, and then delegates to the 'init' method,
+ # written in C, to do the actual work of preparing the statement.
+
+ # The 'resultSetCreate' method forwards to the result set constructor
+
+ forward resultSetCreate ::tdbc::odbc::resultset create
+
+ # The 'params' method describes the parameters to the statement
+
+ method params {} {
+ set typemap [[my connection] typemap]
+ set result {}
+ foreach {name flags typeNum precision scale nullable} [my ParamList] {
+ set lst [dict create \
+ name $name \
+ direction [lindex {unknown in out inout} \
+ [expr {($flags & 0x06) >> 1}]] \
+ type [dict get $typemap $typeNum] \
+ precision $precision \
+ scale $scale]
+ if {$nullable in {0 1}} {
+ dict set list nullable $nullable
+ }
+ dict set result $name $lst
+ }
+ return $result
+ }
+
+ # Methods implemented in C:
+ # init statement ?dictionary?
+ # Does the heavy lifting for the constructor
+ # connection
+ # Returns the connection handle to which this statement belongs
+ # paramtype paramname ?direction? type ?precision ?scale??
+ # Declares the type of a parameter in the statement
+
+}
+
+#------------------------------------------------------------------------------
+#
+# tdbc::odbc::tablesStatement --
+#
+# The class 'tdbc::odbc::tablesStatement' represents the special
+# statement that queries the tables in a database through an ODBC
+# connection.
+#
+#------------------------------------------------------------------------------
+
+oo::class create ::tdbc::odbc::tablesStatement {
+
+ superclass ::tdbc::statement
+
+ # The constructor is written in C. It accepts the handle to the
+ # connection and a pattern to match table names. It works in all
+ # ways like the constructor of the 'statement' class except that
+ # its 'init' method sets up to enumerate tables and not run a SQL
+ # query.
+
+ # The 'resultSetCreate' method forwards to the result set constructor
+
+ forward resultSetCreate ::tdbc::odbc::resultset create
+
+}
+
+#------------------------------------------------------------------------------
+#
+# tdbc::odbc::columnsStatement --
+#
+# The class 'tdbc::odbc::tablesStatement' represents the special
+# statement that queries the columns of a table or view
+# in a database through an ODBC connection.
+#
+#------------------------------------------------------------------------------
+
+oo::class create ::tdbc::odbc::columnsStatement {
+
+ superclass ::tdbc::statement
+
+ # The constructor is written in C. It accepts the handle to the
+ # connection, a table name, and a pattern to match column
+ # names. It works in all ways like the constructor of the
+ # 'statement' class except that its 'init' method sets up to
+ # enumerate tables and not run a SQL query.
+
+ # The 'resultSetCreate' class forwards to the constructor of the
+ # result set
+
+ forward resultSetCreate ::tdbc::odbc::resultset create
+
+}
+
+#------------------------------------------------------------------------------
+#
+# tdbc::odbc::primarykeysStatement --
+#
+# The class 'tdbc::odbc::primarykeysStatement' represents the special
+# statement that queries the primary keys on a table through an ODBC
+# connection.
+#
+#------------------------------------------------------------------------------
+
+oo::class create ::tdbc::odbc::primarykeysStatement {
+
+ superclass ::tdbc::statement
+
+ # The constructor is written in C. It accepts the handle to the
+ # connection and a table name. It works in all
+ # ways like the constructor of the 'statement' class except that
+ # its 'init' method sets up to enumerate primary keys and not run a SQL
+ # query.
+
+ # The 'resultSetCreate' method forwards to the result set constructor
+
+ forward resultSetCreate ::tdbc::odbc::resultset create
+
+}
+
+#------------------------------------------------------------------------------
+#
+# tdbc::odbc::foreignkeysStatement --
+#
+# The class 'tdbc::odbc::foreignkeysStatement' represents the special
+# statement that queries the foreign keys on a table through an ODBC
+# connection.
+#
+#------------------------------------------------------------------------------
+
+oo::class create ::tdbc::odbc::foreignkeysStatement {
+
+ superclass ::tdbc::statement
+
+ # The constructor is written in C. It accepts the handle to the
+ # connection and the -primary and -foreign options. It works in all
+ # ways like the constructor of the 'statement' class except that
+ # its 'init' method sets up to enumerate foreign keys and not run a SQL
+ # query.
+
+ # The 'resultSetCreate' method forwards to the result set constructor
+
+ forward resultSetCreate ::tdbc::odbc::resultset create
+
+}
+
+#------------------------------------------------------------------------------
+#
+# tdbc::odbc::typesStatement --
+#
+# The class 'tdbc::odbc::typesStatement' represents the special
+# statement that queries the types available in a database through
+# an ODBC connection.
+#
+#------------------------------------------------------------------------------
+
+
+oo::class create ::tdbc::odbc::typesStatement {
+
+ superclass ::tdbc::statement
+
+ # The constructor is written in C. It accepts the handle to the
+ # connection, and (optionally) a data type number. It works in all
+ # ways like the constructor of the 'statement' class except that
+ # its 'init' method sets up to enumerate types and not run a SQL
+ # query.
+
+ # The 'resultSetCreate' method forwards to the constructor of result sets
+
+ forward resultSetCreate ::tdbc::odbc::resultset create
+
+ # The C code contains a variant implementation of the 'init' method.
+
+}
+
+#------------------------------------------------------------------------------
+#
+# tdbc::odbc::resultset --
+#
+# The class 'tdbc::odbc::resultset' models the result set that is
+# produced by executing a statement against an ODBC database.
+#
+#------------------------------------------------------------------------------
+
+::oo::class create ::tdbc::odbc::resultset {
+
+ superclass ::tdbc::resultset
+
+ # Methods implemented in C include:
+
+ # constructor statement ?dictionary?
+ # -- Executes the statement against the database, optionally providing
+ # a dictionary of substituted parameters (default is to get params
+ # from variables in the caller's scope).
+ # columns
+ # -- Returns a list of the names of the columns in the result.
+ # nextdict
+ # -- Stores the next row of the result set in the given variable in
+ # the caller's scope as a dictionary whose keys are
+ # column names and whose values are column values.
+ # nextlist
+ # -- Stores the next row of the result set in the given variable in
+ # the caller's scope as a list of cells.
+ # rowcount
+ # -- Returns a count of rows affected by the statement, or -1
+ # if the count of rows has not been determined.
+
+}
Property changes on: trunk/Master/tlpkg/tltcl/lib/tdbcodbc1.1.3/tdbcodbc.tcl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/tlpkg/tltcl/lib/tdbcodbc1.1.3/tdbcodbc113.dll
===================================================================
(Binary files differ)
Index: trunk/Master/tlpkg/tltcl/lib/tdbcodbc1.1.3/tdbcodbc113.dll
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tdbcodbc1.1.3/tdbcodbc113.dll 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tdbcodbc1.1.3/tdbcodbc113.dll 2022-03-14 10:03:11 UTC (rev 62700)
Property changes on: trunk/Master/tlpkg/tltcl/lib/tdbcodbc1.1.3/tdbcodbc113.dll
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/x-dosexec
\ No newline at end of property
Added: trunk/Master/tlpkg/tltcl/lib/tdbcpostgres1.1.3/pkgIndex.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tdbcpostgres1.1.3/pkgIndex.tcl (rev 0)
+++ trunk/Master/tlpkg/tltcl/lib/tdbcpostgres1.1.3/pkgIndex.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -0,0 +1,14 @@
+# Index file to load the TDBC Postgres package.
+
+if {![package vsatisfies [package provide Tcl] 8.6-]} {
+ return
+}
+if {[package vsatisfies [package provide Tcl] 9.0-]} {
+ package ifneeded tdbc::postgres 1.1.3 \
+ "[list source [file join $dir tdbcpostgres.tcl]]\;\
+ [list load [file join $dir tcl9tdbcpostgres113.dll] [string totitle tdbcpostgres]]"
+} else {
+ package ifneeded tdbc::postgres 1.1.3 \
+ "[list source [file join $dir tdbcpostgres.tcl]]\;\
+ [list load [file join $dir tdbcpostgres113.dll] [string totitle tdbcpostgres]]"
+}
Property changes on: trunk/Master/tlpkg/tltcl/lib/tdbcpostgres1.1.3/pkgIndex.tcl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/tlpkg/tltcl/lib/tdbcpostgres1.1.3/tdbcpostgres.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tdbcpostgres1.1.3/tdbcpostgres.tcl (rev 0)
+++ trunk/Master/tlpkg/tltcl/lib/tdbcpostgres1.1.3/tdbcpostgres.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -0,0 +1,135 @@
+# tdbcpostgres.tcl --
+#
+# Class definitions and Tcl-level methods for the tdbc::postgres bridge.
+#
+# Copyright (c) 2009 by Slawomir Cygan
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+#------------------------------------------------------------------------------
+
+package require tdbc
+
+::namespace eval ::tdbc::mypostgres {
+
+ namespace export connection datasources drivers
+
+}
+
+#------------------------------------------------------------------------------
+#
+# tdbc::postgres::connection --
+#
+# Class representing a connection to a Postgres database.
+#
+#-------------------------------------------------------------------------------
+
+::oo::class create ::tdbc::postgres::connection {
+
+ superclass ::tdbc::connection
+
+ # The constructor is written in C. It takes alternating keywords
+ # and values pairs as its arguments. (See the manual page for the
+ # available options.)
+
+ # The 'statementCreate' method delegates to the constructor of the
+ # statement class
+
+ forward statementCreate ::tdbc::postgres::statement create
+
+
+ # The 'prepareCall' method gives a portable interface to prepare
+ # calls to stored procedures. It delegates to 'prepare' to do the
+ # actual work.
+
+ method preparecall {call} {
+ regexp {^[[:space:]]*(?:([A-Za-z_][A-Za-z_0-9]*)[[:space:]]*=)?(.*)} \
+ $call -> varName rest
+ if {$varName eq {}} {
+ my prepare \\{$rest\\}
+ } else {
+ my prepare \\{:$varName=$rest\\}
+ }
+ }
+
+ # The 'init', 'begintransaction', 'commit, 'rollback', 'tables'
+ # and 'columns' methods are implemented in C.
+
+}
+
+#------------------------------------------------------------------------------
+#
+# tdbc::postgres::statement --
+#
+# The class 'tdbc::postgres::statement' models one statement against a
+# database accessed through a Postgres connection
+#
+#------------------------------------------------------------------------------
+
+::oo::class create ::tdbc::postgres::statement {
+
+ superclass ::tdbc::statement
+
+ # The 'resultSetCreate' method forwards to the constructor of the
+ # result set.
+
+ forward resultSetCreate ::tdbc::postgres::resultset create
+
+ # Methods implemented in C:
+ #
+ # constructor connection SQLCode
+ # The constructor accepts the handle to the connection and the SQL code
+ # for the statement to prepare. It creates a subordinate namespace to
+ # hold the statement's active result sets, and then delegates to the
+ # 'init' method, written in C, to do the actual work of preparing the
+ # statement.
+ # params
+ # Returns descriptions of the parameters of a statement.
+ # paramtype paramname ?direction? type ?precision ?scale??
+ # Declares the type of a parameter in the statement
+
+}
+
+#------------------------------------------------------------------------------
+#
+# tdbc::postgres::resultset --
+#
+# The class 'tdbc::postgres::resultset' models the result set that is
+# produced by executing a statement against a Postgres database.
+#
+#------------------------------------------------------------------------------
+
+::oo::class create ::tdbc::postgres::resultset {
+
+ superclass ::tdbc::resultset
+
+ # The 'nextresults' method is stubbed out; tdbcpostgres does not
+ # allow a single call to return multiple results.
+
+ method nextresults {} {
+ while {[my nextdict rubbish]} {}
+ return 0
+ }
+
+ # Methods implemented in C include:
+
+ # constructor statement ?dictionary?
+ # -- Executes the statement against the database, optionally providing
+ # a dictionary of substituted parameters (default is to get params
+ # from variables in the caller's scope).
+ # columns
+ # -- Returns a list of the names of the columns in the result.
+ # nextdict
+ # -- Stores the next row of the result set in the given variable in
+ # the caller's scope as a dictionary whose keys are
+ # column names and whose values are column values, or else
+ # as a list of cells.
+ # nextlist
+ # -- Stores the next row of the result set in the given variable in
+ # the caller's scope as a list of cells.
+ # rowcount
+ # -- Returns a count of rows affected by the statement, or -1
+ # if the count of rows has not been determined.
+
+}
Property changes on: trunk/Master/tlpkg/tltcl/lib/tdbcpostgres1.1.3/tdbcpostgres.tcl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/tlpkg/tltcl/lib/tdbcpostgres1.1.3/tdbcpostgres113.dll
===================================================================
(Binary files differ)
Index: trunk/Master/tlpkg/tltcl/lib/tdbcpostgres1.1.3/tdbcpostgres113.dll
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tdbcpostgres1.1.3/tdbcpostgres113.dll 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tdbcpostgres1.1.3/tdbcpostgres113.dll 2022-03-14 10:03:11 UTC (rev 62700)
Property changes on: trunk/Master/tlpkg/tltcl/lib/tdbcpostgres1.1.3/tdbcpostgres113.dll
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/x-dosexec
\ No newline at end of property
Added: trunk/Master/tlpkg/tltcl/lib/thread2.8.7/pkgIndex.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/thread2.8.7/pkgIndex.tcl (rev 0)
+++ trunk/Master/tlpkg/tltcl/lib/thread2.8.7/pkgIndex.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -0,0 +1,68 @@
+# -*- tcl -*-
+# Tcl package index file, version 1.1
+#
+
+if {![package vsatisfies [package provide Tcl] 8.4]} {
+ # Pre-8.4 Tcl interps we dont support at all. Bye!
+ # 9.0+ Tcl interps are only supported on 32-bit platforms.
+ if {![package vsatisfies [package provide Tcl] 9.0]
+ || ($::tcl_platform(pointerSize) != 4)} {
+ return
+ }
+}
+
+# All Tcl 8.4+ interps can [load] Thread 2.8.7
+#
+# For interps that are not thread-enabled, we still call [package ifneeded].
+# This is contrary to the usual convention, but is a good idea because we
+# cannot imagine any other version of Thread that might succeed in a
+# thread-disabled interp. There's nothing to gain by yielding to other
+# competing callers of [package ifneeded Thread]. On the other hand,
+# deferring the error has the advantage that a script calling
+# [package require Thread] in a thread-disabled interp gets an error message
+# about a thread-disabled interp, instead of the message
+# "can't find package Thread".
+
+package ifneeded Thread 2.8.7 [list load [file join $dir thread287.dll] [string totitle thread]]
+
+# package Ttrace uses some support machinery.
+
+# In Tcl 8.4 interps we use some older interfaces
+if {![package vsatisfies [package provide Tcl] 8.5]} {
+ package ifneeded Ttrace 2.8.7 "
+ [list proc thread_source {dir} {
+ if {[info exists ::env(TCL_THREAD_LIBRARY)] &&
+ [file readable $::env(TCL_THREAD_LIBRARY)/ttrace.tcl]} {
+ source $::env(TCL_THREAD_LIBRARY)/ttrace.tcl
+ } elseif {[file readable [file join $dir .. lib ttrace.tcl]]} {
+ source [file join $dir .. lib ttrace.tcl]
+ } elseif {[file readable [file join $dir ttrace.tcl]]} {
+ source [file join $dir ttrace.tcl]
+ }
+ if {[namespace which ::ttrace::update] ne ""} {
+ ::ttrace::update
+ }
+ }]
+ [list thread_source $dir]
+ [list rename thread_source {}]"
+ return
+}
+
+# In Tcl 8.5+ interps; use [::apply]
+
+package ifneeded Ttrace 2.8.7 [list ::apply {{dir} {
+ if {[info exists ::env(TCL_THREAD_LIBRARY)] &&
+ [file readable $::env(TCL_THREAD_LIBRARY)/ttrace.tcl]} {
+ source $::env(TCL_THREAD_LIBRARY)/ttrace.tcl
+ } elseif {[file readable [file join $dir .. lib ttrace.tcl]]} {
+ source [file join $dir .. lib ttrace.tcl]
+ } elseif {[file readable [file join $dir ttrace.tcl]]} {
+ source [file join $dir ttrace.tcl]
+ }
+ if {[namespace which ::ttrace::update] ne ""} {
+ ::ttrace::update
+ }
+}} $dir]
+
+
+
Property changes on: trunk/Master/tlpkg/tltcl/lib/thread2.8.7/pkgIndex.tcl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/tlpkg/tltcl/lib/thread2.8.7/thread287.dll
===================================================================
(Binary files differ)
Index: trunk/Master/tlpkg/tltcl/lib/thread2.8.7/thread287.dll
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/thread2.8.7/thread287.dll 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/thread2.8.7/thread287.dll 2022-03-14 10:03:11 UTC (rev 62700)
Property changes on: trunk/Master/tlpkg/tltcl/lib/thread2.8.7/thread287.dll
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/x-dosexec
\ No newline at end of property
Added: trunk/Master/tlpkg/tltcl/lib/thread2.8.7/ttrace.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/thread2.8.7/ttrace.tcl (rev 0)
+++ trunk/Master/tlpkg/tltcl/lib/thread2.8.7/ttrace.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -0,0 +1,942 @@
+#
+# ttrace.tcl --
+#
+# Copyright (C) 2003 Zoran Vasiljevic, Archiware GmbH. All Rights Reserved.
+#
+# See the file "license.terms" for information on usage and redistribution of
+# this file, and for a DISCLAIMER OF ALL WARRANTIES.
+# ----------------------------------------------------------------------------
+#
+# User level commands:
+#
+# ttrace::eval top-level wrapper (ttrace-savvy eval)
+# ttrace::enable activates registered Tcl command traces
+# ttrace::disable terminates tracing of Tcl commands
+# ttrace::isenabled returns true if ttrace is enabled
+# ttrace::cleanup bring the interp to a pristine state
+# ttrace::update update interp to the latest trace epoch
+# ttrace::config setup some configuration options
+# ttrace::getscript returns a script for initializing interps
+#
+# Commands used for/from trace callbacks:
+#
+# ttrace::atenable register callback to be done at trace enable
+# ttrace::atdisable register callback to be done at trace disable
+# ttrace::addtrace register user-defined tracer callback
+# ttrace::addscript register user-defined script generator
+# ttrace::addresolver register user-defined command resolver
+# ttrace::addcleanup register user-defined cleanup procedures
+# ttrace::addentry adds one entry into the named trace store
+# ttrace::getentry returns the entry value from the named store
+# ttrace::delentry removes the entry from the named store
+# ttrace::getentries returns all entries from the named store
+# ttrace::preload register procedures to be preloaded always
+#
+#
+# Limitations:
+#
+# o. [namespace forget] is still not implemented
+# o. [namespace origin cmd] breaks if cmd is not already defined
+#
+# I left this deliberately. I didn't want to override the [namespace]
+# command in order to avoid potential slowdown.
+#
+
+namespace eval ttrace {
+
+ # Setup some compatibility wrappers
+ if {[info commands nsv_set] != ""} {
+ variable tvers 0
+ variable mutex ns_mutex
+ variable elock [$mutex create traceepochmutex]
+ # Import the underlying API; faster than recomputing
+ interp alias {} [namespace current]::_array {} nsv_array
+ interp alias {} [namespace current]::_incr {} nsv_incr
+ interp alias {} [namespace current]::_lappend {} nsv_lappend
+ interp alias {} [namespace current]::_names {} nsv_names
+ interp alias {} [namespace current]::_set {} nsv_set
+ interp alias {} [namespace current]::_unset {} nsv_unset
+ } elseif {![catch {
+ variable tvers [package require Thread]
+ }]} {
+ variable mutex thread::mutex
+ variable elock [$mutex create]
+ # Import the underlying API; faster than recomputing
+ interp alias {} [namespace current]::_array {} tsv::array
+ interp alias {} [namespace current]::_incr {} tsv::incr
+ interp alias {} [namespace current]::_lappend {} tsv::lappend
+ interp alias {} [namespace current]::_names {} tsv::names
+ interp alias {} [namespace current]::_set {} tsv::set
+ interp alias {} [namespace current]::_unset {} tsv::unset
+ } else {
+ error "requires NaviServer/AOLserver or Tcl threading extension"
+ }
+
+ # Keep in sync with the Thread package
+ package provide Ttrace 2.8.7
+
+ # Package variables
+ variable resolvers "" ; # List of registered resolvers
+ variable tracers "" ; # List of registered cmd tracers
+ variable scripts "" ; # List of registered script makers
+ variable enables "" ; # List of trace-enable callbacks
+ variable disables "" ; # List of trace-disable callbacks
+ variable preloads "" ; # List of procedure names to preload
+ variable enabled 0 ; # True if trace is enabled
+ variable config ; # Array with config options
+
+ variable epoch -1 ; # The initialization epoch
+ variable cleancnt 0 ; # Counter of registered cleaners
+
+ # Package private namespaces
+ namespace eval resolve "" ; # Commands for resolving commands
+ namespace eval trace "" ; # Commands registered for tracing
+ namespace eval enable "" ; # Commands invoked at trace enable
+ namespace eval disable "" ; # Commands invoked at trace disable
+ namespace eval script "" ; # Commands for generating scripts
+
+ # Exported commands
+ namespace export unknown
+
+ # Initialize ttrace shared state
+ if {[_array exists ttrace] == 0} {
+ _set ttrace lastepoch $epoch
+ _set ttrace epochlist ""
+ }
+
+ # Initially, allow creation of epochs
+ set config(-doepochs) 1
+
+ proc eval {cmd args} {
+ enable
+ set code [catch {uplevel 1 [concat $cmd $args]} result]
+ disable
+ if {$code == 0} {
+ if {[llength [info commands ns_ictl]]} {
+ ns_ictl save [getscript]
+ } else {
+ thread::broadcast {
+ package require Ttrace
+ ttrace::update
+ }
+ }
+ }
+ return -code $code \
+ -errorinfo $::errorInfo -errorcode $::errorCode $result
+ }
+
+ proc config {args} {
+ variable config
+ if {[llength $args] == 0} {
+ array get config
+ } elseif {[llength $args] == 1} {
+ set opt [lindex $args 0]
+ set config($opt)
+ } else {
+ set opt [lindex $args 0]
+ set val [lindex $args 1]
+ set config($opt) $val
+ }
+ }
+
+ proc enable {} {
+ variable config
+ variable tracers
+ variable enables
+ variable enabled
+ incr enabled 1
+ if {$enabled > 1} {
+ return
+ }
+ if {$config(-doepochs) != 0} {
+ variable epoch [_newepoch]
+ }
+ set nsp [namespace current]
+ foreach enabler $enables {
+ enable::_$enabler
+ }
+ foreach trace $tracers {
+ if {[info commands $trace] != ""} {
+ trace add execution $trace leave ${nsp}::trace::_$trace
+ }
+ }
+ }
+
+ proc disable {} {
+ variable enabled
+ variable tracers
+ variable disables
+ incr enabled -1
+ if {$enabled > 0} {
+ return
+ }
+ set nsp [namespace current]
+ foreach disabler $disables {
+ disable::_$disabler
+ }
+ foreach trace $tracers {
+ if {[info commands $trace] != ""} {
+ trace remove execution $trace leave ${nsp}::trace::_$trace
+ }
+ }
+ }
+
+ proc isenabled {} {
+ variable enabled
+ expr {$enabled > 0}
+ }
+
+ proc update {{from -1}} {
+ if {$from == -1} {
+ variable epoch [_set ttrace lastepoch]
+ } else {
+ if {[lsearch [_set ttrace epochlist] $from] == -1} {
+ error "no such epoch: $from"
+ }
+ variable epoch $from
+ }
+ uplevel [getscript]
+ }
+
+ proc getscript {} {
+ variable preloads
+ variable epoch
+ variable scripts
+ append script [_serializensp] \n
+ append script "::namespace eval [namespace current] {" \n
+ append script "::namespace export unknown" \n
+ append script "_useepoch $epoch" \n
+ append script "}" \n
+ foreach cmd $preloads {
+ append script [_serializeproc $cmd] \n
+ }
+ foreach maker $scripts {
+ append script [script::_$maker]
+ }
+ return $script
+ }
+
+ proc cleanup {args} {
+ foreach cmd [info commands resolve::cleaner_*] {
+ uplevel $cmd $args
+ }
+ }
+
+ proc preload {cmd} {
+ variable preloads
+ if {[lsearch $preloads $cmd] == -1} {
+ lappend preloads $cmd
+ }
+ }
+
+ proc atenable {cmd arglist body} {
+ variable enables
+ if {[lsearch $enables $cmd] == -1} {
+ lappend enables $cmd
+ set cmd [namespace current]::enable::_$cmd
+ proc $cmd $arglist $body
+ return $cmd
+ }
+ }
+
+ proc atdisable {cmd arglist body} {
+ variable disables
+ if {[lsearch $disables $cmd] == -1} {
+ lappend disables $cmd
+ set cmd [namespace current]::disable::_$cmd
+ proc $cmd $arglist $body
+ return $cmd
+ }
+ }
+
+ proc addtrace {cmd arglist body} {
+ variable tracers
+ if {[lsearch $tracers $cmd] == -1} {
+ lappend tracers $cmd
+ set tracer [namespace current]::trace::_$cmd
+ proc $tracer $arglist $body
+ if {[isenabled]} {
+ trace add execution $cmd leave $tracer
+ }
+ return $tracer
+ }
+ }
+
+ proc addscript {cmd body} {
+ variable scripts
+ if {[lsearch $scripts $cmd] == -1} {
+ lappend scripts $cmd
+ set cmd [namespace current]::script::_$cmd
+ proc $cmd args $body
+ return $cmd
+ }
+ }
+
+ proc addresolver {cmd arglist body} {
+ variable resolvers
+ if {[lsearch $resolvers $cmd] == -1} {
+ lappend resolvers $cmd
+ set cmd [namespace current]::resolve::$cmd
+ proc $cmd $arglist $body
+ return $cmd
+ }
+ }
+
+ proc addcleanup {body} {
+ variable cleancnt
+ set cmd [namespace current]::resolve::cleaner_[incr cleancnt]
+ proc $cmd args $body
+ return $cmd
+ }
+
+ proc addentry {cmd var val} {
+ variable epoch
+ _set ${epoch}-$cmd $var $val
+ }
+
+ proc delentry {cmd var} {
+ variable epoch
+ set ei $::errorInfo
+ set ec $::errorCode
+ catch {_unset ${epoch}-$cmd $var}
+ set ::errorInfo $ei
+ set ::errorCode $ec
+ }
+
+ proc getentry {cmd var} {
+ variable epoch
+ set ei $::errorInfo
+ set ec $::errorCode
+ if {[catch {_set ${epoch}-$cmd $var} val]} {
+ set ::errorInfo $ei
+ set ::errorCode $ec
+ set val ""
+ }
+ return $val
+ }
+
+ proc getentries {cmd {pattern *}} {
+ variable epoch
+ _array names ${epoch}-$cmd $pattern
+ }
+
+ proc unknown {args} {
+ set cmd [lindex $args 0]
+ if {[uplevel ttrace::_resolve [list $cmd]]} {
+ set c [catch {uplevel $cmd [lrange $args 1 end]} r]
+ } else {
+ set c [catch {::eval ::tcl::unknown $args} r]
+ }
+ return -code $c -errorcode $::errorCode -errorinfo $::errorInfo $r
+ }
+
+ proc _resolve {cmd} {
+ variable resolvers
+ foreach resolver $resolvers {
+ if {[uplevel [info comm resolve::$resolver] [list $cmd]]} {
+ return 1
+ }
+ }
+ return 0
+ }
+
+ proc _getthread {} {
+ if {[info commands ns_thread] == ""} {
+ thread::id
+ } else {
+ ns_thread getid
+ }
+ }
+
+ proc _getthreads {} {
+ if {[info commands ns_thread] == ""} {
+ return [thread::names]
+ } else {
+ foreach entry [ns_info threads] {
+ lappend threads [lindex $entry 2]
+ }
+ return $threads
+ }
+ }
+
+ proc _newepoch {} {
+ variable elock
+ variable mutex
+ $mutex lock $elock
+ set old [_set ttrace lastepoch]
+ set new [_incr ttrace lastepoch]
+ _lappend ttrace $new [_getthread]
+ if {$old >= 0} {
+ _copyepoch $old $new
+ _delepochs
+ }
+ _lappend ttrace epochlist $new
+ $mutex unlock $elock
+ return $new
+ }
+
+ proc _copyepoch {old new} {
+ foreach var [_names $old-*] {
+ set cmd [lindex [split $var -] 1]
+ _array reset $new-$cmd [_array get $var]
+ }
+ }
+
+ proc _delepochs {} {
+ set tlist [_getthreads]
+ set elist ""
+ foreach epoch [_set ttrace epochlist] {
+ if {[_dropepoch $epoch $tlist] == 0} {
+ lappend elist $epoch
+ } else {
+ _unset ttrace $epoch
+ }
+ }
+ _set ttrace epochlist $elist
+ }
+
+ proc _dropepoch {epoch threads} {
+ set self [_getthread]
+ foreach tid [_set ttrace $epoch] {
+ if {$tid != $self && [lsearch $threads $tid] >= 0} {
+ lappend alive $tid
+ }
+ }
+ if {[info exists alive]} {
+ _set ttrace $epoch $alive
+ return 0
+ } else {
+ foreach var [_names $epoch-*] {
+ _unset $var
+ }
+ return 1
+ }
+ }
+
+ proc _useepoch {epoch} {
+ if {$epoch >= 0} {
+ set tid [_getthread]
+ if {[lsearch [_set ttrace $epoch] $tid] == -1} {
+ _lappend ttrace $epoch $tid
+ }
+ }
+ }
+
+ proc _serializeproc {cmd} {
+ set dargs [info args $cmd]
+ set pbody [info body $cmd]
+ set pargs ""
+ foreach arg $dargs {
+ if {![info default $cmd $arg def]} {
+ lappend pargs $arg
+ } else {
+ lappend pargs [list $arg $def]
+ }
+ }
+ set nsp [namespace qual $cmd]
+ if {$nsp == ""} {
+ set nsp "::"
+ }
+ append res [list ::namespace eval $nsp] " {" \n
+ append res [list ::proc [namespace tail $cmd] $pargs $pbody] \n
+ append res "}" \n
+ }
+
+ proc _serializensp {{nsp ""} {result _}} {
+ upvar $result res
+ if {$nsp == ""} {
+ set nsp [namespace current]
+ }
+ append res [list ::namespace eval $nsp] " {" \n
+ foreach var [info vars ${nsp}::*] {
+ set vname [namespace tail $var]
+ if {[array exists $var] == 0} {
+ append res [list ::variable $vname [set $var]] \n
+ } else {
+ append res [list ::variable $vname] \n
+ append res [list ::array set $vname [array get $var]] \n
+ }
+ }
+ foreach cmd [info procs ${nsp}::*] {
+ append res [_serializeproc $cmd] \n
+ }
+ append res "}" \n
+ foreach nn [namespace children $nsp] {
+ _serializensp $nn res
+ }
+ return $res
+ }
+}
+
+#
+# The code below is ment to be run once during the application start. It
+# provides implementation of tracing callbacks for some Tcl commands. Users
+# can supply their own tracer implementations on-the-fly.
+#
+# The code below will create traces for the following Tcl commands:
+# "namespace", "variable", "load", "proc" and "rename"
+#
+# Also, the Tcl object extension XOTcl 1.1.0 is handled and all XOTcl related
+# things, like classes and objects are traced (many thanks to Gustaf Neumann
+# from XOTcl for his kind help and support).
+#
+
+eval {
+
+ #
+ # Register the "load" trace. This will create the following key/value pair
+ # in the "load" store:
+ #
+ # --- key ---- --- value ---
+ # <path_of_loaded_image> <name_of_the_init_proc>
+ #
+ # We normally need only the name_of_the_init_proc for being able to load
+ # the package in other interpreters, but we store the path to the image
+ # file as well.
+ #
+
+ ttrace::addtrace load {cmdline code args} {
+ if {$code != 0} {
+ return
+ }
+ set image [lindex $cmdline 1]
+ set initp [lindex $cmdline 2]
+ if {$initp == ""} {
+ foreach pkg [info loaded] {
+ if {[lindex $pkg 0] == $image} {
+ set initp [lindex $pkg 1]
+ }
+ }
+ }
+ ttrace::addentry load $image $initp
+ }
+
+ ttrace::addscript load {
+ append res "\n"
+ foreach entry [ttrace::getentries load] {
+ set initp [ttrace::getentry load $entry]
+ append res "::load {} $initp" \n
+ }
+ return $res
+ }
+
+ #
+ # Register the "namespace" trace. This will create the following key/value
+ # entry in "namespace" store:
+ #
+ # --- key ---- --- value ---
+ # ::fully::qualified::namespace 1
+ #
+ # It will also fill the "proc" store for procedures and commands imported
+ # in this namespace with following:
+ #
+ # --- key ---- --- value ---
+ # ::fully::qualified::proc [list <ns> "" ""]
+ #
+ # The <ns> is the name of the namespace where the command or procedure is
+ # imported from.
+ #
+
+ ttrace::addtrace namespace {cmdline code args} {
+ if {$code != 0} {
+ return
+ }
+ set nop [lindex $cmdline 1]
+ set cns [uplevel namespace current]
+ if {$cns == "::"} {
+ set cns ""
+ }
+ switch -glob $nop {
+ eva* {
+ set nsp [lindex $cmdline 2]
+ if {![string match "::*" $nsp]} {
+ set nsp ${cns}::$nsp
+ }
+ ttrace::addentry namespace $nsp 1
+ }
+ imp* {
+ # - parse import arguments (skip opt "-force")
+ set opts [lrange $cmdline 2 end]
+ if {[string match "-fo*" [lindex $opts 0]]} {
+ set opts [lrange $cmdline 3 end]
+ }
+ # - register all imported procs and commands
+ foreach opt $opts {
+ if {![string match "::*" [::namespace qual $opt]]} {
+ set opt ${cns}::$opt
+ }
+ # - first import procs
+ foreach entry [ttrace::getentries proc $opt] {
+ set cmd ${cns}::[::namespace tail $entry]
+ set nsp [::namespace qual $entry]
+ set done($cmd) 1
+ set entry [list 0 $nsp "" ""]
+ ttrace::addentry proc $cmd $entry
+ }
+
+ # - then import commands
+ foreach entry [info commands $opt] {
+ set cmd ${cns}::[::namespace tail $entry]
+ set nsp [::namespace qual $entry]
+ if {[info exists done($cmd)] == 0} {
+ set entry [list 0 $nsp "" ""]
+ ttrace::addentry proc $cmd $entry
+ }
+ }
+ }
+ }
+ }
+ }
+
+ ttrace::addscript namespace {
+ append res \n
+ foreach entry [ttrace::getentries namespace] {
+ append res "::namespace eval $entry {}" \n
+ }
+ return $res
+ }
+
+ #
+ # Register the "variable" trace. This will create the following key/value
+ # entry in the "variable" store:
+ #
+ # --- key ---- --- value ---
+ # ::fully::qualified::variable 1
+ #
+ # The variable value itself is ignored at the time of
+ # trace/collection. Instead, we take the real value at the time of script
+ # generation.
+ #
+
+ ttrace::addtrace variable {cmdline code args} {
+ if {$code != 0} {
+ return
+ }
+ set opts [lrange $cmdline 1 end]
+ if {[llength $opts]} {
+ set cns [uplevel namespace current]
+ if {$cns == "::"} {
+ set cns ""
+ }
+ foreach {var val} $opts {
+ if {![string match "::*" $var]} {
+ set var ${cns}::$var
+ }
+ ttrace::addentry variable $var 1
+ }
+ }
+ }
+
+ ttrace::addscript variable {
+ append res \n
+ foreach entry [ttrace::getentries variable] {
+ set cns [namespace qual $entry]
+ set var [namespace tail $entry]
+ append res "::namespace eval $cns {" \n
+ append res "::variable $var"
+ if {[array exists $entry]} {
+ append res "\n::array set $var [list [array get $entry]]" \n
+ } elseif {[info exists $entry]} {
+ append res " [list [set $entry]]" \n
+ } else {
+ append res \n
+ }
+ append res "}" \n
+ }
+ return $res
+ }
+
+
+ #
+ # Register the "rename" trace. It will create the following key/value pair
+ # in "rename" store:
+ #
+ # --- key ---- --- value ---
+ # ::fully::qualified::old ::fully::qualified::new
+ #
+ # The "new" value may be empty, for commands that have been deleted. In
+ # such cases we also remove any traced procedure definitions.
+ #
+
+ ttrace::addtrace rename {cmdline code args} {
+ if {$code != 0} {
+ return
+ }
+ set cns [uplevel namespace current]
+ if {$cns == "::"} {
+ set cns ""
+ }
+ set old [lindex $cmdline 1]
+ if {![string match "::*" $old]} {
+ set old ${cns}::$old
+ }
+ set new [lindex $cmdline 2]
+ if {$new != ""} {
+ if {![string match "::*" $new]} {
+ set new ${cns}::$new
+ }
+ ttrace::addentry rename $old $new
+ } else {
+ ttrace::delentry proc $old
+ }
+ }
+
+ ttrace::addscript rename {
+ append res \n
+ foreach old [ttrace::getentries rename] {
+ set new [ttrace::getentry rename $old]
+ append res "::rename $old {$new}" \n
+ }
+ return $res
+ }
+
+ #
+ # Register the "proc" trace. This will create the following key/value pair
+ # in the "proc" store:
+ #
+ # --- key ---- --- value ---
+ # ::fully::qualified::proc [list <epoch> <ns> <arglist> <body>]
+ #
+ # The <epoch> chages anytime one (re)defines a proc. The <ns> is the
+ # namespace where the command was imported from. If empty, the <arglist>
+ # and <body> will hold the actual procedure definition. See the
+ # "namespace" tracer implementation also.
+ #
+
+ ttrace::addtrace proc {cmdline code args} {
+ if {$code != 0} {
+ return
+ }
+ set cns [uplevel namespace current]
+ if {$cns == "::"} {
+ set cns ""
+ }
+ set cmd [lindex $cmdline 1]
+ if {![string match "::*" $cmd]} {
+ set cmd ${cns}::$cmd
+ }
+ set dargs [info args $cmd]
+ set pbody [info body $cmd]
+ set pargs ""
+ foreach arg $dargs {
+ if {![info default $cmd $arg def]} {
+ lappend pargs $arg
+ } else {
+ lappend pargs [list $arg $def]
+ }
+ }
+ set pdef [ttrace::getentry proc $cmd]
+ if {$pdef == ""} {
+ set epoch -1 ; # never traced before
+ } else {
+ set epoch [lindex $pdef 0]
+ }
+ ttrace::addentry proc $cmd [list [incr epoch] "" $pargs $pbody]
+ }
+
+ ttrace::addscript proc {
+ return {
+ if {[info command ::tcl::unknown] == ""} {
+ rename ::unknown ::tcl::unknown
+ namespace import -force ::ttrace::unknown
+ }
+ if {[info command ::tcl::info] == ""} {
+ rename ::info ::tcl::info
+ }
+ proc ::info args {
+ set cmd [lindex $args 0]
+ set hit [lsearch -glob {commands procs args default body} $cmd*]
+ if {$hit > 1} {
+ if {[catch {uplevel ::tcl::info $args}]} {
+ uplevel ttrace::_resolve [list [lindex $args 1]]
+ }
+ return [uplevel ::tcl::info $args]
+ }
+ if {$hit == -1} {
+ return [uplevel ::tcl::info $args]
+ }
+ set cns [uplevel namespace current]
+ if {$cns == "::"} {
+ set cns ""
+ }
+ set pat [lindex $args 1]
+ if {![string match "::*" $pat]} {
+ set pat ${cns}::$pat
+ }
+ set fns [ttrace::getentries proc $pat]
+ if {[string match $cmd* commands]} {
+ set fns [concat $fns [ttrace::getentries xotcl $pat]]
+ }
+ foreach entry $fns {
+ if {$cns != [namespace qual $entry]} {
+ set lazy($entry) 1
+ } else {
+ set lazy([namespace tail $entry]) 1
+ }
+ }
+ foreach entry [uplevel ::tcl::info $args] {
+ set lazy($entry) 1
+ }
+ array names lazy
+ }
+ }
+ }
+
+ #
+ # Register procedure resolver. This will try to resolve the command in the
+ # current namespace first, and if not found, in global namespace. It also
+ # handles commands imported from other namespaces.
+ #
+
+ ttrace::addresolver resolveprocs {cmd {export 0}} {
+ set cns [uplevel namespace current]
+ set name [namespace tail $cmd]
+ if {$cns == "::"} {
+ set cns ""
+ }
+ if {![string match "::*" $cmd]} {
+ set ncmd ${cns}::$cmd
+ set gcmd ::$cmd
+ } else {
+ set ncmd $cmd
+ set gcmd $cmd
+ }
+ set pdef [ttrace::getentry proc $ncmd]
+ if {$pdef == ""} {
+ set pdef [ttrace::getentry proc $gcmd]
+ if {$pdef == ""} {
+ return 0
+ }
+ set cmd $gcmd
+ } else {
+ set cmd $ncmd
+ }
+ set epoch [lindex $pdef 0]
+ set pnsp [lindex $pdef 1]
+ if {$pnsp != ""} {
+ set nsp [namespace qual $cmd]
+ if {$nsp == ""} {
+ set nsp ::
+ }
+ set cmd ${pnsp}::$name
+ if {[resolveprocs $cmd 1] == 0 && [info commands $cmd] == ""} {
+ return 0
+ }
+ namespace eval $nsp "namespace import -force $cmd"
+ } else {
+ uplevel 0 [list ::proc $cmd [lindex $pdef 2] [lindex $pdef 3]]
+ if {$export} {
+ set nsp [namespace qual $cmd]
+ if {$nsp == ""} {
+ set nsp ::
+ }
+ namespace eval $nsp "namespace export $name"
+ }
+ }
+ variable resolveproc
+ set resolveproc($cmd) $epoch
+ return 1
+ }
+
+ #
+ # For XOTcl, the entire item introspection/tracing is delegated to XOTcl
+ # itself. The xotcl store is filled with this:
+ #
+ # --- key ---- --- value ---
+ # ::fully::qualified::item <body>
+ #
+ # The <body> is the script used to generate the entire item (class,
+ # object). Note that we do not fill in this during code tracing. It is
+ # done during the script generation. In this step, only the placeholder is
+ # set.
+ #
+ # NOTE: we assume all XOTcl commands are imported in global namespace
+ #
+
+ ttrace::atenable XOTclEnabler {args} {
+ if {[info commands ::xotcl::Class] == ""} {
+ return
+ }
+ if {[info commands ::xotcl::_creator] == ""} {
+ ::xotcl::Class create ::xotcl::_creator -instproc create {args} {
+ set result [next]
+ if {![string match ::xotcl::_* $result]} {
+ ttrace::addentry xotcl $result ""
+ }
+ return $result
+ }
+ }
+ ::xotcl::Class instmixin ::xotcl::_creator
+ }
+
+ ttrace::atdisable XOTclDisabler {args} {
+ if { [info commands ::xotcl::Class] == ""
+ || [info commands ::xotcl::_creator] == ""} {
+ return
+ }
+ ::xotcl::Class instmixin ""
+ ::xotcl::_creator destroy
+ }
+
+ set resolver [ttrace::addresolver resolveclasses {classname} {
+ set cns [uplevel namespace current]
+ set script [ttrace::getentry xotcl $classname]
+ if {$script == ""} {
+ set name [namespace tail $classname]
+ if {$cns == "::"} {
+ set script [ttrace::getentry xotcl ::$name]
+ } else {
+ set script [ttrace::getentry xotcl ${cns}::$name]
+ if {$script == ""} {
+ set script [ttrace::getentry xotcl ::$name]
+ }
+ }
+ if {$script == ""} {
+ return 0
+ }
+ }
+ uplevel [list namespace eval $cns $script]
+ return 1
+ }]
+
+ ttrace::addscript xotcl [subst -nocommands {
+ if {![catch {Serializer new} ss]} {
+ foreach entry [ttrace::getentries xotcl] {
+ if {[ttrace::getentry xotcl \$entry] == ""} {
+ ttrace::addentry xotcl \$entry [\$ss serialize \$entry]
+ }
+ }
+ \$ss destroy
+ return {::xotcl::Class proc __unknown name {$resolver \$name}}
+ }
+ }]
+
+ #
+ # Register callback to be called on cleanup. This will trash lazily loaded
+ # procs which have changed since.
+ #
+
+ ttrace::addcleanup {
+ variable resolveproc
+ foreach cmd [array names resolveproc] {
+ set def [ttrace::getentry proc $cmd]
+ if {$def != ""} {
+ set new [lindex $def 0]
+ set old $resolveproc($cmd)
+ if {[info command $cmd] != "" && $new != $old} {
+ catch {rename $cmd ""}
+ }
+ }
+ }
+ }
+}
+
+# EOF
+return
+
+# Local Variables:
+# mode: tcl
+# fill-column: 78
+# tab-width: 8
+# indent-tabs-mode: nil
+# End:
Property changes on: trunk/Master/tlpkg/tltcl/lib/thread2.8.7/ttrace.tcl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/tlpkg/tltcl/lib/tk8.6/demos/cscroll.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tk8.6/demos/cscroll.tcl 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tk8.6/demos/cscroll.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -114,7 +114,7 @@
# Support for mousewheels on Linux/Unix commonly comes through mapping
# the wheel to the extended buttons. If you have a mousewheel, find
# Linux configuration info at:
- # http://linuxreviews.org/howtos/xfree/mouse/
+ # https://linuxreviews.org/HOWTO_change_the_mouse_speed_in_X
bind $c <Button-4> {
if {!$tk_strictMotif} {
%W yview scroll -5 units
Modified: trunk/Master/tlpkg/tltcl/lib/tk8.6/demos/menu.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tk8.6/demos/menu.tcl 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tk8.6/demos/menu.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -134,6 +134,8 @@
foreach i {{An entry} {Another entry} {Does nothing} {Does almost nothing} {Make life meaningful}} {
$m add command -label $i -command [list puts "You invoked \"$i\""]
}
+set emojiLabel [encoding convertfrom utf-8 "\xF0\x9F\x98\x8D Make friends"]
+$m add command -label $emojiLabel -command [list puts "Menu labels can include non-BMP characters."]
$m entryconfigure "Does almost nothing" -bitmap questhead -compound left \
-command [list \
tk_dialog $w.compound {Compound Menu Entry} \
Modified: trunk/Master/tlpkg/tltcl/lib/tk8.6/demos/widget
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tk8.6/demos/widget 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tk8.6/demos/widget 2022-03-14 10:03:11 UTC (rev 62700)
@@ -624,7 +624,7 @@
wm title $top [mc "Demo code: %s" [file join $tk_demoDirectory $file]]
wm iconname $top $file
set id [open [file join $tk_demoDirectory $file]]
- fconfigure $id -encoding utf-8 -eofchar \032
+ fconfigure $id -encoding utf-8 -eofchar "\032 {}"
$top.f.text delete 1.0 end
$top.f.text insert 1.0 [read $id]
$top.f.text mark set insert 1.0
Modified: trunk/Master/tlpkg/tltcl/lib/tk8.6/fontchooser.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tk8.6/fontchooser.tcl 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tk8.6/fontchooser.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -247,6 +247,7 @@
grid $S(W).lfonts x $S(W).lstyles x $S(W).lsizes x ^ -in $outer -sticky news
grid $WE x $WS - - x ^ -in $outer -sticky news -pady {15 30}
grid configure $bbox -sticky n
+ grid rowconfigure $outer 2 -weight 1
grid columnconfigure $outer {1 3 5} -minsize $minsize(gap)
grid columnconfigure $outer {0 2 4} -weight 1
grid columnconfigure $outer 0 -minsize $minsize(fonts)
Modified: trunk/Master/tlpkg/tltcl/lib/tk8.6/icons.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tk8.6/icons.tcl 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tk8.6/icons.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -4,7 +4,7 @@
# were provided by the Tango Desktop project which provides a
# unified set of high quality icons licensed under the
# Creative Commons Attribution Share-Alike license
-# (http://creativecommons.org/licenses/by-sa/3.0/)
+# (https://creativecommons.org/licenses/by-sa/3.0/)
#
# See http://tango.freedesktop.org/Tango_Desktop_Project
#
Modified: trunk/Master/tlpkg/tltcl/lib/tk8.6/listbox.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tk8.6/listbox.tcl 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tk8.6/listbox.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -214,7 +214,7 @@
# Support for mousewheels on Linux/Unix commonly comes through mapping
# the wheel to the extended buttons. If you have a mousewheel, find
# Linux configuration info at:
- # http://linuxreviews.org/howtos/xfree/mouse/
+ # https://linuxreviews.org/HOWTO_change_the_mouse_speed_in_X
bind Listbox <4> {
if {!$tk_strictMotif} {
%W yview scroll -5 units
@@ -296,7 +296,7 @@
}
extended {
set i $Priv(listboxPrev)
- if {$i eq ""} {
+ if {$i < 0} {
set i $el
$w selection set $el
}
Modified: trunk/Master/tlpkg/tltcl/lib/tk8.6/menu.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tk8.6/menu.tcl 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tk8.6/menu.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -6,7 +6,7 @@
#
# Copyright (c) 1992-1994 The Regents of the University of California.
# Copyright (c) 1994-1997 Sun Microsystems, Inc.
-# Copyright (c) 1998-1999 by Scriptics Corporation.
+# Copyright (c) 1998-1999 Scriptics Corporation.
# Copyright (c) 2007 Daniel A. Steffen <das at users.sourceforge.net>
#
# See the file "license.terms" for information on usage and redistribution
@@ -269,8 +269,8 @@
MenuUnpost {}
}
if {$::tk_strictMotif} {
- set Priv(cursor) [$w cget -cursor]
- $w configure -cursor arrow
+ set Priv(cursor) [$w cget -cursor]
+ $w configure -cursor arrow
}
if {[tk windowingsystem] ne "aqua"} {
set Priv(relief) [$w cget -relief]
@@ -343,7 +343,7 @@
$menu unpost
set Priv(postedMb) {}
if {$::tk_strictMotif} {
- $mb configure -cursor $Priv(cursor)
+ $mb configure -cursor $Priv(cursor)
}
if {[tk windowingsystem] ne "aqua"} {
$mb configure -relief $Priv(relief)
@@ -475,7 +475,7 @@
proc ::tk::MenuMotion {menu x y state} {
variable ::tk::Priv
if {$menu eq $Priv(window)} {
- set activeindex [$menu index active]
+ set active [$menu index active]
if {[$menu cget -type] eq "menubar"} {
if {[info exists Priv(focus)] && $menu ne $Priv(focus)} {
$menu activate @$x,$y
@@ -485,24 +485,24 @@
$menu activate @$x,$y
GenerateMenuSelect $menu
}
- set index [$menu index @$x,$y]
- if {[info exists Priv(menuActivated)] \
- && $index ne "none" \
- && $index ne $activeindex} {
- set mode [option get $menu clickToFocus ClickToFocus]
- if {[string is false $mode]} {
- set delay [expr {[$menu cget -type] eq "menubar" ? 0 : 50}]
- if {[$menu type $index] eq "cascade"} {
- # Catch these postcascade commands since the menu could be
- # destroyed before they run.
- set Priv(menuActivatedTimer) \
- [after $delay "catch {$menu postcascade active}"]
- } else {
- set Priv(menuDeactivatedTimer) \
- [after $delay "catch {$menu postcascade none}"]
- }
- }
- }
+ set index [$menu index @$x,$y]
+ if {[info exists Priv(menuActivated)] \
+ && $index ne "none" \
+ && $index ne $active} {
+ set mode [option get $menu clickToFocus ClickToFocus]
+ if {[string is false $mode]} {
+ set delay [expr {[$menu cget -type] eq "menubar" ? 0 : 50}]
+ if {[$menu type $index] eq "cascade"} {
+ # Catch these postcascade commands since the menu could be
+ # destroyed before they run.
+ set Priv(menuActivatedTimer) \
+ [after $delay "catch {$menu postcascade active}"]
+ } else {
+ set Priv(menuDeactivatedTimer) \
+ [after $delay "catch {$menu postcascade none}"]
+ }
+ }
+ }
}
}
@@ -525,13 +525,13 @@
variable ::tk::Priv
if {![winfo viewable $menu]} {
- return
+ return
}
if {[$menu index active] eq "none"} {
- if {[$menu cget -type] ne "menubar" } {
- set Priv(window) {}
- }
- return
+ if {[$menu cget -type] ne "menubar" } {
+ set Priv(window) {}
+ }
+ return
}
$menu postcascade active
if {$Priv(postedMb) ne "" && [winfo viewable $Priv(postedMb)]} {
@@ -552,7 +552,7 @@
if {[$menu type active] eq "cascade"} {
set Priv(menuActivated) 1
}
- }
+ }
# Don't update grab information if the grab window isn't changing.
# Otherwise, we'll get an error when we unpost the menus and
@@ -893,7 +893,7 @@
foreach child $windowlist {
# Don't descend into other toplevels.
- if {[winfo toplevel $w] ne [winfo toplevel $child]} {
+ if {[winfo toplevel $w] ne [winfo toplevel $child]} {
continue
}
if {[winfo class $child] eq "Menu" && \
@@ -919,7 +919,7 @@
foreach child $windowlist {
# Don't descend into other toplevels.
- if {[winfo toplevel $w] ne [winfo toplevel $child]} {
+ if {[winfo toplevel $w] ne [winfo toplevel $child]} {
continue
}
switch -- [winfo class $child] {
@@ -941,7 +941,7 @@
}
}
}
- return {}
+ return ""
}
# ::tk::TraverseToMenu --
@@ -1115,7 +1115,7 @@
}
set last [$menu index last]
if {$last eq "none"} {
- return
+ return ""
}
for {set i 0} {$i <= $last} {incr i} {
if {![catch {$menu entrycget $i -label} label]} {
@@ -1186,7 +1186,7 @@
# if we go offscreen to the top, show as 'below'
if {$y < [winfo vrooty $button]} {
set y [expr {[winfo vrooty $button] + [winfo rooty $button]\
- + [winfo reqheight $button]}]
+ + [winfo reqheight $button]}]
}
set entry {}
}
@@ -1340,14 +1340,12 @@
proc ::tk::GenerateMenuSelect {menu} {
variable ::tk::Priv
- if {$Priv(activeMenu) eq $menu \
- && $Priv(activeItem) eq [$menu index active]} {
- return
+ if {$Priv(activeMenu) ne $menu \
+ || $Priv(activeItem) ne [$menu index active]} {
+ set Priv(activeMenu) $menu
+ set Priv(activeItem) [$menu index active]
+ event generate $menu <<MenuSelect>>
}
-
- set Priv(activeMenu) $menu
- set Priv(activeItem) [$menu index active]
- event generate $menu <<MenuSelect>>
}
# ::tk_popup --
@@ -1369,7 +1367,7 @@
}
tk::PostOverPoint $menu $x $y $entry
if {[tk windowingsystem] eq "x11" && [winfo viewable $menu]} {
- tk::SaveGrabInfo $menu
+ tk::SaveGrabInfo $menu
grab -global $menu
set Priv(popup) $menu
set Priv(window) $menu
Modified: trunk/Master/tlpkg/tltcl/lib/tk8.6/pkgIndex.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tk8.6/pkgIndex.tcl 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tk8.6/pkgIndex.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -1,7 +1,7 @@
-if {[catch {package present Tcl 8.6.0}]} return
+if {![package vsatisfies [package provide Tcl] 8.6.0]} return
if {($::tcl_platform(platform) eq "unix") && ([info exists ::env(DISPLAY)]
|| ([info exists ::argv] && ("-display" in $::argv)))} {
- package ifneeded Tk 8.6.11 [list load [file normalize [file join $dir .. .. bin libtk8.6.dll]] Tk]
+ package ifneeded Tk 8.6.12 [list load [file normalize [file join $dir .. .. bin libtk8.6.dll]]]
} else {
- package ifneeded Tk 8.6.11 [list load [file normalize [file join $dir .. .. bin tk86.dll]] Tk]
+ package ifneeded Tk 8.6.12 [list load [file normalize [file join $dir .. .. bin tk86.dll]]]
}
Modified: trunk/Master/tlpkg/tltcl/lib/tk8.6/tearoff.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tk8.6/tearoff.tcl 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tk8.6/tearoff.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -79,11 +79,11 @@
}
if {[tk windowingsystem] eq "win32"} {
- # [Bug 3181181]: Find the toplevel window for the menu
- set parent [winfo toplevel $parent]
- while {[winfo class $parent] eq "Menu"} {
- set parent [winfo toplevel [winfo parent $parent]]
- }
+ # [Bug 3181181]: Find the toplevel window for the menu
+ set parent [winfo toplevel $parent]
+ while {[winfo class $parent] eq "Menu"} {
+ set parent [winfo toplevel [winfo parent $parent]]
+ }
wm transient $menu [winfo toplevel $parent]
wm attributes $menu -toolwindow 1
}
@@ -135,7 +135,7 @@
}
eval $cmd
set last [$src index last]
- if {$last eq "none"} {
+ if {$last eq "none" || $last < 0} {
return
}
for {set i [$src cget -tearoff]} {$i <= $last} {incr i} {
Modified: trunk/Master/tlpkg/tltcl/lib/tk8.6/text.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tk8.6/text.tcl 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tk8.6/text.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -499,7 +499,7 @@
# Support for mousewheels on Linux/Unix commonly comes through mapping
# the wheel to the extended buttons. If you have a mousewheel, find
# Linux configuration info at:
- # http://linuxreviews.org/howtos/xfree/mouse/
+ # https://linuxreviews.org/HOWTO_change_the_mouse_speed_in_X
bind Text <4> {
if {!$tk_strictMotif} {
%W yview scroll -50 pixels
Modified: trunk/Master/tlpkg/tltcl/lib/tk8.6/tk.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tk8.6/tk.tcl 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tk8.6/tk.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -11,7 +11,7 @@
# this file, and for a DISCLAIMER OF ALL WARRANTIES.
# Verify that we have Tk binary and script components from the same release
-package require -exact Tk 8.6.11
+package require -exact Tk 8.6.12
# Create a ::tk namespace
namespace eval ::tk {
@@ -460,7 +460,7 @@
event add <<ContextMenu>> <Button-2>
# Official bindings
- # See http://support.apple.com/kb/HT1343
+ # See https://support.apple.com/en-us/HT201236
event add <<SelectAll>> <Command-Key-a>
event add <<Undo>> <Command-Key-z> <Command-Lock-Key-Z>
event add <<Redo>> <Shift-Command-Key-z> <Shift-Command-Lock-Key-z>
Modified: trunk/Master/tlpkg/tltcl/lib/tk8.6/tkAppInit.c
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tk8.6/tkAppInit.c 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tk8.6/tkAppInit.c 2022-03-14 10:03:11 UTC (rev 62700)
@@ -16,12 +16,16 @@
#undef STATIC_BUILD
#include "tk.h"
#include "tkPort.h"
+#if TCL_MAJOR_VERSION < 9 && TCL_MINOR_VERSION < 7
+# define Tcl_LibraryInitProc Tcl_PackageInitProc
+# define Tcl_StaticLibrary Tcl_StaticPackage
+#endif
#ifdef TK_TEST
#ifdef __cplusplus
extern "C" {
#endif
-extern Tcl_PackageInitProc Tktest_Init;
+extern Tcl_LibraryInitProc Tktest_Init;
#ifdef __cplusplus
}
#endif
@@ -120,12 +124,11 @@
if (Tk_Init(interp) == TCL_ERROR) {
return TCL_ERROR;
}
- Tcl_StaticPackage(interp, "Tk", Tk_Init, Tk_SafeInit);
+ Tcl_StaticLibrary(interp, "Tk", Tk_Init, Tk_SafeInit);
#if defined(USE_CUSTOM_EXIT_PROC)
if (TkpWantsExitProc()) {
- /* The cast below avoids warnings from old gcc compilers. */
- Tcl_SetExitProc((void *)TkpExitProc);
+ Tcl_SetExitProc(TkpExitProc);
}
#endif
@@ -133,7 +136,7 @@
if (Tktest_Init(interp) == TCL_ERROR) {
return TCL_ERROR;
}
- Tcl_StaticPackage(interp, "Tktest", Tktest_Init, 0);
+ Tcl_StaticLibrary(interp, "Tktest", Tktest_Init, 0);
#endif /* TK_TEST */
/*
Modified: trunk/Master/tlpkg/tltcl/lib/tk8.6/ttk/aquaTheme.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tk8.6/ttk/aquaTheme.tcl 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tk8.6/ttk/aquaTheme.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -42,6 +42,9 @@
# so we only need to specify !focus.)
# Entry
+ ttk::style configure TEntry \
+ -foreground systemTextColor \
+ -background systemTextBackgroundColor
ttk::style map TEntry \
-foreground {
disabled systemDisabledControlTextColor
@@ -60,6 +63,9 @@
}
# Spinbox
+ ttk::style configure TSpinbox \
+ -foreground systemTextColor \
+ -background systemTextBackgroundColor
ttk::style map TSpinbox \
-foreground {
disabled systemDisabledControlTextColor
Modified: trunk/Master/tlpkg/tltcl/lib/tk8.6/ttk/menubutton.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tk8.6/ttk/menubutton.tcl 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tk8.6/ttk/menubutton.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -83,9 +83,8 @@
set mw [winfo reqwidth $menu]
set bw [winfo width $mb]
set dF [expr {[winfo width $mb] - [winfo reqwidth $menu] - $menuPad}]
- set entry ""
set entry [::tk::MenuFindName $menu [$mb cget -text]]
- if {$entry eq ""} {
+ if {$entry < 0} {
set entry 0
}
set x [winfo rootx $mb]
@@ -124,9 +123,8 @@
incr mh 6
incr mw 16
}
- set entry {}
set entry [::tk::MenuFindName $menu [$mb cget -text]]
- if {$entry eq {}} {
+ if {$entry < 0} {
set entry 0
}
set x [winfo rootx $mb]
@@ -133,16 +131,16 @@
set y [winfo rooty $mb]
switch [$mb cget -direction] {
above {
- set entry {}
+ set entry ""
incr y -$mh
# if we go offscreen to the top, show as 'below'
if {$y < [winfo vrooty $mb]} {
set y [expr {[winfo vrooty $mb] + [winfo rooty $mb]\
- + [winfo reqheight $mb]}]
+ + [winfo reqheight $mb]}]
}
}
below {
- set entry {}
+ set entry ""
incr y $bh
# if we go offscreen to the bottom, show as 'above'
if {($y + $mh) > ([winfo vrooty $mb] + [winfo vrootheight $mb])} {
@@ -196,7 +194,7 @@
$mb state pressed
$mb configure -cursor [$menu cget -cursor]
foreach {x y entry} [PostPosition $mb $menu] { break }
- if {$entry ne {}} {
+ if {$entry >= 0} {
$menu post $x $y $entry
} else {
$menu post $x $y
@@ -228,7 +226,7 @@
#
proc ttk::menubutton::FindMenuEntry {menu s} {
set last [$menu index last]
- if {$last eq "none" || $last eq ""} {
+ if {$last eq "none" || $last < 0} {
return ""
}
for {set i 0} {$i <= $last} {incr i} {
Modified: trunk/Master/tlpkg/tltcl/lib/tk8.6/ttk/notebook.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tk8.6/ttk/notebook.tcl 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tk8.6/ttk/notebook.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -57,11 +57,13 @@
# Select the next/previous tab in the list.
#
proc ttk::notebook::CycleTab {w dir} {
- if {[$w index end] != 0} {
- set current [$w index current]
- set select [expr {($current + $dir) % [$w index end]}]
- while {[$w tab $select -state] != "normal" && ($select != $current)} {
- set select [expr {($select + $dir) % [$w index end]}]
+ set current [$w index current]
+ if {$current >= 0} {
+ set tabCount [$w index end]
+ set select [expr {($current + $dir) % $tabCount}]
+ set step [expr {$dir > 0 ? 1 : -1}]
+ while {[$w tab $select -state] ne "normal" && ($select != $current)} {
+ set select [expr {($select + $step) % $tabCount}]
}
if {$select != $current} {
ActivateTab $w $select
Modified: trunk/Master/tlpkg/tltcl/lib/tk8.6/ttk/scrollbar.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tk8.6/ttk/scrollbar.tcl 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tk8.6/ttk/scrollbar.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -29,8 +29,6 @@
x11 {
lappend eventList <Button-4> <Button-5> \
<Shift-Button-4> <Shift-Button-5>
- # For tk 8.7, the event list will be extended by
- # <Button-6> <Button-7>
}
}
foreach event $eventList {
Modified: trunk/Master/tlpkg/tltcl/lib/tk8.6/ttk/utils.tcl
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tk8.6/ttk/utils.tcl 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tk8.6/ttk/utils.tcl 2022-03-14 10:03:11 UTC (rev 62700)
@@ -303,19 +303,14 @@
}
if {[tk windowingsystem] eq "aqua"} {
bind $bindtag <MouseWheel> "$callback \[expr {-%D}\]"
- bind $bindtag <Option-MouseWheel> "$callback \[expr {-10*%D}\]"
+ bind $bindtag <Option-MouseWheel> "$callback \[expr {-10 * %D}\]"
} else {
- bind $bindtag <MouseWheel> "$callback \[expr {-%D/120)}\]"
+ bind $bindtag <MouseWheel> "$callback \[expr {-%D / 120}\]"
}
}
## Mousewheel bindings for standard scrollable widgets.
#
-# Usage: [ttk::copyBindings TtkScrollable $bindtag]
-#
-# $bindtag should be for a widget that supports the
-# standard scrollbar protocol.
-#
if {[tk windowingsystem] eq "x11"} {
bind TtkScrollable <Button-4> { %W yview scroll -5 units }
@@ -325,18 +320,18 @@
}
if {[tk windowingsystem] eq "aqua"} {
bind TtkScrollable <MouseWheel> \
- { %W yview scroll [expr {-(%D)}] units }
+ { %W yview scroll [expr {-%D}] units }
bind TtkScrollable <Shift-MouseWheel> \
- { %W xview scroll [expr {-(%D)}] units }
+ { %W xview scroll [expr {-%D}] units }
bind TtkScrollable <Option-MouseWheel> \
- { %W yview scroll [expr {-10 * (%D)}] units }
+ { %W yview scroll [expr {-10 * %D}] units }
bind TtkScrollable <Shift-Option-MouseWheel> \
- { %W xview scroll [expr {-10 * (%D)}] units }
+ { %W xview scroll [expr {-10 * %D}] units }
} else {
bind TtkScrollable <MouseWheel> \
- { %W yview scroll [expr {-(%D / 120)}] units }
+ { %W yview scroll [expr {-%D / 120}] units }
bind TtkScrollable <Shift-MouseWheel> \
- { %W xview scroll [expr {-(%D / 120)}] units }
+ { %W xview scroll [expr {-%D / 120}] units }
}
#*EOF*
Modified: trunk/Master/tlpkg/tltcl/lib/tkConfig.sh
===================================================================
--- trunk/Master/tlpkg/tltcl/lib/tkConfig.sh 2022-03-14 09:53:53 UTC (rev 62699)
+++ trunk/Master/tlpkg/tltcl/lib/tkConfig.sh 2022-03-14 10:03:11 UTC (rev 62700)
@@ -17,10 +17,10 @@
TK_VERSION='8.6'
TK_MAJOR_VERSION='8'
TK_MINOR_VERSION='6'
-TK_PATCH_LEVEL='.11'
+TK_PATCH_LEVEL='.12'
# -D flags for use with the C compiler.
-TK_DEFS='-DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1 -DTCL_THREADS=1 -DUSE_THREAD_ALLOC=1 -DMODULE_SCOPE=extern -DHAVE_NO_SEH=1 -DHAVE_CAST_TO_UNION=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_UXTHEME_H=1 -DHAVE_VSSYM32_H=1 -DNDEBUG=1 -DTCL_CFG_OPTIMIZED=1 '
+TK_DEFS='-DPACKAGE_NAME=\"tk\" -DPACKAGE_TARNAME=\"tk\" -DPACKAGE_VERSION=\"8.6\" -DPACKAGE_STRING=\"tk\ 8.6\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1 -DTCL_THREADS=1 -DUSE_THREAD_ALLOC=1 -DMODULE_SCOPE=extern -DHAVE_NO_SEH=1 -DHAVE_CAST_TO_UNION=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_INTPTR_T=1 -DHAVE_UINTPTR_T=1 -DHAVE_UXTHEME_H=1 -DHAVE_VSSYM32_H=1 -DNDEBUG=1 -DTCL_CFG_OPTIMIZED=1 '
# Flag, 1: we built a shared lib, 0 we didn't
TK_SHARED_BUILD=1
@@ -36,11 +36,11 @@
# Top-level directory in which Tcl's platform-independent files are
# installed.
-TK_PREFIX='/home/siepo/tltcl'
+TK_PREFIX='/tmp/tltcl'
# Top-level directory in which Tcl's platform-specific files (e.g.
# executables) are installed.
-TK_EXEC_PREFIX='/home/siepo/tltcl'
+TK_EXEC_PREFIX='/tmp/tltcl'
# -l flag to pass to the linker to pick up the Tcl library
TK_LIB_FLAG='-ltk86'
@@ -47,11 +47,11 @@
# String to pass to linker to pick up the Tk library from its
# build directory.
-TK_BUILD_LIB_SPEC='-L/home/siepo/xdrive/tltcl/tk8.6.11/win -ltk86'
+TK_BUILD_LIB_SPEC='-L/home/siepo/xdrive/tltcl/tk8.6.12/win -ltk86'
# String to pass to linker to pick up the Tk library from its
# installed directory.
-TK_LIB_SPEC='-L/home/siepo/tltcl/lib -ltk86'
+TK_LIB_SPEC='-L/tmp/tltcl/lib -ltk86'
# Location of the top-level source directory from which Tk was built.
# This is the directory that contains a README file as well as
@@ -59,7 +59,7 @@
# different place than the directory containing the source files, this
# points to the location of the sources, not the location where Tk was
# compiled.
-TK_SRC_DIR='/home/siepo/xdrive/tltcl/tk8.6.11'
+TK_SRC_DIR='/home/siepo/xdrive/tltcl/tk8.6.12'
# Needed if you want to make a 'fat' shared library library
# containing tk objects or link a different wish.
@@ -74,14 +74,14 @@
# String to pass to linker to pick up the Tk stub library from its
# build directory.
-TK_BUILD_STUB_LIB_SPEC='-L/home/siepo/xdrive/tltcl/tk8.6.11/win -ltkstub86'
+TK_BUILD_STUB_LIB_SPEC='-L/home/siepo/xdrive/tltcl/tk8.6.12/win -ltkstub86'
# String to pass to linker to pick up the Tk stub library from its
# installed directory.
-TK_STUB_LIB_SPEC='-L/home/siepo/tltcl/lib -ltkstub86'
+TK_STUB_LIB_SPEC='-L/tmp/tltcl/lib -ltkstub86'
# Path to the Tk stub library in the build directory.
-TK_BUILD_STUB_LIB_PATH='/home/siepo/xdrive/tltcl/tk8.6.11/win/libtkstub86.a'
+TK_BUILD_STUB_LIB_PATH='/home/siepo/xdrive/tltcl/tk8.6.12/win/libtkstub86.a'
# Path to the Tk stub library in the install directory.
-TK_STUB_LIB_PATH='/home/siepo/tltcl/lib/libtkstub86.a'
+TK_STUB_LIB_PATH='/tmp/tltcl/lib/libtkstub86.a'
More information about the tex-live-commits
mailing list.